今天让我们来绘制积木吧
绘制的方式很特别噢,要充分理解!
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