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

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

' }0 `- j  @' n制作游戏场景- e/ \) T# R' W0 Y1 P+ c' ]' p
0 r# m# e; S- F* ~3 v* r' \- l
现在我们要制作游戏场景,这只需要多用几次screen.blit()就可以做到。在代码的第三部分 (#3 )载入小兔子图片后,加上下面两行代码:
/ w3 b9 e' |' S; ^grass = pygame.image.load("resources/images/grass.png")9 s4 \% J& ~9 S. d8 m
castle = pygame.image.load("resources/images/castle.png")1 P; B  {" [5 l+ Q; T5 ?7 Y2 D
这两行代码载入了两张不同的图片并把图片分别放入了不同的变量(variable)中。现在这两张图片就能出现在屏幕上了。不过你会发现,由grass.png载入的草坪背景不能覆盖整个640 x 480的窗口。这意味着你必须调整图片来完全覆盖窗口。
0 f. y  Y: B  _8 z/ R% U在第六部分(#6)的开头添加以下代码(在确定小兔子位置之前):: a7 N; N, Y0 H
for x in range(width/grass.get_width()+1):
1 K( z3 k. H: S for y in range(height/grass.get_height()+1):
/ i) T& L$ _( s1 I screen.blit(grass,(x*100,y*100))9 d+ B$ \2 I; h1 }5 N% d
screen.blit(castle,(0,30))
& b* K3 f" o0 Bscreen.blit(castle,(0,135))
. \# x8 U  Z% P* Mscreen.blit(castle,(0,240))
( I  M: O, q$ _& m; ~& C8 d% qscreen.blit(castle,(0,345))8 |: E) {% W1 X. m% f" a
让我们一起来看看上面的代码~for语句先使用x进行循环。在这一层循环中,代码又通过y进行内层循环,然后把草坪图片放在循环得到的x, y 坐标上。接下来的几行代码在屏幕上放置堡垒(castle)。
  C" w4 [3 n( p1 H5 ?如果你现在执行程序,你将看到下图的场景:
* K) j' E1 Y) S4 C2 `4 Y( N4 L6 |* m* J, o9 W; Z( M2 {6 b+ w* T9 t5 g
是不是比刚才好多了?:)% g/ @$ }  \6 g1 `0 e
让小兔子动起来!
3 |7 l6 n& _. K+ s0 F% O1 W
# Z3 M( u( g+ Q- A9 u
5 [9 {' d+ g- m7 P6 c! o) Z接下来我们要真正开始加入游戏元素啦!比如通过按键盘让小兔子动起来。
' d4 b0 y3 e; s% `4 L; i首先,我们需要让程序追踪玩家什么时候按下了什么键。将下面两行代码添加到第二部分(#2)的末尾(在设定游戏窗口的高和宽之后):+ i" ~" R2 y# m6 G' V" c8 M$ t
keys = [False, False, False, False]
9 n* P5 c3 A2 \1 Z6 R0 Yplayerpos=[100,100]
6 Z" L' E' W) ]3 C8 ?在这两行代码中,我们创建了一个名为keys的数组(array),其中有4个False值,每个值对应W、A、S、D中的一个按键。变量playerpos对应小兔子位置坐标。因为在游戏进行的过程中,小兔子会不断移动,所以用一个变量储存小兔子的位置更加方便。+ o6 `. O) M, k# }# h
现在,我们要修改现有的代码,把小兔子图片放在playerpos对应的坐标上。把第六部分(#6)中的这行代码:6 f, }" S. d0 X* r
screen.blit(player, (100, 100))
+ P/ b0 m  D& w) {0 c6 g改为:
+ v5 B) r/ I7 K, \& v$ L screen.blit(player, playerpos)% J) G8 ]& t6 v' |& ^
接下来,我们要使用PyGame自带的event.key函数来检测玩家按下了什么键,并相应地将keys内的False值改为True。
& I* I/ ^8 R( r3 y9 @在第八部分(#8)的最后,紧接着event.type == pygame.QUIT后,加上这些代码(缩进和pygame.QUIT的if代码块相同):
. k+ ?  H; G" C0 }. ^: Tif event.type == pygame.KEYDOWN:
6 `6 i9 n" s+ \ if event.key==K_w:% d8 o1 V7 r6 v% i
keys[0]=True) B3 P$ ?0 E5 x" z5 y8 m4 U; Z
elif event.key==K_a:
$ ]0 c1 h% C9 K6 H; m2 U& J keys[1]=True3 t- x- Z/ |; Q' v. ~' Y
elif event.key==K_s:  m. H4 q8 h8 i) S
keys[2]=True
( W% |5 m# G1 y6 N/ n- h1 ?. {7 Q elif event.key==K_d:
) \! u! ^7 [: M8 o/ ^% t keys[3]=True
; o$ T- B! X7 _0 ]  L+ Hif event.type == pygame.KEYUP:
2 X  `& i- F+ v$ L' z2 d4 X- Q; S' s if event.key==pygame.K_w:0 H) [7 {% ]" P* P. }
keys[0]=False
  }+ r( W+ y; Z' w8 J. C4 l elif event.key==pygame.K_a:0 w# X0 c" s4 ]& K
keys[1]=False
: `- U" k% [, J* X" x elif event.key==pygame.K_s:
1 A  @9 \: a+ [4 b! z keys[2]=False
. U$ _- k& p4 |, j elif event.key==pygame.K_d:
* [* w3 X2 G9 y" b: r+ p9 K9 [ keys[3]=False8 @' V/ d$ K. @+ C% U9 i
哇哦!这里有好多行代码呢!不过如果我们将这些代码拆分来看,其实并不是太难。% g# u/ p5 s5 P' j! k
首先,我们要看看是否(if)有键被按下或者松开了,接着检测是哪个键被按下或者松开了。如果检测到的键是W、A、S、D中的某一个,就相应更新keys数列中的值。接着,你需要根据玩家按下的键更新playerpos变量,这个非常简单,只需要把下面代码加到目前所写的代码最后(使用一个缩进,和for循环同一层) 8 ]6 ?3 m& p/ O: a; o
# 9 – 移动小兔子: z: L: e+ |( K7 s' i: P
if keys[0]:' S0 }" @# z5 I9 B6 D- {
playerpos[1]-=55 c5 [: U" m. \  X* }
elif keys[2]:
" ~+ R6 E% i( p: O: F9 g0 W playerpos[1]+=54 Z! i8 Q3 [: u4 Z9 Q
if keys[1]:/ m0 q5 _/ j) t9 S
playerpos[0]-=5: s6 C1 N/ H2 h9 G: S9 n
elif keys[3]:
8 _6 _7 O# E6 R0 ]- [ playerpos[0]+=5+ o* {' Y, M! }3 E  e% k
这些代码检测哪个键被按下了,并对小兔子的x或y坐标做相应的增减。
' c3 y! A1 U& I5 h6 p4 K运行游戏,你会看到和刚才相似的场景。试着按按WASD,你的小兔子动起来了!
5 Q4 P! ], r% }! l7 L! P: W) ^  |2 X2 o# m
(未完待续)

本帖子中包含更多资源

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

x
回复

使用道具 举报

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

本版积分规则

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

扫一扫关注我们

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