7 from pygame.locals import *
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)
24 img = pygame.image.load(os.path.join(Path(),'png','tips.png')).convert()
25 bkwhite = pygame.image.load(os.path.join(Path(),'png','min_black.png')).convert()
26 bkblack = pygame.image.load(os.path.join(Path(),'png','min_white.png')).convert()
37 def __init__(self,x=0,y=0):
45 self.grid = [[none for y in range(8)] for x in range(8)]
47 def Assign(self,item):
50 self.grid[x][y] = item.grid[x][y]
55 self.buffer = [Grid() for x in range(61)]
60 self.effect_stone = none
62 self.text = pygame.font.SysFont(None, 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):
81 if self.CanSetStone(stone, x, y, False) == True:
88 self.buffer[self.turn_index+loop].Assign(self.item)
91 if self.CanSetStone(stone, x, y, True) == True:
98 self.item.Assign(self.buffer[self.turn_index+loop])
100 if self.CanSetStone(stone, x, y, True) == True:
110 self.item.Assign(self.buffer[self.turn_index])
113 def CanSetStone(self,stone,x,y,reverse,visible=False):
125 if not ((0 <= d)and(d < 8)and(0 <= e)and(e < 8)):
127 s = self.item.grid[d][e]
129 s = self.effect_stone
134 self.effect_stone = stone
135 if (p[1] == False)and(reverse == True):
136 self.item.grid[x][y] = stone
146 q = Effect(x+m*j,y+n*j)
147 self.item.grid[q.Left][q.Top] = effect
148 th = threading.Timer(0.2*j,self.th_run,args=(q,))
152 self.item.grid[x+m*j][y+n*j] = stone
156 p[0],p[1] = False,True
163 if self.item.grid[x][y] == none:
175 if reverse and visible and(j > 1):
181 def NextStone(self,stone,pos):
187 if (self.CalScore(stone, i, j) == True)and((result == False)or(n > self.score)):
199 self.gameover = False
203 self.gameover = False
204 self.turn_index = self.turn_number
217 self.item.grid[st.Left][st.Top] = self.effect_stone
223 if self.turn_index < 60:
225 self.turn_number += 1
226 self.buffer[self.turn_index].Assign(self.item)
227 self.buffer[self.turn_index].stone = self.effect_stone
229 if self.gameover == False:
235 if self.effect_stone == black:
240 screen.blit(s,(p.Left*50,p.Top*50),(p.X*50,p.Y*50,50,50))
242 pygame.display.update()
247 s = stone_grid.item.grid[x][y]
248 r = pygame.Rect(x*size,y*size,(x+1)*size,(y+1)*size)
250 screen.blit(img,r,pygame.Rect(2*size,0,3*size,size))
252 screen.blit(img,r,pygame.Rect(size,0,2*size,size))
256 screen.blit(img,r,pygame.Rect(0,0,size,size))
257 if stone_grid.gameover == True:
258 screen.blit(stone_grid.text,pygame.Rect(0,0,800,50))
259 pygame.display.update()
274 if stone_grid.CanSetStone(index.stone, x, y, False) == True:
278 s = Main()+str(stone_grid.turn_index+1)
279 if Execute() == False:
280 s = Main()+str(stone_grid.turn_index+1)
281 if Execute() == False:
287 if stone_grid.item.grid[x][y] == black:
289 elif stone_grid.item.grid[x][y] == white:
291 pygame.display.set_caption(s+str(stone_grid.turn_index+1))
298 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()
299 stone_grid.gameover = True
302 pygame.display.set_caption(s)
304 pygame.display.set_caption(s)
308 stone_grid.active = False
309 if stone_grid.NextStone(index.stone, pos) == True:
310 stone_grid.CanSetStone(index.stone, pos[0], pos[1], True, True)
317 player1.stone = black
320 player2.stone = white
321 stone_grid = StoneGrid()
324 temp = pygame.time.get_ticks()
327 if pygame.time.get_ticks()-temp > 300:
328 if (stone_grid.active == True)and(index.auto == True):
330 temp = pygame.time.get_ticks()
331 pygame.time.wait(150)
332 for x in pygame.event.get():
334 for th in stone_grid.list:
337 t = pygame.mouse.get_pressed()[0]
338 if (stone_grid.gameover == True)and(t == True):
340 if (index.auto == False)and(stone_grid.active == True)and(t == True):
341 stone_grid.active = False
342 s = pygame.mouse.get_pos()
343 stone_grid.CanSetStone(index.stone,s[0]//50,s[1]//50,True,True)
344 stone_grid.active = True