Beispiel #1
0
 def __init__(self, name):
     Player.__init__(self, **{
         "id": -1,
         "login": name,
         "global_rating": (1500, 500),
         "ladder_rating": (1500, 500),
         "number_of_games": 0
     })
    def __init__(self) -> None:

        self.DISPSURF = pygame.display.set_mode(self.SCREEN)
        self.DISPSURF.fill(self.WHITE)
        self.player = Player(ADDR)
        self.angle = 0
        self.image = self.TANK_SOURCE
        self.update()
Beispiel #3
0
 def __init__(self, name):
     Player.__init__(self, **{
         "id": -1,
         "login": name,
         "global_rating": (1500, 500),
         "ladder_rating": (1500, 500),
         "number_of_games": 0
     })
Beispiel #4
0
def test_average_rating(qtbot):
    import config
    config.no_dialogs = True
    import client
    from client import Player
    from games.gameitem import GameItem
    players = [Player(id=1, login='******', global_rating=(2000, 200)),
              Player(id=2, login='******', global_rating=(1000, 150)),
              Player(id=3, login='******', global_rating=(1200, 100))]
    g = GameItem(0)
    client.players = dict(map(lambda p: (p.id, p), players))
    g.client = client
    g.players = players

    expected_average_rating = sum([conservative_estimate(p.global_rating) for p in players]) / len(players)
    assert expected_average_rating == g.average_rating
def main():
    """
    This invokes the game and can run either the server or the client.

    To run the server run: python run_game.py -t s -i <path to input text file>

    To run the client run: python run_game.py -t c -i <name of player>
    """
    try:
        opts, args = getopt(sys.argv[1:], 't:n:i:')
    except GetoptError:
        sys.stderr.write('Error parsing options\n')
        sys.stderr.write(__doc__)
        exit(-1)

    name = 'Default_Player'
    input_file = None

    server_client_flag = None

    for o, a in opts:
        if o == '-t':
            server_client_flag = a
        elif o == '-n':
            name = a
        elif o == '-i':
            input_file = a

    if server_client_flag == 's':
        gs = GameServer(input_file)
    elif server_client_flag == 'c':
        pl = Player(name)
        pl.play_game()
    else:
        print(
            'None or invalid game side provided. Please specify "s" for server or "c" for client'
        )
        exit(1)
def final_score(board, last_known_move, player):

    og_player = player

    complexBoard = ReportingBoard()
    final_player = Player(complexBoard)

    complexBoard.update(board)
    final_player.update(player, board)

    complexBoard.place_piece(player, last_known_move)
    complexBoard.refresh()

    empty_spaces = complexBoard.get_empty_spaces()

    #for the remaining spaces play out the game using this agent
    #most common scenario or between
    for space in empty_spaces:

        if (player == 1):
            player = 2
        else:
            player = 1

        final_player.update(player, complexBoard.board)
        move = final_player.get_move()
        complexBoard.place_piece(player, move)
        complexBoard.refresh()
        complexBoard.output()

    if os.path.isfile('filename.txt'):
        #if file already exists open normally
        fs = open("final_scores.csv", "a")
    else:
        #otherwise create it and add headers
        fs = open("final_scores.csv", "a")
        fs.write("agent_player, p1_score, p2_score, winner \n")

    p1score = complexBoard.get_p1_score()
    p2score = complexBoard.get_p2_score()
    fs.write(str(og_player) + ",")
    fs.write(str(p1score) + ",")
    fs.write(str(p2score) + ",")
    fs.write(str(complexBoard.get_winner()) + "\n")
Beispiel #7
0
def test_player_indexing():
    from client import Player
    p = Player(id=1, login='******')
    assert {1: p}[1] == {p: p}[p]
Beispiel #8
0
def test_player_equality():
    from client import Player
    assert Player(id=1, login='******') == Player(id=1, login='******')
Beispiel #9
0
 def test_client(self):
     player = Player()
     player.round += 1
     actual = player.round
     expected = 2
     self.assertEqual(actual, expected)
class GUI:
    SCREEN = (800, 800)
    WHITE = (255, 255, 255, 255)
    BLACK = (0, 0, 0, 255)
    GREEN = (0, 255, 0, 255)
    BLUE = (0, 0, 255, 0)
    players = []
    TANK_SOURCE = pygame.image.load('img/tank.png')

    def __init__(self) -> None:

        self.DISPSURF = pygame.display.set_mode(self.SCREEN)
        self.DISPSURF.fill(self.WHITE)
        self.player = Player(ADDR)
        self.angle = 0
        self.image = self.TANK_SOURCE
        self.update()

    def update(self):
        pygame.init()

        while True:
            self.get_input()
            self.DISPSURF.fill(self.WHITE)
            self.display()
            pygame.display.update()

    def add_player():
        pass

    def display(self):
        # self.image = pygame.transform.rotate(self.image, self.angle)
        for data in self.player.player_pos:
            self.DISPSURF.blit(self.image, (data.data.pos_x, data.data.pos_y))
        self.angle += 1

    def get_input(self):
        for event in pygame.event.get():
            if event.type == QUIT:
                self.player.alive = False
                self.player.close_connection()
                pygame.quit()
                sys.exit()

            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_w:
                    self.player.game_data.keys['W'] = 1
                if event.key == pygame.K_a:
                    self.player.game_data.keys['A'] = 1
                if event.key == pygame.K_s:
                    self.player.game_data.keys['S'] = 1
                if event.key == pygame.K_d:
                    self.player.game_data.keys['D'] = 1

            if event.type == pygame.KEYUP:
                if event.key == pygame.K_w:
                    self.player.game_data.keys['W'] = 0
                if event.key == pygame.K_a:
                    self.player.game_data.keys['A'] = 0
                if event.key == pygame.K_s:
                    self.player.game_data.keys['S'] = 0
                if event.key == pygame.K_d:
                    self.player.game_data.keys['D'] = 0
Beispiel #11
0
import sys
import Pyro4
import Pyro4.util
import sys
from client import Player

# instantiates a client through which a user can join the ERS game
nameserver = Pyro4.locateNS()
uri = nameserver.lookup("ERS")
game = Pyro4.Proxy(uri)
player = Player()
player.initiate_game(game)
Beispiel #12
0
    def __init__(self, host_ip, port_ip, player_name='John'):
        board_update = queue.Queue()
        board_input = queue.Queue()
        board = Board()
        self.client_instance = Client(board_input)
        self.player = None
        ClientSocket = socket.socket()
        xy = ''
        # Color = input('Choose a color: ')
        print('Waiting for connection')
        try:
            ClientSocket.connect((host_ip, int(port_ip)))
        except socket.error as e:
            print(str(e))
        ClientSocket.send(str.encode(player_name + '\n'))
        Color = ''
        while True:
            Response = self.read_from_buffer(ClientSocket)
            # print(Response)
            if Response == 'host':
                num_players = self.get_valid_player_input(
                    "How many players(including you)? "
                )  # add error checking from pakuri here
                ClientSocket.send(str.encode(str(num_players) + '\n'))
            elif Response == "quit":
                break
            elif Response == 'set':
                # xy=input("x,y: ")
                self.client_instance.set_board_action("initialsettlement")
                coordinates = board_input.get()
                board_input.task_done()
                settle = self.client_instance.building_locations.claimSettlement(
                    int(coordinates.split(',')[0]),
                    int(coordinates.split(',')[1]), Color)
                self.client_instance.property_list.append(settle)
                self.client_instance.player.acquireNode(settle)
                port = self.client_instance.game_board.xy_give_port(
                    (settle.cord1, settle.cord2))
                print(settle.cord1, settle.cord2)
                if port is not None:
                    self.client_instance.player.bankTrading.update(
                        port.resource)
                self.client_instance.set_board_updated(True)
                ClientSocket.send(str.encode(coordinates + '\n'))
                ClientSocket.send(
                    str.encode("enemyu," +
                               self.client_instance.player.getSendToEnemies() +
                               '\n'))
            elif Response == "startroad":
                self.client_instance.set_board_action("initialroad")
                coordinates = board_input.get()
                board_input.task_done()
                # player.add
                road = self.client_instance.building_locations.claimRoad(
                    int(coordinates.split(',')[0]),
                    int(coordinates.split(',')[1]), Color)
                self.client_instance.road_list.append(road)
                self.client_instance.player.acquireRoad(road)
                self.client_instance.set_board_updated(True)
                ClientSocket.send(str.encode(coordinates + '\n'))
                ClientSocket.send(
                    str.encode("enemyu," +
                               self.client_instance.player.getSendToEnemies() +
                               '\n'))
            elif Response.split(',')[0] == "set":
                print("new settlement" + Response.split(',')[1] +
                      Response.split(',')[1])
                self.client_instance.property_list.append(
                    self.client_instance.building_locations.claimSettlement(
                        int(Response.split(',')[1]),
                        int(Response.split(',')[2]),
                        Response.split(',')[3]))
                self.client_instance.set_board_updated(True)
            elif Response.split(',')[0] == "road":
                print("new road")
                print("new settlement" + Response.split(',')[1] +
                      Response.split(',')[1])
                self.client_instance.road_list.append(
                    self.client_instance.building_locations.claimRoad(
                        int(Response.split(',')[1]),
                        int(Response.split(',')[2]),
                        Response.split(',')[3]))
                self.client_instance.set_board_updated(True)
            elif Response.split(',')[0] == "city":
                self.client_instance.building_locations.settlements[int(
                    Response.split(',')[1])][int(
                        Response.split(',')[2])].city = True
                self.client_instance.set_board_updated(True)
            elif Response.split(',')[0] == "color":
                print("hi")
                Color = Response.split(',')[1]
                self.client_instance.set_player(Player(player_name, Color))
                print(Color)
            elif Response.split(',')[0] == "bank":
                arr = [int(x) for x in Response.split(',')[1:]]
                self.client_instance.bank.update(arr)
                self.client_instance.set_board_updated(True)
            elif Response.split('|')[0] == "board":
                print("hello")
                number_list = [
                    int(elem) for elem in Response.split('|')[1].split(',')
                ]
                resource_list = Response.split('|')[2].split(',')
                port_list = Response.split('|')[3].split(',')
                board.generate_land(number_list, resource_list)
                board.generate_ports(port_list)
                self.client_instance.enemy_list = enemy_list
                threading.Thread(target=self.board_thread,
                                 args=(board, )).start()
            elif Response == "getstart":
                print("get starting resources")
                self.client_instance.start_resources()
                message = board_input.get()
                board_input.task_done()
                ClientSocket.send(str.encode(message + '\n'))
                ClientSocket.send(
                    str.encode("enemyu," +
                               self.client_instance.player.getSendToEnemies() +
                               '\n'))
                # bank_update = board_input.get()
                # board_input.task_done()
            elif Response.split(',')[0] == "dice":
                roll = [int(x) for x in Response.split(',')[1:]]
                self.client_instance.display_dice(roll)
                self.client_instance.process_dice(sum(roll))
                message = board_input.get()
                board_input.task_done()
                ClientSocket.send(str.encode(message + '\n'))
                ClientSocket.send(
                    str.encode("enemyu," +
                               self.client_instance.player.getSendToEnemies() +
                               '\n'))
            elif Response == "turn" or Response == "robber":
                self.client_instance.player.development_card_played = False
                if (Response == "robber"):
                    self.client_instance.set_board_action("robber", 'turn')
                else:
                    self.client_instance.set_board_action("turn")
                while True:
                    message = board_input.get()
                    if (message.split(',')[0] == "road"):
                        road = self.client_instance.building_locations.claimRoad(
                            int(message.split(',')[1]),
                            int(message.split(',')[2]), Color)
                        self.client_instance.road_list.append(road)
                        self.client_instance.player.acquireRoad(road)
                        self.client_instance.set_board_updated(True)
                        self.client_instance.pay_cards([1, 0, 1, 0, 0])
                        ClientSocket.send(
                            str.encode(message + ',' + Color + '\n'))
                        ClientSocket.send(
                            str.encode("enemyu," + self.client_instance.player.
                                       getSendToEnemies() + '\n'))
                    if (message.split(',')[0] == "robber"):
                        self.client_instance.game_board.set_robber(
                            (int(message.split(',')[1]),
                             int(message.split(',')[2])))
                        self.client_instance.set_board_updated(True)
                        ClientSocket.send(str.encode(message + '\n'))
                    if (message.split(',')[0] == "set"):
                        settle = self.client_instance.building_locations.claimSettlement(
                            int(message.split(',')[1]),
                            int(message.split(',')[2]), Color)
                        self.client_instance.property_list.append(settle)
                        self.client_instance.player.acquireNode(settle)
                        port = self.client_instance.game_board.xy_give_port(
                            (settle.cord1, settle.cord2))
                        if port is not None:
                            self.client_instance.player.bankTrading.update(
                                port.resource)
                        self.client_instance.set_board_updated(True)
                        self.client_instance.pay_cards([1, 1, 1, 0, 1])
                        ClientSocket.send(
                            str.encode(message + ',' + Color + '\n'))
                        ClientSocket.send(
                            str.encode("enemyu," + self.client_instance.player.
                                       getSendToEnemies() + '\n'))
                    if (message == "dev"):
                        ClientSocket.send(str.encode(message + '\n'))
                        card = self.read_from_buffer(ClientSocket)
                        print(card)
                        self.client_instance.get_dev_card(card)
                        self.client_instance.player.developmentHand.add_card(
                            card)
                        if (card == 'victoryPoint'):
                            self.client_instance.player.hiddenVictoryPoints += 1
                        self.client_instance.pay_cards([0, 1, 0, 1, 1])
                        ClientSocket.send(
                            str.encode("enemyu," + self.client_instance.player.
                                       getSendToEnemies() + '\n'))
                    if (message.split(',')[0] == "monopoly"):
                        ClientSocket.send(str.encode(message + '\n'))
                        ClientSocket.send(
                            str.encode("enemyu," + self.client_instance.player.
                                       getSendToEnemies() + '\n'))
                    if (message.split(',')[0] == "city"):
                        settle = self.client_instance.building_locations.settlements[
                            int(message.split(',')[1])][int(
                                message.split(',')[2])].city = True
                        self.client_instance.player.acquireCity()
                        self.client_instance.set_board_updated(True)
                        self.client_instance.pay_cards([0, 2, 0, 3, 0])
                        ClientSocket.send(str.encode(message + ',' + '\n'))
                        ClientSocket.send(
                            str.encode("enemyu," + self.client_instance.player.
                                       getSendToEnemies() + '\n'))
                    elif (message == "end"):
                        if (self.client_instance.player.victoryPoints +
                                self.client_instance.player.hiddenVictoryPoints
                                >= 10):
                            ClientSocket.send(
                                str.encode('winner,' +
                                           self.client_instance.player.name +
                                           '\n'))
                        else:
                            ClientSocket.send(str.encode(message + '\n'))
                            ClientSocket.send(
                                str.encode("enemyu," + self.client_instance.
                                           player.getSendToEnemies() + '\n'))
                        break
                    elif (message.split(',')[0] == "bank"):
                        ClientSocket.send(str.encode(message + '\n'))
                        ClientSocket.send(
                            str.encode("enemyu," + self.client_instance.player.
                                       getSendToEnemies() + '\n'))

                    elif (message == "roadroad"):
                        board_input.task_done()
                        if (len(
                                Actions.buildRoadAvailable(
                                    self.client_instance.player, True)) > 0):
                            self.client_instance.set_board_action(
                                "roadfree", 'turn')
                            message = board_input.get()
                            board_input.task_done()
                            road = self.client_instance.building_locations.claimRoad(
                                int(message.split(',')[1]),
                                int(message.split(',')[2]), Color)
                            self.client_instance.road_list.append(road)
                            self.client_instance.player.acquireRoad(road)
                            self.client_instance.set_board_updated(True)
                            ClientSocket.send(
                                str.encode(message + ',' + Color + '\n'))
                            ClientSocket.send(
                                str.encode("enemyu," + self.client_instance.
                                           player.getSendToEnemies() + '\n'))
                        if (len(
                                Actions.buildRoadAvailable(
                                    self.client_instance.player, True)) > 0):
                            self.client_instance.set_board_action(
                                "roadfree", 'turn')
                            message = board_input.get()
                            board_input.task_done()
                            road = self.client_instance.building_locations.claimRoad(
                                int(message.split(',')[1]),
                                int(message.split(',')[2]), Color)
                            self.client_instance.road_list.append(road)
                            self.client_instance.player.acquireRoad(road)
                            self.client_instance.set_board_updated(True)
                            ClientSocket.send(
                                str.encode(message + ',' + Color + '\n'))
                            ClientSocket.send(
                                str.encode("enemyu," + self.client_instance.
                                           player.getSendToEnemies() + '\n'))
                board_input.task_done()

                # while turn:
            elif Response.split(',')[0] == "robber":
                self.client_instance.game_board.set_robber(
                    (int(Response.split(',')[1]), int(Response.split(',')[2])))
                self.client_instance.set_board_updated(True)
            elif Response.split(',')[0] == "monopoly":
                self.client_instance.pay_monopoly(Response.split(',')[1])
                self.client_instance.set_board_updated(True)
            elif Response == "notturn":
                self.client_instance.set_board_action("display", 'display')
            elif Response.split(',')[0] == "enemy":
                enemy_list.append(
                    EnemyPlayer(
                        Response.split(',')[1],
                        Response.split(',')[2]))
            elif Response.split(',')[0] == "enemyu":
                arr = Response.split(',')[1:]
                for en in self.client_instance.enemy_list:
                    if en.color == arr[1]:
                        en.updateEnemy(arr)
            elif Response.split(',')[0] == "winner":
                self.client_instance.running = False
                break
            elif Response != "":
                print(Response.split(',')[0])

        # while True:
        # Input = input('Say Something: ')
        # ClientSocket.send(str.encode(Input))
        # Response = ClientSocket.recv(1024)
        # print(Response.decode('utf-8'))
        # roadMap.printAllSettlements()
        # roadMap.printAllRoads()
        self.client_instance.quit()
        ClientSocket.close()