コード例 #1
0
ファイル: game_AI.py プロジェクト: pikachu615/uno
def make_AI_basic(deck, AI_name, mem_depth=0):
    """
    Simple AI creation function that allows for the creation of a simple
    "flash frame decision" low memory style AI.

    Returns: AI_player_gen: a simple generated AI
    """
    AI_player_gen = game_classes.Player(AI_name)
    AI_player_gen.grab_cards(deck, 7)
    AI_player_gen.AI = True
    AI_player_gen.Main_Decision_Tree = Main_Decision_Tree.Main_Decision_Tree(AI_name)
    AI_player_gen.Card_Guess_Tree = Card_Guess_Tree.Card_Guess_Tree(AI_name, mem_depth)
    AI_player_gen.Card_Choose_Tree = Card_Choose_Tree.Card_Choose_Tree(AI_name)

    return AI_player_gen
コード例 #2
0
def test_Main_Decision_Tree_2():
    """
    Test function that tests the basic capabilites of a Main_Decision_Tree
    going over feature such as creating a Main_Decision_Tree, and deciding a
    player decision based on board state.
    """

    test_tree = Main_Decision_Tree("test")

    test_board = game_classes.Board("board_test")
    deck1 = gen_rand_deck("deck_test", 0)

    player1 = game_classes.Player("player_1")
    player1.grab_cards(deck1, 8)

    player2AI = game_classes.Player("player_2AI")
    player2AI.grab_cards(deck1, 1)

    player3AI = game_classes.Player("player_3AI")
    player3AI.grab_cards(deck1, 7)

    player4AI = game_classes.Player("player_4AI")
    player4AI.grab_cards(deck1, 7)

    player5AI = game_classes.Player("player_5AI")
    player5AI.grab_cards(deck1, 7)

    player6AI = game_classes.Player("player_6AI")
    player6AI.grab_cards(deck1, 7)

    player7AI = game_classes.Player("player_7AI")
    player7AI.grab_cards(deck1, 7)

    player1.Main_Decision_Tree = test_tree
    player1.Card_Choose_Tree = Card_Choose_Tree.Card_Choose_Tree("test")

    for i in range(len(player1.hand)):
        print(player1.hand[i].name)
        player1.hand[i].old_val = i

    test_player = player1

    test_players = [
        player1, player2AI, player3AI, player4AI, player5AI, player6AI,
        player7AI
    ]

    travel_Main_Decision_Tree(test_board, deck1, test_player, test_players,
                              test_tree.Dec_Tree)
    print(test_board.card_stack[-1].name)
コード例 #3
0
ファイル: Card_Choose_Tree.py プロジェクト: pikachu615/uno
def test_Card_Choose_Tree():
    """
    Test function that tests the basic capabilites of a Card_Choose_Tree
    going over feature such as creating a Card_Choose_Tree, and deciding a
    card decision based on board state (thus traveling the tree itself).
    """
    test_tree = Card_Choose_Tree("test")

    test_board = game_classes.Board("board_test")
    deck1 = gen_rand_deck("deck_test", 0)

    player1 = game_classes.Player("player_1")
    player1.grab_cards(deck1, 7)

    player2AI = game_classes.Player("player_2AI")
    player2AI.grab_cards(deck1, 7)

    player3AI = game_classes.Player("player_3AI")
    player3AI.grab_cards(deck1, 7)

    player4AI = game_classes.Player("player_4AI")
    player4AI.grab_cards(deck1, 7)

    player5AI = game_classes.Player("player_5AI")
    player5AI.grab_cards(deck1, 7)

    player6AI = game_classes.Player("player_6AI")
    player6AI.grab_cards(deck1, 7)

    player7AI = game_classes.Player("player_7AI")
    player7AI.grab_cards(deck1, 7)

    test_player = player1
    test_players = [
        player1, player2AI, player3AI, player4AI, player5AI, player6AI,
        player7AI
    ]

    travel_Card_Choose_Tree(test_board, test_player, test_players,
                            test_tree.Choose_Tree)
コード例 #4
0
def new_player():
    data = request.json
    response = dict()
    response['status'] = 'invalid'
    if data is not None:
        aid = data.get('aid', None)
        username = data.get('username', None)
        if aid is not None and username is not None:
            new_corp = game_classes.Corporation()
            if config.developing:
                new_corp.gain_ore(5000)
            else:
                new_corp.gain_ore(205)
            corporations[new_corp.corp_id] = new_corp
            player = game_classes.Player()
            player.assign_corp(new_corp)
            player.assign_aid(aid)
            player.assign_username(username)
            players[player.uid] = player
            spawn_player(player.uid)
            response['id'] = player.uid
            response['status'] = 'valid'

    return home_cor(jsonify(**response))
コード例 #5
0
    "You brandish your kitchen knife with skill and attack your opponent", 7)
axe = game_classes.Weapon(
    'axe', 18, "You brandish your axe with skill and attack your opponent", 10)
scalpel = game_classes.Weapon(
    'scalpel', 20,
    "You brandish your scalpel with skill and attack your opponent", 12)
rifle = game_classes.Weapon(
    'blaster rifle', 30,
    "You let loose with your blaster rifle, firing off several devestatng rounds that are sure to ruin someones day",
    20)
suit = game_classes.Weapon(
    'Exo-Suit', 50,
    "Your Exo-Suit whirs to life and supplies power to your devestating blows",
    200)

hero = game_classes.Player(health=100, armed=fists, base_weapon=fists)

kevin = game_classes.Beetle('Red Specks', 30, 8, 101, None)
dave = game_classes.Beetle('Blue Bars', 20, 9, 101, None)
shawn = game_classes.Beetle('No-Wings', 35, 5, 101, None)
gus = game_classes.Beetle('3-Arms', 15, 4, 51, None)
lassie = game_classes.Beetle('Sneak', 30, 8, 101, None)
jim = game_classes.Beetle('White Eyes', 25, 10, 201, None)
paul = game_classes.Beetle('Red Stripes', 30, 8, 101, None)
john = game_classes.Beetle('Green Marks', 30, 8, 101, None)
george = game_classes.Beetle('Black Stripes', 30, 8, 101, None)
ringo = game_classes.Beetle('The Small One', 40, 10, 101, None)
ben = game_classes.Beetle('Hairy', 30, 8, 101, None)
chris = game_classes.Beetle('Blue Specks', 30, 8, 101, None)
BBEG = game_classes.Beetle('The Warlord', 100, 15, 51, None)
コード例 #6
0
import display_funct
import game_AI
import game_classes
import game_logic

# loop for allowing multiple games to be restarted
while True:
    # initilizing the board to be used within the game
    board1 = game_classes.Board("board1")

    # initilizing a deck to be used within the game (3 copies are added to
    # each other)
    deck1 = gen_rand_deck("deck1", 0)

    # defining a 7 player uno game
    player1 = game_classes.Player("player_1")
    player1.grab_cards(deck1, 7)

    player2AI = game_AI.make_AI_basic(deck1, "player_2AI", 7)
    player3AI = game_AI.make_AI_basic(deck1, "player_3AI", 7)
    player4AI = game_AI.make_AI_basic(deck1, "player_4AI", 7)
    player5AI = game_AI.make_AI_basic(deck1, "player_5AI", 7)
    player6AI = game_AI.make_AI_basic(deck1, "player_6AI", 7)
    player7AI = game_AI.make_AI_basic(deck1, "player_7AI", 7)

    display_funct.redraw_hand_visble(player1, None)


    # enters into playing the game
    game_logic.game_loop(board1, deck1, [player1, player2AI, player3AI, player4AI,
                         player5AI, player6AI, player7AI])
コード例 #7
0
def GameMode():
    # Reset screen
    screen.fill(pygame.Color("forestgreen"))
    pygame.display.flip()

    # Buttons for menu
    menu_space = pygame.draw.rect(screen, pygame.Color("grey"),
                                  [0, 480, 960, 60])
    canasta_button = game_classes.Button_Hover("Canasta", (80, 510), screen,
                                               "center")
    draw_button = game_classes.Button_Hover("Draw 2", (240, 510), screen,
                                            "center")
    pile_button = game_classes.Button_Hover("Take pile", (400, 510), screen,
                                            "center")
    discard_button = game_classes.Button_Hover("Discard", (560, 510), screen,
                                               "center")
    rules_button = game_classes.Button_Hover("Rules", (720, 510), screen,
                                             "center")
    quit_button = game_classes.Button_Hover("QUIT", (880, 510), screen,
                                            "center")

    # Buttons to see other players
    pygame.draw.circle(screen, pygame.Color("grey"), [100, 0], 100)
    pygame.draw.circle(screen, pygame.Color("grey"), [480, 0], 100)
    pygame.draw.circle(screen, pygame.Color("grey"), [860, 0], 100)

    player2_button = game_classes.Button_Hover("Player 1", (100, 0), screen,
                                               "midtop")
    player3_button = game_classes.Button_Hover("Player 2", (480, 0), screen,
                                               "midtop")
    player4_button = game_classes.Button_Hover("Player 3", (860, 0), screen,
                                               "midtop")

    font = pygame.font.Font(None, 40)
    player1_display = font.render("H", True, pygame.Color("black"))
    screen.blit(player1_display, player1_display.get_rect(center=(100, 60)))
    player2_display = font.render("H", True, pygame.Color("black"))
    screen.blit(player2_display, player2_display.get_rect(center=(480, 60)))
    player3_display = font.render("H", True, pygame.Color("black"))
    screen.blit(player3_display, player3_display.get_rect(center=(860, 60)))

    # GameMode Loop
    done = False
    canasta_on_screen = False
    i = 0
    deck = game_classes.Deck()
    deck.shuffle()

    # Creating players
    player1 = game_classes.Player(deck)
    player2 = game_classes.Player(deck)
    player3 = game_classes.Player(deck)
    player4 = game_classes.Player(deck)

    # Starting positions for the players cards
    hf_x_start, hf_y_start, x_overlap_dist = 80, 370, 30
    card_height, card_width = 90, 60
    display_hand(player1)

    #  Starting positions for thr canastas cards
    c_x_start, c_y_start, y_shift = 25, 150, 15

    #  Drawing the starting deck card back
    card = pygame.image.load("res/img/cards/red_back.png").convert()
    card = pygame.transform.scale(card, (card_width, card_height))
    screen.blit(card, [640, 25])

    # Where the pile will be drawn when it is created
    screen.blit(card, [260, 25])

    prev_time = time.time()
    while not done:
        click = pygame.mouse.get_pressed()
        pygame.time.wait(5)
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                done = True
                pygame.quit()
                sys.exit()
            if event.type == pygame.MOUSEBUTTONUP:
                pos = pygame.mouse.get_pos()
                # Checks for clicking on cards in the hand and if it detects it, will toggle the selected attribute of the card and re-draw the hand
                if (pos[1] <
                    (hf_y_start + card_height)) and (pos[1] > hf_y_start):
                    if (pos[0] > hf_x_start) and (
                            pos[0] <
                        (x_overlap_dist * len(player1.get_hand())) +
                            hf_x_start + x_overlap_dist):
                        card_pos = pos[0] - hf_x_start
                        card_pos = int(card_pos / x_overlap_dist)
                        if card_pos > len(player1.get_hand()) - 1:
                            card_pos -= 1
                        player1.get_hand()[card_pos].toggle_selected()
                        display_hand(player1)
                # Checks for clicking on canasta's, and if it detects it, will attempt to add any selected cards to that canasta
                if (pos[0] > c_x_start and pos[0] <
                        card_width * len(player1.get_canastas()) + c_x_start
                        and pos[1] > c_y_start):
                    index = int((pos[0] - c_x_start) / card_width)
                    # Statement checks whether the stack has been squished or not
                    if (len(player1.get_canastas()) * y_shift + 60 > 200):
                        y_shift = (200 - 60) / (len(player1.get_canastas()))
                    # Checks that the mouse button up was detected on a y position that has cards on it, and if so, attempts to add cards
                    if (pos[1] <
                        (len(player1.get_canastas()[index]) - 1) * y_shift +
                            c_y_start + card_height):
                        player1.add_to_canasta(index)
                        display_canasta(player1)
                        display_hand(player1)
                        y_shift = 15

        # Check for hover for menu
        canasta_button.check_hover(screen)
        draw_button.check_hover(screen)
        pile_button.check_hover(screen)
        discard_button.check_hover(screen)
        rules_button.check_hover(screen)
        quit_button.check_hover(screen)

        player2_button.check_hover(screen)
        # Check hover for players
        if player2_button.hovered == True and i == 0:
            # print ("hover 1")
            # player1_hand = False
            # pygame.draw.circle(screen, pygame.Color("grey"), [100, 0], 100)
            overlay = pygame.Rect(10, 10,
                                  (card_width * len(player2.hand) / 2) +
                                  x_overlap_dist + 40, card_height + 40)
            overlay.center = (screen.get_width() / 2,
                              (screen.get_height() / 2) - 50)
            pygame.draw.rect(screen, pygame.Color("grey"), overlay)
            display_on_hover(player2, overlay)
            pygame.display.flip()
            reset_overlay = pygame.Rect(10, 10,
                                        (card_width * len(player2.hand) / 2) +
                                        x_overlap_dist + 40, card_height + 40)
            reset_overlay.center = (screen.get_width() / 2,
                                    (screen.get_height() / 2) - 50)
            player2_button = game_classes.Button_Hover("Player 1", (100, 0),
                                                       screen, "midtop")
            player2_button.check_hover(screen)
            i += 1
        elif player2_button.hovered == False and canasta_on_screen and i > 0:
            i = 0
            pygame.draw.rect(screen, pygame.Color("gold"), (20, 140, 920, 200))
            display_canasta(player1)
        elif player2_button.hovered == False and not canasta_on_screen:
            i = 0
            reset_overlay = pygame.Rect(10, 10,
                                        (card_width * len(player2.hand) / 2) +
                                        x_overlap_dist + 40, card_height + 40)
            reset_overlay.center = (screen.get_width() / 2,
                                    (screen.get_height() / 2) - 50)
            pygame.draw.rect(screen, pygame.Color("forestgreen"),
                             reset_overlay)

        player3_button.check_hover(screen)
        if player3_button.hovered == True:
            # print ("hover 2")
            pass
        player4_button.check_hover(screen)
        if player4_button.hovered == True:
            # print ("hover 3")
            pass

        # See if button was clicked in the menu
        # call make_canasta(cards) with the cards being an array of selected cards
        if canasta_button.rect.collidepoint(
                pygame.mouse.get_pos()) and click[0]:
            selected_cards = player1.get_selected_cards()
            if player1.make_canasta(selected_cards):
                canasta_on_screen = True
                for pos in range(len(selected_cards)):
                    player1.remove_card(selected_cards[pos])
            print(player1.get_canastas())
            display_canasta(player1)
            display_hand(player1)
            canasta_on_screen = True

        if draw_button.rect.collidepoint(pygame.mouse.get_pos()) and click[0]:
            print("draw 2")
            player1.add_card(deck.get_card())
            player1.add_card(deck.get_card())
            display_hand(player1)

        if pile_button.rect.collidepoint(pygame.mouse.get_pos()) and click[0]:
            # print("pile")
            pass

        if discard_button.rect.collidepoint(
                pygame.mouse.get_pos()) and click[0]:
            print("discard")
            temp_discard_deck = player1.get_selected_cards()
            if (len(temp_discard_deck) != 1):  # Unclear discard
                print(temp_discard_deck)
                print("Incorrect number of cards")
            else:  # Clear Discard
                print(temp_discard_deck)
                print("Correct number of cards")
                player1.remove_card(temp_discard_deck[0])
            player2.take_turn()
            display_hand(player1)

        if rules_button.rect.collidepoint(pygame.mouse.get_pos()) and click[0]:
            # print("rules")
            pass

        if quit_button.rect.collidepoint(pygame.mouse.get_pos()) and click[0]:
            done = True

        # Check if players are in hand or foot
        if not player1.on_hand():
            player1_display = font.render("F", True, pygame.Color("black"))
            screen.blit(player1_display,
                        player1_display.get_rect(center=(100, 60)))
        if not player2.on_hand():
            player2_display = font.render("F", True, pygame.Color("black"))
            screen.blit(player2_display,
                        player2_display.get_rect(center=(100, 60)))
        if not player3.on_hand():
            player3_display = font.render("F", True, pygame.Color("black"))
            screen.blit(player3_display,
                        player3_display.get_rect(center=(100, 60)))

        pygame.display.flip()
        pygame.display.update()

        curr_time = time.time()  # so now we have time after processing
        diff = curr_time - prev_time  # frame took this much time to process and render
        delay = max(
            1.0 / target_fps - diff, 0
        )  # if we finished early, wait the remaining time to desired fps, else wait 0 ms!
        time.sleep(delay)
        fps = 1.0 / (
            delay + diff
        )  # fps is based on total time ("processing" diff time + "wasted" delay time)
        prev_time = curr_time
        pygame.display.set_caption("{0}: {1:.2f}".format(title, fps))