Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import random_player
- from game_board import GameBoard
- import time, getopt, sys
- class HeadlessReversiCreator(object):
- '''
- Creator of the Reversi game without the GUI.
- '''
- def __init__(self, player1, player1_color, player2, player2_color, board_size=8):
- '''
- :param player1: Instance of first player
- :param player1_color: color of player1
- :param player2: Instance of second player
- :param player1_color: color of player2
- :param boardSize: Board will have size [boardSize x boardSize]
- '''
- self.board = GameBoard(board_size, player1_color, player2_color)
- self.player1 = player1
- self.player2 = player2
- self.current_player = self.player1
- self.current_player_color = player1_color
- self.player1_color = player1_color
- self.player2_color = player2_color
- self.silent = False
- def play_game(self):
- '''
- This function contains game loop that plays the game.
- '''
- # TODO: Time limit for move
- correct_finish = True
- while self.board.can_play(self.current_player,self.current_player_color):
- startTime = time.time()
- move = self.current_player.move(self.board.get_board_copy())
- endTime = time.time()
- moveTime = (endTime - startTime) * 1000
- if move is None:
- if not self.silent:
- print('Player %d reurns None istead of a valid move. Move takes %.3f ms.' % (self.current_player_color, moveTime))
- correct_finish = False
- break
- else:
- if not self.silent:
- print('Player %d wants move [%d,%d]. Move takes %.3f ms.' % (self.current_player_color, move[0], move[1], moveTime))
- if self.board.is_correct_move(move, self.current_player,self.current_player_color):
- if not self.silent:
- print('Move is correct')
- self.board.play_move(move, self.current_player,self.current_player_color)
- else:
- if not self.silent:
- print('Player %d made the wrong move [%d,%d]' % (self.current_player_color, move[0], move[1]))
- correct_finish = False
- break
- self.change_player()
- if not self.board.can_play(self.current_player,self.current_player_color):
- if not self.silent:
- print('No possible move for Player %d' % (self.current_player_color))
- self.change_player()
- if self.board.can_play(self.current_player,self.current_player_color):
- if not self.silent:
- print('Player %d plays again ' % (self.current_player_color))
- else:
- if not self.silent:
- print('Game over')
- if not self.silent:
- self.board.print_board()
- if correct_finish:
- return self.printFinalScore()
- else:
- if not self.silent:
- print('Game over.')
- if self.current_player_color == self.player1_color:
- if not self.silent:
- print('Winner is player %d.' % (self.player2_color))
- return self.player2
- else:
- if not self.silent:
- print('Winner is player %d.' % (self.player1_color))
- return self.player1
- def change_player(self):
- '''
- Change the current_player
- '''
- if self.current_player == self.player1:
- self.current_player = self.player2
- self.current_player_color = self.player2_color
- else:
- self.current_player = self.player1
- self.current_player_color = self.player1_color
- def printFinalScore(self):
- p1Stones = 0
- p2Stones = 0
- for x in range(self.board.board_size):
- for y in range(self.board.board_size):
- if self.board.board[x][y] == 0:
- p1Stones += 1
- if self.board.board[x][y] == 1:
- p2Stones += 1
- if not self.silent:
- print('\n\n-----------------------------\n')
- print('Final score:\n\nPlayer%d:Player%d\n\t[%d:%d]\n' % (self.player1_color, self.player2_color, p1Stones, p2Stones))
- if p1Stones > p2Stones:
- if not self.silent:
- print('Player %d wins!' % (self.player1_color))
- return self.player1
- elif p2Stones > p1Stones:
- if not self.silent:
- print('Player %d wins!' % (self.player2_color))
- return self.player2
- else:
- if not self.silent:
- print('Draw')
- return None
- if not self.silent:
- print('\n-----------------------------\n\n')
- if __name__ == "__main__":
- (choices,args) = getopt.getopt(sys.argv[1:],"")
- p1_color = 0
- p2_color = 1
- if len(args) == 0:
- print('No arguments given.\nRunning game with two random players.')
- p1 = random_player.MyPlayer(p1_color, p2_color)
- p2 = random_player.MyPlayer(p2_color, p1_color)
- game = HeadlessReversiCreator(p1, p1_color, p2, p2_color, 8)
- game.play_game()
- elif len(args) == 1:
- print('One player given in argument.\nRunning game with given player aginst the random player.')
- p1 = random_player.MyPlayer(p1_color, p2_color)
- try:
- player_module = __import__(args[0])
- p2 = player_module.MyPlayer(p2_color, p1_color)
- game = HeadlessReversiCreator(p1, p1_color, p2, p2_color, 8)
- game.play_game()
- except ImportError:
- print('Error: Cannot import given player: %s.' %(args[0]))
- else:
- if len(args) > 2:
- print('More than two arguments given. Ignoring other arguments and using only the first and the second as players.')
- importsCorrect = True
- try:
- player_module = __import__(args[0])
- p1 = player_module.MyPlayer(p1_color, p2_color)
- except ImportError:
- importsCorrect = False
- print('Error: Cannot import given player: %s.' %(args[0]))
- try:
- player_module = __import__(args[1])
- p2 = player_module.MyPlayer(p2_color, p1_color)
- except ImportError:
- importsCorrect = False
- print('Error: Cannot import given player: %s.' %(args[1]))
- if importsCorrect:
- game = HeadlessReversiCreator(p1, p1_color, p2, p2_color, 8)
- game.play_game()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement