-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgame.py
More file actions
74 lines (66 loc) · 2.79 KB
/
game.py
File metadata and controls
74 lines (66 loc) · 2.79 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
from player import *
from board import Board
import collections
player_options = {
'HumanPlayer': HumanPlayer,
'ComputerPlayer': ComputerPlayer,
'MinimaxPlayer': MinimaxPlayer,
}
class Game(object):
def __init__(self,options):
if options.white in player_options:
player1 = player_options[options.white](0,'w',-1,depth=options.depth)
else:
print('White Player Agent not recognized (user control is default)')
exit()
if options.black in player_options:
player2 = player_options[options.black](1,'b',1,depth=options.depth)
else:
print('Black Player Agent not recognized (computer control is default)')
exit()
self.players = [player1, player2]
self.board = Board(self.players)
def play(self):
playerTurn = 0
gameOver = False
while(not gameOver):
self.board.printBoard()
player = self.players[playerTurn]
print(player.name + "'s Turn")
player.takeTurn(self.board)
gameOver, winner = self.checkGameOver(playerTurn)
playerTurn = (playerTurn + 1) % len(self.players)
self.board.printBoard()
if(winner == 'Ties'):
print("Its a draw!")
else:
print(self.players[winner].name + ' Wins!')
return winner
class Chess(Game):
def __init__(self,options):
super(Chess, self).__init__(options)
self.positionCounter = collections.Counter()
self.positionCounter[self.board.toTuple()] += 1
def checkGameOver(self, playerNumber):
player = self.players[playerNumber]
opponentTurn = (player.number + 1) % len(self.players)
opponent = self.players[opponentTurn]
for peice,row,col in self.board.getPromotions(player):
player.promote(peice,row,col,self.board)
self.board.printBoard()
boardTuple = self.board.toTuple()
self.positionCounter[boardTuple] += 1
if(self.positionCounter[boardTuple] > 3):
print("Threefold repitition, (this should eventually be a choice...)")
return True, 'Ties'
if(self.board.isInCheck(opponent.number)):
if(self.board.isCheckmated(opponent.number)):
print("Check Mate!")
return True, playerNumber
else:
print("Check!")
return False, None
elif(self.board.isDraw() or self.board.isStalemated(opponent.number)):
print(opponent.name + " has been stalemated")
return True, 'Ties'
return False, None