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

[复制链接]
uqgtvoqjar 发表于 2018-3-1 10:21:47 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
" h4 U6 |( ~  W! \
制作游戏的难度是很高的
# A, f3 U' Z/ Q5 E所以每个想要学习制作的游戏的学生  R( Y" \: S" D9 ^5 V
一定要打好代码基础、理解代码内容和逻辑* ~' M- l' o0 Z) I$ k( ?2 M$ Q
才能在以后做出让人惊叹的游戏噢!+ ?3 q, m# I& n( j" ^' D
话不多说,来看之后的代码吧。; p- \, R% P6 z5 Q7 m, F
代码部分
' O& ^8 D; j2 U3 S  r
4 @4 @0 R) y1 Q4 X6 w& q& X73." j$ n- k3 w1 Z. C) A' y
74. # 字典里的值都是全局值,
4 F3 s% p( w: E; Z75. # 并规划字符在关卡文件中所代表的表层对象/ S( \* X, X9 K: v: U4 ^6 ~+ I. ?
76. TILEMAPPING = {'x': IMAGESDICT['corner'],
3 j) j' a4 |+ V) i77. '#': IMAGESDICT['wall'],
* c7 n7 r5 s  O, P! o78. 'o': IMAGESDICT['inside floor'],
' P$ f+ o( r4 v' y, H' M- h: R) s79. ' ': IMAGESDICT['outside floor']}5 q, g/ o" ~, e- w
地图的数据结构只是一系列的2D字符串。TILEMAPPING字典将地图数据结构中使用的字符与他们所代表的图片链接起来。(在drawMap()函数的解释里将显得更直观易懂)
8 h( g$ S2 P' Q, y: @+ {. Y" u: p80. OUTSIDEDECOMAPPING = {'1': IMAGESDICT['rock'],2 G8 K8 z( w2 E( w# Q$ E$ S
81. '2': IMAGESDICT['short tree'],
. i5 n! x6 P- ~" E6 {82. '3': IMAGESDICT['tall tree'],  V1 U! Z& I! ^/ k
83. '4': IMAGESDICT['ugly tree']}/ s4 h$ ]. n& X2 Y/ x" o- I  G$ O7 v
OUTSIDEDECOMAPPING也是一个将地图数据结构中使用的字符与读取图片链接起来的字典。
5 }& _1 @$ Z  Q, F“外部装饰”图将绘制在草地方块上方。) `; M1 E: }) g
85. # PLAYERIMAGES是一个列表包括所有玩家可以变成的字符/ H5 Z( F. _- d( b9 p. I
86. # currentImage 是玩家当前使用的角色图片的索引, c, M- R( e( R, t! e2 Z, ?2 V2 h
87. currentImage = 0& Y* u+ I2 e8 G# c
88. PLAYERIMAGES = [IMAGESDICT['princess'],
2 Z& A' D+ G# v89. IMAGESDICT['boy'],
; ^  U% _# T, i6 N' Y) B90. IMAGESDICT['catgirl'],
! E7 U' V3 q* e" R0 U4 N91. IMAGESDICT['horngirl'],+ D3 v/ `9 T' R. r& ~$ S
92. IMAGESDICT['pinkgirl']]% S+ ~( L7 w8 o- K7 y9 Q) \
PLAYERIMAGES列表储存用来改变控制角色形象的图片。) ~" l( b& h9 f' @4 Q
currentImage变量跟随当前使用的角色图片的序号。举个例子,当currentImage设置为0那么PLAYERIMAGES也为[0],而角色就会显示”“公主”这一形象的图片
, X" u% ?4 p- |& y* q
# ?' S7 N1 ?( t  R, ^; K
9 B. ~( v3 Q% b7 |# j9 E
; A5 H4 V$ J2 J
' k4 X$ O) E  k$ B: ]1 p5 N- U
: P9 T4 f5 ~8 Q' }% S/ A94. startScreen() # 显示标题画面直到玩家按下任意一个键
, @7 m$ P4 H: y4 a95.
" ~' I% p4 V: w- f/ j. E96. # 读取关卡文件里的关卡
$ I$ _* J: \$ f  g8 Z% f, u97. # 通过readLevelsFile()来获取关卡文件格式的细节并了解如何编写自己的关卡6 o4 u( r0 O% ?! m$ a
98. levels = readLevelsFile('starPusherLevels.txt')
; k. ?) Y' R3 y$ M( b8 j99. currentLevelIndex = 06 \( l2 `" w* W+ S4 h
startScreen()函数将会持续显示初始画面(这个画面带有游戏教程)直到玩家按下任意一个键。当玩家按下任意键后,startScreen()函数将返回并通过关卡文件读取关卡。玩家将从第一关开始,而这第一关就是在列表中序号为0的关卡。( E  }9 f) f" R
# m8 H: R: ~& t. S* H8 G1 p
(开始界面)
' g6 u5 e2 t8 k! j8 Y  l101. # 主要的游戏循环,这个循环在单个关卡运行4 s0 J% M4 ?/ Q& M; t' y
102. # 当玩家完成这个关卡,循环将读取上/下一关
4 a6 d" y, U" m$ c/ i4 F103. while True: # 主要游戏循环, W9 h! h5 M! H) A
104. # 运行关卡至开始游戏阶段:
7 f6 U( v/ |7 s# ^5 ~  S105. result = runLevel(levels, currentLevelIndex)
1 n! D; n$ A8 o& h9 ]runLevel()函数为游戏处理所有行为。这个函数通过一系列关卡对象并决定运行哪个整数序号关卡。
& s6 }3 s/ a/ u当玩家完成关卡,runLevel()将反馈以下字符串:’solved’意味着玩家达成关卡目标,’next’意味着玩家想要跳关,’back’意味着玩家想返回上一关,’reset’意味着玩家想重启关卡。9 s, i8 U% U6 L
107. if result in ('solved', 'next'):$ t% X: K& A9 r6 Y$ v, p
108. # 进入下一关0 e' t% a! R3 p3 `2 h4 D
109. currentLevelIndex += 14 n" X& l0 H) O
110. if currentLevelIndex >= len(levels):" E$ l; F/ J  n
111. # 如果之后没有关卡则返回第一关" X0 Z8 J6 E, c
112. currentLevelIndex = 0
- c$ ~$ s% D- q; C113. elif result == 'back':
6 T/ @; v4 m$ \3 P* ]114. # 返回上一关
1 l  l: Z6 s) {' J" F& m115. currentLevelIndex -= 19 Z1 m. L* r. l$ A" X
116. if currentLevelIndex < 0:
% b: v% G9 z3 j1 v! Z117. # 如果没有上一关可以返回了则回到最后一关- Z: ?2 I- `5 Z( o( S, F3 X
118. currentLevelIndex = len(levels)-1
8 J, [9 L8 _" Z) _( |如果runLevel()反馈的字符串为’solved’或者’next’,那么我们需要给增长量levelNum增加1。如果levelNum超过了关卡总数,那么levelNum设定回0。; ]4 Q) X+ w; v3 c' H3 ]
反过来同理,如果反馈的是’back’,levelNum就减1。如果减到低于0,那么就会设定回最后一关
0 l3 G, m8 B, k. b) g. Q& V* N
4 N; ]! f* L: x  H, L( D119. elif result == 'reset':# y. b. |) ?  u3 q
120. pass # 用来重新调用runLevel()重启关卡6 O# g6 L* ], L$ e, O( V* l: M
如果返回值为’reset’,代码不会起任何作用。) a$ i; z4 j1 \% a2 ^
pass语句在这里不起任何作用(更像一个评论),然而在Python编译器里是需要的,因为在elif语句后规定需要一行代码。2 |- h* x9 y4 A& z7 L) H
我们完全可以移除119和120行,而程序不会受到影响。而没有删除的原因是为了程序的可读性,因为这样我们就不会忘记runLevel()同样能反馈字符串’reset’。
% q* F8 t9 P+ V8 u8 b6 ?& M3 I(未完待续)

本帖子中包含更多资源

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

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