少儿编程分享:手把手教你用PYTHON编写兔獾大作战(二) ...

[复制链接]
sosoyoyo 发表于 2018-1-20 09:18:35 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

; d! E9 w9 k$ d9 [制作游戏场景4 a" _9 s' ?# d2 B2 m1 Z4 o
2 b4 n! {' d- }1 Z; o
现在我们要制作游戏场景,这只需要多用几次screen.blit()就可以做到。在代码的第三部分 (#3 )载入小兔子图片后,加上下面两行代码:
0 d( _; Q0 P" U, h; @grass = pygame.image.load("resources/images/grass.png")
, W, a+ `# S' I+ Zcastle = pygame.image.load("resources/images/castle.png")) _3 r; a) T1 T" X& f3 W
这两行代码载入了两张不同的图片并把图片分别放入了不同的变量(variable)中。现在这两张图片就能出现在屏幕上了。不过你会发现,由grass.png载入的草坪背景不能覆盖整个640 x 480的窗口。这意味着你必须调整图片来完全覆盖窗口。0 M) E" i+ W- C, l3 l" X. U
在第六部分(#6)的开头添加以下代码(在确定小兔子位置之前):
5 M: T- K- f# A! c0 ?for x in range(width/grass.get_width()+1):
: ]) U, t+ ^; R# N* v for y in range(height/grass.get_height()+1):: d; ^4 @  M/ [6 K" A
screen.blit(grass,(x*100,y*100))
' `/ F& D  u1 Q0 N% Yscreen.blit(castle,(0,30)); k* f6 V2 O+ N" S) M4 z
screen.blit(castle,(0,135))
; Q- U  D7 |# {" h3 [" _, L6 oscreen.blit(castle,(0,240)): b( W  G3 q# `5 z
screen.blit(castle,(0,345))
1 g+ d+ a4 T+ f3 [3 b( j* O4 E让我们一起来看看上面的代码~for语句先使用x进行循环。在这一层循环中,代码又通过y进行内层循环,然后把草坪图片放在循环得到的x, y 坐标上。接下来的几行代码在屏幕上放置堡垒(castle)。
) `  O+ i) Y( q7 K如果你现在执行程序,你将看到下图的场景:0 g/ e; z, q% A: D* ~3 K. @
2 f9 Y* x! w+ D/ Q# I( i# J( p8 v
是不是比刚才好多了?:)/ L& M+ W3 w1 S' G5 K3 P
让小兔子动起来!
* Z2 v! [; R6 P. z" Y8 W+ C5 F' R1 E+ h

% |$ s3 E$ `3 v; q# j接下来我们要真正开始加入游戏元素啦!比如通过按键盘让小兔子动起来。0 g! d1 x; y* h" H0 u
首先,我们需要让程序追踪玩家什么时候按下了什么键。将下面两行代码添加到第二部分(#2)的末尾(在设定游戏窗口的高和宽之后):) q/ T# J: k+ r3 |, a
keys = [False, False, False, False]
9 l3 ~/ E9 L) X! p5 V# lplayerpos=[100,100]
* m3 n, P+ ^# n- {在这两行代码中,我们创建了一个名为keys的数组(array),其中有4个False值,每个值对应W、A、S、D中的一个按键。变量playerpos对应小兔子位置坐标。因为在游戏进行的过程中,小兔子会不断移动,所以用一个变量储存小兔子的位置更加方便。2 a* q" |. O2 g/ u5 `8 C8 I
现在,我们要修改现有的代码,把小兔子图片放在playerpos对应的坐标上。把第六部分(#6)中的这行代码:8 |+ M. S. a) b& H4 g
screen.blit(player, (100, 100))! T& ?( X" K3 g; r8 S, X
改为:
$ a; y  e$ `' E8 ~( w7 H screen.blit(player, playerpos)
& P4 I/ H" A( ]( K接下来,我们要使用PyGame自带的event.key函数来检测玩家按下了什么键,并相应地将keys内的False值改为True。
) r+ C$ |& h( `8 U& E( ~在第八部分(#8)的最后,紧接着event.type == pygame.QUIT后,加上这些代码(缩进和pygame.QUIT的if代码块相同): ) u* j- v( a' F1 }1 q$ N$ _
if event.type == pygame.KEYDOWN:
* h7 M+ k8 {8 S; d! o5 T if event.key==K_w:$ H+ \7 _7 v4 C7 J# c2 _
keys[0]=True
: _! D& G& ^1 L$ I elif event.key==K_a:
9 V9 y* s9 [1 t. L keys[1]=True! h. s9 Y5 S" i8 ^' i. j' w
elif event.key==K_s:( V! D7 \7 n  w7 a; d' m
keys[2]=True
- k8 @8 X+ W  G elif event.key==K_d:
3 A/ C7 B9 p$ d6 e+ u+ @& @ keys[3]=True
0 W' u( |4 G8 X) ^  n- G! zif event.type == pygame.KEYUP:4 i3 v* }8 [0 t" g
if event.key==pygame.K_w:
4 p* F- x$ [9 M+ C9 r7 l% O3 {3 X keys[0]=False/ k6 n2 e. a+ C, q
elif event.key==pygame.K_a:
2 _4 L2 e8 s" m0 y8 w- m keys[1]=False
# L, y$ j5 F) _9 d& a( x elif event.key==pygame.K_s:. k  a% y& w7 P' q7 H) @9 L) E4 }
keys[2]=False
# }: y3 _9 Z, ]6 E% s) `$ k elif event.key==pygame.K_d:
" r3 b! b6 |; g: ~# }' [; H( g keys[3]=False
0 r& N# e2 G# m* @' N" l哇哦!这里有好多行代码呢!不过如果我们将这些代码拆分来看,其实并不是太难。- {9 H5 z  f3 _/ R. W) L
首先,我们要看看是否(if)有键被按下或者松开了,接着检测是哪个键被按下或者松开了。如果检测到的键是W、A、S、D中的某一个,就相应更新keys数列中的值。接着,你需要根据玩家按下的键更新playerpos变量,这个非常简单,只需要把下面代码加到目前所写的代码最后(使用一个缩进,和for循环同一层)
( c9 A* y: ]3 Y& z! N& w# 9 – 移动小兔子& ]9 m: C) A. y3 I: K! H' f
if keys[0]:
' C' W( k+ Q% D, g% r5 i0 @ playerpos[1]-=5
' ~' a6 o7 t1 N7 F& V+ s elif keys[2]:6 l0 {4 s! T: t& y2 h& x
playerpos[1]+=5% R) @  P; g5 y
if keys[1]:) y( Z' ]+ Q* p' N5 @- \
playerpos[0]-=5- ?- p  D/ y1 F, d9 q1 ^9 e
elif keys[3]:9 D. e/ N( E! J1 Z
playerpos[0]+=5
* z( M1 T6 K( r# o/ b" j8 N: Y这些代码检测哪个键被按下了,并对小兔子的x或y坐标做相应的增减。) F5 z' D3 \  A$ ^; M7 b
运行游戏,你会看到和刚才相似的场景。试着按按WASD,你的小兔子动起来了!; a' H& U/ q2 G( V, I, X+ ?0 c
+ i# t; m4 n" a8 N5 m
(未完待续)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

发布主题
推荐阅读更多+
阅读排行更多+
用心服务创业者
0851-88611148
周一至周五 9:00-18:00
意见反馈:admin@0851life.com

扫一扫关注我们

Powered by 童码少儿编程 X3.4© 2001-2013 0851life Inc.|网站地图