def setUp(self): self.players = Players() self.players.add_player(models.Player('Erik')) self.players.add_player(models.Player('Erty')) self.players.add_player(models.Player('Alex')) self.game = game.Game(self.players) self.players.start_game()
def test_deploy_troops_to_wrong_country(self): country_A = self.board.countries['northwest territory'] erty = models.Player('Erty') alex = models.Player('Alex') erty.choose_country(country_A) country_A.troops = 21 with self.assertRaises(AssertionError): alex.deploy_troops(country_A, 10)
def __init__(self, config): """ This method initializes the models in the game class """ # initializing background / determining canvas_size self.c = config c = self.c self.bg = m.Background(c.bg_images, random.randint(1, len(c.bg_images)) - 1) self.grid_size = self.bg.pic.get_rect().size self.canvas_size = (self.grid_size[0] + 100, self.grid_size[1] + 100) # initializing player & Monster self.player = m.Player(c.player_image, (0, 0)) self.monster = m.Monster(c.monster_image_1, c.monster_image_2, c.NUM_X, c.NUM_Y, c.NUM_MONSTER, self.canvas_size) # initializing screen & grid & clock self.grid_list = m.GridList(c.NUM_X, c.NUM_Y, self.grid_size, c.bg_images, 0) # initializing background music, BPM is about 110 pygame.mixer.music.load(self.c.MUSIC) pygame.mixer.music.play(-1) self.frame_count = 0 self.rhythm = m.Rhythm(c.BEAT_CONST, self.frame_count, c.MARGINAL_ERROR) self.total_num_pic = 0 # number of clear pictures(stages) # initializing pygame clock self.clock = pygame.time.Clock()
def test_not_card_set(self): card1 = self.cards[0] card2 = self.cards[1] card3 = self.cards[2] alex = models.Player("Alex") alex.cards = {card2, card3} self.assertEqual(alex.has_card_set(), False)
def test_deploy_troops(self): country_A = self.board.countries['iceland'] erty = models.Player('Erty') erty.choose_country(country_A) country_A.troops = 20 erty.deploy_troops(country_A, 10) self.assertEqual(country_A.troops, 30)
async def on_member_join(member): pa_chan = get(member.guild.text_channels, name="player-assignments") ins_chan = get(member.guild.text_channels, name="instructions") # Assign the new member to one of the three teams randomly # FIXME Get number of teams through the DB and not hardcode a 3 team_id = randint(1, 3) t = models.Team() t.load(team_id) # Add flair to user role = get(member.guild.roles, name=t.name) await member.add_roles(role) # Create new Player record. p = models.Player() # First check if they already exist try: p.custom_load("discord_id = ?", (member.id, )) t.load(p.team_id) await pa_chan.send("Welcome back, {}! the **{}** missed you!".format( member.mention, t.name)) return except Exception: pass p.discord_id = member.id p.team_id = team_id p.coins = config['starting_coins'] p.last_active_day = 0 p.shares = 100 p.insert() models.save() # Post message to player-assignments channel await pa_chan.send("Welcome, {}! You have been assigned to the **{}**!\n\ Make sure to check out the {} and good luck!".format( member.mention, t.name, ins_chan.mention))
def play(): """ creating players :return: """ print("Please, enter your name: ", end='') name = input() level = settings.START_ENEMY_LEVEL player = models.Player(name) enemy = models.Enemy(level) command = '' while command != 'start': print("To start the game enter 'start' here: ", end='') command = input() player.verify_commands(command) while True: try: print(player.attack(enemy)) print(player.defence(enemy)) except exceptions.EnemyDown: player.scores_up(5) level += 1 enemy = models.Enemy(level) print( f'Enemy down. \n' f'Going to LEVEL {level}. Player has {player.lives} lives from {settings.START_LIVES} and' f' {player.score} scores.') return None
def post(self, player_id): values = [ self.get_argument(field, None) for field in models.Player.fields ] player = models.Player(values) user = self.get_current_user() if user: if player.password and player.user_name and ( user.priviledges == 'admin' or int(user.id) == int(player.id)): player.set_password() elif not (player.password or player.user_name): player.values['password'] = None player.values['user_name'] = None if player.member == None: player.values['member'] = False if player.save(): self.redirect("/") self.render( "new_player.html", tittle="Pelaajan tiedot", player=player, message="Pelaaja on jo tietokannassa!", # For template course_name_dict=self.db.course_name_dict(), active_games=models.games({'active': True}), user=self.get_current_user(), )
async def pay(ctx, target_location, amount): if not config['game_ongoing']: return amount = int(amount) # dumb. member = ctx.message.author p = models.Player() try: p.custom_load("discord_id = ?", (member.id, )) except Exception: await ctx.send("I don't have you listed as a player, {}\n\ If you believe this is an error, please talk to a Lord or the King" .format(member.mention)) return # Make sure player has enough coins!!! if amount < 1: await ctx.send("You can't pay 0 or negative coins, {}".format( member.mention)) return elif amount > p.coins: await ctx.send("{}, you don't have enough coins!".format( member.mention)) return # Get team, current location id, available locations t = models.Team() t.load(p.team_id) current_loc = t.current_location_id avail_locs = graphanalyzer.get_next_location_list(t.team_id) # Make sure it's a valid target location. if target_location.lower() not in (name.lower() for name in avail_locs.keys()): await ctx.send( "I don't think {} is a valid location. Maybe you mistyped it?". format(target_location)) return # Get the ID for the target location... target_loc = models.Location() target_loc.custom_load("name = ? COLLATE NOCASE", (target_location, )) edge = models.LocationEdge() edge.custom_load("start_location_id = ? AND end_location_id = ?", ( current_loc, target_loc.location_id, )) # Store the payment in the db payment = models.Payment() payment.player_id = p.player_id payment.team_id = p.team_id payment.amount = amount payment.location_edge = edge.edge_id payment.time = helpers.get_game_day() payment.insert() # Remove coins from player's account. p.coins -= amount p.last_active_day = helpers.get_game_day() p.update() models.save() # Send confirmation message. await ctx.send("{} has paid **{}** coins toward **{}**".format( member.mention, amount, target_loc.name))
def update_players(data_rows): for player in data_rows: print(player[2]) new_player = models.Player.query.filter_by(nba_id=player[0]).first() if new_player: new_player.active = player[3] new_player.year_end = player[5] new_player.games_played = True if player[12] == 'Y' else False new_player.update_object() else: new_player = models.Player() # Update to make league_id variable new_player.league_id = "00" new_player.nba_id = player[0] new_player.first_name = player[1].split(',')[-1].strip() new_player.last_name = player[1].split(',')[0].strip() new_player.active = player[3] new_player.year_start = player[4] new_player.year_end = player[5] new_player.nba_player_code = player[6] new_player.games_played = True if player[12] == 'Y' else False new_player.add_object() return True
def post(self): values = [ self.get_argument(field, None) for field in models.Player.fields ] player = models.Player(values) user = self.get_current_user() if user: if player.password and player.user_name and user.priviledges == 'admin': player.set_password() if player.member == None and user.priviledges in ('admin', 'hallitus'): player._values['member'] = False else: player._values['user_name'] = None player._values['password'] = None if player.save(): self.redirect("/") else: self.render( "new_player.html", tittle="Uusi pelaaja", player=player, message="Pelaaja on jo tietokannassa!", # For template all_players=models.players(), course_name_dict=self.db.course_name_dict(), active_games=models.games({'active': True}), user=self.get_current_user(), )
async def team(ctx): if not config['game_ongoing']: return member = ctx.message.author try: p = models.Player() p.custom_load("discord_id = ?", (member.id, )) if p.last_active_day != helpers.get_game_day(): p.last_active_day = helpers.get_game_day() p.update() models.save() except Exception: await ctx.send("I don't think you're playing, {}\n\ (If you think this is a mistake, please talk to a Lord or the King)" .format(member.mention)) return t = models.Team() t.load(p.team_id) l = models.Location() l.load(t.current_location_id) funding_table = paymentreducer.get_funding_table(p.team_id, helpers.get_game_day()) await ctx.send( "Your team is in **{}**, with at least **{}km** to go!\nHere is how today's funding is going:\n{}" .format( l.name, graphanalyzer.dijkstra(graphanalyzer.graph, t.current_location_id, 0), "```" + funding_table + "```"))
def test_shot_msg(self): # Create second player mock_sock_2 = Mock() player_2 = models.Player(mock_sock_2, "18958") player_2.gameId = 234 conn_2 = Mock() conn_2.fileobj = mock_sock_2 conn_2.data = player_2 shot_1 = ["SHOT", "234", "12345", "5", "2"] # Miss shot_2 = ["SHOT", "234", "12345", "8", "8"] # Hit boat shot_3 = ["SHOT", "234", "12345", "8", "7"] # Sink boat shot_4 = ["SHOT", "234", "12345", "5", "7"] # Sink last boat msg_parts = shot_1 + shot_2 + shot_3 + shot_4 mock_sock_2.recv.side_effect = encode_msg(msg_parts) # Set up game game = models.Game(234, 2) self.manager.gameDict[234] = game # Add players to game game.players["12345"] = self.player game.players["18958"] = player_2 game.turnArray = list(game.players.values()) # shuffle(game.turnArray) game.turn = 0 # Set up player's board exp_board = [[0, 0, 0, 0, 0, 0, 15, 0], [0, 0, 13, 0, 0, 0, 15, 0], [0, 0, 13, 0, 0, 0, 15, 0], [0, 0, 13, 0, 0, 0, 15, 0], [0, 0, 0, 0, 14, 0, 5, 0], [0, 0, 0, 0, 14, 0, 0, 0], [0, 0, 0, 0, 14, 0, 0, 0], [12, 12, 12, 0, 14, 0, 1, 1]] self.player.set_up_game(8, [0,2,3,3,4,5]) self.player.gameId = 234 self.player.board.plot = exp_board self.player.liveBoats = 2 self.player.boatHealth = [0, 2, 0, 0, 0, 1] self.player.set_status = "ready" # Test method for i in range(4): process_read_request(self.manager, conn_2) for i in self.out_msgs: print(i) print(self.player.board.plot)
def test_continent_bonus(self): alex = models.Player('Alex') north_america = self.board.continents["north america"] for country in north_america.countries.values(): alex.choose_country(country) self.assertEqual(north_america.get_player_set(), {alex}) self.assertEqual(north_america.bonus, 5)
async def spectate(ctx): member = ctx.message.author player = models.Player() team = models.Team() try: player.custom_load("discord_id = ?", (str(member.id), )) team.load(player.team_id) except Exception as e: await ctx.send( "I think you're already out of the game, {}. If you think this was a mistake, please talk to a Lord or the King" .format(member.mention)) logging.error(e) return # Remove flair from user role = get(member.guild.roles, name=team.name) await member.remove_roles(role, reason='Player left game') # Add spectator role role = get(member.guild.roles, name='Spectator') await member.add_roles(role, reason='Player left game') player.delete() models.save() logging.info("{} has switched to spectating".format(member.id)) await ctx.send("{}, you're now a spectator. Enjoy the show!".format( member.mention))
def action_commit(hex_id, current_gui): move_to_commit = models.Move() move_to_commit.hex_start = models.Player( current_gui.player_id_selected).current_tile move_to_commit.hex_end = hex_id move_to_commit.action_type = current_gui.action_to_do move_to_commit.player_action = current_gui.player_id_selected return move_to_commit
def test_attack_self(self): country_A = self.board.countries['alaska'] country_B = self.board.countries['northwest territory'] alex = models.Player('Alex') alex.choose_country(country_A) alex.choose_country(country_B) with self.assertRaises(AssertionError): country_A.attack(country_B, 3, 1)
def test_has_card_set(self): card1 = self.cards[0] card2 = self.cards[1] card3 = self.cards[2] card4 = self.cards[3] card5 = self.cards[4] alex = models.Player("Alex") alex.cards = {card1, card2, card3, card4, card5} self.assertEqual(alex.has_card_set(), True)
def test_attack(self): country_A = self.board.countries['alaska'] country_B = self.board.countries['northwest territory'] players = [models.Player('Erty'), models.Player('Alex')] country_A.owner = players[0] country_B.owner = players[1] country_A.troops = 30 country_B.troops = 10 with patch.object(random, 'randint') as mock_method: mock_method.side_effect = [6, 6, 1, 1, 1] country_A.attack(country_B, 3, 4) self.assertEqual(country_A.troops, 28) self.assertEqual(country_B.troops, 10) with patch.object(random, 'randint') as mock_method: mock_method.side_effect = [1, 1, 6, 6, 6] country_A.attack(country_B, 3, 2) self.assertEqual(country_A.troops, 28) self.assertEqual(country_B.troops, 8)
def add_to_db(data): ''' When called, it adds the user to the database. ''' new_user = models.Player(email=data['email'], username=data['name'], score=0, profile_image=data['imageUrl']) DB.session.add(new_user) DB.session.commit()
def accept_connection(sock): conn, addr = sock.accept() host, port = addr conn.setblocking(False) print("accepting connection from {0}".format(addr)) data = models.Player(conn, port) events = selectors.EVENT_READ | selectors.EVENT_WRITE sel.register(conn, events, data=data)
def play(): print("Enter your name") name = input() print("Enter start") start = input() player = models.Player(name) level = 1 enemy = models.Enemy(level) global score score = 0 score = models.Player(score) while True: try: player.attack(enemy) player.defense(enemy) except exceptions.EnemyDown: level += 1 print("Enemy down, meet new enemy with level ", level) enemy = models.Enemy(level)
def check_click(hex_id): player_selected = None # TODO replace with match class current_teams = ["Rage", "Peace"] players_on_field = [] for team_name in current_teams: players_on_field = players_on_field + models.Team( team_name).player_list for player_x in players_on_field: if models.Player(player_x).current_tile == hex_id: player_selected = player_x return player_selected
def test_attacking_phase(self): country_A = self.game.board.countries["northwest territory"] country_B = self.game.board.countries["alaska"] country_A.owner = self.players.current_player country_B.owner = models.Player("bob") country_A.troops = 10 country_B.troops = 5 with patch.object(random, 'randint') as mock_random: mock_random.side_effect = [6, 6, 1, 1, 1] self.game.attack(country_A, country_B, 3, 3) self.assertEqual(country_A.troops, 8) self.assertEqual(country_B.troops, 5)
def action_possible_hexes(action_selected, current_gui, current_field): possible_hexes = [] if action_selected == "Move": # find options to move current_hex_id = models.Player( current_gui.player_id_selected).current_tile adj_hexes = current_field.adjacent_hexes(current_hex_id) for hex_id in adj_hexes: player_occupied = check_click(hex_id) if player_occupied is None: possible_hexes.append(hex_id) elif action_selected == "Throw": # find options to throw current_hex_id = models.Player( current_gui.player_id_selected).current_tile current_teams = ["Rage", "Peace"] players_on_field = [] player_hexes = [] for team_name in current_teams: players_on_field = players_on_field + models.Team( team_name).player_list # check validity of throw, only sideways and back passes check_y = current_field.current_field[current_hex_id].hex_coord_y for player_x in players_on_field: hex_x = current_field.current_field[models.Player( player_x).current_tile] if hex_x.hex_coord_y <= check_y: possible_hexes.append(hex_x.hex_id) elif action_selected == "Tackle": # find options to tackle current_hex_id = models.Player( current_gui.player_id_selected).current_tile adj_hexes = current_field.adjacent_hexes(current_hex_id) for hex_id in adj_hexes: player_occupied = check_click(hex_id) if player_occupied is not None: possible_hexes.append(hex_id) else: print("Error, action not possible: ", action_selected) return possible_hexes
def controller_add_player(self): """ Add player control """ get_view_player = self.view_player.add_player() new_player = models.Player( get_view_player[0], get_view_player[1], get_view_player[2], get_view_player[3], get_view_player[4], ) self.players.append(new_player) bdd.serialize_player(self.players)
async def me(ctx): if not config['game_ongoing']: return member = ctx.message.author try: p = models.Player() p.custom_load("discord_id = ?", (member.id, )) await ctx.send("{}, you have **{}** coins".format( member.mention, p.coins)) if p.last_active_day != helpers.get_game_day(): p.last_active_day = helpers.get_game_day() p.update() models.save() except Exception: # Show error if user isn't actually playing await ctx.send("I... don't believe you're playing, {}\n\ (If you think this is a mistake, please talk to a Lord or the King)" .format(member.mention))
def play(): name = print(input('Welcome to the game! Please enter your name here: ')) player_one = models.Player(name) enemy_one = models.Enemy() while True: try: player_one.attack(enemy_one) player_one.defence(enemy_one) except exceptions.EnemyDown: if enemy_one.lives == 0: player_one.lives += 5 enemy_two = models.Enemy() except exceptions.GameOver: with open('scores.txt', 'a+') as file: file.write(player_one.name + ' ' + player_one.score + '\n') raise
def play(): global player_name player_name = input("Please enter your name\n") player = models.Player(player_name) level = 1 opponent = models.Enemy(level) start_game = input("Write 'start' to start the game\n") if start_game == 'start': while True: try: player.attack(opponent) player.defence(opponent) except exceptions.EnemyDown: level += 1 opponent = models.Enemy(level) settings.score = (level - 1) * 5 + player.allowed_attacks
def test_join_play_sail(self): # Set up msg_parts = ["JOIN", "2"] # Create second player mock_sock_2 = Mock() player_2 = models.Player(mock_sock_2, 18958) conn_2 = Mock() conn_2.fileobj = mock_sock_2 conn_2.data = player_2 # Load Messages self.mock_sock.recv.side_effect = encode_msg(msg_parts) mock_sock_2.recv.side_effect = encode_msg(msg_parts) # Test method process_read_request(self.manager, self.conn) process_read_request(self.manager, conn_2) # Get message responses game_msg = self.out_msgs[0] wait_msg = self.out_msgs[1] play_msg = self.out_msgs[2] sail_msg = self.out_msgs[3] game_number = game_msg[4:] # Check play message self.assertEqual(play_msg[:4], "PLAY") self.assertEqual(play_msg[4:7], game_number) self.assertEqual(int(play_msg[7:9]), self.player.boardSize) # Boardsize self.assertEqual(play_msg[9], "1") # Number of opponents self.assertEqual(play_msg[10:15], "18958") # Opp 1 Port self.assertEqual(play_msg[15:35].lstrip(" "), "Anonymous58") #Opp 1 Name # Check sail message self.assertEqual(sail_msg[:4], "SAIL") self.assertEqual(sail_msg[4:7], game_number) self.assertEqual(sail_msg[7], "1") # Coord Size self.assertEqual(sail_msg[8], "5") # Boat Count self.assertEqual(sail_msg[9:14], "23345") # Boat Layout # Check Variables self.assertEqual(self.player.status, "settingBoard") self.assertEqual(self.player.boatHealth, [None] * 6) self.assertIsInstance(self.player.board, models.Board)