| CSCI A201/A597Lecture Notes Eighteen Second Summer 2000 |
| Have you ever played Nim? | No. Do you play croquet? |
| I'd love to but I don't have the time. | How do you play Nim? |
| Here's how you play a game with a computer. |
import java.io.*;
import java.util.*;
class Nim {
public static void main(String[] args) {
ConsoleReader console = new ConsoleReader(System.in);
Random generator = new Random();
int height = Math.abs(generator.nextInt()) % 90 + 10;
PileOfMarbles pile = new PileOfMarbles(height);
System.out.println("You are working with a pile of height: "
+ pile.report());
int number, currentHeight;
while (true) {
System.out.println("*** Computer moves.");
System.out.println("Pile of marbles of height: " + pile.report());
currentHeight = pile.report();
if (currentHeight == 1) {
number = 1;
} else {
number = Math.abs(generator.nextInt()) % (currentHeight / 2) + 1;
}
System.out.println("Computer chooses to remove: "
+ number + " marbles.");
pile.move(number);
System.out.println("--------------------------");
System.out.println("*** Now the user has to move.");
System.out.println("Pile of marbles of height: " + pile.report());
System.out.print("Please enter number of marbles you want to take: ");
number = console.readInt();
pile.move(number);
System.out.println("--------------------------");
}
}
}
class PileOfMarbles {
int height;
PileOfMarbles (int height) {
this.height = height;
}
int report() {
return this.height;
}
void move(int number) {
System.out.println("***Removing " + number + " marbles from the pile.");
if (number <= 0 ||
((number > height / 2) && (number != 1))) {
System.out.println("***Bad move: you lose.");
System.exit(0);
} else {
this.height -= number;
if (this.height == 0) {
System.out.println("***End of game: you lost.");
System.exit(0);
}
}
System.out.println("Pile of marbles is now: " + this.report());
}
}
class ConsoleReader {
public ConsoleReader(InputStream inStream) {
reader = new BufferedReader(
new InputStreamReader(
inStream));
}
public String readLine() {
String inputLine = "";
try {
inputLine = reader.readLine();
} catch (IOException e) {
System.out.println(e);
System.exit(1);
}
return inputLine;
}
public int readInt() {
String inputString = readLine();
int n = Integer.parseInt(inputString);
return n;
}
public double readDouble() {
String inputString = readLine();
double x = Double.parseDouble(inputString);
return x;
}
private BufferedReader reader;
}
| Oh, Nim is so easy. I like Nim. |
... To be continued by Adrian German for A201
Last updated: July 19, 2000 by Adrian German for A201