answer.
Ask question
Login Signup
Ask question
All categories
  • English
  • Mathematics
  • Social Studies
  • Business
  • History
  • Health
  • Geography
  • Biology
  • Physics
  • Chemistry
  • Computers and Technology
  • Arts
  • World Languages
  • Spanish
  • French
  • German
  • Advanced Placement (AP)
  • SAT
  • Medicine
  • Law
  • Engineering
charle
2 months ago
7

This question involves a simulation of a two-player game. In the game, two simulated players each start out with an equal number

of coins. In each round, each player chooses to spend either 1, 2, or 3 coins. Coins are then awarded to each player according to the following rules.
Same rule: If both players spend the same number of coins, player 2 gains 1 coin.
Off-by-one rule: If the players do not spend the same number of coins and the positive difference between the number of coins spent by the two players is 1, player 2 is awarded 1 coin.
Off-by-two rule: If the players do not spend the same number of coins and the positive difference between the number of coins spent by the two players is 2, player 1 is awarded 2 coins.

The game ends when the specified number of rounds have been played or when a player’s coin count is less than 3 at the end of a round.

The CoinGame class is shown below. You will write two methods in the CoinGame class.

public class CoinGame

{

private int startingCoins; // starting number of coins

private int maxRounds; // maximum number of rounds played



public CoinGame(int s, int r)

{

startingCoins = s;

maxRounds = r;

}



/** Returns the number of coins (1, 2, or 3) that player 1 will spend.

*/

public int getPlayer1Move()

{

/* implementation not shown. */

}



/** Returns the number of coins (1, 2, or 3) that player 2 will spend, as described in part (a).

*/

public int getPlayer2Move(int round)

{

/* to be implemented in part (a) */

}



/** Plays a simulated game between two players, as described in part (b).

*/

public void playGame()

{

/* to be implemented in part (b) */

}

}

In the simulation, player 2 will always play according to the same strategy. The number of coins player 2 spends is based on what round it is, as described below.

(a) You will write method getPlayer2Move, which returns the number of coins that player 2 will spend in a given round of the game. In the first round of the game, the parameter round has the value 1, in the second round of the game, it has the value 2, and so on. The method returns 1, 2, or 3 based on the following rules.

If round is divisible by 3, then return 3.
If round is not divisible by 3 but is divisible by 2, then return 2.
If round is not divisible by 3 and is not divisible by 2, then return 1.
Complete method getPlayer2Move below by assigning the correct value to result to be returned.

/** Returns the number of coins (1, 2, or 3) that player 2 will spend, as described in part (a).

*/

public int getPlayer2Move(int round)

{

int result;

return result;

}

Write the method playGame, which simulates a game between player 1 and player 2, based on the rules and example shown at the beginning of the question. Both player 1 and player 2 start the game with startingCoins coins. Computer player 1 spends 1, 2, or 3 coins based on the value returned by the method getPlayer1Move(). Computer player 2 spends 1, 2, or 3 coins based on the value returned by the method getPlayer2Move().

The game ends when maxRounds rounds have been played or when a player’s coin count is less than 3 at the end of a round.

At the end of the game, the winner is determined according to the following rules.

If both players have the same number of coins at the end of the game, the method prints "tie game".
If player 1 has more coins than player 2, the method prints "player 1 wins".
If player 2 has more coins than player 1, the method prints "player 2 wins".
(b) Assume that getPlayer2Move works as specified, regardless of what you wrote in part (a) . You must use getPlayer1Move and getPlayer2Move appropriately to receive full credit.

Complete method playGame below.

/** Plays a simulated game between two players, as described in part (b).

*/

public void playGame()
Computers and Technology
1 answer:
Natasha_Volkova [1K]2 months ago
7 0

[A] Let’s first clarify the getPlayer2Move rules.

  • If the round is divisible by 3, return 3.

A number is divisible by another if the result of the division leaves no remainder. The code representation would be:

if (round%3 == 0)

result = 3;

  • If the round is not divisible by 3 but is by 2, return 2.

Using the remainder operation again, we can implement this with an else-if statement:

else if (round%2 == 0)

result = 2;

  • If neither condition holds, return 1.

Using an else statement works well here.

else

result = 1;

The complete code for part A is listed below.

[B]

playGame method:

Let’s examine the game rules quickly:

  • If the coin expenditure is identical for both players, player 2 receives 1 coin.

This can be expressed as if player1Spending == player2Spending, resulting in player 2 acquiring a coin.

  • If the spent amounts differ by 1 coin, player 2 earns 1 coin.

In cases where the absolute difference of (player1Spending - player2Spending == 1) , player 2 receives a coin.

  • If the difference is 2 coins, player 1 earns 2 coins.

Here, either using an else statement or a separate condition is viable, though I prefer the else statement.

A while loop can be employed to recognize when the game concludes, either when a player has fewer than 3 coins or when maxRounds have transpired.

You might be interested in
Describe a strategy for avoiding nested conditionals. Give your own example of a nested conditional that can be modified to beco
maria [1035]

Answer:

To prevent nested conditionals, one can utilize logical expressions like the AND operator.

A recommended approach is creating an interface class with a method designed for a shared function. This design approach is known as the strategy design pattern. The conditional statements can be consolidated into this method. Subsequently, each class can implement this interface and invoke that shared method as needed by constructing instances of subclasses and calling the common method for those objects. This illustrates polymorphism.

Explanation:

Nested conditionals occur when if or else if statements are placed within another condition. For instance:

if( condition1) {

//runs when condition1 is true

  if(condition2) {

//runs when both condition1 and condition2 are true

  }  else if(condition3) {

 //when condition1 is true and condition3 is also true

} else {

 //condition1 is true but neither condition2 nor conditions3 are satisfied

}  }

Excessive nested conditionals can complicate the program, rendering it hard to read or comprehend, particularly if there's improper indentation. Debugging also becomes challenging when there are numerous nested statements.

Thus, several strategies can be adopted to eliminate nested conditionals, such as utilizing a switch statement.

For instance, I’ll present an example of the strategies discussed earlier:

Logical Expressions Usage:

A method to avoid nested conditionals is by employing logical expressions with logical operators like the AND operator. The previous nested conditionals can be reframed as:

if(condition1 && condition2){ //only runs when both condition1 and condition2 are true

} else if(condition1 && condition3) {

executes only if both condition1 and condition3 are true

} else if(condition1 ){

//condition1 is satisfied but neither condtion2 nor condtion3 are true  }

This can be further simplified to one condition as:

if(!condition3){

// when  condition1 and condition2 are both satisfied

}

else

// condition3 is met

Now, consider a simple instance dealing with whether to attend school based on certain conditions.

if (temperature< 40)

{

   if (busArrived=="yes")

   {

       if (!sick)

       {

           if (homework=="done")

           {

               printf("Go to school.");

           }

       }                    

   }

}

Here, nested conditionals are evident. This can be restructured into a solitary conditional using the AND logical operator.

if ((temperature <40) && (busArrived=="yes") &&

(!sick) && (homework=="done"))

{    cout<<"Eligible for promotion."; }

The alternate method is utilizing an interface. For example, you can

abstract class Shape{

//declare a method common to all sub classes

  abstract public int area();

// same method that varies by formula of area for different shapes

}

class Triangle extends Shape{

  public int area() {

     // implementation of area code for Triangle

return (width * height / 2);

  }

}

class Rectangle extends Shape{

  public int area() {

     // implementation of area code for Rectangle

    return (width * height)

  }

}

Now, you can readily create Rectangle or Triangle instances and invoke area() for any of those objects, resulting in execution of the appropriate version accordingly.

4 0
2 months ago
Which kind of file would be hurt most by lossy compression algorithm
oksian1 [950]

Response: a file containing audio

Clarification:

8 0
1 month ago
Read 2 more answers
Suppose you decide to use the number of times you see any of the area codes of the places Yanay has been to in 50 spam calls as
Harlamova29_29 [1022]
In Python: import random def simulate_visited_area_codes(): area_codes = [] for i in range(51): num = random.randint(200,1000) area_codes.append(num) visited_codes = [289, 657, 786, 540] count = 0 for i in range(51): for j in range(len(visited_codes)): if area_codes[i] == visited_codes[j]: count+=1 return count print("Visited Areas: " + str(simulate_visited_area_codes())) Explanation: Your question appears to lack many details, and therefore I will make some assumptions. These are: The 50 area codes are stored in the area_codes list, which is populated with randomly generated values. The visited area codes are saved in visited_codes list, initially set as [289, 657, 786, 540]. The subsequent program aims to count and explain the necessary steps.
8 0
1 month ago
The factorial of a nonnegative integer n is written n ! (pronounced "n factorial") and is defined as follows: n ! = n · (n - 1)
Harlamova29_29 [1022]
Here are the programs. I have written C++ and Python scripts:

a)

C++

#include<iostream>  

using namespace std;  

int factorial(int num)  {  

   if (num == 0)  

       return 1;  

   return num * factorial(num - 1);  }    

int main()  {  

   int integer;

   cout<<"Enter a non negative integer: ";

   cin>>integer;

   cout<< "Factorial of "<< integer<<" is "<< factorial(integer)<< endl;  }

Python:

def factorial(num):  

   if num == 0:  

       return 1

   return num * factorial(num-1)  

integer = int(input("Enter a non negative integer: "))  

print("Factorial of", integer, "is", factorial(integer))

b)

C++

#include <iostream>  

using namespace std;

double factorial(int number) {  

if (number == 0)  

 return 1;  

return number * factorial(number - 1); }  

 

double estimate_e(int num){

    double e = 1;

    for(int i = 1; i < num; i++)

     e = e + 1/factorial(i);

     cout<<"e: "<< e; }  

 

int main(){

int term;

cout<<"Enter a term to evaluate: ";

cin>>term;

estimate_e(term);}

Python:

def factorial(number):  

   if number == 0:  

       return 1

   return number * factorial(number-1)  

def estimate_e(term):

   if not term:

       return 0

   else:

       return (1 / factorial(term-1)) + estimate_e(term-1)

number = int(input("Enter how many terms to evaluate "))

print("e: ", estimate_e(number))

c)

C++

#include <iostream>

using namespace std;

int main(){

   float terms, sumSeries, series;

   int i, number;

   cout << " Input the value of x: ";

   cin >> number;

   cout << " Input number of terms: ";

   cin >> terms;

   sumSeries = 1;

   series = 1;

   for (i = 1; i < terms; i++)      {

       series = series * number / (float)i;

       sumSeries = sumSeries + series;     }

   cout << " The sum  is: " << sumSeries << endl;  }  

Python    

def ePowerx(number,terms):

   sumSeries = 1

   series =1

   for x in range(1,terms):

       series = series * number / x;

       sumSeries = sumSeries + series;

   return sumSeries    

num = int(input("Enter a number: "))

term=int(input("Enter a number: "))

print("e^x: ",ePowerx(num,term))

Explanation:

a)

The program includes a factorial method that takes a number as an argument and calculates its factorial using recursion. For instance, if number = 3

The base case occurs at  if (number == 0)

and the recursion is handled with return number * factorial(number - 1);  

With number = 3 not equaling zero, the function calls itself recursively to get the factorial of 3

return 3* factorial(3- 1);

3 * factorial(2)

3* [2* factorial(2- 1) ]

3 * 2* [ factorial(1)]

3 * 2 * [1* factorial(1- 1) ]

3 * 2 * 1* [factorial(0)]

At this point at factorial(0), the base condition is satisfied as number==0, so factorial(0) returns 1

The resulting output is:

3 * 2 * 1* 1

yielding 6

So, the final program output will be

Factorial of 3 is 6

b)

The estimate_e method takes a number, termed as num, which signifies the term to estimate the mathematical constant e

The for loop extends through each term. For example, if num is set to 3

Then the core statement:

e = e + 1/factorial(i);  

The preceding calculation works as:

e = 1 + 1/1! +1/2!

Since the term count is 3

Initially, e is set to 1

i is initialized at 1

Inserting this into the calculation gives us:

e = 1 + 1/factorial(1)

The factorial function computes and returns 1, as the factorial of 1 is 1. Thus,

e = 1 + 1/1

This results in e = 2

Proceeding to the next iteration, where i = 2 and e = 2, we calculate e = 2 + 1/factorial(2)

Thus, e = 2 + 1/2 results in e = 2.5

Following to the next iteration with i = 3, we have e = 3 + 1/factorial(3)

This yields e = 3 + 1/6 resulting in approximately e = 3.16666

Therefore, the output is:

e: 3.16666

c)

This program calculates the sum of a series based on the formula:

e^x = 1 + x/1! + x^2/2! + x^3/3! +...

The for loop iterates according to the number set for terms. Assuming x is 2, and the number of terms is set to 3, the series would read:

e^2 = 1 + 2/1! + 2^2/2!

In this setup: number = 2 and terms = 3

Initial values for series and sumSeries are both 1

Starting with i equal to 1, the update statement series = series * number / (float)i; applies as follows:series = 1 * 2 /1 results in series = 2

Then, for sumSeries, we have sumSeries = sumSeries + series; Outputs sumSeries as 1 + 2, yielding 3

Continuing to the next iteration: i=2, with series = 2 and sumSeries = 3, we recalculate as series = 2 * 2/2 imposing series = 2 again. Thus, we find: sumSeries = 3 + 2 giving a final sumSeries value of 5

After the loop concludes, the result shows the value of sumSeries, leading finally to the output value of 5
8 0
2 months ago
Other questions:
  • Compute the approximate acceleration of gravity for an object above the earth's surface, assigning accel gravity with the result
    13·1 answer
  • A video conferencing application isn't working due to a Domain Name System (DNS) port error. Which record requires modification
    15·1 answer
  • Define a function print_feet_inch_short(), with parameters num_feet and num_inches, that prints using ' and " shorthand. End wit
    6·2 answers
  • U.S. industries like steel, computers, and energy need to be protected from foreign competition to ensure which of the following
    6·2 answers
  • Recall that with the CSMA/CD protocol, the adapter waits K. 512 bit times after a collision, where K is drawn randomly. a. For f
    5·1 answer
  • Here is a super challenge for you if you feel up for it. (You will need to work this out in Excel.) In 2017 the Islamic month of
    11·1 answer
  • More Loops: All versions of foods.py in this section have avoided using for loops when printing to save space. Choose a version
    13·1 answer
  • In QlikView, ________ are used to search information anywhere in the document.
    8·1 answer
  • A particular vendor uses the following approach to intrusion detection.16 The company maintains a large number of honeypots dist
    5·1 answer
  • In order to write a successful algorithm, you must first be able to:
    11·1 answer
Add answer
Login
Not registered? Fast signup
Signup
Login Signup
Ask question!