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

[复制链接]
sosoyoyo 发表于 2018-1-20 09:18:35 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
8 A! t" Q( y" A. w6 [2 E
制作游戏场景
" x8 c3 g3 q; r' |) B: }
8 v& t5 _* L# C6 r1 R$ ]  U" Z现在我们要制作游戏场景,这只需要多用几次screen.blit()就可以做到。在代码的第三部分 (#3 )载入小兔子图片后,加上下面两行代码:- k% d- v) j# d5 t: _1 k4 e4 Z: C* g
grass = pygame.image.load("resources/images/grass.png")% P% W& o+ }5 J7 h- W+ o
castle = pygame.image.load("resources/images/castle.png")6 B! e( w1 U+ A9 e
这两行代码载入了两张不同的图片并把图片分别放入了不同的变量(variable)中。现在这两张图片就能出现在屏幕上了。不过你会发现,由grass.png载入的草坪背景不能覆盖整个640 x 480的窗口。这意味着你必须调整图片来完全覆盖窗口。1 Q5 n) A0 q- d5 }
在第六部分(#6)的开头添加以下代码(在确定小兔子位置之前):
: ]8 G, A, r/ D$ f' r: t0 jfor x in range(width/grass.get_width()+1):! I7 s+ P7 _$ Z) e
for y in range(height/grass.get_height()+1):
( R( U* y* p. N/ | screen.blit(grass,(x*100,y*100))- n- h( F' L& n4 B* d8 s; V
screen.blit(castle,(0,30))) J0 N) j4 j4 w1 `' e( Z
screen.blit(castle,(0,135))7 Z/ S6 i4 \. E" w
screen.blit(castle,(0,240))
  C: k9 M0 R9 P; V$ I' ~; ]1 Xscreen.blit(castle,(0,345))
* \6 i) |: h1 {5 r( E& b" k让我们一起来看看上面的代码~for语句先使用x进行循环。在这一层循环中,代码又通过y进行内层循环,然后把草坪图片放在循环得到的x, y 坐标上。接下来的几行代码在屏幕上放置堡垒(castle)。
) R6 o; s" t5 L; M如果你现在执行程序,你将看到下图的场景:) x. ]$ l* p* |0 k; G

% @+ y- \1 T' O5 c5 W* j. O是不是比刚才好多了?:)) w  Q) r0 {6 H$ C) X/ _
让小兔子动起来!2 y8 f9 F- f4 W7 k( C

/ V& |* Y8 `1 G$ T) P- ^: _( D+ }: c# L! P) _2 p
接下来我们要真正开始加入游戏元素啦!比如通过按键盘让小兔子动起来。* ^% f: m) [. p+ d) Q  E/ {$ d; F2 i
首先,我们需要让程序追踪玩家什么时候按下了什么键。将下面两行代码添加到第二部分(#2)的末尾(在设定游戏窗口的高和宽之后):
' x5 [5 t, |" d, @1 z& n0 ]- bkeys = [False, False, False, False]
; [6 G" A7 A& I# X8 Xplayerpos=[100,100]% B/ E4 ?) Q' N/ F. A* ~% H
在这两行代码中,我们创建了一个名为keys的数组(array),其中有4个False值,每个值对应W、A、S、D中的一个按键。变量playerpos对应小兔子位置坐标。因为在游戏进行的过程中,小兔子会不断移动,所以用一个变量储存小兔子的位置更加方便。
$ r* K) S& M# V6 T% y+ N! g现在,我们要修改现有的代码,把小兔子图片放在playerpos对应的坐标上。把第六部分(#6)中的这行代码:
8 [% t' L8 p7 z% K7 Z screen.blit(player, (100, 100))  [9 `1 r- h% L, z  A, [6 d" u
改为:
1 N! c1 _8 Q3 n" {+ _ screen.blit(player, playerpos)
9 `  l& F$ d- Q1 E7 b接下来,我们要使用PyGame自带的event.key函数来检测玩家按下了什么键,并相应地将keys内的False值改为True。; ?2 `. ?; F5 R. @3 G
在第八部分(#8)的最后,紧接着event.type == pygame.QUIT后,加上这些代码(缩进和pygame.QUIT的if代码块相同):
6 Y8 \4 e. o, Q! K4 a- jif event.type == pygame.KEYDOWN:
1 P$ Z. X2 }0 Y if event.key==K_w:
- R" z0 k# z9 K$ b. `9 v keys[0]=True
3 W  w/ ^/ V# @) b# ]) l# G elif event.key==K_a:) @8 }6 R& t$ c7 J/ p: F
keys[1]=True( v9 E) ]( p- P/ M5 a1 H3 Y
elif event.key==K_s:4 F2 V& v; T- H5 U0 e6 _+ P
keys[2]=True
0 V" Z! r* x- I$ T elif event.key==K_d:
  @% V8 |: D  \( r, X$ g keys[3]=True8 k$ \$ K- M# |4 L" C
if event.type == pygame.KEYUP:' w7 s  Q) `; F9 _2 y4 p  I
if event.key==pygame.K_w:
2 F0 r4 V) B6 z% s$ O- g$ A keys[0]=False
6 r% o0 ?" P- o! w  {! m elif event.key==pygame.K_a:
/ O) [, p# Q& [7 C7 H( g- Y4 Q( r2 p keys[1]=False
$ l) i$ b, a* I- \# s+ Y) X( Z elif event.key==pygame.K_s:
/ t; |/ v0 h4 ]! I5 Z keys[2]=False2 E7 X( F8 o% U  Q: P; Q
elif event.key==pygame.K_d:
( r) C9 W4 F9 N( p0 a+ D keys[3]=False3 C) r% \6 @2 H2 T1 x  k! z3 [
哇哦!这里有好多行代码呢!不过如果我们将这些代码拆分来看,其实并不是太难。4 i- [  }2 v' V6 L
首先,我们要看看是否(if)有键被按下或者松开了,接着检测是哪个键被按下或者松开了。如果检测到的键是W、A、S、D中的某一个,就相应更新keys数列中的值。接着,你需要根据玩家按下的键更新playerpos变量,这个非常简单,只需要把下面代码加到目前所写的代码最后(使用一个缩进,和for循环同一层)
+ p& L8 Y  x7 z- O3 {$ X# 9 – 移动小兔子& W1 f; ~' q* ?7 S* Q
if keys[0]:
) u4 A% G: a8 D playerpos[1]-=5
9 ?, n" {  u" ?5 c& R  ^ elif keys[2]:+ Y3 {' P* @# G5 A* i
playerpos[1]+=5: T0 C, y" t9 Q
if keys[1]:
+ l( b& w8 d: k8 B, L+ A$ j5 l% r playerpos[0]-=5
* L3 g" @3 ?0 c+ {; V6 t elif keys[3]:
; v- `' a3 E8 g% w5 M playerpos[0]+=5! d1 C, i9 ^, f* G3 _% K8 R& d
这些代码检测哪个键被按下了,并对小兔子的x或y坐标做相应的增减。9 e& E7 Z- R6 ?4 n2 _
运行游戏,你会看到和刚才相似的场景。试着按按WASD,你的小兔子动起来了!& p( v% R3 a7 P0 v
% j4 X5 V% ~$ i( K1 R
(未完待续)

本帖子中包含更多资源

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

x
回复

使用道具 举报

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

本版积分规则

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

扫一扫关注我们

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