少儿编程分享:码趣君教你用Python编写俄罗斯方块(二)

少儿编程分享:码趣君教你用Python编写俄罗斯方块(二)

首页休闲益智微型打砖块更新时间:2024-05-09

今天让我们来绘制积木吧

绘制的方式很特别噢,要充分理解!


设置积木的模板

44. TEMPLATEWIDTH = 5

45. TEMPLATEHEIGHT = 5

46.

47. S_SHAPE_TEMPLATE = [['.....',

48. '.....',

49. '..OO.',

50. '.OO..',

51. '.....'],

52. ['.....',

53. '..O..',

54. '..OO.',

55. '...O.',

56. '.....']]

57.

58. Z_SHAPE_TEMPLATE = [['.....',

59. '.....',

60. '.OO..',

61. '..OO.',

62. '.....'],

63. ['.....',

64. '..O..',

65. '.OO..',

66. '.O...',

67. '.....']]

68.

69. I_SHAPE_TEMPLATE = [['..O..',

70. '..O..',

71. '..O..',

72. '..O..',

73. '.....'],

74. ['.....',

75. '.....',

76. 'OOOO.',

77. '.....',

78. '.....']]

79.

80. O_SHAPE_TEMPLATE = [['.....',

81. '.....',

82. '.OO..',

83. '.OO..',

84. '.....']]

85.

86. J_SHAPE_TEMPLATE = [['.....',

87. '.O...',

88. '.OOO.',

89. '.....',

90. '.....'],

91. ['.....',

92. '..OO.',

93. '..O..',

94. '..O..',

95. '.....'],

96. ['.....',

97. '.....',

98. '.OOO.',

99. '...O.',

100. '.....'],

101. ['.....',

102. '..O..',

103. '..O..',

104. '.OO..',

105. '.....']]

106.

107. L_SHAPE_TEMPLATE = [['.....',

108. '...O.',

109. '.OOO.',

110. '.....',

111. '.....'],

112. ['.....',

113. '..O..',

114. '..O..',

115. '..OO.',

116. '.....'],

117. ['.....',

118. '.....',

119. '.OOO.',

120. '.O...',

121. '.....'],

122. ['.....',

123. '.OO..',

124. '..O..',

125. '..O..',

126. '.....']]

127.

128. T_SHAPE_TEMPLATE = [['.....',

129. '..O..',

130. '.OOO.',

131. '.....',

132. '.....'],

133. ['.....',

134. '..O..',

135. '..OO.',

136. '..O..',

137. '.....'],

138. ['.....',

139. '.....',

140. '.OOO.',

141. '..O..',

142. '.....'],

143. ['.....',

144. '..O..',

145. '.OO..',

146. '..O..',

147. '.....']]

我们的程序需要知道积木的形状是如何塑造的,包括积木所有旋转的可能性。为此,我们要建立字符串的列表。字符串的内部列表会呈现单一的旋转,像这样:

['.....',

'.....',

'..OO.',

'.OO..',

'.....']

将编写代码的其余部分,以便它解释一个如上所述的字符串列表,为了表示哪里有空白用点表示和方块用O表示:


分割多行的“代码行”

你可以看到该列表分布在编辑器中的许多行中。这是完全有效的Python,因为Python解释器意识到列表未完成,直到看到 ] 关闭方括号。缩进并不重要,因为Python知道您在列表中间的新的模块中不会有不同的缩进。以下代码正常工作:

spam = ['hello', 3.14, 'world', 42, 10, 'fuzz']

eggs = ['hello', 3.14,

'world'

, 42,

10, 'fuzz']

显然,如果我们将所有的项目放进列表,或者在列表中放进像垃圾邮件一样只有一行项目,egg列表的代码会读起来津津有味.

通常,在文件编辑器中将多行代码分割成每一小行将需要在行尾添加一个\字符。\告诉Python,“这段代码延续到下一行”。这个斜线最初是在滑动拼图中的isValidMove()模块中出现)

我们将会通过创建字符串列表来建立“template”形状数据结构,之后通过变量储存如S_SHAPE_TEMPLATE。len(S_SHAPE_TEMPLATE)能表示S形状的积木有多少旋转方向的可能性。S_SHAPE_TEMPLATE[0] 表示S形状第一种旋转可能性。第47至147行将为每个形状创建“template”数据结构。

想象一下,每个可能的积木放在一个小型的5 x 5的底板中,积木会通过在底板上填满方块来呈现形状。

S_SHAPE_TEMPLATE[0][2][2] == 'O'

S_SHAPE_TEMPLATE[0][2][3] == 'O'

S_SHAPE_TEMPLATE[0][3][1] == 'O'

S_SHAPE_TEMPLATE[0][3][2] == 'O'

如果我们将形状放在纸上,你会看见如下的图片:

我们如何将诸如四格拼图中的积木作为Python值的代码输入(如字符串和列表)。TEMPLATEWIDTH和TEMPLATEHEIGHT常量简单设置每个形状旋转所需多少行和多少列。(模型基本上是5*5)

149. SHAPES = {'S': S_SHAPE_TEMPLATE,

150. 'Z': Z_SHAPE_TEMPLATE,

151. 'J': J_SHAPE_TEMPLATE,

152. 'L': L_SHAPE_TEMPLATE,

153. 'I': I_SHAPE_TEMPLATE,

154. 'O': O_SHAPE_TEMPLATE,

155. 'T': T_SHAPE_TEMPLATE}

形状的变量像是一本字典里面储藏着所有不同的模型。因为每个模板都具有单个形状所有可能的旋转方式,这就意味着形状变量包含所有可能的形状的所有可能的旋转。

这将是包含我们游戏中所有形状数据的数据结构。

(未完待续)

查看全文
大家还看了
也许喜欢
更多游戏

Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved