OSDN Git Service

細かい見直し 仕上げ
[deep-learning/learning.git] / reversi.py
index 49c91e6..c844f43 100755 (executable)
@@ -5,7 +5,6 @@ Created on 2015/08/25
 '''
 import pygame,os,sys
 from pygame.locals import *
-from threading import Thread
 from network import Comp
 
 
@@ -44,11 +43,9 @@ class Grid():
     
 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()
-        self.turn_number = 0
+        self.arr = Grid()
         self.turn_index = 0
         self.active = True
         self.gameover = False
@@ -63,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]        
@@ -116,27 +112,25 @@ class StoneGrid():
             Method(1, -1)
             Method(1, 0)
             Method(1, 1)
-        if (p[1] == True)and(reverse == True):
-            ChangePlayer()
         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*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 
@@ -144,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:
@@ -182,12 +170,13 @@ def Paint():
 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):
@@ -221,55 +210,56 @@ def ChangePlayer():
             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[1:],stone_grid.arr[1:])
-        elif index.stone == white:
-            pre = comp.gote_stone(stone_grid.map[1:],stone_grid.arr[1:]) 
-        if stone_grid.CanSetStone(index.stone, pre[0], pre[1], True) == False:                                 
-            stone_grid.CanSetStone(index.stone, pos[0], pos[1], True) 
-    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]//size,s[1]//size,True)  
-        stone_grid.active = True    
-        
\ No newline at end of file
+    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:
+        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        
+