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

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

0 n( b1 s- |2 \/ {9 L制作游戏场景
+ c# E+ x( `4 |- X5 L, ~
) c8 W: a2 v# }$ v, i# l现在我们要制作游戏场景,这只需要多用几次screen.blit()就可以做到。在代码的第三部分 (#3 )载入小兔子图片后,加上下面两行代码:, M+ x1 E* S. W+ I9 P2 H$ F
grass = pygame.image.load("resources/images/grass.png")8 @1 [+ r9 M) V2 R
castle = pygame.image.load("resources/images/castle.png")' l1 P' P7 }4 j; T) U
这两行代码载入了两张不同的图片并把图片分别放入了不同的变量(variable)中。现在这两张图片就能出现在屏幕上了。不过你会发现,由grass.png载入的草坪背景不能覆盖整个640 x 480的窗口。这意味着你必须调整图片来完全覆盖窗口。
* p; ^/ d# V9 g% t在第六部分(#6)的开头添加以下代码(在确定小兔子位置之前):8 W9 T: N9 ~: R# T+ ?: ~" |# b
for x in range(width/grass.get_width()+1):7 c/ o( h6 e: n( r; ]* p
for y in range(height/grass.get_height()+1):: |2 v* E7 E" ^
screen.blit(grass,(x*100,y*100))
! s, @" [) d( _& Q( A; bscreen.blit(castle,(0,30))4 t2 M( l8 u& ^, N: E
screen.blit(castle,(0,135))
# G% n- x  D; z$ _: ]6 f4 q8 Ascreen.blit(castle,(0,240))# a0 [5 S5 Z8 N0 F; e
screen.blit(castle,(0,345))$ [- _$ T4 Z' G* K5 O
让我们一起来看看上面的代码~for语句先使用x进行循环。在这一层循环中,代码又通过y进行内层循环,然后把草坪图片放在循环得到的x, y 坐标上。接下来的几行代码在屏幕上放置堡垒(castle)。! B; O6 k6 v) R0 }
如果你现在执行程序,你将看到下图的场景:
* B# }/ V3 V8 ~1 t+ _
/ k; S; Q! L% m; [是不是比刚才好多了?:)
$ G) |( F" ^6 _8 ~. Q0 X4 v让小兔子动起来!& V' ~. k  k& L  {* W5 u3 I

- e2 g; ^$ M% Q' p, F; b5 k# T* K' z$ X
接下来我们要真正开始加入游戏元素啦!比如通过按键盘让小兔子动起来。  i# l- R: V0 f5 E, [8 V- |
首先,我们需要让程序追踪玩家什么时候按下了什么键。将下面两行代码添加到第二部分(#2)的末尾(在设定游戏窗口的高和宽之后):
: _: d% C( b% _4 D4 `  }keys = [False, False, False, False]6 X1 M- y  W1 \+ K, U
playerpos=[100,100]
8 s, P% V# \) |在这两行代码中,我们创建了一个名为keys的数组(array),其中有4个False值,每个值对应W、A、S、D中的一个按键。变量playerpos对应小兔子位置坐标。因为在游戏进行的过程中,小兔子会不断移动,所以用一个变量储存小兔子的位置更加方便。
: |) v- C- F" s" _, ?. d& \, G现在,我们要修改现有的代码,把小兔子图片放在playerpos对应的坐标上。把第六部分(#6)中的这行代码:* P& F" k5 X% J% ~9 S0 J
screen.blit(player, (100, 100))
6 m! [" [3 A& @/ \4 i1 z: i5 A改为:
+ L2 }4 @5 D9 Y& `7 Q' ? screen.blit(player, playerpos)" C- T9 h& v' x# @
接下来,我们要使用PyGame自带的event.key函数来检测玩家按下了什么键,并相应地将keys内的False值改为True。( k+ e8 O3 G, l' A3 n# u6 F- F- z
在第八部分(#8)的最后,紧接着event.type == pygame.QUIT后,加上这些代码(缩进和pygame.QUIT的if代码块相同): " Y' V' W! I4 Z
if event.type == pygame.KEYDOWN:
+ \  d0 R; V" _ if event.key==K_w:
- T% C# I0 f' \& O5 h5 e/ ~ keys[0]=True' j$ k$ [7 y; W- r+ D& L2 p
elif event.key==K_a:
% J; z) @2 `: L keys[1]=True1 O. F' a* u, S7 P+ W8 r; F
elif event.key==K_s:! S0 T8 x0 J/ \
keys[2]=True5 l5 _3 V2 w" Q6 I7 e
elif event.key==K_d:
- Z% C* h, N/ l# P keys[3]=True
. `2 {& \& l7 t6 P: q; q0 |5 L) Oif event.type == pygame.KEYUP:
, Z% z8 o( E& m: Y0 C. p* s if event.key==pygame.K_w:* J: Q; K2 Q. c: p: q$ A. N( R
keys[0]=False& A+ R! d" z) `1 A! `3 ?. q. ~& c
elif event.key==pygame.K_a:
7 y  @4 b( g7 H keys[1]=False3 V+ c! y- Z* `: [+ N; e! Y& O, y
elif event.key==pygame.K_s:
% R, G- C) q( J' J0 E& t keys[2]=False2 A" U0 i, B! d- }3 c1 P
elif event.key==pygame.K_d:
, t1 B% s* O# e" H- ^' q keys[3]=False
, T- X3 B: D$ n: [9 K3 ~1 `2 L9 Q4 x" I哇哦!这里有好多行代码呢!不过如果我们将这些代码拆分来看,其实并不是太难。
: j8 Z4 y$ m: ?, o: X首先,我们要看看是否(if)有键被按下或者松开了,接着检测是哪个键被按下或者松开了。如果检测到的键是W、A、S、D中的某一个,就相应更新keys数列中的值。接着,你需要根据玩家按下的键更新playerpos变量,这个非常简单,只需要把下面代码加到目前所写的代码最后(使用一个缩进,和for循环同一层)
/ m6 s0 A& W. B7 U- r$ ]6 E# 9 – 移动小兔子
! \& X" s# q4 I4 x if keys[0]:
) t) z/ e7 y; ~( k# i playerpos[1]-=5
5 K9 z, _  Z- Q! C# J elif keys[2]:, J" R4 T& R# G$ w0 K! l- g8 X/ p7 V
playerpos[1]+=5
* U0 [2 {0 e+ p if keys[1]:
8 G: y7 a0 r$ h% w+ s9 | playerpos[0]-=5. n9 z3 }5 @- l4 K5 D: M0 |% O
elif keys[3]:
, N. \7 d: X% d4 H  U playerpos[0]+=5- G, B/ Z7 K0 q6 R/ f/ M
这些代码检测哪个键被按下了,并对小兔子的x或y坐标做相应的增减。2 h( w; K! {6 b, O, v6 i
运行游戏,你会看到和刚才相似的场景。试着按按WASD,你的小兔子动起来了!
7 b( ?  d4 E" v# @5 c
9 Z! ^! {6 ]: i6 C# }(未完待续)

本帖子中包含更多资源

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

x
回复

使用道具 举报

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

本版积分规则

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

扫一扫关注我们

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