I'm currently writing code for a dice game in Python 3.6 I understand my coding is a little off in this, however, I'm really just wondering how to start my while loop. The instructions of the game are as follows...
A human player plays against the computer.
Player 1 rolls until they either win, decide to hold, or roll a 1.Same for player 2.
They take turns rolling two dice, and the totals of the dice are added together Unless a 1 is rolled.
If a one 1 is rolled, you get no score added and it's the next person's turn. If two 1's are rolled, you lose all of your points and its the next person's turn.
The first player to 100 score, wins the game.
My game works fine until Player 1 and Player 2 both hit "y" to hold back to back. Then the game quits switching between player's until "n" to not hold is hit again. Any idea why? I was told I need variables to decide who's turn it is but I'm not sure how to incorporate them into my code. Any help would be appreciated.
import random
def main():
print("Welcome to the Two Dice Pig Game. You are Player 1!")
Player1 = 0
Player2 = 0
while(Player1<100 and Player2<100):
p1dice=random.randrange(1,7)
p1dice2=random.randrange(1,7)
Player1+=p1dice+p1dice2
print("Player 1 dice 1 =",p1dice)
print("Player 1 dice 2 =",p1dice2)
print("Player 1 dice total =",Player1)
print("Does player 1 want to hold?")
choose1 = input("Enter y for yes or n for no.")
if(choose1=="n"):
p1dice=random.randrange(1,7)
p1dice2=random.randrange(1,7)
Player1+=p1dice+p1dice2
print("Player 1 dice 1 =",p1dice)
print("Player 1 dice 2 =",p1dice2)
print("Player 1 dice total =",Player1)
if(Player1>=100):
print("Player 1 wins!")
else:
print("Does player 1 want to hold?")
choose1 = input("Enter y for yes or n for no.")
while(choose1=="y"):
print("It's player 2's turn.")
p2dice=random.randrange(1,7)
p2dice2=random.randrange(1,7)
Player2+=p2dice+p2dice2
print("Player 2 dice 2 =",p2dice)
print("Player 2 dice 2 =",p2dice2)
print("Player 2 dice total =",Player2)
print("Does player 2 want to hold?")
choose2 = input("Enter y for yes or n for no.")
while(choose2=="n"):
p2dice=random.randrange(1,7)
p2dice2=random.randrange(1,7)
Player2+=p2dice+p2dice2
print("Player 2 dice 2 =",p2dice)
print("Player 2 dice 2 =",p2dice2)
print("Player 2 dice total =",Player2)
print("Does player 2 want to hold?")
choose2 = input("Enter y for yes or n for no.")
while(choose2=="y"):
print("It's player 1's turn.")
p1dice=random.randrange(1,7)
p1dice2=random.randrange(1,7)
Player1+=p1dice+p1dice2
print("Player 1 dice 2 =",p1dice)
print("Player 1 dice 2 =",p1dice2)
print("Player 1 dice total =",Player1)
print("Does player 1 want to hold?")
choose2 = input("Enter y for yes or n for no.")
main()
You would want to simplify your code by doing something like this:
# Keep track of whose turn it is
player = 1
# Keep a dictionary of scores for each player (1 or 2)
scores = {1: 0, 2: 0}
choice = 'n'
# While neither player has > 100
while max(d.values()) < 100:
# Roll until current player decides to keep roll
while choice == 'n':
print('Player', player, 'turn')
roll = random.randrange(1,7) + random.randrange(1,7)
print('You rolled', roll)
choice = input('Keep roll? y/n')
# Increment that player's score
scores[player] += roll
choice = 'n'
# Change to other player
player = (player % 2) + 1
Use a dict to keep a score per player name, switch a turn
that holds the player currently throwing dice.
Implemented some logic as when to change turn
from one to the other:
import random
def score(players):
for k in players:
print("{} has {} points".format(k,players[k]))
def hold(player):
if input("Does {} want to hold? [y or anything]".format(player)).lower().strip() == "y":
return "y"
return "n"
def main():
dice = range(1,7)
players = {"p1":0, "p2":0}
turn = ""
change_player = "y"
print("Welcome to the Two Dice Pig Game. You are Player 1!")
while all(x < 100 for x in players.values()):
# initially changePlayer is
if change_player == "y":
# print both scores on player changed
score(players)
turn = "p1" if turn != "p1" else "p2"
dice1, dice2 = random.choices(dice,k=2)
print("{} threw {} and {} for a total of {}".format(turn,d1,d2,d1+d2))
if dice1 + dice2 == 2:
players[turn] = 0
print("Two 1 - you're done for now. Your points go back to 0.")
change_player = "y"
elif dice1 == 1 or dice2 == 1:
print("One 1 - you're done for now.")
change_player = "y"
else:
# only case where we need to add values and print new score
players[turn] += dice1 + dice2
print("Your score: {}".format(players[turn]))
if turn == "p1":
change_player = hold(turn)
else:
change_player = "n" # computer is greedy, never stops
winner, points = max(players.items(),key=lambda x: x[1])
print("The winner is {} with {} points.".format(winner,points))
main()
Output:
Welcome to the Two Dice Pig Game. You are Player 1!
p1 has 0 points
p2 has 0 points
p1 threw 5 and 1 for a total of 6
One 1 - you're done for now.
p1 has 0 points
p2 has 0 points
p2 threw 3 and 6 for a total of 9
Your score: 9
p2 threw 6 and 2 for a total of 8
Your score: 17
p2 threw 4 and 1 for a total of 5
One 1 - you're done for now.
p1 has 0 points
p2 has 17 points
p1 threw 4 and 5 for a total of 9
Your score: 9
Does p1 want to hold? [y or anything]
p1 threw 2 and 6 for a total of 8
Your score: 17
Does p1 want to hold? [y or anything]
p1 threw 4 and 6 for a total of 10
Your score: 27
[snipp]
One 1 - you're done for now.
p1 has 91 points
p2 has 51 points
p1 threw 6 and 4 for a total of 10
Your score: 101
Does p1 want to hold? [y or anything]
The winner is p1 with 101 points.
Because once you've set a choice for choose1
, it never gets set again. The quick way to fix this would be to add an input after the two while loops for choose2
, although you may want to look into making your code neater through making functions for the common logic
while(choose2=="y"):
....
choose1 = input("Enter y for yes or n for no.")
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.