Toggle menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

TFP예제/Omok: Difference between revisions

From ZeroWiki
imported>Unknown
No edit summary
 
(Repair batch-0003 pages from live compare)
 
Line 217: Line 217:
         for i in range (0,19):
         for i in range (0,19):
             for j in range (0,19):
             for j in range (0,19):
                 self.boardArray[(i,j)] = 9
                 self.boardArray[(i,j)] = 9
   
   
     def GetDol (self,x,y):
     def GetDol (self,x,y):
         return self.boardArray[(y,x)]
         return self.boardArray[(y,x)]
   
   
     def SetDol (self,x,y,dol):
     def SetDol (self,x,y,dol):
         self.boardArray[(y,x)] = dol
         self.boardArray[(y,x)] = dol
   
   
     def IsExistDolInPosition (self,x,y):
     def IsExistDolInPosition (self,x,y):
Line 235: Line 235:
         for i in range (0,19):
         for i in range (0,19):
             for j in range (0,19):
             for j in range (0,19):
                 dol = "%s" % self.boardArray[(i,j)]
                 dol = "%s" % self.boardArray[(i,j)]
                 if dol == '9':
                 if dol == '9':
                     dol = '+'
                     dol = '+'
Line 351: Line 351:
         Position = raw_input ("Input Dol Position x,y :")
         Position = raw_input ("Input Dol Position x,y :")
         Position = string.split (Position, ",")
         Position = string.split (Position, ",")
         Position[0] = (int)(Position[0])
         Position[0] = (int)(Position[0])
         Position[1] = (int)(Position[1])
         Position[1] = (int)(Position[1])
         return Position
         return Position
   
   
Line 379: Line 379:
----
----
[[TestFirstProgramming]]
[[TestFirstProgramming]]

Latest revision as of 00:29, 27 March 2026

TestCaseBoard.py

import unittest
from Board import * 

class BoardTestCase (unittest.TestCase):
    def setUp (self):
        self.dolboard = Board ()
        self.dolboard.Empty ()

    def tearDown (self):
        self.dolboard = None
        
    def testBoardEmpty (self):
        self.dolboard.Empty ()
        for i in range (0,19):
            for j in range (0,19):
                self.assertEquals (self.dolboard.GetDol(i,j) , DolEmpty)

    def testIsExistDolInPosition (self):
        self.dolboard.SetDol (1,1,DolWhite)
        self.assertEquals (self.dolboard.IsExistDolInPosition(1,1),1)
        self.assertEquals (self.dolboard.IsExistDolInPosition(3,6),0)
        
    def testDol (self):
        self.dolboard.SetDol (1,1,DolWhite)
        self.assertEquals (self.dolboard.GetDol(1,1), DolWhite)
        self.dolboard.SetDol (2,2,DolBlack)
        self.assertEquals (self.dolboard.GetDol(2,2), DolBlack)
        self.assertEquals (self.dolboard.GetDol(18,18), DolEmpty)
        self.assertEquals (self.dolboard.GetDol(6,6), DolEmpty)

        self.dolboard.SetDol (18,18,DolBlack)
        self.assertEquals (self.dolboard.GetDol(18,18), DolBlack)

    def testPrintEmptyBoard (self):
        self.dolboard.Empty ()
        self.assertEquals (self.dolboard.Print(), +++++++++++++++++++
+++++++++++++++++++
+++++++++++++++++++
+++++++++++++++++++
+++++++++++++++++++
+++++++++++++++++++
+++++++++++++++++++
+++++++++++++++++++
+++++++++++++++++++
+++++++++++++++++++
+++++++++++++++++++
+++++++++++++++++++
+++++++++++++++++++
+++++++++++++++++++
+++++++++++++++++++
+++++++++++++++++++
+++++++++++++++++++
+++++++++++++++++++
+++++++++++++++++++
)
        
suite = unittest.makeSuite (BoardTestCase, "test")

runner = unittest.TextTestRunner ()
runner.run (suite)

TestCaseOmok.py

import unittest
from Omok import *

class OmokTestCase (unittest.TestCase):
    def setUp (self):
        self.omok = Omok ()
        self.omok.Start ()

    def tearDown (self):
        self.omok = None

    def testIsExistDolInPosition (self):
        self.omok.PutDol (2,2)
        self.assertEquals (self.omok.IsExistDolInPosition (2,2),1)
        self.omok.PutDol (0,0)
        self.assertEquals (self.omok.IsExistDolInPosition (0,0),1)
        self.assertEquals (self.omok.IsExistDolInPosition (16,16),0)

    def testChangeCurrentDol (self):
        currentDol = self.omok.GetCurrentDol ()
        self.omok.ChangeCurrentDol ()
        self.assertNotEqual (currentDol, self.omok.GetCurrentDol ())
            
    def testFirstDolIsBlackInStart (self):
        self.omok.Start ()
        self.assertEquals (self.omok.GetCurrentDol (), DolBlack)         

    def testPutDol (self):
        self.omok.PutDol (3,4)
        self.assertEquals (self.omok.GetDol (3,4), DolBlack)

    def testCurrentDol (self):
        self.omok.PutDol (3,4)
        self.assertEquals (self.omok.GetCurrentDol(), DolBlack)
        self.omok.PutDol (9,6)
        self.assertEquals (self.omok.GetCurrentDol(), DolBlack)

    def testCheckFiveLeftTopToRightBottom (self):
        self.omok.PutDol (0,0)      # black
        self.omok.PutDol (1,1)      # black
        self.omok.PutDol (2,2)      # black
        self.omok.PutDol (3,3)      # black
        self.omok.PutDol (4,4)      # black
        self.assertEquals (self.omok.CheckFiveLeftTopToRightBottom (4,4),1)

        self.omok.Start ()
        self.omok.PutDol (18,18)      # black
        self.omok.PutDol (17,17)      # black
        self.omok.PutDol (16,16)      # black
        self.omok.PutDol (15,15)      # black
        self.omok.PutDol (14,14)      # black
        self.assertEquals (self.omok.CheckFiveLeftTopToRightBottom (14,14),1)

        self.omok.Start ()
        self.omok.SetCurrentDol (DolWhite)
        self.omok.PutDol (5,4)      # white
        self.omok.PutDol (6,5)      # white
        self.omok.PutDol (7,6)      # white
        self.omok.PutDol (8,7)      # white
        self.omok.PutDol (9,8)      # white
        self.assertEquals (self.omok.CheckFiveLeftTopToRightBottom (9,8),1)

    def testCheckFiveLeftBottomToRightTop (self):
        self.omok.PutDol (0,5)      # black
        self.omok.PutDol (1,4)      # black
        self.omok.PutDol (2,3)      # black
        self.omok.PutDol (3,2)      # black
        self.omok.PutDol (4,1)      # black
        self.assertEquals (self.omok.CheckFiveLeftBottomToRightTop (4,1),1)

        self.omok.Start ()
        self.omok.PutDol (18,14)      # black
        self.omok.PutDol (17,15)      # black
        self.omok.PutDol (16,16)      # black
        self.omok.PutDol (15,17)      # black
        self.omok.PutDol (14,18)      # black
        self.assertEquals (self.omok.CheckFiveLeftBottomToRightTop (14,18),1)

        self.omok.Start ()
        self.omok.SetCurrentDol (DolWhite)
        self.omok.PutDol (5,8)      # white
        self.omok.PutDol (6,7)      # white
        self.omok.PutDol (7,6)      # white
        self.omok.PutDol (8,5)      # white
        self.omok.PutDol (9,4)      # white
        self.assertEquals (self.omok.CheckFiveLeftBottomToRightTop (9,4),1)

    def testCheckFiveHorizon (self):
        self.omok.PutDol (0,0)
        self.omok.PutDol (1,0)
        self.omok.PutDol (2,0)
        self.omok.PutDol (3,0)
        self.omok.PutDol (4,0)
        self.assertEquals (self.omok.CheckFiveHorizon (4,0), 1)

        self.omok.Start ()
        self.omok.PutDol (18,0)
        self.omok.PutDol (17,0)
        self.omok.PutDol (16,0)
        self.omok.PutDol (15,0)
        self.omok.PutDol (14,0)
        self.assertEquals (self.omok.CheckFiveHorizon (14,0), 1)

        self.omok.Start ()
        self.omok.PutDol (5,3) 
        self.omok.PutDol (6,3) 
        self.omok.PutDol (7,3) 
        self.omok.PutDol (8,3)
        self.omok.PutDol (9,3)
        self.assertEquals (self.omok.CheckFiveHorizon (9,3), 1)

    def testCheckFiveVertical (self):
        self.omok.PutDol (0,0)
        self.omok.PutDol (0,1)
        self.omok.PutDol (0,2)
        self.omok.PutDol (0,3)
        self.omok.PutDol (0,4)
        self.assertEquals (self.omok.CheckFiveVertical (0,4), 1)

        self.omok.Start ()
        self.omok.PutDol (0,18)
        self.omok.PutDol (0,17)
        self.omok.PutDol (0,16)
        self.omok.PutDol (0,15)
        self.omok.PutDol (0,14)
        self.assertEquals (self.omok.CheckFiveVertical (0,14), 1)

        self.omok.Start ()
        self.omok.PutDol (3,5)
        self.omok.PutDol (3,6)
        self.omok.PutDol (3,7)
        self.omok.PutDol (3,8)
        self.omok.PutDol (3,9)
        self.assertEquals (self.omok.CheckFiveVertical (3,9), 1)

suite = unittest.makeSuite (OmokTestCase, "test")

runner = unittest.TextTestRunner ()
runner.run (suite)

Board.py

import sys

DolEmpty = 9
DolBlack = 0
DolWhite = 1

class Board:
    def __init__(self):
        self.boardArray = {}

    def Empty(self):
        for i in range (0,19):
            for j in range (0,19):
                self.boardArray[(i,j)] = 9

    def GetDol (self,x,y):
        return self.boardArray[(y,x)]

    def SetDol (self,x,y,dol):
        self.boardArray[(y,x)] = dol

    def IsExistDolInPosition (self,x,y):
        if self.GetDol (x,y) != DolEmpty:
            return 1
        else:
            return 0

    def Print (self):
        PrintString = 
        for i in range (0,19):
            for j in range (0,19):
                dol = "%s" % self.boardArray[(i,j)]
                if dol == '9':
                    dol = '+'
                PrintString += dol
            PrintString += "\n"

        return PrintString

Omok.py

from Board import *
import string

class Omok:
    def __init__(self):
        self.currentDol = DolEmpty
        self.board = Board ()
        self.currentWinner = DolEmpty
        pass

    def Start (self):
        self.currentDol = DolBlack
        self.board.Empty ()
        pass

    def GetCurrentDol (self):
        return self.currentDol

    def SetCurrentDol (self, dol):
        self.currentDol = dol    
    
    def ChangeCurrentDol (self):
        if self.currentDol == DolBlack:
            self.SetCurrentDol (DolWhite)
        elif self.currentDol == DolWhite:
            self.SetCurrentDol (DolBlack)

    def CheckFiveHorizon (self,x,y):
        for i in range (max(0,x-4),min (19,x+5)):
            CountSameDol = 0
            for j in range (i,min(19,i+5)):
                if self.board.GetDol (j,y) == self.currentDol:
                    CountSameDol += 1
                    if CountSameDol == 5:
                        return 1
        return 0

    def CheckFiveLeftTopToRightBottom (self,x,y):
        # Left-top -> Right-Bottom
        #   \
        #    \
        #     >
        for i in range (-4,5):
            CountSameDol = 0
            for j in range (i,i+5):
                if x + j < 0 or x + j > 18:
                    continue
                elif y + j < 0 or y + j > 18:
                    continue
                else:
                    if self.board.GetDol (x+j,y+j) == self.currentDol:
                        CountSameDol += 1
                        if CountSameDol == 5:
                            return 1
        return 0

    def CheckFiveLeftBottomToRightTop (self,x,y):
        # Left-Bottom -> Right-Top
        #    >
        #   /
        #  /
        for i in range (-4,5):
            CountSameDol = 0
            for j in range (i,i+5):
                if x + j < 0 or x + j > 18:
                    continue
                elif y - j < 0 or y - j > 18:
                    continue
                else:
                    if self.board.GetDol (x+j,y-j) == self.currentDol:
                        CountSameDol += 1
                        if CountSameDol == 5:
                            return 1
        return 0
           

    def CheckFiveVertical (self,x,y):
        for i in range (max(0,y-4),min (19,y+5)):
            CountSameDol = 0
            for j in range (i,min(19,i+5)):
                if self.board.GetDol (x,j) == self.currentDol:
                    CountSameDol += 1
                    if CountSameDol == 5:
                        return 1
        return 0       
        

    def PutDol (self,x,y):
        self.board.SetDol (x,y,self.currentDol)

    def GetDol (self,x,y):
        return self.board.GetDol (x,y)

    def CheckForFive (self,x,y):
        if self.CheckFiveHorizon (x,y) == 1:
            self.currentWinner = self.currentDol
        if self.CheckFiveVertical (x,y) == 1:
            self.currentWinner = self.currentDol
        if self.CheckFiveLeftTopToRightBottom (x,y) == 1:
            self.currentWinner = self.currentDol

    def CurrentWinner (self):
        return self.currentWinner
        
    def QuestionDolPosition (self):
        Position = raw_input ("Input Dol Position x,y :")
        Position = string.split (Position, ",")
        Position[0] = (int)(Position[0])
        Position[1] = (int)(Position[1])
        return Position

    def IsExistDolInPosition (self,x,y):
        return self.board.IsExistDolInPosition (x,y)
            
    def main (self):
        self.Start ()
        while self.CurrentWinner() == DolEmpty:
            print self.board.Print ()
            Position = self.QuestionDolPosition ()
            x,y = Position

            if not self.IsExistDolInPosition (x,y):
                self.PutDol (x,y)
                self.CheckForFive (x,y)
                self.ChangeCurrentDol ()

        print "Current Winner : %s" % self.CurrentWinner ()

if __name__ == '__main__':
    omok = Omok ()
    omok.main ()
    

TestFirstProgramming