1. TestCaseBoard.py ¶
~cpp
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)
2. TestCaseOmok.py ¶
~cpp
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)
3. Board.py ¶
~cpp
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
4. Omok.py ¶
~cpp
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 ()










