Beispiel #1
0
 def administrate_game(self):
     if not self.network_player:
         return ['player1']
     board = empty_board()
     referee = GoReferee([self.default_player, self.network_player])
     out = referee.play_game()
     self.close_server()
     return out
    def play_game(self, a, b):
        player1 = self.players[a]
        try:
            player1.receive_stone(StoneEnum.BLACK)
        except CloseConnectionException:
            self.update_score(b, a)
            return

        player2 = self.players[b]
        try:
            player2.receive_stone(StoneEnum.WHITE)
        except CloseConnectionException:
            self.update_score(a, b)
            return

        ref = GoReferee([player1, player2])
        winners, _ = ref.play_game()
        winner = get_winner(winners)
        print("-- {} advances".format(winner))
        if winner == self.names[a]:
            self.update_score(a, b)
        else:
            self.update_score(b, a)
    def play_game(self, a, b):
        player1 = self.players[a]
        try:
            player1.receive_stone(StoneEnum.BLACK)
        except CloseConnectionException:
            self._update_score(b, a)
            self._update_score_cheater(a)
            self.cheaters.append(self.names[a])
            self._replace_cheater(a)
            return

        player2 = self.players[b]
        try:
            player2.receive_stone(StoneEnum.WHITE)
        except CloseConnectionException:
            self._update_score(a, b)
            self._update_score_cheater(b)
            self.cheaters.append(self.names[b])
            self._replace_cheater(b)
            self.players[a].end_game()
            return

        ref = GoReferee([player1, player2])
        winners, was_cheater = ref.play_game()
        winner_name = get_winner(winners)
        winner_index = self._get_player_index(winner_name)
        loser_name = self._get_loser(winner_name, [player1, player2])
        loser_index = self._get_player_index(loser_name)

        # update score first
        self._update_score(winner_index, loser_index)

        # check if cheater, edit points_arr and replace player if there was a cheater
        if was_cheater != None:
            self._update_score_cheater(loser_index)
            self.cheaters.append(loser_name)
            self._replace_cheater(loser_index)
from stone import StoneEnum, make_stone
from go_player_file import GoPlayerFile
from go_player import GoPlayerContract
from go_referee import GoReferee
from go_ref_formatter import format_obj
from referee_formatter import format_pretty_json

if __name__ == "__main__":
    objs = json_parse_stdin()

    ## Initialize Stones, Points
    names, points = objs[:2], [parse_move(x) for x in objs[2:]]
    board = Board([[make_stone(None) for i in range(BOARD_DIM)]
                   for j in range(BOARD_DIM)])

    ## Initialize Players
    inner_player1 = GoPlayerFile(points[::2])
    player1 = GoPlayerContract(inner_player1)
    player1.register(names[0])
    player1.receive_stone(StoneEnum.BLACK)

    inner_player2 = GoPlayerFile(points[1::2])
    player2 = GoPlayerContract(inner_player2)
    player2.register(names[1])
    player2.receive_stone(StoneEnum.WHITE)

    ## Initialize Go Ref
    go_referee = GoReferee([player1, player2])
    output = go_referee.play_game()
    raw_output = list(map(format_obj, output))
    print(format_pretty_json(raw_output))