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

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

2 T# K: d* j+ }6 a* b制作游戏场景8 C3 g( |& B  ?( F" w

9 z8 z. L* ?* U0 d6 g' V现在我们要制作游戏场景,这只需要多用几次screen.blit()就可以做到。在代码的第三部分 (#3 )载入小兔子图片后,加上下面两行代码:. ], R2 H: N! W
grass = pygame.image.load("resources/images/grass.png")( o/ w4 I% i+ _: Z  T, d  f8 V
castle = pygame.image.load("resources/images/castle.png")
5 e( B6 [8 i: Z/ e) |+ i) J这两行代码载入了两张不同的图片并把图片分别放入了不同的变量(variable)中。现在这两张图片就能出现在屏幕上了。不过你会发现,由grass.png载入的草坪背景不能覆盖整个640 x 480的窗口。这意味着你必须调整图片来完全覆盖窗口。
$ z# U) n$ Z% E在第六部分(#6)的开头添加以下代码(在确定小兔子位置之前):' F. G  N/ ~0 M! D
for x in range(width/grass.get_width()+1):5 W+ E+ N. t, V4 J- b
for y in range(height/grass.get_height()+1):6 _4 b6 h, X3 X, ^
screen.blit(grass,(x*100,y*100))
6 C+ X* H4 @4 l# C$ v$ H9 ?* l) }; t9 Xscreen.blit(castle,(0,30))
4 }0 q/ v5 t: h( ?screen.blit(castle,(0,135))) l. ]" q2 l0 j+ X3 ~
screen.blit(castle,(0,240))
0 {9 t  U0 U; Pscreen.blit(castle,(0,345))* q6 e  K" ^3 K
让我们一起来看看上面的代码~for语句先使用x进行循环。在这一层循环中,代码又通过y进行内层循环,然后把草坪图片放在循环得到的x, y 坐标上。接下来的几行代码在屏幕上放置堡垒(castle)。. f8 g$ m. M- g9 ?
如果你现在执行程序,你将看到下图的场景:
) F2 r- n) N: b/ c+ ]/ K/ N" I+ O) ?6 L3 ^3 q- d+ v
是不是比刚才好多了?:)
$ d' ?: x" [1 G. K让小兔子动起来!! ?3 s1 J- ]( o$ T' r* H1 x" W
  f5 p2 D+ J) P' k
5 O, d9 e* V( H3 b6 C: g2 D, ?
接下来我们要真正开始加入游戏元素啦!比如通过按键盘让小兔子动起来。& j; l( F4 O# g5 Z0 K( P7 o
首先,我们需要让程序追踪玩家什么时候按下了什么键。将下面两行代码添加到第二部分(#2)的末尾(在设定游戏窗口的高和宽之后):
5 w3 k; }# t5 k. o& u9 Ykeys = [False, False, False, False]
0 X6 N. z7 e( b3 ]& u$ Z! zplayerpos=[100,100]
2 ~# G: V9 i6 V# S: j* t: O在这两行代码中,我们创建了一个名为keys的数组(array),其中有4个False值,每个值对应W、A、S、D中的一个按键。变量playerpos对应小兔子位置坐标。因为在游戏进行的过程中,小兔子会不断移动,所以用一个变量储存小兔子的位置更加方便。
* C1 s. p3 e4 I0 R4 h! V/ `! U现在,我们要修改现有的代码,把小兔子图片放在playerpos对应的坐标上。把第六部分(#6)中的这行代码:
( ?& n9 w/ y$ P0 e$ P screen.blit(player, (100, 100))
  p* i5 J0 d6 F6 G6 C5 n: _& k改为:0 z$ W' g0 |( w7 G
screen.blit(player, playerpos)
  u# i. H" Y5 p5 D7 @接下来,我们要使用PyGame自带的event.key函数来检测玩家按下了什么键,并相应地将keys内的False值改为True。
9 }8 \+ W, {+ S3 y( z1 C) M2 l$ K在第八部分(#8)的最后,紧接着event.type == pygame.QUIT后,加上这些代码(缩进和pygame.QUIT的if代码块相同): & X3 A. G; e! U. K: n& W' F& @
if event.type == pygame.KEYDOWN:
( i. e7 C1 [6 D3 Y3 S( P0 a if event.key==K_w:% K. A) Z. v# V- |+ b
keys[0]=True- e, g$ y$ L% I2 P
elif event.key==K_a:: ~2 C4 z5 K0 o
keys[1]=True2 A' @' p9 |5 T/ c. J
elif event.key==K_s:
* S  y" E$ E$ ?4 S! f/ O' k6 d keys[2]=True
# V; v9 C2 a6 m elif event.key==K_d:+ ^+ B5 @: m' v9 R
keys[3]=True
$ n, R5 ?* |) a' p6 d4 P9 j1 cif event.type == pygame.KEYUP:, l- n8 `# u  }5 i+ ^
if event.key==pygame.K_w:2 m1 T7 c  F* b  h! a1 n" K& i
keys[0]=False6 n0 H' Q# L7 W6 R* n& c/ b  R
elif event.key==pygame.K_a:
% H0 `. I  F- J5 _- i# P2 F1 } keys[1]=False6 I, C: f( `( M/ J8 v/ q4 r0 ~
elif event.key==pygame.K_s:/ [& k1 S- k# y8 r* ]
keys[2]=False
6 w9 G; P( C# Q$ ~# F! M5 m elif event.key==pygame.K_d:
1 a) x* b$ d8 I keys[3]=False
3 U1 p2 {8 T. A; t' ]哇哦!这里有好多行代码呢!不过如果我们将这些代码拆分来看,其实并不是太难。, v' a* H) o3 y2 B
首先,我们要看看是否(if)有键被按下或者松开了,接着检测是哪个键被按下或者松开了。如果检测到的键是W、A、S、D中的某一个,就相应更新keys数列中的值。接着,你需要根据玩家按下的键更新playerpos变量,这个非常简单,只需要把下面代码加到目前所写的代码最后(使用一个缩进,和for循环同一层)
- N7 ~7 q2 q2 g3 W# 9 – 移动小兔子. x3 P; \' R; Z; j' j" B; k! d0 m9 G4 I
if keys[0]:
/ M9 \5 o" O! ~- h2 ~ playerpos[1]-=5
. d  \" q% e9 d9 z( P elif keys[2]:
4 O4 i+ V3 ?, l) _' O playerpos[1]+=5
9 K. y; Y4 A# w, B if keys[1]:
4 Z% u" y( o1 D$ \ playerpos[0]-=5
" `/ n6 U/ ^" ^0 r( L elif keys[3]:0 F' d* R) ~: o" N! v
playerpos[0]+=5
- ^" g3 K- m1 R* Q2 W' j这些代码检测哪个键被按下了,并对小兔子的x或y坐标做相应的增减。! p2 N9 k4 G9 p: i' ~4 B  M
运行游戏,你会看到和刚才相似的场景。试着按按WASD,你的小兔子动起来了!  k! D+ W" o/ W1 c8 o# G1 t( Q

* c6 L1 R1 \5 s  D, x5 h(未完待续)

本帖子中包含更多资源

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

x
回复

使用道具 举报

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

本版积分规则

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

扫一扫关注我们

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