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

source: engine.py @ 14:d7650ea84300

Revision 14:d7650ea84300, 4.1 KB checked in by Alex Martynov <martiran@òÀæ>, 5 years ago (diff)

unnecessary passes deleted

Lineˆà
1importˆàrandomˆàasˆàrnd
2
3directions =ˆà[(0,1),ˆà(1,0),ˆà(0,-1),ˆà(-1,0)]
4rtm =ˆà[[0,ˆà-1],ˆà[1,ˆà0]]
5
6classˆàCell(object):
7ˆà ˆà defˆà__init__(self,ˆàx,ˆày,ˆàcanvas):
8ˆà ˆà ˆà ˆà self.x =ˆàx
9ˆà ˆà ˆà ˆà self.y =ˆày
10ˆà ˆà ˆà ˆà self.canvas =ˆàcanvas
11ˆà ˆà ˆà ˆà self.snake =ˆàNone
12ˆà ˆà ˆà ˆà self.type =ˆàempty
13ˆà ˆà ˆà ˆà return
14ˆà ˆà defˆàredraw(self):
15ˆà ˆà ˆà ˆà pass
16ˆà ˆà defˆà__eq__(self,ˆàpattern):
17ˆà ˆà ˆà ˆà ifˆàpattern.type ==ˆàself.type:
18ˆà ˆà ˆà ˆà ˆà ˆà returnˆàTrue
19ˆà ˆà ˆà ˆà else:
20ˆà ˆà ˆà ˆà ˆà ˆà returnˆàFalse
21ˆà ˆà ˆà ˆà return
22ˆà ˆà defˆàclear(self):
23ˆà ˆà ˆà ˆà self.snake =ˆàNone
24ˆà ˆà ˆà ˆà self.type =ˆà'empty'
25ˆà ˆà ˆà ˆà return
26
27
28classˆàEngine(object):
29ˆà ˆà defˆà__init__(self,ˆàcanvas):
30ˆà ˆà ˆà ˆà self.canvas =ˆàcanvas
31ˆà ˆà ˆà ˆà self.w =ˆàmin(canvas.height,ˆàcanvas.width)
32ˆà ˆà ˆà ˆà self.h =ˆàmin(canvas.height,ˆàcanvas.width)
33ˆà ˆà ˆà ˆà self.snakes =ˆà[None,ˆàNone,ˆàNone,ˆàNone]
34ˆà ˆà ˆà ˆà self.init_field()
35ˆà ˆà ˆà ˆà return
36ˆà ˆà defˆàinit_fieldˆà(self):
37ˆà ˆà ˆà ˆà self.field =ˆà{}
38ˆà ˆà ˆà ˆà forˆàx inˆàrange(21):
39ˆà ˆà ˆà ˆà ˆà ˆà forˆày inˆàrange(21):
40ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà self.field[x,ˆày]ˆà=ˆàCell(x,ˆày,ˆàself.canvas)
41ˆà ˆà ˆà ˆà forˆày inˆàrange(21):
42ˆà ˆà ˆà ˆà ˆà ˆà self.field[0,ˆày].type =ˆà'wall'
43ˆà ˆà ˆà ˆà ˆà ˆà self.field[20,ˆày].type =ˆà'wall'
44ˆà ˆà ˆà ˆà forˆàx inˆàrange(1,20):
45ˆà ˆà ˆà ˆà ˆà ˆà self.field[x,ˆà0].type =ˆà'wall'
46ˆà ˆà ˆà ˆà ˆà ˆà self.field[x,ˆà20].type =ˆà'wall'
47ˆà ˆà ˆà ˆà return
48ˆà ˆà defˆàstep(self):
49ˆà ˆà ˆà ˆà forˆàsnake inˆàself.snakes:
50ˆà ˆà ˆà ˆà ˆà ˆà ifˆàsnake ==ˆàNone:
51ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà pass
52ˆà ˆà ˆà ˆà ˆà ˆà else:
53ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà self.legal_moves()
54ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà self.move_snake(snake)
55ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà self.refill()
56ˆà ˆà ˆà ˆà self.redraw()ˆà ˆà
57ˆà ˆà ˆà ˆà return
58ˆà ˆà defˆàmove_snake(self,ˆàsnake):
59ˆà ˆà ˆà ˆà applied_dir =ˆàNone
60ˆà ˆà ˆà ˆà forˆàrule inˆàsnake.rules:
61ˆà ˆà ˆà ˆà ˆà ˆà ifˆàapplied_dir !=ˆàNone:
62ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà choose_dir =ˆà[]
63ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà forˆàdirection inˆàsnake.legal_dir:
64ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà rule.direction =ˆàdirection
65ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ifˆàrule.applies()ˆà==ˆàTrue:
66ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà choose_dir.append(direction)
67ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà pass
68ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà pass
69ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ifˆàlen(choose_move)ˆà!=ˆà0:
70ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà applied_dir =ˆàchoose_dir[int(rnd.random()*len(choose_dir))]
71ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà pass
72ˆà ˆà ˆà ˆà ˆà ˆà else:
73ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà dir_sell =ˆàself.field[snake.sells[0].y +ˆàapplied_dir[0],ˆàsnake.sells[0].x +ˆàapplied_dir[1]]
74ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ifˆàdir_sell.type ==ˆà'empty':
75ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà snake.sells.insert(0,dir_sell)
76ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà delˆàsnake.sells[-1]
77ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà pass
78ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà elifˆà(dir_cell.type ==ˆà'tail'ˆàandˆàdir_cell.snake !=ˆàsnake):
79ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà snake.sells.insert(0,dir_sell)
80ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà delˆàdir_cell.snake.sells[-1]
81ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà pass
82ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà break
83ˆà ˆà ˆà ˆà ifˆàapplied_dir ==ˆàNone:
84ˆà ˆà ˆà ˆà ˆà ˆà applied_dir =ˆàlegal_dir[int(rnd.random()*len(legal_dir))]
85ˆà ˆà ˆà ˆà ˆà ˆà dir_sell =ˆàself.field[snake.sells[0].y +ˆàapplied_dir[0],ˆàsnake.sells[0].x +ˆàapplied_dir[1]]
86ˆà ˆà ˆà ˆà ˆà ˆà ifˆàdir_sell.type ==ˆà'empty':
87ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà snake.sells.insert(0,dir_sell)
88ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà delˆàsnake.sells[-1]
89ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà pass
90ˆà ˆà ˆà ˆà ˆà ˆà elifˆà(dir_cell.type ==ˆà'tail'ˆàandˆàdir_cell.snake !=ˆàsnake):
91ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà snake.sells.insert(0,dir_sell)
92ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà delˆàdir_cell.snake.sells[-1]
93ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà pass
94ˆà ˆà ˆà ˆà ˆà ˆà pass
95ˆà ˆà ˆà ˆà return
96ˆà ˆà defˆàcreate_snake(self,ˆàsnake_number):
97ˆà ˆà ˆà ˆà pass
98ˆà ˆà defˆàrefill(self):
99ˆà ˆà ˆà ˆà forˆàx inˆàrange(1,20):
100ˆà ˆà ˆà ˆà ˆà ˆà forˆày inˆàrange(1,20):
101ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà self.field[x,ˆày].type =ˆà'empty'
102ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà pass
103ˆà ˆà ˆà ˆà forˆàsnake inˆàself.snakes:
104ˆà ˆà ˆà ˆà ˆà ˆà ifˆàsnake ==ˆàNone:
105ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà pass
106ˆà ˆà ˆà ˆà ˆà ˆà else:
107ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà snake.sells[0].type =ˆà'head'
108ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà snake.sells[-1].type =ˆà'tail'
109ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà snake.sells[1:-1].type =ˆà'body'
110ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà pass
111ˆà ˆà ˆà ˆà return
112ˆà ˆà defˆàredraw(self):
113ˆà ˆà ˆà ˆà pass
114ˆà ˆà defˆàlegal_moves(self,ˆàsnake):
115ˆà ˆà ˆà ˆà snake.legal_dir =ˆà[]
116ˆà ˆà ˆà ˆà forˆàdirection inˆàdirections:
117ˆà ˆà ˆà ˆà ˆà ˆà dir_sell =ˆàself.field[snake.sells[0].y +ˆàdirection[0],ˆàsnake.sells[0].x +ˆàdirection[1]]
118ˆà ˆà ˆà ˆà ˆà ˆà ifˆà(dir_cell.type ==ˆà'empty'ˆàorˆà(dir_cell.type ==ˆà'tail'ˆàandˆàdir_cell.snake !=ˆàsnake)):
119ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà snake.legal_dir.append(direction)
120ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà return
121ˆà ˆà ˆà ˆà return
122
Note: See TracBrowser for help on using the repository browser.