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

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

5 q* ?# e8 {: I3 V9 b3 H制作游戏的难度是很高的/ L5 p8 B- ]5 D% l" ~! \
所以每个想要学习制作的游戏的学生
  u: V% B9 E+ [0 K一定要打好代码基础、理解代码内容和逻辑
; }( I4 ^# S! W2 n$ ~% t才能在以后做出让人惊叹的游戏噢!
8 z( I. ~' B/ Y% g话不多说,来看之后的代码吧。' p3 l& U! Y: ?
代码部分
8 f9 ^/ v7 Q* [+ w* r& |5 S& b6 K' t0 s1 F7 G
73.
" ~! ]+ b+ t( }, I- A2 _3 Y74. # 字典里的值都是全局值,
' V% j3 L+ m" L4 u  P75. # 并规划字符在关卡文件中所代表的表层对象
7 Q) T8 i2 h( g+ S! |76. TILEMAPPING = {'x': IMAGESDICT['corner'],
9 |- w" f4 I# p  M2 I. i77. '#': IMAGESDICT['wall'],8 a' _/ M1 B- a: ^6 k8 q& [+ X: B
78. 'o': IMAGESDICT['inside floor'],# o* `# w6 T8 U; \
79. ' ': IMAGESDICT['outside floor']}
  F  ^- h- {) D9 f, ?; o地图的数据结构只是一系列的2D字符串。TILEMAPPING字典将地图数据结构中使用的字符与他们所代表的图片链接起来。(在drawMap()函数的解释里将显得更直观易懂)) Y5 }5 @  Y; X
80. OUTSIDEDECOMAPPING = {'1': IMAGESDICT['rock'],, c: K2 d& t6 ~& S& n2 ^& O
81. '2': IMAGESDICT['short tree'],' K/ p+ z/ q2 y5 m* N3 o+ G
82. '3': IMAGESDICT['tall tree'],
* g' {# r4 q6 @; N- G83. '4': IMAGESDICT['ugly tree']}; z6 ~4 m0 W9 Q5 p, `
OUTSIDEDECOMAPPING也是一个将地图数据结构中使用的字符与读取图片链接起来的字典。
2 q& M% n! G) H" }) a. K“外部装饰”图将绘制在草地方块上方。
) M8 i' u( a, e9 j: p85. # PLAYERIMAGES是一个列表包括所有玩家可以变成的字符
9 o# ]1 Q$ v  O86. # currentImage 是玩家当前使用的角色图片的索引7 G- M" n0 O+ j; z2 N& _8 N
87. currentImage = 0
* R+ g/ A9 g8 U5 U. s8 G3 `' m/ B88. PLAYERIMAGES = [IMAGESDICT['princess'],9 ?% {  {2 X/ T' z2 m' B
89. IMAGESDICT['boy'],
7 u; Q7 N/ U4 u& f1 n- F! ?$ o1 G90. IMAGESDICT['catgirl'],
+ g& h3 a! _* H& O7 G7 w91. IMAGESDICT['horngirl'],
" P# t! |, S9 ^/ w92. IMAGESDICT['pinkgirl']]
0 w  n" ~2 y7 L, c( R4 hPLAYERIMAGES列表储存用来改变控制角色形象的图片。8 L& D+ Z7 Z7 l! E1 M
currentImage变量跟随当前使用的角色图片的序号。举个例子,当currentImage设置为0那么PLAYERIMAGES也为[0],而角色就会显示”“公主”这一形象的图片
' J* b5 S; S$ r
8 ]) M0 `2 U- f. i" o) H" t9 [" c- k: P

$ P$ v% |' G, s- t
3 ^' J' {( i; E3 c
$ o3 t' y8 Y) D  a& b94. startScreen() # 显示标题画面直到玩家按下任意一个键
# ^! P% ]6 z, y. b( p& h* l95.
9 E. q- x  \  u7 C96. # 读取关卡文件里的关卡; R% {8 b4 Q3 c* v% B0 u+ p
97. # 通过readLevelsFile()来获取关卡文件格式的细节并了解如何编写自己的关卡
& |4 W" o# x" L5 H8 U, Z  G9 `98. levels = readLevelsFile('starPusherLevels.txt')
- C8 e$ ?# ~1 Y" y1 h, v5 B99. currentLevelIndex = 0& t0 g; I8 d+ Q. x' G
startScreen()函数将会持续显示初始画面(这个画面带有游戏教程)直到玩家按下任意一个键。当玩家按下任意键后,startScreen()函数将返回并通过关卡文件读取关卡。玩家将从第一关开始,而这第一关就是在列表中序号为0的关卡。
/ H3 l" f: X8 f1 Y1 ~' q, _* l+ R' i
8 X( Q9 e* W0 `+ Z% X  w7 n(开始界面)
# E$ Q5 P% m& l: B- k% r& z7 p101. # 主要的游戏循环,这个循环在单个关卡运行" w! |% n( T" Q5 @: H2 @2 {' g
102. # 当玩家完成这个关卡,循环将读取上/下一关& K1 A4 f& s9 |
103. while True: # 主要游戏循环9 J: S# L0 c: B1 b
104. # 运行关卡至开始游戏阶段:
+ u3 [" B6 s" p5 ~/ L105. result = runLevel(levels, currentLevelIndex)6 W6 I) `+ @6 W' A6 e; }
runLevel()函数为游戏处理所有行为。这个函数通过一系列关卡对象并决定运行哪个整数序号关卡。
2 }/ Q+ W8 `1 T  h- L- K) R当玩家完成关卡,runLevel()将反馈以下字符串:’solved’意味着玩家达成关卡目标,’next’意味着玩家想要跳关,’back’意味着玩家想返回上一关,’reset’意味着玩家想重启关卡。) U5 S+ Z6 D+ W' f" h
107. if result in ('solved', 'next'):
% ~/ H8 j) h" `, j108. # 进入下一关
# B) _5 D  p: `* l" {109. currentLevelIndex += 10 \2 ]' ~! @# g3 A7 u9 t
110. if currentLevelIndex >= len(levels):8 D, a) Q, H. Z
111. # 如果之后没有关卡则返回第一关6 [$ D! ~7 Z& o) T4 b
112. currentLevelIndex = 0; m4 |5 G# z* k  l" t* u
113. elif result == 'back':
( y% F5 }# M( [114. # 返回上一关* _$ _$ r  u* O4 Q& S4 v
115. currentLevelIndex -= 1
( U* }! _; x- Q: w0 h& ^9 ]* \- X116. if currentLevelIndex < 0:
, ~1 a, E1 q  ^# `$ u( `/ h. Y: ?117. # 如果没有上一关可以返回了则回到最后一关
# `6 j3 L# W' S  B( ?118. currentLevelIndex = len(levels)-1+ B4 F0 a9 c: T' O: e% y" C
如果runLevel()反馈的字符串为’solved’或者’next’,那么我们需要给增长量levelNum增加1。如果levelNum超过了关卡总数,那么levelNum设定回0。/ `0 C! Z8 s  k6 n& i
反过来同理,如果反馈的是’back’,levelNum就减1。如果减到低于0,那么就会设定回最后一关
+ n- {. Y$ V; k& e/ N( [% y0 r% ]' e( d  H0 t# o; M
119. elif result == 'reset':( d& v# n& w* f8 G( J  G/ M: s
120. pass # 用来重新调用runLevel()重启关卡6 h+ L$ E9 S9 M
如果返回值为’reset’,代码不会起任何作用。0 V: A( }; w3 H* @1 ~
pass语句在这里不起任何作用(更像一个评论),然而在Python编译器里是需要的,因为在elif语句后规定需要一行代码。- n2 ]5 P7 S% g. C" i4 p" Z
我们完全可以移除119和120行,而程序不会受到影响。而没有删除的原因是为了程序的可读性,因为这样我们就不会忘记runLevel()同样能反馈字符串’reset’。0 T+ C$ k( Y& p9 n6 u9 n9 d7 l' P) F# |! l
(未完待续)

本帖子中包含更多资源

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

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.|网站地图