少儿编程教学:码趣君教你用Python编写推星星游戏(二) ...

[复制链接]
uqgtvoqjar 发表于 2018-3-1 10:21:47 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

9 j: b% @4 x! w/ @/ {( ?6 a+ A7 M制作游戏的难度是很高的7 Z! P/ o+ j$ {  d# z
所以每个想要学习制作的游戏的学生3 a0 p6 k$ a2 }0 Y; g
一定要打好代码基础、理解代码内容和逻辑4 C6 D1 \, q1 |  l/ [3 P) p( ]0 ~
才能在以后做出让人惊叹的游戏噢!. {* Z# b/ p( V, H! `+ o/ ?
话不多说,来看之后的代码吧。
+ ~) ~: }* J1 c6 k1 m代码部分/ W! m  C4 e- K+ R* I5 S1 i- q
6 u+ D# S' z% I  o, B1 a. V4 m
73.8 O9 ^' P6 k9 E4 `1 H( [
74. # 字典里的值都是全局值,+ W) n2 S: e- g$ _1 v6 Q3 ^
75. # 并规划字符在关卡文件中所代表的表层对象- ]3 m: M  T- K8 j3 x2 W- B* ~
76. TILEMAPPING = {'x': IMAGESDICT['corner'],- Z1 o. @+ J, m
77. '#': IMAGESDICT['wall'],
" s1 Z) R! @) ~( B, S& ], j78. 'o': IMAGESDICT['inside floor'],$ s$ T' C9 T* h4 g: i: L
79. ' ': IMAGESDICT['outside floor']}& B) [; d: c- t" N
地图的数据结构只是一系列的2D字符串。TILEMAPPING字典将地图数据结构中使用的字符与他们所代表的图片链接起来。(在drawMap()函数的解释里将显得更直观易懂)& `  `2 I  k. ^% r7 w
80. OUTSIDEDECOMAPPING = {'1': IMAGESDICT['rock'],
8 B! I3 J, U/ M- w81. '2': IMAGESDICT['short tree'],
& M& a: O% V  j/ d82. '3': IMAGESDICT['tall tree'],
. p3 x  a) a  \$ M  x) }5 [% t9 e83. '4': IMAGESDICT['ugly tree']}: A  J3 Y* `( E
OUTSIDEDECOMAPPING也是一个将地图数据结构中使用的字符与读取图片链接起来的字典。% O$ b$ g; {" H! }, [6 H
“外部装饰”图将绘制在草地方块上方。
( P- A% W4 g+ @5 ^+ a% m  z2 y85. # PLAYERIMAGES是一个列表包括所有玩家可以变成的字符$ c, a* U5 f. a7 z
86. # currentImage 是玩家当前使用的角色图片的索引
2 Q4 j* q' c0 ?87. currentImage = 0
9 q0 m& K0 ^4 I8 a" n* a) V88. PLAYERIMAGES = [IMAGESDICT['princess'],
  s- I  X6 Z9 x8 E7 w3 Q89. IMAGESDICT['boy'],
: m9 C1 N" |3 s7 s/ _1 Z) Z  N90. IMAGESDICT['catgirl'],
4 z( ]7 t' D9 W% h- o91. IMAGESDICT['horngirl'],
- {3 d$ |2 e4 ?' M: W- a92. IMAGESDICT['pinkgirl']]
3 ?& ~  P9 ~+ G  SPLAYERIMAGES列表储存用来改变控制角色形象的图片。
5 N/ Z: G+ A3 L4 ~9 W9 C3 wcurrentImage变量跟随当前使用的角色图片的序号。举个例子,当currentImage设置为0那么PLAYERIMAGES也为[0],而角色就会显示”“公主”这一形象的图片
2 D* X5 W: h8 Z' ?9 e6 y! H5 O1 L5 T, B
+ }  O, e3 N! B, f6 N- }( J$ A7 a$ N3 e) a  T% E2 c' _
# e8 c! m. i1 f

# K$ K% j2 t& ^! r* n0 Z4 Y
$ F2 k9 g: b/ G94. startScreen() # 显示标题画面直到玩家按下任意一个键: `; y" E/ C5 K- S
95.
9 A* m) B$ {8 I7 N! j- n96. # 读取关卡文件里的关卡
0 Q, {% q' \( R5 a97. # 通过readLevelsFile()来获取关卡文件格式的细节并了解如何编写自己的关卡
3 `* ?; I  L( T& \98. levels = readLevelsFile('starPusherLevels.txt'). ~. H) d3 l) M  s% N" g$ A! R
99. currentLevelIndex = 08 E/ l1 }0 O% b
startScreen()函数将会持续显示初始画面(这个画面带有游戏教程)直到玩家按下任意一个键。当玩家按下任意键后,startScreen()函数将返回并通过关卡文件读取关卡。玩家将从第一关开始,而这第一关就是在列表中序号为0的关卡。
1 ^6 `0 a6 B. ^0 h9 u  d6 p% D# ?7 A% J, }3 j
(开始界面)" G9 \( H" \! X1 d
101. # 主要的游戏循环,这个循环在单个关卡运行: q# m9 d5 G( r0 B8 H1 h- H5 n0 [
102. # 当玩家完成这个关卡,循环将读取上/下一关
3 @& O! z; `, _! e1 B103. while True: # 主要游戏循环$ L* K0 c+ J, V" j3 D6 q/ i+ q0 q
104. # 运行关卡至开始游戏阶段:2 R* B7 d: B' `7 D9 ~9 B: W" F
105. result = runLevel(levels, currentLevelIndex)
. W- _. [, l, irunLevel()函数为游戏处理所有行为。这个函数通过一系列关卡对象并决定运行哪个整数序号关卡。2 a8 v6 O) O( y
当玩家完成关卡,runLevel()将反馈以下字符串:’solved’意味着玩家达成关卡目标,’next’意味着玩家想要跳关,’back’意味着玩家想返回上一关,’reset’意味着玩家想重启关卡。! q8 x) [# ]. M1 ?' n
107. if result in ('solved', 'next'):
1 u% [. O1 g; ?7 b# E# a6 x4 p108. # 进入下一关- E$ F0 n; T( e& y
109. currentLevelIndex += 1
( m$ c  ?6 q. I# O110. if currentLevelIndex >= len(levels):
( `  F# n: r7 X6 S# ?111. # 如果之后没有关卡则返回第一关
. P5 F! y' {7 j$ i( n6 b4 u112. currentLevelIndex = 0  a/ i$ Q; a0 E! u& }% v1 ~0 K
113. elif result == 'back':8 S" u1 r7 T8 H0 w+ h
114. # 返回上一关
& O" R9 R" E: C115. currentLevelIndex -= 1
$ D, N- S+ |" a116. if currentLevelIndex < 0:
$ S, ]  c2 x+ @, T3 z/ P117. # 如果没有上一关可以返回了则回到最后一关
; O6 O" r' I, f- C' ?1 C118. currentLevelIndex = len(levels)-1% ]1 R: p& C2 u; `; Q
如果runLevel()反馈的字符串为’solved’或者’next’,那么我们需要给增长量levelNum增加1。如果levelNum超过了关卡总数,那么levelNum设定回0。
$ b6 k% f9 c. o8 Z( O反过来同理,如果反馈的是’back’,levelNum就减1。如果减到低于0,那么就会设定回最后一关* k* }( X  }6 O' b1 r

/ Y. E5 H: n4 V4 q( Y119. elif result == 'reset':# J1 y& b; A* Q! i
120. pass # 用来重新调用runLevel()重启关卡
/ z0 q( E6 c; K6 Y& k: F如果返回值为’reset’,代码不会起任何作用。7 D  g! ], x6 {8 P
pass语句在这里不起任何作用(更像一个评论),然而在Python编译器里是需要的,因为在elif语句后规定需要一行代码。% R$ N. J2 ~3 f, t/ T- w
我们完全可以移除119和120行,而程序不会受到影响。而没有删除的原因是为了程序的可读性,因为这样我们就不会忘记runLevel()同样能反馈字符串’reset’。2 T4 I: w7 F0 ~" t5 j# B
(未完待续)

本帖子中包含更多资源

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

x
回复

使用道具 举报

精彩评论2

lgy_103 发表于 2018-3-1 10:22:42 | 显示全部楼层
这幼稚的画面让我想起了迷你世界
回复

使用道具 举报

璀璨星辰 发表于 2018-3-1 11:21:49 | 显示全部楼层
可以,我试试
回复

使用道具 举报

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

本版积分规则

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

扫一扫关注我们

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