Beau Diaz
Beau Diaz

Reputation: 27

Repeat with loop to make a card game in Python

I want to make a card game simulation called 'Game of War" in Python, which can input the number of times that we want to play, for example, 3 times, the output should be like this Enter in the number of simulations for War Game: 10 Sim 1 Player 1 is the winner Sim 2 Player 1 is the winner Sim 3 The game was a draw FINAL RESULT: Player 1 won 2 times Player 2 won 0 times There were 1 draw For now, I'm having a problems with create a function sim_num_games(sim_num) that asks the user for how many simulations they would like to run. The function must return the results for player 1, player 2 and the number of times a game was a tie. Then its must display how many times Player 1 wins, how many times Player 2 wins, and how many times the game was a tie. This is what I got so far.

deck = []
suits = ["Clubs", "Diamonds", "Hearts", "Spades"]

def create_deck():
    for suit in suits:
        for rank in range(2,15):
            deck.append((rank,suit))
    return deck

def deal_cards(the_deck):
    if the_deck[0] <= 10: rank = str(the_deck[0])
    if the_deck[0] == 11: rank = "Jack"
    if the_deck[0] == 12: rank = "Queen"
    if the_deck[0] == 13: rank = "King"
    if the_deck[0] == 14: rank = "Ace"
    fullname = rank + " of " + the_deck[1]
    return fullname
    
def draw_card(player):
    the_deck = deck[0]
    deck.remove(deck[0])
    print(player + 'has: ' + deal_cards(the_deck))
    return the_deck

def play_game(p1_cards,p2_cards):
    
    if p1_cards[0] > p2_cards[0]:
        return "Player one"
    if p1_cards[0] < p2_cards[0]:
        return "Player two"
    else:
        return "DRAW!!!!!!!!"

def main():
    deck = create_deck()
    random.shuffle(deck)
    round_play = 1
    p1_score = 0
    p2_score = 0
    draw = 0
    
    print("ALRIGHT, Let's Play...")


    while len(deck) >= 2:
        print("Hand number: ", round_play)
        player_one_card = draw_card("Player 1 ")
        player_two_card = draw_card("Player 2 ")
        winner = play_game(player_one_card, player_two_card)
        round_play += 1
        if winner == "Player one": p1_score += 1
        if winner == "Player two": p2_score += 1
        if winner == "DRAW!!!!!!!!": draw += 1
        print(f"{winner} wins")
        
    else: 
        print("-"*15)
        print("FINAL GAME RESULTS:","\nPlayer 1 won ", p1_score," hands" ,"\nPlayer 2 won ", p2_score," hands","\n",draw," hands were draw")
main()```
This can generate the deck and play but I cannot put the sim_num_games(sim_num) function in since it always error..

Upvotes: 0

Views: 307

Answers (1)

user2261062
user2261062

Reputation:

I would do something like this as your main structure.

p1_score = 0
p2_score = 0
draw = 0

ngames = int(input("How many games you want to simulate?"))

for _ in range(ngames):
    winner = play_game()
    if winner == 1:
       p1_score += 1
    elif winner == 2:
       p2_score += 1
    else:
       draw += 1

if p1_score > p2_score:
    print(f"Player 1 wins {p1_score} of {ngames} games")
elif p1_score < p2_score:
    print(f"Player 2 wins {p2_score} of {ngames} games")
else:
    print("draw")

Now, you have to put all the logic that initializes a game, plays it and determines a winner inside a function play_game(), which will return either 0, 1 or 2

Ideally you should create a class to have things better organized, but having functions hanging around will also work since it's a small project.

You can also make helper functions, so your main structure keeps as clean as possible. For example you can create a function update_scores() and a function determine_winner() that will take code out of the main structure and make it cleaner.

Upvotes: 1

Related Questions