Difference between revisions of "Roulette"

From CompSciWiki
Jump to: navigation, search
m
m
 
(8 intermediate revisions by 2 users not shown)
Line 3: Line 3:
 
|ProblemName=Roulette
 
|ProblemName=Roulette
  
|Problem= Please read the following carefully, and write a complete program Roulette that prints out total gained from player.<br>
+
|Problem= Please read the following carefully. Write a complete Roulette program that prints out the total gained from player.<br>
 
<br>
 
<br>
Each game will be running for six turns. <br>
+
Each game will consist of six turns. <br>
Player will take the first turn followed by the opponent. <br>
+
The player will take the first turn, followed by the opponent. <br>
You need to generate a double random number each time that will represent the chance of getting shot. <br>
+
For each turn you will need to generate a double random number, which will represent the chance of getting shot. <br>
 
If the chance is smaller than the probability, then the bullet is fired.<br>
 
If the chance is smaller than the probability, then the bullet is fired.<br>
  
 
First turn, the probability starts at 0.2. <br>
 
First turn, the probability starts at 0.2. <br>
 
After the first turn, you have to increase the probability. <br>
 
After the first turn, you have to increase the probability. <br>
It will increase 0.1 for first four times, then, it will increase 0.25 for the 5th and the 6th time.<br>
+
The probability is increased by 0.1 for the first four turns, and increased by 0.25 for the 5th and the 6th turn.<br>
 
If the player wins the player gets $50 dollars, otherwise the player loses $50 dollars.<br>
 
If the player wins the player gets $50 dollars, otherwise the player loses $50 dollars.<br>
The starting money of the player will be $100 dollars.<br>
+
The starting amount of money for the player is be $100 dollars.<br>
 
<br>
 
<br>
 
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)<br>
 
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)<br>
 
<br>
 
<br>
Run this game for 20 times, and print out the output (money of the player) using [[JOptionPane_Methods|JOptionPane Methods]].<br>
+
Run this game 20 times and print the output (money of the player) using [[JOptionPane_Methods|JOptionPane]] method.<br>
  
 
|SolutionCode=
 
|SolutionCode=
Line 70: Line 70:
 
}
 
}
  
|SideSectionTitle=Roulette
+
|SideSectionTitle=Mid-term Review
  
 
|SideSection=
 
|SideSection=
 
[[Image:Wiki_trays01.jpg|center]]<BR>
 
[[Image:Wiki_trays01.jpg|center]]<BR>
  
|Solution=First, analyze what you need to import. <br>
+
|Solution=First, analyze the question and determine the structure and the types of variables you will need.<br>
 
It tells you to generate random numbers. <br>
 
It tells you to generate random numbers. <br>
You will need to import <i>Math</i> class which is in <i>java.lang</i>. <br>
+
You will need to import <b>''Math''</b> class which is in <b>''java.lang''</b>. <br>
Also, you will need swing for printing out the money using <i>JOptionPane</i>.<br>
+
Also, you will need swing for printing out the money using <b>''JOptionPane''</b>.<br>
 
<br>
 
<br>
 
<pre>
 
<pre>
Line 85: Line 85:
 
</pre>
 
</pre>
 
<br>
 
<br>
After importing <i>java.lang.Math.Random</i> and <i>javax.swing.JOptionPane</i>, figure out which variables you will need.<br>
+
After importing <b>''java.lang.Math.Random''</b> and <b>''javax.swing.JOptionPane''</b>, figure out which variables you will need.<br>
 
<br>
 
<br>
You will need the initial money which is 100 as integer.<br>
+
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.<br>
 
<br>
 
<br>
 
<pre>
 
<pre>
Line 113: Line 113:
 
</pre>
 
</pre>
 
<br>
 
<br>
What you need to do inside the inner loop, you will need to generate random numbers. <br>
+
What you need to do is inside the inner loop, you will need to generate random numbers. <br>
 
Random numbers can be generated by using <br>
 
Random numbers can be generated by using <br>
 
<br>
 
<br>
Line 120: Line 120:
 
</pre>
 
</pre>
 
<br>
 
<br>
The numbers are generated by <i>Math.Random()</i> are double values. <br>
+
The numbers are generated by <b>''Math.Random()''</b>, which are double type values. <br>
You need double values for chances, so it's ok to leave it by itself. <br>
+
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.<br>
 
However, if you want a random generator that generates integers between 1 - 99, you will need to put: <br>
 
However, if you want a random generator that generates integers between 1 - 99, you will need to put: <br>
 
<br>
 
<br>
Line 128: Line 128:
 
</pre>
 
</pre>
 
<br>
 
<br>
The reason for this is, <i>Math.random()</i> will generate numbers between 0.0 < x < 1.0. <br>
+
The reason for this is, <b>''Math.random()''</b> will generate numbers between 0.0 < x < 1.0. <br>
 
You will need to multiply by 99 to make the generate numbers 0.0 < x < 99.0. <br>
 
You will need to multiply by 99 to make the generate numbers 0.0 < x < 99.0. <br>
Remember, you must ''CAST'' the random numbers to int if you will assign the value to int. <br>
+
Remember, you must <b>CAST</b> the random numbers to int if you will assign the value to int. <br>
 
<br>
 
<br>
Now, once you generate the random numbers, you will need to use some conditions to check who won. <br>
+
Now, once you generate the random numbers, you will need to use some conditions to check who the winner is. <br>
As it says on the question, if the given probability is greater than the randomly generated double value, there was gun fire. <br>
+
As stated in the question, if the given probability is greater than the randomly generated double value, there was gun fire. <br>
 
<br>
 
<br>
 
You will also need to consider whose turn it is. <br>
 
You will also need to consider whose turn it is. <br>
 
The player takes first turn, for example 1st = Player, 2nd = Opponent, 3rd = player, 4th = Opponent, 5th = Player, 6th = Opponent. <br>
 
The player takes first turn, for example 1st = Player, 2nd = Opponent, 3rd = player, 4th = Opponent, 5th = Player, 6th = Opponent. <br>
We can find out whose turn it is by using mod (%). <br>
+
We can find out whose turn it is by using <b>'%'</b> which is mod in java. <br>
 
If your loop starts from 0, then the player will take turns when the loop counter is even. <br>
 
If your loop starts from 0, then the player will take turns when the loop counter is even. <br>
 
Here is the pseudo-code for the condition. <br>
 
Here is the pseudo-code for the condition. <br>
Line 151: Line 151:
 
</pre>
 
</pre>
 
This pseudo-code means if there was a gun fire, check whose turn it is. <br>
 
This pseudo-code means if there was a gun fire, check whose turn it is. <br>
Then if it was the player's turn, he loses money. Otherwise, he wins money. <br>
+
If the result was the player's turn then the player loses money, otherwise the player wins money. <br>
<b>Note that money -= 50 is equal to:</b> <br>
+
Note that money -= 50 is equal to: <br>
 
<br>
 
<br>
 
<pre>
 
<pre>
Line 170: Line 170:
 
</pre>
 
</pre>
 
<br>
 
<br>
The code above is assuming that it starts from 0. <br>
+
The code above does the proper increments when j starts at 0. <br>
j < 4 will be 0, 1, 2 and 3 which is four times and increase the probability by 0.1. <br>
+
j < 4 will include turns 0, 1, 2 and 3, which is four times, and each turn will increase the probability by 0.1. <br>  
Otherwise, by 0.25 by setting else. <br>
+
When j is greater than 4, the probability will be increased by 0.25 for the remaining turns(in the else statement). <br>
 
<br>
 
<br>
 
After increasing the probability, we are done with loops. <br>
 
After increasing the probability, we are done with loops. <br>
Now, the last step is printing out the money using simple <i>JOptionPane</i> method. <br>
+
Now, the last step is to print out the amount of money the player has, use the <b>''JOptionPane''</b> method. <br>
 
<br>
 
<br>
 
<pre>
 
<pre>
Line 181: Line 181:
 
</pre>
 
</pre>
 
<br>
 
<br>
 +
This problem was the review of 'Problem Solving with Nested Loops'. <br>
 
See below for the solution code.
 
See below for the solution code.
  
 
}}
 
}}

Latest revision as of 23:11, 10 April 2010

Back to the Program-A-Day homepage

Problem

Please read the following carefully. Write a complete Roulette 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