7 from pygame.locals import *
8 from network import Comp
13 screen = pygame.display.set_mode((400,400))
15 none, black, white = 0,1,2
19 if os.path.exists(name) == True:
20 return os.path.dirname(name)
22 img = pygame.image.load(os.path.join(Path(),'png','tips.png')).convert()
23 bkblack = pygame.image.load(os.path.join(Path(),'png','min_black.png')).convert()
24 bkwhite = pygame.image.load(os.path.join(Path(),'png','min_white.png')).convert()
36 self.grid = [[none for y in range(8)] for x in range(8)]
39 def Assign(self,item):
42 self.grid[x][y] = item.grid[x][y]
53 self.text = pygame.font.SysFont(pygame.font.get_fonts()[0], 25, True).render('reversi',False,(0,0,255)).convert()
58 self.item.grid[x][y] = none
59 self.item.grid[3][3] = black
60 self.item.grid[4][4] = black
61 self.item.grid[4][3] = white
62 self.item.grid[3][4] = white
66 def CalScore(self,stone,x,y):
67 self.buffer.Assign(self.item)
68 if self.CanSetStone(stone, x, y, True) == True:
72 if self.CanSetStone(stone, i, j, False) == True:
74 self.item.Assign(self.buffer)
78 def CanSetStone(self,stone,x,y,reverse):
87 if not ((0 <= d)and(d < 8)and(0 <= e)and(e < 8)):
89 s = self.item.grid[d][e]
96 self.item.grid[x][y] = stone
100 self.item.grid[x+m*j][y+n*j] = stone
103 p[0],p[1] = False,True
108 if self.item.grid[x][y] == none:
119 def NextStone(self,stone,pos):
125 self.CalScore(stone, i, j)
129 self.arr.grid[i][j] = self.score
134 self.arr.grid[i][j] = -1
138 k = self.arr.grid[i][j]
140 self.arr.grid[i][j] = k / n
148 self.gameover = False
152 self.gameover = False
153 self.turn_index = self.turn_number
159 if self.effect_stone == black:
164 while i < len(self.list):
166 screen.blit(s,(p.Left*50,p.Top*50),(p.X*50,p.Y*50,50,50))
172 s = stone_grid.item.grid[x][y]
173 r = pygame.Rect(x*size,y*size,(x+1)*size,(y+1)*size)
175 screen.blit(img,r,pygame.Rect(2*size,0,3*size,size))
177 screen.blit(img,r,pygame.Rect(size,0,2*size,size))
179 screen.blit(img,r,pygame.Rect(0,0,size,size))
180 if stone_grid.gameover == True:
181 screen.blit(stone_grid.text,pygame.Rect(0,0,800,50))
182 pygame.display.update()
198 if stone_grid.CanSetStone(index.stone, x, y, False) == True:
202 s = Main()+str(stone_grid.turn_index+1)
203 if Execute() == False:
204 s = Main()+str(stone_grid.turn_index+1)
205 if Execute() == False:
211 if stone_grid.item.grid[x][y] == black:
213 elif stone_grid.item.grid[x][y] == white:
215 pygame.display.set_caption(s+str(stone_grid.turn_index+1))
222 stone_grid.text = pygame.font.SysFont(pygame.font.get_fonts()[0],25,True).render(s+'(Player1){0}(Player2){1}'.format(i,j),False,(0,0,255)).convert()
223 stone_grid.gameover = True
226 pygame.display.set_caption(s)
227 stone_grid.turn_index += 1
229 pygame.display.set_caption(s)
230 stone_grid.turn_index += 1
234 stone_grid.active = False
235 if stone_grid.NextStone(index.stone, pos) == True:
236 if index.stone == black:
237 pre = comp.sente_stone(stone_grid.item.grid,stone_grid.arr.grid)
238 elif index.stone == white:
239 pre = comp.gote_stone(stone_grid.item.grid,stone_grid.arr.grid)
240 stone_grid.CanSetStone(index.stone, pre[0], pre[1], True)
242 stone_grid.active = True
247 player1.stone = black
250 player2.stone = white
251 stone_grid = StoneGrid()
254 temp = pygame.time.get_ticks()
256 tt = (player1.auto == True)and(player2.auto == True)
262 if pygame.time.get_ticks()-temp > 2*k:
263 if (stone_grid.active == True)and(index.auto == True):
266 temp = pygame.time.get_ticks()
268 for x in pygame.event.get():
271 t = pygame.mouse.get_pressed()[0]
272 if (stone_grid.gameover == True)and((t == True)or(tt == True)):
274 if (index.auto == False)and(stone_grid.active == True)and(t == True):
275 stone_grid.active = False
276 s = pygame.mouse.get_pos()
277 if stone_grid.CanSetStone(index.stone,s[0]//size,s[1]//size,True) == True:
278 stone_grid.turn_index += 1
280 stone_grid.active = True