OSDN Git Service

細かい見直し 仕上げ
[deep-learning/learning.git] / reversi.py
index b2d6fbe..c844f43 100755 (executable)
@@ -45,9 +45,7 @@ class StoneGrid():
     def __init__(self):    
         self.item = Grid()
         self.buffer = Grid()
-        self.map = Grid()
         self.arr = Grid()
-        self.turn_number = 0
         self.turn_index = 0
         self.active = True
         self.gameover = False
@@ -62,19 +60,18 @@ class StoneGrid():
         self.item.grid[4][3] = white 
         self.item.grid[3][4] = white 
         self.turn_index = 0
-        self.turn_number = 0
         
     def CalScore(self,stone,x,y):
         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)
-            return True
         else:
-            return False
+            self.score = 0
                                            
     def CanSetStone(self,stone,x,y,reverse):
         p = [True,False]        
@@ -117,28 +114,23 @@ class StoneGrid():
             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.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
                 else:
-                    self.arr.grid[i][j] = -1
+                    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 != -1:
-                        self.arr.grid[i][j] = k / n
-        return result
+                    if k != 0:
+                        self.arr.grid[i][j] = (n - k + 0.5) / n
     
     def Start(self):       
         global index 
@@ -146,14 +138,8 @@ class StoneGrid():
         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:
@@ -230,49 +216,50 @@ def ChangePlayer():
         stone_grid.turn_index += 1
         
 def CompStone():
-    pos = [0,0]
-    i = 1 
     stone_grid.active = False
-    if stone_grid.NextStone(index.stone, pos) == True:
-        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) 
-        if stone_grid.CanSetStone(index.stone, pre[0], pre[1], True) == False:
-            print(pos)                                 
-            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
-                 
-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()            
-            ChangePlayer()                 
-        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()
-        if stone_grid.CanSetStone(index.stone,s[0]//size,s[1]//size,True) == True:
-            stone_grid.turn_index += 1            
-            ChangePlayer() 
-        stone_grid.active = True        
-        
\ No newline at end of file
+
+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:
+        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        
+