Russian Roulette

From CompSciWiki
Revision as of 03:26, 6 December 2011 by RalviV (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Back to the Program-A-Day homepage

Problem

Please read the following carefully, and write a complete RussianRoulette program that prints out the total gained from player.

Each game will consist of six turns.
The player will take the first turn, followed by the opponent.
For each turn you will need to generate a double random number, which will represent the chance of getting shot.
If the chance is smaller than the probability, then the bullet is fired.

First turn, the probability starts at 0.2.
After the first turn, you have to increase the probability.
The probability is increased by 0.1 for the first four turns, and increased by 0.25 for the 5th and the 6th turn.
If the player wins the player gets $50 dollars, otherwise the player loses $50 dollars.
The starting amount of money for the player is be $100 dollars.

Example. 1st(player, 0.2), 2nd(opponent, 0.3), 3rd(player, 0.4), 4th(opponent, 0.5), 5th(player, 0.75), 6th(opponent, 1.0)

Run this game 20 times and print the output (money of the player) using JOptionPane method.

 

Mid-term Review

Wiki trays01.jpg

Solution

First, analyze the question and determine the structure and the types of variables you will need.
It tells you to generate random numbers.
You will need to import Math class which is in java.lang.
Also, you will need swing for printing out the money using JOptionPane.

 import java.lang.*;
import javax.swing.*; 


After importing java.lang.Math.Random and javax.swing.JOptionPane, figure out which variables you will need.

You will need a variable for the player's initial money. Because this program does increments and decrements in non-decimal values, we will use integer. Initialize the starting amount at 100 for the starting amount.

 int money = 100; 


Then, you will need a for loop to run the games 20 times.
Inside the for loop, you will need to declare another variable for the probability.
The probability will start from 0.2, so set the probability variable equal to 0.2.

 for(int i=0; i<20; i++)
{
	double probability is 0.2
} 


Once you set up the outer loop, you will need an inner loop for each game.
There will be 6 turns for each game which means the loop will run 6 times.

 for(int j=0; j<6, j++)
{
} 


What you need to do is inside the inner loop, you will need to generate random numbers.
Random numbers can be generated by using

 double probability = Math.random(); 


The numbers are generated by Math.Random(), which are double type values.
This function will generate a number between 0 and 1. Because this function generates decimal numbers, make sure you store it in a double type variable.
However, if you want a random generator that generates integers between 1 - 99, you will need to put:

 int random = (int)(Math.random() * 99) 


The reason for this is, Math.random() will generate numbers between 0.0 < x < 1.0.
You will need to multiply by 99 to make the generate numbers 0.0 < x < 99.0.
Remember, you must CAST the random numbers to int if you will assign the value to int.

Now, once you generate the random numbers, you will need to use some conditions to check who the winner is.
As stated in the question, if the given probability is greater than the randomly generated double value, there was gun fire.

You will also need to consider whose turn it is.
The player takes first turn, for example 1st = Player, 2nd = Opponent, 3rd = player, 4th = Opponent, 5th = Player, 6th = Opponent.
We can find out whose turn it is by using '%' which is mod in java.
If your loop starts from 0, then the player will take turns when the loop counter is even.
Here is the pseudo-code for the condition.

 if(probability > chance)
{
	if(j % 2 == 0)
		money -= 50
	else
		money += 50
} 

This pseudo-code means if there was a gun fire, check whose turn it is.
If the result was the player's turn then the player loses money, otherwise the player wins money.
Note that money -= 50 is equal to:

 money = money - 50; 


After setting up the condition, we need to increase the probability.
If there was no gun fire, another person needs to take the next turn.
For the first four times, it will increase by 0.1.
For the fifth and the sixth time, it will increase by 0.25.

 if(j < 4) 
	probability += 0.1
else
	probability += 0.25 


The code above does the proper increments when j starts at 0.
j < 4 will include turns 0, 1, 2 and 3, which is four times, and each turn will increase the probability by 0.1.
When j is greater than 4, the probability will be increased by 0.25 for the remaining turns(in the else statement).

After increasing the probability, we are done with loops.
Now, the last step is to print out the amount of money the player has, use the JOptionPane method.

 JOptionPane.showMessageDialog(null, money); 


This problem was the review of 'Problem Solving with Nested Loops'.
See below for the solution code.

Code

Solution Code

Back to the Program-A-Day homepage