7 from pygame.locals import *
8 from threading import Thread
13 screen = pygame.display.set_mode((400,400))
15 none, black, white, effect = 0,1,2,3
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()
43 self.grid = [[none for y in range(8)] for x in range(8)]
45 def Assign(self,item):
48 self.grid[x][y] = item.grid[x][y]
52 self.arr = [-1 for x in range(65)]
53 self.map = [-1 for x in range(65)]
55 self.buffer = [Grid() for x in range(61)]
60 self.effect_stone = none
62 self.text = pygame.font.SysFont(pygame.font.get_fonts()[0], 25, True).render('reversi',False,(0,0,255)).convert()
67 self.item.grid[x][y] = none
68 self.item.grid[3][3] = black
69 self.item.grid[4][4] = black
70 self.item.grid[4][3] = white
71 self.item.grid[3][4] = white
74 self.buffer[0].Assign(self.item)
76 def CalScore(self,stone,x,y):
80 if self.CanSetStone(stone, x, y, False) == True:
83 def CanSetStone(self,stone,x,y,reverse):
92 if not ((0 <= d)and(d < 8)and(0 <= e)and(e < 8)):
94 s = self.item.grid[d][e]
101 if (p[1] == False)and(reverse == True):
102 self.item.grid[x][y] = stone
107 self.item.grid[x+m*j][y+n*j] = stone
112 p[0],p[1] = False,True
119 if self.item.grid[x][y] == none:
130 def NextStone(self,stone,pos):
136 if self.CalScore(stone, i, j) == True:
139 self.arr[1+(j-1)*8+i] = self.score
143 for i in range(1,len(self.arr)):
144 if self.arr[i] != -1:
145 self.arr[i] = (n-self.arr[i])/n
153 self.gameover = False
157 self.gameover = False
158 self.turn_index = self.turn_number
164 if self.effect_stone == black:
169 while i < len(self.list):
171 screen.blit(s,(p.Left*50,p.Top*50),(p.X*50,p.Y*50,50,50))
177 s = stone_grid.item.grid[x][y]
178 r = pygame.Rect(x*size,y*size,(x+1)*size,(y+1)*size)
180 screen.blit(img,r,pygame.Rect(2*size,0,3*size,size))
182 screen.blit(img,r,pygame.Rect(size,0,2*size,size))
186 screen.blit(img,r,pygame.Rect(0,0,size,size))
187 if stone_grid.gameover == True:
188 screen.blit(stone_grid.text,pygame.Rect(0,0,800,50))
189 pygame.display.update()
204 if stone_grid.CanSetStone(index.stone, x, y, False) == True:
208 s = Main()+str(stone_grid.turn_index+1)
209 if Execute() == False:
210 s = Main()+str(stone_grid.turn_index+1)
211 if Execute() == False:
217 if stone_grid.item.grid[x][y] == black:
219 elif stone_grid.item.grid[x][y] == white:
221 pygame.display.set_caption(s+str(stone_grid.turn_index+1))
228 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()
229 stone_grid.gameover = True
232 pygame.display.set_caption(s)
234 pygame.display.set_caption(s)
238 stone_grid.map[0] = index.stone
239 stone_grid.arr[0] = index.stone
243 stone_grid.map[i] = stone_grid.item.grid[x][y]
245 stone_grid.active = False
246 if stone_grid.NextStone(index.stone, pos) == True:
247 if index.stone == black:
248 pre = sente_stone(stone_grid.map,stone_grid.arr)
249 elif index.stone == white:
250 pre = gote_stone(stone_grid.map,stone_grid.arr)
251 if stone_grid.CanSetStone(index.stone, pre[0], pre[1], True) == False:
252 stone_grid.CanSetStone(index.stone, pos[0], pos[1], True)
259 player1.stone = black
262 player2.stone = white
263 stone_grid = StoneGrid()
266 temp = pygame.time.get_ticks()
269 if pygame.time.get_ticks()-temp > 300:
270 if (stone_grid.active == True)and(index.auto == True):
272 temp = pygame.time.get_ticks()
273 pygame.time.wait(150)
274 for x in pygame.event.get():
277 t = pygame.mouse.get_pressed()[0]
278 if (stone_grid.gameover == True)and(t == True):
280 if (index.auto == False)and(stone_grid.active == True)and(t == True):
281 stone_grid.active = False
282 s = pygame.mouse.get_pos()
283 stone_grid.CanSetStone(index.stone,s[0]//50,s[1]//50,True)
284 stone_grid.active = True