1 | importˆàrandomˆàasˆàrnd |
---|
2 | |
---|
3 | directions =ˆà[(0,1),ˆà(1,0),ˆà(0,-1),ˆà(-1,0)] |
---|
4 | rtm =ˆà[[0,ˆà-1],ˆà[1,ˆà0]] |
---|
5 | |
---|
6 | classˆà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 | |
---|
28 | classˆà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 | |
---|