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

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

* T! @( Z3 c: i( T: Z制作游戏的难度是很高的! O( m4 G& M- }5 U5 c
所以每个想要学习制作的游戏的学生7 ^* {4 X* U4 S' d. s  E3 ?
一定要打好代码基础、理解代码内容和逻辑
  ]0 y! h1 n7 d  E3 L+ i: K  ?* {才能在以后做出让人惊叹的游戏噢!
' a) ]' _* m* w1 X. A话不多说,来看之后的代码吧。
, ]8 L: v+ }0 f5 d1 k+ }5 y代码部分! X0 q: w6 M( c4 a0 ~

6 O7 Z. |% i" f7 X0 ?. {73.0 ~9 s  F, p6 J) e/ r3 Y
74. # 字典里的值都是全局值,# D- J2 W/ |! X1 S
75. # 并规划字符在关卡文件中所代表的表层对象
  @( L/ B" p. m76. TILEMAPPING = {'x': IMAGESDICT['corner'],& J7 `3 z5 Q1 O, X5 w; T7 p
77. '#': IMAGESDICT['wall'],$ p4 l9 {6 `: b. `: @4 B  o
78. 'o': IMAGESDICT['inside floor'],7 ]5 ~$ f% _" L; [
79. ' ': IMAGESDICT['outside floor']}7 y3 A$ m" ]+ O4 u
地图的数据结构只是一系列的2D字符串。TILEMAPPING字典将地图数据结构中使用的字符与他们所代表的图片链接起来。(在drawMap()函数的解释里将显得更直观易懂)
; ], \5 b) i" e9 s( _- r80. OUTSIDEDECOMAPPING = {'1': IMAGESDICT['rock'],8 v/ A0 l0 T# |  I
81. '2': IMAGESDICT['short tree'],
1 s: L) B" _0 w: t* m5 S3 \" |$ P3 R82. '3': IMAGESDICT['tall tree'],! ?- T0 ^5 u# [3 W
83. '4': IMAGESDICT['ugly tree']}
5 c( [! e& p8 y* x% a/ o6 lOUTSIDEDECOMAPPING也是一个将地图数据结构中使用的字符与读取图片链接起来的字典。7 P, w, f" P  d$ |) C6 O3 x
“外部装饰”图将绘制在草地方块上方。* M, M4 s4 m# C- E1 Y3 `
85. # PLAYERIMAGES是一个列表包括所有玩家可以变成的字符" v+ O  S) e# l  w) p5 h  f
86. # currentImage 是玩家当前使用的角色图片的索引
% P( i; \# j( o" W, H87. currentImage = 0
% H, Q9 ~- h/ H$ e1 s88. PLAYERIMAGES = [IMAGESDICT['princess'],3 W, g6 w) y  \" P+ Y; c3 q
89. IMAGESDICT['boy'],9 S5 O  g# C' w3 Z5 n
90. IMAGESDICT['catgirl'],2 S/ i$ w3 `# {# b$ M
91. IMAGESDICT['horngirl'],! q8 ^4 z: j% J9 I+ l$ C7 Y# ~
92. IMAGESDICT['pinkgirl']]
- j6 u6 R0 Y# O% q2 g4 N4 \! Y. DPLAYERIMAGES列表储存用来改变控制角色形象的图片。
) J2 Z' @, z1 J! g# a! j/ FcurrentImage变量跟随当前使用的角色图片的序号。举个例子,当currentImage设置为0那么PLAYERIMAGES也为[0],而角色就会显示”“公主”这一形象的图片
) ~- ?$ k$ Y# h  ?% K1 g
6 ?$ f) S7 ?  |. I. N% Q( _3 C' P' @2 ?$ K! s1 F
+ L% n5 D* V+ D' f+ D0 d

( A) k$ V6 F( p- c; I) E4 ?' N% O2 x1 w0 k/ x
94. startScreen() # 显示标题画面直到玩家按下任意一个键
9 u0 V9 s# C! a9 _% H95. : L8 E2 }' Q# k' b- g" j4 P6 n
96. # 读取关卡文件里的关卡$ G2 x( q, Y& V3 D7 U* L' E
97. # 通过readLevelsFile()来获取关卡文件格式的细节并了解如何编写自己的关卡
6 _8 t5 B" F. G# w8 A! w! @  C98. levels = readLevelsFile('starPusherLevels.txt')
# T5 ~+ s) X/ R99. currentLevelIndex = 0
: O2 d2 P  z2 I6 p$ hstartScreen()函数将会持续显示初始画面(这个画面带有游戏教程)直到玩家按下任意一个键。当玩家按下任意键后,startScreen()函数将返回并通过关卡文件读取关卡。玩家将从第一关开始,而这第一关就是在列表中序号为0的关卡。
. N1 A3 {) [  k2 @. C! ]. l0 k3 v" o9 ~0 ]; h
(开始界面)' z- A! l% T( x' |2 ?( Y$ g. [
101. # 主要的游戏循环,这个循环在单个关卡运行
! R, Z- V& W) f1 n$ j- O# |& l$ U102. # 当玩家完成这个关卡,循环将读取上/下一关. Z4 {" F7 L( m1 A. G
103. while True: # 主要游戏循环
- T6 _) G4 k, |; {104. # 运行关卡至开始游戏阶段:
! t3 I3 G7 ?, p105. result = runLevel(levels, currentLevelIndex)
# D% z: J2 N# e# V7 v0 urunLevel()函数为游戏处理所有行为。这个函数通过一系列关卡对象并决定运行哪个整数序号关卡。
  j+ q* ?9 S" x: Q当玩家完成关卡,runLevel()将反馈以下字符串:’solved’意味着玩家达成关卡目标,’next’意味着玩家想要跳关,’back’意味着玩家想返回上一关,’reset’意味着玩家想重启关卡。- P" ]) E) l8 a2 R% x
107. if result in ('solved', 'next'):% E: O' d: z  P  v' W( d2 H2 X
108. # 进入下一关4 y, N3 W7 t0 R
109. currentLevelIndex += 1$ L, d2 ~+ _4 z# x. F3 u
110. if currentLevelIndex >= len(levels):# Z! ]* j1 |) E1 C
111. # 如果之后没有关卡则返回第一关: H# a$ ?5 O6 V; g1 n
112. currentLevelIndex = 0
/ e* M* n3 Q) {# i) E113. elif result == 'back':# z. j, t# r  T7 m( n/ |- Z
114. # 返回上一关* r+ R' I& s  E/ R! X7 ~9 `. ^0 C' B
115. currentLevelIndex -= 1$ z/ |. H% u0 q" R' r
116. if currentLevelIndex < 0:/ U7 U; p, J  |# {  R2 e: @
117. # 如果没有上一关可以返回了则回到最后一关
7 E1 e3 B1 n7 i7 b118. currentLevelIndex = len(levels)-1
  Y+ Y) D: N( d6 v. d7 J: [: s如果runLevel()反馈的字符串为’solved’或者’next’,那么我们需要给增长量levelNum增加1。如果levelNum超过了关卡总数,那么levelNum设定回0。
  E( M0 O% s: F. Z. I反过来同理,如果反馈的是’back’,levelNum就减1。如果减到低于0,那么就会设定回最后一关
: q) f" U0 D* F& e
1 ?6 u. d9 h# L- A3 [# ~  ^119. elif result == 'reset':
" Y. s3 W! O) m+ i  s" H120. pass # 用来重新调用runLevel()重启关卡
) a" g" u) P/ R& g0 e如果返回值为’reset’,代码不会起任何作用。
7 O7 H9 t' y' S$ N8 z% g$ ppass语句在这里不起任何作用(更像一个评论),然而在Python编译器里是需要的,因为在elif语句后规定需要一行代码。. l* v" A' W& f* j. ?" q' s
我们完全可以移除119和120行,而程序不会受到影响。而没有删除的原因是为了程序的可读性,因为这样我们就不会忘记runLevel()同样能反馈字符串’reset’。
/ l5 H4 N* M( |(未完待续)

本帖子中包含更多资源

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

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