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

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

1 d8 z+ R/ D* W3 t" H制作游戏的难度是很高的5 Q. C9 a) k4 {: S0 G" B
所以每个想要学习制作的游戏的学生2 X; W9 \5 E! n
一定要打好代码基础、理解代码内容和逻辑& F- |0 M% E. p9 `% i% o4 v; C
才能在以后做出让人惊叹的游戏噢!. Q+ r, u, o" d8 e. R% h
话不多说,来看之后的代码吧。/ J* w% K! c/ C& X3 P
代码部分0 X. b7 A# e( x0 U7 V) W

; D! u  ]/ J% h  F' S+ n# `9 m  q73.7 L/ G2 V9 E* n8 u
74. # 字典里的值都是全局值,& U* h; z' ~/ M# }3 \
75. # 并规划字符在关卡文件中所代表的表层对象/ O- K% n+ K: r. w; [
76. TILEMAPPING = {'x': IMAGESDICT['corner'],
' J. p) Z" r" Z. U77. '#': IMAGESDICT['wall'],
4 g% X, n9 o  ^3 i; x! C78. 'o': IMAGESDICT['inside floor'],8 H/ T. P; N( ?, q
79. ' ': IMAGESDICT['outside floor']}
6 e; {; w! X0 \! ]' U+ S地图的数据结构只是一系列的2D字符串。TILEMAPPING字典将地图数据结构中使用的字符与他们所代表的图片链接起来。(在drawMap()函数的解释里将显得更直观易懂)
4 u3 |4 }: t3 o2 U! Z80. OUTSIDEDECOMAPPING = {'1': IMAGESDICT['rock'],4 n. v8 u7 L4 [/ |
81. '2': IMAGESDICT['short tree'],
4 N6 z5 t5 u, u82. '3': IMAGESDICT['tall tree'],
. k/ y; J! V( s7 X% f" ^83. '4': IMAGESDICT['ugly tree']}- u6 E9 @( t+ t
OUTSIDEDECOMAPPING也是一个将地图数据结构中使用的字符与读取图片链接起来的字典。
, Y  r$ O7 `9 ]8 |+ z“外部装饰”图将绘制在草地方块上方。
) g9 h1 r8 F8 Z# p85. # PLAYERIMAGES是一个列表包括所有玩家可以变成的字符. ~# x: g! p  @( ?0 |; o0 l& e# F
86. # currentImage 是玩家当前使用的角色图片的索引
2 B- T; e1 K0 f4 R" s& K- S87. currentImage = 0
1 V, f. S2 |' ^& d" V$ I88. PLAYERIMAGES = [IMAGESDICT['princess'],
2 {  _8 R: e# H89. IMAGESDICT['boy'],' n1 |: S) a/ `
90. IMAGESDICT['catgirl'],0 _, v* L! w6 z7 c# S
91. IMAGESDICT['horngirl'],
$ D6 Q/ D, p6 t# G. ~# h4 i92. IMAGESDICT['pinkgirl']]4 i8 K# [2 E( p: r
PLAYERIMAGES列表储存用来改变控制角色形象的图片。) Y; r$ Q4 S4 y, j* M8 c
currentImage变量跟随当前使用的角色图片的序号。举个例子,当currentImage设置为0那么PLAYERIMAGES也为[0],而角色就会显示”“公主”这一形象的图片
* i- D& v, g$ l% j% W# {* j1 ]+ S. j3 \% P! I) e7 t
, G6 B: j* z6 ~  C# Y

1 m0 Z- M) U0 ^& Q. g" A' b, h! z

8 ~% S8 _) i, Y- M94. startScreen() # 显示标题画面直到玩家按下任意一个键
: n+ U$ u- n, M3 _1 i3 e* j95. ' B& [; g5 ]+ {6 i  U1 g7 i# F* b4 U
96. # 读取关卡文件里的关卡5 u2 n! w3 M* c6 D2 ~
97. # 通过readLevelsFile()来获取关卡文件格式的细节并了解如何编写自己的关卡
! \. @, |/ v* I# R6 D98. levels = readLevelsFile('starPusherLevels.txt')
, x9 X7 v, y/ x4 G3 v99. currentLevelIndex = 0; H. L4 h" p- m$ w6 @) R) N
startScreen()函数将会持续显示初始画面(这个画面带有游戏教程)直到玩家按下任意一个键。当玩家按下任意键后,startScreen()函数将返回并通过关卡文件读取关卡。玩家将从第一关开始,而这第一关就是在列表中序号为0的关卡。- a9 B5 L: b5 r  n
7 J2 p2 v9 F: G+ [8 b; L
(开始界面)4 _6 `! b& I& `' l7 c  S
101. # 主要的游戏循环,这个循环在单个关卡运行2 i# w! O9 m1 L
102. # 当玩家完成这个关卡,循环将读取上/下一关
6 Q  |5 O7 {% {+ D  l% d3 j: B103. while True: # 主要游戏循环- \; B- Q& X; d+ ~" u
104. # 运行关卡至开始游戏阶段:+ g& n7 n; Z; Z( Q& Y4 B
105. result = runLevel(levels, currentLevelIndex)
% `& z) z0 h  E+ E" frunLevel()函数为游戏处理所有行为。这个函数通过一系列关卡对象并决定运行哪个整数序号关卡。
! J) u+ }; s0 S# _  k" i当玩家完成关卡,runLevel()将反馈以下字符串:’solved’意味着玩家达成关卡目标,’next’意味着玩家想要跳关,’back’意味着玩家想返回上一关,’reset’意味着玩家想重启关卡。5 J0 ^. h: h! [( P* z; A% ]
107. if result in ('solved', 'next'):+ U& \% B& n' ]. i6 u$ g/ A
108. # 进入下一关
: v1 D6 P- }1 V% Z' H' ?109. currentLevelIndex += 1* o" T/ u  h9 Z8 L% t4 f/ S2 n# e3 f
110. if currentLevelIndex >= len(levels):
: m' g5 P0 t( t- h# v111. # 如果之后没有关卡则返回第一关
6 L2 R7 O0 B' e9 n+ r$ n112. currentLevelIndex = 0
# K2 S, ~3 D; b2 O. x* |8 \" s+ g113. elif result == 'back':
+ j( k' A9 @5 w: j114. # 返回上一关
& D8 i+ h% v7 \4 V2 l: E115. currentLevelIndex -= 1) C' W  S* l! Z: ^$ x
116. if currentLevelIndex < 0:
3 j$ @. z. \5 ~1 j: B+ \117. # 如果没有上一关可以返回了则回到最后一关
3 n& ^" M( u* t- j& R; W118. currentLevelIndex = len(levels)-17 h+ d4 G* y& o
如果runLevel()反馈的字符串为’solved’或者’next’,那么我们需要给增长量levelNum增加1。如果levelNum超过了关卡总数,那么levelNum设定回0。& o6 ]8 o  K& q, l* S9 y2 l4 n
反过来同理,如果反馈的是’back’,levelNum就减1。如果减到低于0,那么就会设定回最后一关8 e: f. W9 \5 H  e+ y1 m6 S

( `- J+ a: y4 ~: H! G119. elif result == 'reset':
) r4 Y" F/ M! Y# I120. pass # 用来重新调用runLevel()重启关卡
6 T/ |0 a7 ~. H! I! [6 `如果返回值为’reset’,代码不会起任何作用。( B4 J& x) t6 S
pass语句在这里不起任何作用(更像一个评论),然而在Python编译器里是需要的,因为在elif语句后规定需要一行代码。9 L0 L# |/ ]5 ~$ R+ b/ z: q
我们完全可以移除119和120行,而程序不会受到影响。而没有删除的原因是为了程序的可读性,因为这样我们就不会忘记runLevel()同样能反馈字符串’reset’。
8 K) H6 V% z3 a9 ~2 F9 j(未完待续)

本帖子中包含更多资源

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

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