Äîêóìåíò âçÿò èç êýøà ïîèñêîâîé ìàøèíû. Àäðåñ îðèãèíàëüíîãî äîêóìåíòà : http://kodomo.cmm.msu.su/trac/snake/browser/engine.py?rev=62
Äàòà èçìåíåíèÿ: Unknown
Äàòà èíäåêñèðîâàíèÿ: Sun Apr 10 20:31:54 2016
Êîäèðîâêà: IBM-866
engine.py òÀÓ Python Battle

source: engine.py @ 62:eefa136de996

Revision 62:eefa136de996, 6.3 KB checked in by Alex Martynov, 5 years ago (diff)

enumerate simplification

Lineˆà
1importˆàrandomˆàasˆàrnd
2importˆàTkinterˆàasˆàtk
3
4directions =ˆà[(0,1),ˆà(1,0),ˆà(0,-1),ˆà(-1,0)]
5tm =ˆà[[0,ˆà-1],ˆà[1,ˆà0]]
6
7classˆàCell(object):
8ˆà ˆà defˆà__init__(self,ˆàx,ˆày,ˆàcanvas =ˆàNone):
9ˆà ˆà ˆà ˆà self.x =ˆàx
10ˆà ˆà ˆà ˆà self.y =ˆày
11ˆà ˆà ˆà ˆà self.canvas =ˆàcanvas
12ˆà ˆà ˆà ˆà self.snake =ˆàNone
13ˆà ˆà ˆà ˆà self.type =ˆà'empty'
14ˆà ˆà ˆà ˆà return
15ˆà ˆà defˆàredraw(self):
16ˆà ˆà ˆà ˆà field_size =ˆàmin(self.canvas.winfo_height(),ˆàself.canvas.winfo_width())
17ˆà ˆà ˆà ˆà offset =ˆà(self.canvas.winfo_width()ˆà-ˆàfield_size,ˆàself.canvas.winfo_height()ˆà-ˆàfield_size)
18ˆà ˆà ˆà ˆà ifˆàself.type ==ˆà'wall':
19ˆà ˆà ˆà ˆà ˆà ˆà self.canvas.create_rectangle(offset[0],ˆàoffset[1],ˆàoffset[0]ˆà+ˆàself.x*field_size/21.0,ˆàoffset[1]ˆà+ˆàself.y*field_size/21.0,ˆàfill="grey")
20ˆà ˆà ˆà ˆà ˆà ˆà pass
21ˆà ˆà ˆà ˆà elifˆàself.type ==ˆà'empty':
22ˆà ˆà ˆà ˆà ˆà ˆà self.canvas.create_rectangle(offset[0],ˆàoffset[1],ˆàoffset[0]ˆà+ˆàself.x*field_size/21.0,ˆàoffset[1]ˆà+ˆàself.y*field_size/21.0,ˆàfill="black")
23ˆà ˆà ˆà ˆà ˆà ˆà pass
24ˆà ˆà ˆà ˆà elifˆàself.type ==ˆà'body':
25ˆà ˆà ˆà ˆà ˆà ˆà self.canvas.create_rectangle(offset[0],ˆàoffset[1],ˆàoffset[0]ˆà+ˆàself.x*field_size/21.0,ˆàoffset[1]ˆà+ˆàself.y*field_size/21.0,ˆàfill=self.snake.color)
26ˆà ˆà ˆà ˆà ˆà ˆà pass
27ˆà ˆà ˆà ˆà elifˆàself.type ==ˆà'head':
28ˆà ˆà ˆà ˆà ˆà ˆà self.canvas.create_oval(offset[0],ˆàoffset[1],ˆàoffset[0]ˆà+ˆàself.x*field_size/21.0,ˆàoffset[1]ˆà+ˆàself.y*field_size/21.0,ˆàfill=self.snake.color)
29ˆà ˆà ˆà ˆà ˆà ˆà pass
30ˆà ˆà ˆà ˆà elifˆàself.type ==ˆà'tail':
31ˆà ˆà ˆà ˆà ˆà ˆà self.canvas.create_polygon(offset[0],ˆàoffset[1],ˆàoffset[0]ˆà+ˆàself.x*field_size/21.0,ˆàoffset[1],ˆàoffset[0]ˆà+ˆàself.x*field_size/(2*21.0),ˆàoffset[1]ˆà+ˆàself.y*field_size/21.0,ˆàfill=self.snake.color)
32ˆà ˆà ˆà ˆà ˆà ˆà pass
33ˆà ˆà ˆà ˆà return
34ˆà ˆà defˆà__eq__(self,ˆàpattern):
35ˆà ˆà ˆà ˆà ifˆàpattern.type ==ˆà'any':
36ˆà ˆà ˆà ˆà ˆà ˆà returnˆàTrue
37ˆà ˆà ˆà ˆà ifˆàpattern.type !=ˆàself.type:
38ˆà ˆà ˆà ˆà ˆà ˆà returnˆàFalse
39ˆà ˆà ˆà ˆà ifˆàpattern.snake_type ==ˆà'my'ˆàandˆàpattern.snake !=ˆàself.snake:
40ˆà ˆà ˆà ˆà ˆà ˆà returnˆàFalse
41ˆà ˆà ˆà ˆà elifˆàpattern.snake_type ==ˆà'enemy'ˆàandˆàpattern.snake ==ˆàself.snake:
42ˆà ˆà ˆà ˆà ˆà ˆà returnˆàFalse
43ˆà ˆà ˆà ˆà returnˆàTrue
44ˆà ˆà defˆàclear(self):
45ˆà ˆà ˆà ˆà self.snake =ˆàNone
46ˆà ˆà ˆà ˆà self.type =ˆà'empty'
47ˆà ˆà ˆà ˆà return
48
49
50classˆàEngine(object):
51ˆà ˆà defˆà__init__(self,ˆàcanvas):
52ˆà ˆà ˆà ˆà self.canvas =ˆàcanvas
53ˆà ˆà ˆà ˆà self.w =ˆàmin(canvas.winfo_height(),ˆàcanvas.winfo_width())
54ˆà ˆà ˆà ˆà self.h =ˆàmin(canvas.winfo_height(),ˆàcanvas.winfo_width())
55ˆà ˆà ˆà ˆà self.snakes =ˆà[None,ˆàNone,ˆàNone,ˆàNone]
56ˆà ˆà ˆà ˆà self.init_field()
57ˆà ˆà ˆà ˆà return
58ˆà ˆà defˆàinit_fieldˆà(self):
59ˆà ˆà ˆà ˆà self.field =ˆà{}
60ˆà ˆà ˆà ˆà forˆàx inˆàrange(21):
61ˆà ˆà ˆà ˆà ˆà ˆà forˆày inˆàrange(21):
62ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà self.field[x,ˆày]ˆà=ˆàCell(x,ˆày,ˆàself.canvas)
63ˆà ˆà ˆà ˆà forˆày inˆàrange(21):
64ˆà ˆà ˆà ˆà ˆà ˆà self.field[0,ˆày].type =ˆà'wall'
65ˆà ˆà ˆà ˆà ˆà ˆà self.field[20,ˆày].type =ˆà'wall'
66ˆà ˆà ˆà ˆà forˆàx inˆàrange(1,20):
67ˆà ˆà ˆà ˆà ˆà ˆà self.field[x,ˆà0].type =ˆà'wall'
68ˆà ˆà ˆà ˆà ˆà ˆà self.field[x,ˆà20].type =ˆà'wall'
69ˆà ˆà ˆà ˆà return
70ˆà ˆà defˆàstep(self):
71ˆà ˆà ˆà ˆà forˆài,ˆàsnake inˆàenumerate(self.snakes):
72ˆà ˆà ˆà ˆà ˆà ˆà ifˆàlen(snake.cells)ˆà==ˆà0:
73ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà self.snakes[i]ˆà=ˆàNone
74ˆà ˆà ˆà ˆà ˆà ˆà ifˆàsnake ==ˆàNone:
75ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà pass
76ˆà ˆà ˆà ˆà ˆà ˆà else:
77ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà self.legal_moves()
78ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà self.move_snake(snake)
79ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà self.refill()
80ˆà ˆà ˆà ˆà self.redraw()ˆà ˆà
81ˆà ˆà ˆà ˆà return
82ˆà ˆà defˆàmove_snake(self,ˆàsnake):
83ˆà ˆà ˆà ˆà applied_dir =ˆàNone
84ˆà ˆà ˆà ˆà forˆàrule inˆàsnake.rules:
85ˆà ˆà ˆà ˆà ˆà ˆà ifˆàapplied_dir !=ˆàNone:
86ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà choose_dir =ˆà[]
87ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà forˆàdirection inˆàsnake.legal_dir:
88ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà rule.direction =ˆàdirection
89ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ifˆàrule.applies()ˆà==ˆàTrue:
90ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà choose_dir.append(direction)
91ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà pass
92ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà pass
93ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ifˆàlen(choose_move)ˆà!=ˆà0:
94ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà applied_dir =ˆàchoose_dir[int(rnd.random()*len(choose_dir))]
95ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà pass
96ˆà ˆà ˆà ˆà ˆà ˆà else:
97ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà dir_cell =ˆàself.field[snake.cells[0].y +ˆàapplied_dir[0],ˆàsnake.cells[0].x +ˆàapplied_dir[1]]
98ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ifˆàdir_cell.type ==ˆà'empty':
99ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà snake.cells.insert(0,dir_cell)
100ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà delˆàsnake.cells[-1]
101ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà pass
102ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà elifˆà(dir_cell.type ==ˆà'tail'ˆàandˆàdir_cell.snake !=ˆàsnake):
103ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà snake.cells.insert(0,dir_cell)
104ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà delˆàdir_cell.snake.cells[-1]
105ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà pass
106ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà break
107ˆà ˆà ˆà ˆà ifˆàapplied_dir ==ˆàNone:
108ˆà ˆà ˆà ˆà ˆà ˆà applied_dir =ˆàlegal_dir[int(rnd.random()*len(legal_dir))]
109ˆà ˆà ˆà ˆà ˆà ˆà dir_cell =ˆàself.field[snake.cells[0].y +ˆàapplied_dir[0],ˆàsnake.cells[0].x +ˆàapplied_dir[1]]
110ˆà ˆà ˆà ˆà ˆà ˆà ifˆàdir_cell.type ==ˆà'empty':
111ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà snake.cells.insert(0,dir_cell)
112ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà delˆàsnake.cells[-1]
113ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà pass
114ˆà ˆà ˆà ˆà ˆà ˆà elifˆà(dir_cell.type ==ˆà'tail'ˆàandˆàdir_cell.snake !=ˆàsnake):
115ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà snake.cells.insert(0,dir_cell)
116ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà delˆàdir_cell.snake.cells[-1]
117ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà pass
118ˆà ˆà ˆà ˆà ˆà ˆà pass
119ˆà ˆà ˆà ˆà return
120ˆà ˆà defˆàcreate_snake(self,ˆàsnake_number):
121ˆà ˆà ˆà ˆà cells_id =ˆà[]
122ˆà ˆà ˆà ˆà forˆày inˆàrange(10):
123ˆà ˆà ˆà ˆà ˆà ˆà cells_id.append((10,ˆày+1))
124ˆà ˆà ˆà ˆà forˆàrot_num inˆàrange(snake_number -ˆà1):
125ˆà ˆà ˆà ˆà ˆà ˆà forˆài,ˆàcell inˆàenumerate(cells_id):
126ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà cells_id[i]ˆà=ˆà(tm[0][0]*cell[0]ˆà+ˆàtm[0][1]*cell[1],tm[1][0]*cell[0]ˆà+ˆàtm[1][1]*cell[1])
127ˆà ˆà ˆà ˆà cells =ˆà[]
128ˆà ˆà ˆà ˆà forˆàcell inˆàcells_id:
129ˆà ˆà ˆà ˆà ˆà ˆà cells.append(self.field[cell])
130ˆà ˆà ˆà ˆà color_dic =ˆà{
131ˆà ˆà ˆà ˆà ˆà ˆà 1:'blue',
132ˆà ˆà ˆà ˆà ˆà ˆà 2:'green',
133ˆà ˆà ˆà ˆà ˆà ˆà 3:'yellow',
134ˆà ˆà ˆà ˆà ˆà ˆà 4:'red',}
135ˆà ˆà ˆà ˆà self.snakes[snake_number-1]ˆà=ˆàsnake.Snake(cells,ˆàcolor_dic[snake_number])
136ˆà ˆà ˆà ˆà pass
137ˆà ˆà defˆàrefill(self):
138ˆà ˆà ˆà ˆà forˆàx inˆàrange(1,20):
139ˆà ˆà ˆà ˆà ˆà ˆà forˆày inˆàrange(1,20):
140ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà self.field[x,ˆày].type =ˆà'empty'
141ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà self.field[x,ˆày].snake =ˆàNone
142ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà pass
143ˆà ˆà ˆà ˆà forˆàsnake inˆàself.snakes:
144ˆà ˆà ˆà ˆà ˆà ˆà ifˆàsnake ==ˆàNone:
145ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà pass
146ˆà ˆà ˆà ˆà ˆà ˆà else:
147ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà snake.fill()
148ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà pass
149ˆà ˆà ˆà ˆà return
150ˆà ˆà defˆàredraw(self):
151ˆà ˆà ˆà ˆà self.canvas.delete(all)
152ˆà ˆà ˆà ˆà forˆàcell_coord inˆàself.field:
153ˆà ˆà ˆà ˆà ˆà ˆà self.field[cell_coord].redraw()
154ˆà ˆà ˆà ˆà return
155ˆà ˆà defˆàlegal_moves(self,ˆàsnake):
156ˆà ˆà ˆà ˆà snake.legal_dir =ˆà[]
157ˆà ˆà ˆà ˆà forˆàdirection inˆàdirections:
158ˆà ˆà ˆà ˆà ˆà ˆà dir_cell =ˆàself.field[snake.cells[0].y +ˆàdirection[0],ˆàsnake.cells[0].x +ˆàdirection[1]]
159ˆà ˆà ˆà ˆà ˆà ˆà ifˆà(dir_cell.type ==ˆà'empty'ˆàorˆà(dir_cell.type ==ˆà'tail'ˆàandˆàdir_cell.snake !=ˆàsnake)):
160ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà snake.legal_dir.append(direction)
161ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà return
162ˆà ˆà ˆà ˆà return
163
Note: See TracBrowser for help on using the repository browser.