OSDN Git Service

最終段階
[deep-learning/learning.git] / reversi.py
index 3748697..75dc02a 100755 (executable)
@@ -6,13 +6,14 @@ Created on 2015/08/25
 import pygame,os,sys
 from pygame.locals import *
 from threading import Thread
-from network import 
+from network import Comp
 
 
 pygame.font.init()
+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:
@@ -31,17 +32,11 @@ class Player():
     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):
@@ -50,13 +45,12 @@ 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() for x in range(61)]
+        self.buffer = Grid()
         self.turn_number = 0
         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()        
     
@@ -70,14 +64,18 @@ class StoneGrid():
         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:
+            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
                                            
     def CanSetStone(self,stone,x,y,reverse):
         p = [True,False]        
@@ -91,26 +89,22 @@ class StoneGrid():
                 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
-                            break
+                            Paint()
                         else:
                             p[0],p[1] = False,True
-                            break
-                    else:
-                        break
+                    break
                 else:
                     i += 1
                    
@@ -123,13 +117,14 @@ 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
         n = 0
-        self.score = 0    
-        self.arr[0] = stone    
+        self.score = 0
         for i in range(8):
             for j in range(8):
                 if self.CalScore(stone, i, j) == True:
@@ -158,37 +153,7 @@ class StoneGrid():
         
     def Pause(self):
         self.active = False
-        
-    def ListExecute(self):
-        while True:
-            i = 0            
-            for x in self.list:                
-                if x.X < index_x-1:
-                    x.X += 1
-                elif x.Y < index_y-1:
-                    x.X = 0
-                    x.Y += 1
-                else:
-                    self.item.grid[x.Left][x.Top] = self.effect_stone
-                    self.list.remove(x)
-                pygame.time.wait(5)                
-                i += 1              
-                self.Paint() 
-                pygame.display.update()            
-            if len(self.list) == 0:                              
-                if self.turn_index < 60:                               
-                    self.turn_index += 1
-                    self.turn_number += 1  
-                    self.buffer[self.turn_index].Assign(self.item)        
-                    self.buffer[self.turn_index].stone = self.effect_stone                                                    
-                    Paint()
-                    ChangePlayer()       
-                    if self.gameover == False:             
-                        self.active = True
-                else:
-                    self.gameover = True
-                break                   
-       
+               
     def Paint(self):
         if self.effect_stone == black:
             s = bkwhite           
@@ -209,8 +174,6 @@ def Paint():
                 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:
@@ -264,12 +227,22 @@ def ChangePlayer():
         
 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:
-        pos = compstone(pos[0],pos[1])                                  
-        stone_grid.CanSetStone(index.stone, pos[0], pos[1], True) 
-    else:
-        ChangePlayer()
+        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()
@@ -286,14 +259,11 @@ Paint()
 while True:    
     if pygame.time.get_ticks()-temp > 300:
         if (stone_grid.active == True)and(index.auto == True):        
-            CompStone()
-            #stone_grid.th.join()                                          
+            CompStone()                                      
         temp = pygame.time.get_ticks()
     pygame.time.wait(150)
     for x in pygame.event.get():
         if x.type == QUIT:
-            if len(stone_grid.list) > 0:
-                stone_grid.th.join()
             sys.exit()    
     t = pygame.mouse.get_pressed()[0]
     if (stone_grid.gameover == True)and(t == True):
@@ -301,7 +271,6 @@ while True:
     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,True)        
-        stone_grid.th.join()    
+        stone_grid.CanSetStone(index.stone,s[0]//size,s[1]//size,True)  
         stone_grid.active = True    
         
\ No newline at end of file