今天让我们来绘制积木吧
绘制的方式很特别噢,要充分理解!
设置积木的模板
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.,
......],
.[.....,
...O..,
...O..,
..OO..,
......]]
.
.L_SHAPE_TEMPLATE=[[.....,
....O.,
..OOO.,
......,
......],
.[.....,
...O..,
...O..,
...OO.,
......],
.[.....,
......,
..OOO.,
..O...,
......],
.[.....,
..OO..,
...O..,
...O..,
......]]
.
.T_SHAPE_TEMPLATE=[[.....,
...O..,
..OOO.,
......,
......],
.[.....,
...O..,
...OO.,
...O..,
......],
.[.....,
......,
..OOO.,
...O..,
......],
.[.....,
...O..,
..OO..,
...O..,
......]]
我们的程序需要知道积木的形状是如何塑造的,包括积木所有旋转的可能性。为此,我们要建立字符串的列表。字符串的内部列表会呈现单一的旋转,像这样:
[.....,
.....,
..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至行将为每个形状创建“template”数据结构。
想象一下,每个可能的积木放在一个小型的5x5的底板中,积木会通过在底板上填满方块来呈现形状。
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)
.SHAPES={S:S_SHAPE_TEMPLATE,
.Z:Z_SHAPE_TEMPLATE,
.J:J_SHAPE_TEMPLATE,
.L:L_SHAPE_TEMPLATE,
.I:I_SHAPE_TEMPLATE,
.O:O_SHAPE_TEMPLATE,
.T:T_SHAPE_TEMPLATE}
形状的变量像是一本字典里面储藏着所有不同的模型。因为每个模板都具有单个形状所有可能的旋转方式,这就意味着形状变量包含所有可能的形状的所有可能的旋转。
这将是包含我们游戏中所有形状数据的数据结构。
(未完待续)