Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

The play method in the Player class of the craps game plays an entire game without interaction with the user. Revise the Player class so

The play method in the Player class of the craps game plays an entire game without interaction with the user. Revise the Player class so that its user can make individual rolls of the dice and view the results after each roll. The Player class no longer accumulates a list of rolls, but saves the string representation of each roll after it is made.

Add new methods rollDice, getNumberOfRolls, isWinner, and isLoser to the Player class. The last three methods allow the user to obtain the number of rolls and to determine whether there is a winner or a loser. The last two methods are associated with new Boolean instance variables (winner and loser respectively). Two other instance variables track the number of rolls and the string representation of the most recent roll (rollsCount and roll). Another instance variable (atStartup) tracks whether or not the first roll has occurred.

At instantiation, the roll, rollsCount, atStartup, winner, and loser variables are set to their appropriate initial values. All game logic is now in the rollDice method. This method rolls the dice once, updates the state of the Player object, and returns a tuple of the values of the dice for that roll. Include in the module the playOneGame and playManyGames functions, suitably updated for the new interface to the Player class.

craps.py code:

""" File: craps.py

This module studies and plays the game of craps. """

from die import Die

class Player(object):

def __init__(self): """Has a pair of dice and an empty rolls list.""" self.die1 = Die() self.die2 = Die() self.rolls = []

def __str__(self): """Returns a string representation of the list of rolls.""" result = "" for (v1, v2) in self.rolls: result = result + str((v1, v2)) + " " +\ str(v1 + v2) + " " return result

def getNumberOfRolls(self): """Returns the number of the rolls.""" return len(self.rolls)

def play(self): """Plays a game, saves the rolls for that game, and returns True for a win and False for a loss.""" self.rolls = [] self.die1.roll() self.die2.roll() (v1, v2) = (self.die1.getValue(), self.die2.getValue()) self.rolls.append((v1, v2)) initialSum = v1 + v2 if initialSum in (2, 3, 12): return False elif initialSum in (7, 11): return True while (True): self.die1.roll() self.die2.roll() (v1, v2) = (self.die1.getValue(), self.die2.getValue()) self.rolls.append((v1, v2)) laterSum = v1 + v2 if laterSum == 7: return False elif laterSum == initialSum: return True

def playOneGame(): """Plays a single game and prints the results.""" player = Player() youWin = player.play() print(player) if youWin: print("You win!") else: print("You lose!")

def playManyGames(number): """Plays a number of games and prints statistics.""" wins = 0 losses = 0 winRolls = 0 lossRolls = 0 player = Player() for count in range(number): hasWon = player.play() rolls = player.getNumberOfRolls() if hasWon: wins += 1 winRolls += rolls else: losses += 1 lossRolls += rolls print("The total number of wins is", wins) print("The total number of losses is", losses) print("The average number of rolls per win is %0.2f" % \ (winRolls / wins)) print("The average number of rolls per loss is %0.2f" % \ (lossRolls / losses)) print("The winning percentage is %0.3f" % (wins*100 / number)+"%")

def main(): """Plays a number of games and prints statistics.""" number = int(input("Enter the number of games: ")) playManyGames(number)

if __name__ == "__main__": main()

-------------

die.py code:

""" File: die.py

This module defines the Die class. """

from random import randint

class Die: """This class represents a six-sided die."""

def __init__(self): """Creates a new die with a value of 1.""" self.value = 1

def roll(self): """Resets the die's value to a random number between 1 and 6.""" self.value = randint(1, 6)

def getValue(self): """Returns the value of the die's top face.""" return self.value

def __str__(self): """Returns the string rep of the die.""" return str(self.getValue())

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

Databases Illuminated

Authors: Catherine M. Ricardo, Susan D. Urban, Karen C. Davis

4th Edition

1284231585, 978-1284231588

More Books

Students also viewed these Databases questions

Question

True or false: Ethernet and 802.11 use the same frame structure.

Answered: 1 week ago

Question

6. What are some of the advantages and disadvantages of ESOPs?

Answered: 1 week ago