Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
135
Task/21-game/Java/21-game.java
Normal file
135
Task/21-game/Java/21-game.java
Normal file
|
|
@ -0,0 +1,135 @@
|
|||
import java.util.Random;
|
||||
import java.util.Scanner;
|
||||
|
||||
public class TwentyOneGame {
|
||||
|
||||
public static void main(String[] args) {
|
||||
new TwentyOneGame().run(true, 21, new int[] {1, 2, 3});
|
||||
}
|
||||
|
||||
public void run(boolean computerPlay, int max, int[] valid) {
|
||||
String comma = "";
|
||||
for ( int i = 0 ; i < valid.length ; i++ ) {
|
||||
comma += valid[i];
|
||||
if ( i < valid.length - 2 && valid.length >= 3 ) {
|
||||
comma += ", ";
|
||||
}
|
||||
if ( i == valid.length - 2 ) {
|
||||
comma += " or ";
|
||||
}
|
||||
}
|
||||
System.out.printf("The %d game.%nEach player chooses to add %s to a running total.%n" +
|
||||
"The player whose turn it is when the total reaches %d will win the game.%n" +
|
||||
"Winner of the game starts the next game. Enter q to quit.%n%n", max, comma, max);
|
||||
int cGames = 0;
|
||||
int hGames = 0;
|
||||
boolean anotherGame = true;
|
||||
try (Scanner scanner = new Scanner(System.in);) {
|
||||
while ( anotherGame ) {
|
||||
Random r = new Random();
|
||||
int round = 0;
|
||||
int total = 0;
|
||||
System.out.printf("Start game %d%n", hGames + cGames + 1);
|
||||
DONE:
|
||||
while ( true ) {
|
||||
round++;
|
||||
System.out.printf("ROUND %d:%n%n", round);
|
||||
for ( int play = 0 ; play < 2 ; play++ ) {
|
||||
if ( computerPlay ) {
|
||||
int guess = 0;
|
||||
// try find one equal
|
||||
for ( int test : valid ) {
|
||||
if ( total + test == max ) {
|
||||
guess = test;
|
||||
break;
|
||||
}
|
||||
}
|
||||
// try find one greater than
|
||||
if ( guess == 0 ) {
|
||||
for ( int test : valid ) {
|
||||
if ( total + test >= max ) {
|
||||
guess = test;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if ( guess == 0 ) {
|
||||
guess = valid[r.nextInt(valid.length)];
|
||||
}
|
||||
total += guess;
|
||||
System.out.printf("The computer chooses %d%n", guess);
|
||||
System.out.printf("Running total is now %d%n%n", total);
|
||||
if ( total >= max ) {
|
||||
break DONE;
|
||||
}
|
||||
}
|
||||
else {
|
||||
while ( true ) {
|
||||
System.out.printf("Your choice among %s: ", comma);
|
||||
String line = scanner.nextLine();
|
||||
if ( line.matches("^[qQ].*") ) {
|
||||
System.out.printf("Computer wins %d game%s, human wins %d game%s. One game incomplete.%nQuitting.%n", cGames, cGames == 1 ? "" : "s", hGames, hGames == 1 ? "" : "s");
|
||||
return;
|
||||
}
|
||||
try {
|
||||
int input = Integer.parseInt(line);
|
||||
boolean inputOk = false;
|
||||
for ( int test : valid ) {
|
||||
if ( input == test ) {
|
||||
inputOk = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if ( inputOk ) {
|
||||
total += input;
|
||||
System.out.printf("Running total is now %d%n%n", total);
|
||||
if ( total >= max ) {
|
||||
break DONE;
|
||||
}
|
||||
break;
|
||||
}
|
||||
else {
|
||||
System.out.printf("Invalid input - must be a number among %s. Try again.%n", comma);
|
||||
}
|
||||
}
|
||||
catch (NumberFormatException e) {
|
||||
System.out.printf("Invalid input - must be a number among %s. Try again.%n", comma);
|
||||
}
|
||||
}
|
||||
}
|
||||
computerPlay = !computerPlay;
|
||||
}
|
||||
}
|
||||
String win;
|
||||
if ( computerPlay ) {
|
||||
win = "Computer wins!!";
|
||||
cGames++;
|
||||
}
|
||||
else {
|
||||
win = "You win and probably had help from another computer!!";
|
||||
hGames++;
|
||||
}
|
||||
System.out.printf("%s%n", win);
|
||||
System.out.printf("Computer wins %d game%s, human wins %d game%s%n%n", cGames, cGames == 1 ? "" : "s", hGames, hGames == 1 ? "" : "s");
|
||||
while ( true ) {
|
||||
System.out.printf("Another game (y/n)? ");
|
||||
String line = scanner.nextLine();
|
||||
if ( line.matches("^[yY]$") ) {
|
||||
// OK
|
||||
System.out.printf("%n");
|
||||
break;
|
||||
}
|
||||
else if ( line.matches("^[nN]$") ) {
|
||||
anotherGame = false;
|
||||
System.out.printf("Quitting.%n");
|
||||
break;
|
||||
}
|
||||
else {
|
||||
System.out.printf("Invalid input - must be a y or n. Try again.%n");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue