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

[复制链接]
sosoyoyo 发表于 2018-1-20 09:18:35 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
6 V+ T: s6 Q- _: j( |1 g
制作游戏场景6 Y/ I; ?7 {0 N  G2 W
7 n1 u2 ~# G8 T4 H7 I' K( ^: q8 j+ u
现在我们要制作游戏场景,这只需要多用几次screen.blit()就可以做到。在代码的第三部分 (#3 )载入小兔子图片后,加上下面两行代码:
/ R- e, k$ r/ A! M4 S+ i- wgrass = pygame.image.load("resources/images/grass.png")- H9 C) U, {2 F( b: W* ?( b/ h$ z+ Q
castle = pygame.image.load("resources/images/castle.png")
) K  i* r7 f0 |# f- [% W4 L这两行代码载入了两张不同的图片并把图片分别放入了不同的变量(variable)中。现在这两张图片就能出现在屏幕上了。不过你会发现,由grass.png载入的草坪背景不能覆盖整个640 x 480的窗口。这意味着你必须调整图片来完全覆盖窗口。
" N6 d* D7 D% q  f5 `: ]  z在第六部分(#6)的开头添加以下代码(在确定小兔子位置之前):
2 y- d8 k1 ^6 }: L3 [0 t) y, T( Yfor x in range(width/grass.get_width()+1):
6 z  V$ p+ N6 P, @! G2 Q for y in range(height/grass.get_height()+1):2 {4 ?# t$ e1 T$ J* o  P
screen.blit(grass,(x*100,y*100))
% t) v7 S  m3 C/ bscreen.blit(castle,(0,30))& b7 {6 R! ?( _- B4 ~$ Q
screen.blit(castle,(0,135)). J5 G/ Z& q4 J8 G8 ]5 @
screen.blit(castle,(0,240))- K, u* O! a! `3 ~
screen.blit(castle,(0,345))
0 ?: a) F: J, y( k: S. W让我们一起来看看上面的代码~for语句先使用x进行循环。在这一层循环中,代码又通过y进行内层循环,然后把草坪图片放在循环得到的x, y 坐标上。接下来的几行代码在屏幕上放置堡垒(castle)。1 o; ^* V8 p3 M# r" V4 _: J# ]0 h
如果你现在执行程序,你将看到下图的场景:0 R3 h, J7 q* n7 j1 g4 y
8 @4 A7 G# C: D, n4 [6 b, a) a  d/ m
是不是比刚才好多了?:)
8 r& e/ U/ c) j/ A让小兔子动起来!) S5 w/ {* S5 r% T  L: U! C4 |

  G3 j6 W: l1 Y8 K/ f0 q5 s3 e
+ T* b: o6 X0 Z& j7 q接下来我们要真正开始加入游戏元素啦!比如通过按键盘让小兔子动起来。
4 D& M# C4 q& j: \( U首先,我们需要让程序追踪玩家什么时候按下了什么键。将下面两行代码添加到第二部分(#2)的末尾(在设定游戏窗口的高和宽之后):: C# |2 D2 s; G
keys = [False, False, False, False]- q' E1 A/ i+ D. H8 Q( V+ e
playerpos=[100,100]
8 M! J$ ?" z5 `( P7 F: F在这两行代码中,我们创建了一个名为keys的数组(array),其中有4个False值,每个值对应W、A、S、D中的一个按键。变量playerpos对应小兔子位置坐标。因为在游戏进行的过程中,小兔子会不断移动,所以用一个变量储存小兔子的位置更加方便。
' r) S# w, z5 o* ~现在,我们要修改现有的代码,把小兔子图片放在playerpos对应的坐标上。把第六部分(#6)中的这行代码:
2 W# ]- D5 v2 z6 v8 w8 l  D, N screen.blit(player, (100, 100))/ P4 K2 D" v2 k3 S3 a
改为:, H: w+ i2 `- w, H, h$ F0 g) p4 e& W
screen.blit(player, playerpos)9 X- \  m0 g0 P/ }
接下来,我们要使用PyGame自带的event.key函数来检测玩家按下了什么键,并相应地将keys内的False值改为True。0 n  E2 _/ O# O. e
在第八部分(#8)的最后,紧接着event.type == pygame.QUIT后,加上这些代码(缩进和pygame.QUIT的if代码块相同): ! t. h& P, \/ H+ G
if event.type == pygame.KEYDOWN:
8 M  I3 @$ U7 O9 N( X$ F% s if event.key==K_w:$ `8 O# e; ^  \; }
keys[0]=True! c) y, h2 R( `9 |/ @
elif event.key==K_a:# S) Q  x4 V; r) K5 |6 I
keys[1]=True
- d( A! x, x9 a% x) R0 I elif event.key==K_s:3 k7 B# Q; _  Q# R, Z% q* e
keys[2]=True9 _1 B4 N0 S! n( r$ Y* t5 r
elif event.key==K_d:6 v; S. Y% E$ u7 w. C2 m% M7 Z
keys[3]=True
- ~: l% B% m, K9 s4 R4 C5 B; Q# V1 eif event.type == pygame.KEYUP:
; i7 V: m) z% S- n$ O if event.key==pygame.K_w:
; R* \) e8 l! H  z1 h  ~ keys[0]=False% [4 F1 ]0 D$ ~, g5 Z, N# \  f' [
elif event.key==pygame.K_a:
6 k: o* a) H* }& ~9 u keys[1]=False
. Q# P/ o3 v& u: U elif event.key==pygame.K_s:' V4 ~8 m2 B. {4 i' v$ v: N' a+ A  Z: ~
keys[2]=False- i9 k. [5 ^, Q, t
elif event.key==pygame.K_d:
9 b7 ~* j! U; k keys[3]=False$ Y. {- M2 b! ^) G: b9 i' H9 G# I5 X( I
哇哦!这里有好多行代码呢!不过如果我们将这些代码拆分来看,其实并不是太难。4 j# R# O  e9 v  u2 `  x
首先,我们要看看是否(if)有键被按下或者松开了,接着检测是哪个键被按下或者松开了。如果检测到的键是W、A、S、D中的某一个,就相应更新keys数列中的值。接着,你需要根据玩家按下的键更新playerpos变量,这个非常简单,只需要把下面代码加到目前所写的代码最后(使用一个缩进,和for循环同一层)
+ J5 C# \' b1 Z+ R  g# 9 – 移动小兔子
/ s- O1 {3 E+ q' _3 Y if keys[0]:2 B/ c* V0 _* ]6 ~  r; S, p' Q
playerpos[1]-=5
$ B3 H- h; x  U$ Q elif keys[2]:
5 J" m% I, U: r* T  s playerpos[1]+=5
, s( Q! \/ b" _5 Y  _ if keys[1]:/ B& `4 \3 W" t# m9 s0 `
playerpos[0]-=5
: s5 n# ?1 e  Z) }' R9 Z5 r' M elif keys[3]:9 O1 j; q4 |( B% m
playerpos[0]+=5
  C- G4 f# g, ~7 I: f这些代码检测哪个键被按下了,并对小兔子的x或y坐标做相应的增减。, q, Q2 ~2 W  d% U+ D9 q9 f0 U
运行游戏,你会看到和刚才相似的场景。试着按按WASD,你的小兔子动起来了!. U) d/ f* n$ l; Y9 D

! E, Y1 |2 p5 @# w) Q+ h(未完待续)

本帖子中包含更多资源

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

x
回复

使用道具 举报

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

本版积分规则

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

扫一扫关注我们

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