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

[复制链接]
uqgtvoqjar 发表于 2018-3-1 10:21:47 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
2 O$ q# [- h2 A1 }0 ^: V' Z
制作游戏的难度是很高的/ M; L6 d6 P# g5 i
所以每个想要学习制作的游戏的学生
7 ?, X# K* F+ ]/ C6 }1 O6 y- @一定要打好代码基础、理解代码内容和逻辑+ f6 T5 y4 X0 ?  b
才能在以后做出让人惊叹的游戏噢!1 B; W( X# m# b! W
话不多说,来看之后的代码吧。
' E- l+ q1 }- @4 t代码部分; v0 l; Z$ t1 ^* D
- G' N& O8 T9 C4 |2 S
73.
. T+ b# _( z! J5 s$ U/ S74. # 字典里的值都是全局值,( M* n( {- [( ?8 o4 t% i. q
75. # 并规划字符在关卡文件中所代表的表层对象& e5 x5 ~1 l+ H, u4 ~1 c
76. TILEMAPPING = {'x': IMAGESDICT['corner'],5 P$ G/ C* w. Q
77. '#': IMAGESDICT['wall'],
  S- ^  i$ S% U78. 'o': IMAGESDICT['inside floor'],' \: o9 c! J0 [6 K  g
79. ' ': IMAGESDICT['outside floor']}
5 [" l6 v) _2 j! a  J. u7 F9 M地图的数据结构只是一系列的2D字符串。TILEMAPPING字典将地图数据结构中使用的字符与他们所代表的图片链接起来。(在drawMap()函数的解释里将显得更直观易懂)
$ n8 r; p! r3 I3 R/ s- \80. OUTSIDEDECOMAPPING = {'1': IMAGESDICT['rock'],/ ?: M2 L# _  w. A7 e& K
81. '2': IMAGESDICT['short tree'],
  B7 Y9 K! \' i/ s  R( s1 Z  v82. '3': IMAGESDICT['tall tree'],
0 H) k/ t- ~+ y: V9 ~83. '4': IMAGESDICT['ugly tree']}
5 ?* y/ C% G. s9 u5 AOUTSIDEDECOMAPPING也是一个将地图数据结构中使用的字符与读取图片链接起来的字典。( z: r2 u1 ~  q) o
“外部装饰”图将绘制在草地方块上方。
/ L5 l8 w; z+ x+ h8 E85. # PLAYERIMAGES是一个列表包括所有玩家可以变成的字符  d$ k* h' L$ Z4 ^& K& k$ H
86. # currentImage 是玩家当前使用的角色图片的索引
* m% P7 Z6 s/ d2 Z0 P$ @/ X87. currentImage = 0: M4 I, `/ E2 B' Q
88. PLAYERIMAGES = [IMAGESDICT['princess'],/ b8 x' ]9 M7 j" y& ^
89. IMAGESDICT['boy'],) H3 K+ ?7 G* y( C! \
90. IMAGESDICT['catgirl'],
. i$ y, W3 X( ]* r0 |% X! M91. IMAGESDICT['horngirl'],
' [( C/ r: H# W92. IMAGESDICT['pinkgirl']]
- a% V( U% @$ X' A/ y* Q+ zPLAYERIMAGES列表储存用来改变控制角色形象的图片。8 M3 f0 m: C& S3 [% Q
currentImage变量跟随当前使用的角色图片的序号。举个例子,当currentImage设置为0那么PLAYERIMAGES也为[0],而角色就会显示”“公主”这一形象的图片
* K+ U3 A1 R- a# r7 ^3 z, j" E: D$ c; O# K8 V1 Q

5 y3 `- [6 H9 }, r5 ]* L/ Q. \2 g2 @8 _( p8 P( }6 \

5 S0 ^! e: ?1 k/ c, V. s5 H  z) {5 k  g6 N6 e; K4 H
94. startScreen() # 显示标题画面直到玩家按下任意一个键: \% D! P' S3 s  m
95. 1 x3 H: G% \1 V0 J5 t
96. # 读取关卡文件里的关卡1 m. j. Y. B# b0 i
97. # 通过readLevelsFile()来获取关卡文件格式的细节并了解如何编写自己的关卡
, L# N- _5 F2 ^3 A98. levels = readLevelsFile('starPusherLevels.txt')
$ w) o5 [( T$ u. H99. currentLevelIndex = 0
( |* l: z4 ~; z! _$ Z' u1 Q. c: bstartScreen()函数将会持续显示初始画面(这个画面带有游戏教程)直到玩家按下任意一个键。当玩家按下任意键后,startScreen()函数将返回并通过关卡文件读取关卡。玩家将从第一关开始,而这第一关就是在列表中序号为0的关卡。
$ Y+ U0 A3 o$ i( |5 c
4 P6 M4 F' ^" ]$ @- z3 Z(开始界面)
8 W5 h  @; N5 @. t& q7 U101. # 主要的游戏循环,这个循环在单个关卡运行# _1 S, Y  g& h; w( I& H
102. # 当玩家完成这个关卡,循环将读取上/下一关0 B4 [$ v  i  P  x
103. while True: # 主要游戏循环
3 e- c5 ]: y* s0 R9 g& ?104. # 运行关卡至开始游戏阶段:3 d6 [) N5 j8 I/ u+ f
105. result = runLevel(levels, currentLevelIndex)
+ y0 Q% [; [( Z# jrunLevel()函数为游戏处理所有行为。这个函数通过一系列关卡对象并决定运行哪个整数序号关卡。
7 @7 C% @* z9 O! R' v当玩家完成关卡,runLevel()将反馈以下字符串:’solved’意味着玩家达成关卡目标,’next’意味着玩家想要跳关,’back’意味着玩家想返回上一关,’reset’意味着玩家想重启关卡。
; q  ^$ c. _: ?  y107. if result in ('solved', 'next'):
/ ^5 r8 Z1 e4 n! R1 d( c108. # 进入下一关
8 A0 M# ~7 v2 J109. currentLevelIndex += 1
/ L' v2 d7 J" X" X0 ^* R8 L  }110. if currentLevelIndex >= len(levels):
8 O2 A! \3 F1 o8 v+ D111. # 如果之后没有关卡则返回第一关/ w, \* |. }7 V8 i
112. currentLevelIndex = 0
. ]4 p# {" ~5 v( ^' c1 Q113. elif result == 'back':6 F; \( p& s. ~/ _$ v4 J3 A" Z
114. # 返回上一关
& ]: c5 `4 Q( G( z. t115. currentLevelIndex -= 1' j( D  C6 `7 L( }
116. if currentLevelIndex < 0:! K6 k7 r  D( [: u- m
117. # 如果没有上一关可以返回了则回到最后一关
/ S. S2 l, s  i& z9 T118. currentLevelIndex = len(levels)-10 @, ?2 u( A- [
如果runLevel()反馈的字符串为’solved’或者’next’,那么我们需要给增长量levelNum增加1。如果levelNum超过了关卡总数,那么levelNum设定回0。
) \* _3 [- p7 L; l反过来同理,如果反馈的是’back’,levelNum就减1。如果减到低于0,那么就会设定回最后一关( M, d! ~' p; ^! w, b. l! h- U0 n
5 o& b6 P3 B9 V% t" j8 z% o3 R
119. elif result == 'reset':9 C! b; ~- c8 ~# Y" ~9 `
120. pass # 用来重新调用runLevel()重启关卡# I. I* B- s1 Y/ O
如果返回值为’reset’,代码不会起任何作用。
5 J0 ]# y4 a1 K; Mpass语句在这里不起任何作用(更像一个评论),然而在Python编译器里是需要的,因为在elif语句后规定需要一行代码。
  S  j  e+ l: e8 d$ ^我们完全可以移除119和120行,而程序不会受到影响。而没有删除的原因是为了程序的可读性,因为这样我们就不会忘记runLevel()同样能反馈字符串’reset’。% C. F+ P3 B' [6 s
(未完待续)

本帖子中包含更多资源

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

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