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

source: engine.py @ 32:b2eaeeb74d87

Revision 32:b2eaeeb74d87, 5.4 KB checked in by Alex Martynov <martiran@òÀæ>, 5 years ago (diff)

fixed lots of small errors

Lineˆà
1importˆàrandomˆàasˆàrnd
2importˆàTkinterˆàasˆàtk
3
4directions =ˆà[(0,1),ˆà(1,0),ˆà(0,-1),ˆà(-1,0)]
5rtm =ˆà[[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.height,ˆàself.canvas.width)
17ˆà ˆà ˆà ˆà offset =ˆà(self.canvas.width -ˆàfield_size,ˆàself.canvas.hieght -ˆà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 ==ˆàself.type:
36ˆà ˆà ˆà ˆà ˆà ˆà returnˆàTrue
37ˆà ˆà ˆà ˆà else:
38ˆà ˆà ˆà ˆà ˆà ˆà returnˆàFalse
39ˆà ˆà ˆà ˆà return
40ˆà ˆà defˆàclear(self):
41ˆà ˆà ˆà ˆà self.snake =ˆàNone
42ˆà ˆà ˆà ˆà self.type =ˆà'empty'
43ˆà ˆà ˆà ˆà return
44
45
46classˆàEngine(object):
47ˆà ˆà defˆà__init__(self,ˆàcanvas):
48ˆà ˆà ˆà ˆà self.canvas =ˆàcanvas
49ˆà ˆà ˆà ˆà #self.w = min(canvas.height, canvas.width)
50ˆà ˆà ˆà ˆà #self.h = min(canvas.height, canvas.width)
51ˆà ˆà ˆà ˆà self.snakes =ˆà[None,ˆàNone,ˆàNone,ˆàNone]
52ˆà ˆà ˆà ˆà self.init_field()
53ˆà ˆà ˆà ˆà return
54ˆà ˆà defˆàinit_fieldˆà(self):
55ˆà ˆà ˆà ˆà self.field =ˆà{}
56ˆà ˆà ˆà ˆà forˆàx inˆàrange(21):
57ˆà ˆà ˆà ˆà ˆà ˆà forˆày inˆàrange(21):
58ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà self.field[x,ˆày]ˆà=ˆàCell(x,ˆày,ˆàself.canvas)
59ˆà ˆà ˆà ˆà forˆày inˆàrange(21):
60ˆà ˆà ˆà ˆà ˆà ˆà self.field[0,ˆày].type =ˆà'wall'
61ˆà ˆà ˆà ˆà ˆà ˆà self.field[20,ˆày].type =ˆà'wall'
62ˆà ˆà ˆà ˆà forˆàx inˆàrange(1,20):
63ˆà ˆà ˆà ˆà ˆà ˆà self.field[x,ˆà0].type =ˆà'wall'
64ˆà ˆà ˆà ˆà ˆà ˆà self.field[x,ˆà20].type =ˆà'wall'
65ˆà ˆà ˆà ˆà return
66ˆà ˆà defˆàstep(self):
67ˆà ˆà ˆà ˆà forˆàsnake inˆàself.snakes:
68ˆà ˆà ˆà ˆà ˆà ˆà ifˆàsnake ==ˆàNone:
69ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà pass
70ˆà ˆà ˆà ˆà ˆà ˆà else:
71ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà self.legal_moves()
72ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà self.move_snake(snake)
73ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà self.refill()
74ˆà ˆà ˆà ˆà self.redraw()ˆà ˆà
75ˆà ˆà ˆà ˆà return
76ˆà ˆà defˆàmove_snake(self,ˆàsnake):
77ˆà ˆà ˆà ˆà applied_dir =ˆàNone
78ˆà ˆà ˆà ˆà forˆàrule inˆàsnake.rules:
79ˆà ˆà ˆà ˆà ˆà ˆà ifˆàapplied_dir !=ˆàNone:
80ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà choose_dir =ˆà[]
81ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà forˆàdirection inˆàsnake.legal_dir:
82ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà rule.direction =ˆàdirection
83ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ifˆàrule.applies()ˆà==ˆàTrue:
84ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà choose_dir.append(direction)
85ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà pass
86ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà pass
87ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ifˆàlen(choose_move)ˆà!=ˆà0:
88ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà applied_dir =ˆàchoose_dir[int(rnd.random()*len(choose_dir))]
89ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà pass
90ˆà ˆà ˆà ˆà ˆà ˆà else:
91ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà dir_cell =ˆàself.field[snake.cells[0].y +ˆàapplied_dir[0],ˆàsnake.cells[0].x +ˆàapplied_dir[1]]
92ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ifˆàdir_cell.type ==ˆà'empty':
93ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà snake.cells.insert(0,dir_cell)
94ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà delˆàsnake.cells[-1]
95ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà pass
96ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà elifˆà(dir_cell.type ==ˆà'tail'ˆàandˆàdir_cell.snake !=ˆàsnake):
97ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà snake.cells.insert(0,dir_cell)
98ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà delˆàdir_cell.snake.cells[-1]
99ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà pass
100ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà break
101ˆà ˆà ˆà ˆà ifˆàapplied_dir ==ˆàNone:
102ˆà ˆà ˆà ˆà ˆà ˆà applied_dir =ˆàlegal_dir[int(rnd.random()*len(legal_dir))]
103ˆà ˆà ˆà ˆà ˆà ˆà dir_cell =ˆàself.field[snake.cells[0].y +ˆàapplied_dir[0],ˆàsnake.cells[0].x +ˆàapplied_dir[1]]
104ˆà ˆà ˆà ˆà ˆà ˆà ifˆàdir_cell.type ==ˆà'empty':
105ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà snake.cells.insert(0,dir_cell)
106ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà delˆàsnake.cells[-1]
107ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà pass
108ˆà ˆà ˆà ˆà ˆà ˆà elifˆà(dir_cell.type ==ˆà'tail'ˆàandˆàdir_cell.snake !=ˆàsnake):
109ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà snake.cells.insert(0,dir_cell)
110ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà delˆàdir_cell.snake.cells[-1]
111ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà pass
112ˆà ˆà ˆà ˆà ˆà ˆà pass
113ˆà ˆà ˆà ˆà return
114ˆà ˆà defˆàcreate_snake(self,ˆàsnake_number):
115ˆà ˆà ˆà ˆà
116ˆà ˆà ˆà ˆà pass
117ˆà ˆà defˆàrefill(self):
118ˆà ˆà ˆà ˆà forˆàx inˆàrange(1,20):
119ˆà ˆà ˆà ˆà ˆà ˆà forˆày inˆàrange(1,20):
120ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà self.field[x,ˆày].type =ˆà'empty'
121ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà self.field[x,ˆày].snake =ˆàNone
122ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà pass
123ˆà ˆà ˆà ˆà forˆàsnake inˆàself.snakes:
124ˆà ˆà ˆà ˆà ˆà ˆà ifˆàsnake ==ˆàNone:
125ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà pass
126ˆà ˆà ˆà ˆà ˆà ˆà else:
127ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà snake.fill()
128ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà pass
129ˆà ˆà ˆà ˆà return
130ˆà ˆà defˆàredraw(self):
131ˆà ˆà ˆà ˆà self.canvas.delete(all)
132ˆà ˆà ˆà ˆà forˆàcell_coord inˆàself.field:
133ˆà ˆà ˆà ˆà ˆà ˆà self.field[cell_coord].redraw()
134ˆà ˆà ˆà ˆà return
135ˆà ˆà defˆàlegal_moves(self,ˆàsnake):
136ˆà ˆà ˆà ˆà snake.legal_dir =ˆà[]
137ˆà ˆà ˆà ˆà forˆàdirection inˆàdirections:
138ˆà ˆà ˆà ˆà ˆà ˆà dir_cell =ˆàself.field[snake.cells[0].y +ˆàdirection[0],ˆàsnake.cells[0].x +ˆàdirection[1]]
139ˆà ˆà ˆà ˆà ˆà ˆà ifˆà(dir_cell.type ==ˆà'empty'ˆàorˆà(dir_cell.type ==ˆà'tail'ˆàandˆàdir_cell.snake !=ˆàsnake)):
140ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà snake.legal_dir.append(direction)
141ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà return
142ˆà ˆà ˆà ˆà return
143
Note: See TracBrowser for help on using the repository browser.