'''
import pygame,os,sys
from pygame.locals import *
-from threading import Thread
from network import Comp
comp = Comp()
screen = pygame.display.set_mode((400,400))
-none, black, white, effect = 0,1,2,3
+none, black, white = 0,1,2
def Path():
for name in sys.argv:
auto = False
stone = none
-class Effect(Thread):
- def __init__(self):
- self.X = 0
- self.Y = 0
- self.Left = 0
- self.Top = 0
-
class Grid():
def __init__(self):
self.grid = [[none for y in range(8)] for x in range(8)]
- self.stone = none
+ self.stone = none
+
def Assign(self,item):
for x in range(8):
for y in range(8):
class StoneGrid():
def __init__(self):
- self.arr = [-1 for x in range(65)]
- self.map = [-1 for x in range(65)]
self.item = Grid()
- self.buffer = [Grid() for x in range(61)]
- self.turn_number = 0
+ self.buffer = Grid()
+ self.arr = Grid()
self.turn_index = 0
self.active = True
- self.list = []
- self.effect_stone = none
self.gameover = False
self.text = pygame.font.SysFont(pygame.font.get_fonts()[0], 25, True).render('reversi',False,(0,0,255)).convert()
self.item.grid[4][3] = white
self.item.grid[3][4] = white
self.turn_index = 0
- self.turn_number = 0
- self.buffer[0].Assign(self.item)
def CalScore(self,stone,x,y):
- def Normal():
- for x in range(8):
- for y in range(8):
- if self.CanSetStone(stone, x, y, False) == True:
+ self.buffer.Assign(self.item)
+ if self.CanSetStone(stone, x, y, True) == True:
+ self.score = 0.5
+ for i in range(8):
+ for j in range(8):
+ if self.CanSetStone(stone, i, j, False) == True:
self.score += 1
+ self.item.Assign(self.buffer)
+ else:
+ self.score = 0
def CanSetStone(self,stone,x,y,reverse):
p = [True,False]
if not ((0 <= d)and(d < 8)and(0 <= e)and(e < 8)):
break
s = self.item.grid[d][e]
- if s == effect:
- s = self.effect_stone
if s == none:
break
elif s == stone:
if i > 1:
- if (p[1] == False)and(reverse == True):
- self.item.grid[x][y] = stone
- p[1] = True
- if reverse == True:
+ if reverse == True:
+ if p[1] == False:
+ self.item.grid[x][y] = stone
+ p[1] = True
j = 1
while j <= i-1:
self.item.grid[x+m*j][y+n*j] = stone
j += 1
- Paint()
- break
else:
p[0],p[1] = False,True
- break
- else:
- break
+ break
else:
i += 1
Method(1, 1)
return p[1]
- def NextStone(self,stone,pos):
- result = False
+ def T_Data(self,stone):
n = 0
- self.score = 0
for i in range(8):
for j in range(8):
- if self.CalScore(stone, i, j) == True:
- if result == False:
- result = True
- self.arr[1+(j-1)*8+i] = self.score
+ self.CalScore(stone, i, j)
+ if self.score > 0:
+ self.arr.grid[i][j] = self.score
if self.score > n:
n = self.score
- pos[0],pos[1] = i,j
- for i in range(1,len(self.arr)):
- if self.arr[i] != -1:
- self.arr[i] = (n-self.arr[i])/n
- return result
+ else:
+ self.arr.grid[i][j] = 0
+ if n > 0:
+ for i in range(8):
+ for j in range(8):
+ k = self.arr.grid[i][j]
+ if k != 0:
+ self.arr.grid[i][j] = (n - k + 0.5) / n
def Start(self):
global index
self.Clear()
self.active = True
self.gameover = False
+ Paint()
- def ReStart(self):
- self.active = True
- self.gameover = False
- self.turn_index = self.turn_number
-
- def Pause(self):
- self.active = False
def Paint(self):
if self.effect_stone == black:
screen.blit(img,r,pygame.Rect(2*size,0,3*size,size))
elif s == black:
screen.blit(img,r,pygame.Rect(size,0,2*size,size))
- elif s == effect:
- continue
else:
screen.blit(img,r,pygame.Rect(0,0,size,size))
if stone_grid.gameover == True:
def ChangePlayer():
def Main():
global index
+ Paint()
if index == player1:
index = player2
return 'white'
else:
index = player1
- return 'black'
+ return 'black'
def Execute():
for x in range(8):
Paint()
else:
pygame.display.set_caption(s)
+ stone_grid.turn_index += 1
else:
pygame.display.set_caption(s)
+ stone_grid.turn_index += 1
def CompStone():
- pos = [0,0]
- stone_grid.map[0] = index.stone
- stone_grid.arr[0] = index.stone
- i = 1
- for y in range(8):
- for x in range(8):
- stone_grid.map[i] = stone_grid.item.grid[x][y]
- i += 1
stone_grid.active = False
- if stone_grid.NextStone(index.stone, pos) == True:
- if index.stone == black:
- pre = comp.sente_stone(stone_grid.map,stone_grid.arr)
- elif index.stone == white:
- pre = comp.gote_stone(stone_grid.map,stone_grid.arr)
- if stone_grid.CanSetStone(index.stone, pre[0], pre[1], True) == False:
- stone_grid.CanSetStone(index.stone, pos[0], pos[1], True)
+ stone_grid.T_Data(index.stone)
+ if index.stone == black:
+ pre = comp.sente_stone(stone_grid.item.grid,stone_grid.arr.grid)
+ elif index.stone == white:
+ pre = comp.gote_stone(stone_grid.item.grid,stone_grid.arr.grid)
+ stone_grid.CanSetStone(index.stone, pre[0], pre[1], True)
+ stone_grid.active = True
+
+if __name__ == '__main__':
+ player1 = Player()
+ player2 = Player()
+ index = player1
+ player1.stone = black
+ player1.auto = True
+ player2.auto = True
+ player2.stone = white
+ stone_grid = StoneGrid()
+ stone_grid.Start()
+ temp = pygame.time.get_ticks()
+ Paint()
+ tt = (player1.auto == True)and(player2.auto == True)
+ if tt == True:
+ k = 10
else:
- ChangePlayer()
-
-player1 = Player()
-player2 = Player()
-index = player1
-player1.stone = black
-player1.auto = True
-player2.auto = True
-player2.stone = white
-stone_grid = StoneGrid()
-stone_grid.Start()
-pygame.event.get()
-temp = pygame.time.get_ticks()
-Paint()
-while True:
- if pygame.time.get_ticks()-temp > 300:
- if (stone_grid.active == True)and(index.auto == True):
- CompStone()
- temp = pygame.time.get_ticks()
- pygame.time.wait(150)
- for x in pygame.event.get():
- if x.type == QUIT:
- sys.exit()
- t = pygame.mouse.get_pressed()[0]
- if (stone_grid.gameover == True)and(t == True):
- stone_grid.Start()
- if (index.auto == False)and(stone_grid.active == True)and(t == True):
- stone_grid.active = False
- s = pygame.mouse.get_pos()
- stone_grid.CanSetStone(index.stone,s[0]//50,s[1]//50,True)
- stone_grid.active = True
-
\ No newline at end of file
+ k = 150
+ while True:
+ if (pygame.time.get_ticks()-temp > 2*k)and(stone_grid.gameover == False):
+ if (stone_grid.active == True)and(index.auto == True):
+ CompStone()
+ ChangePlayer()
+ temp = pygame.time.get_ticks()
+ pygame.time.wait(k)
+ for x in pygame.event.get():
+ if x.type == QUIT:
+ sys.exit()
+ t = pygame.mouse.get_pressed()[0]
+ if (stone_grid.gameover == True)and((t == True)or(tt == True)):
+ stone_grid.Start()
+ if (index.auto == False)and(stone_grid.active == True)and(t == True):
+ stone_grid.active = False
+ s = pygame.mouse.get_pos()
+ if stone_grid.CanSetStone(index.stone,s[0]//size,s[1]//size,True) == True:
+ stone_grid.turn_index += 1
+ ChangePlayer()
+ stone_grid.active = True
+