Я студент колледжа, только изучая основы программирования на Java.Мне было дано задание воссоздать игру NIM, играя против компьютера.Правила, которые мне были даны, когда есть 3 стопки по 10, вы можете удалить любое количество из одной стопки за раз, а та, которая уберет последнее очко, проигрывает игру.
Это то, что я сейчас сделал, он проигрывает один ход для пользователя и один ход для компьютера.Я знаю, что должен повторить этот процесс, пока игра не закончится, но я не уверен, как или как это сделать наилучшим образом.
public class Assing3 {
public static void main(String[] args) {
Nim test = new Nim();
test.playerTurn();
test.calculate();
test.computerTurn();
test.display();
}
}
import java.util.Random;
import java.util.Scanner;
public class Nim {
Scanner input = new Scanner(System.in);
Random num = new Random();
private String pile;
private int a, b, c, remove;
private boolean turn = true;
private int compPile = num.nextInt(2);
private int compRemove = num.nextInt(9) + 1;
public Nim() {
a = 10;
b = 10;
c = 10;
}
public void playerTurn() {
System.out.println("Welsom to the game of NIM");
System.out.println("We will use the misère rules...");
//display the the piles and size
System.out.println("\tA\tB\tC");
System.out.println("\t" + a + "\t" + b + "\t" + c);
//user trun
while (turn == true) {//select pile
if (a == 0 && b == 0 && c == 0) {
System.out.println("The computer took the last point so you win...");
}
if (a + b + c == 1) {
System.out.println("There is only one point left so you lose...");
}
System.out.println("It is the users trun...");
System.out.println("Please select the pile you wish to remove from...");
pile = input.next();
pile = pile.toUpperCase();
if (pile.equals("A") || pile.equals("B") || pile.equals("C")) {
if ((pile.equals("A") && a == 0) || (pile.equals("B") && b == 0) || (pile.equals("C") && c == 0)) {
System.err.println("That pile is empty...");
} else {
break;
}
} else {
System.err.println("Incorrect Pile...");
}
}//end true while 1
while (turn == true) {//select number to remove
System.out.println("How many do you want to remove from the: " + pile + " pile?");
remove = input.nextInt();
if (remove > 0) {
if ((pile.equals("A") && remove > a) || (pile.equals("B") && remove > b) || (pile.equals("C") && remove > c)) {
System.err.println("There can only be a maximum of 10 in each pile and you entered: " + remove + " Try again...");
} else {
break;
}
} else {
System.err.println("Must ener a number greater then 0...");
}
}//end true while 2
turn = false;
}//end of play method
public void computerTurn() {
System.out.println("It is now the computers turn...");
System.out.println("The computer is removing: " + compRemove + " from the: " + compPile + " pile...(0 = a, 1 = b, 2 = c ");
while (turn == false) {
if (compPile == 0) {
if (a == 0) {
compPile = num.nextInt(2);
System.err.println("Selected pile is empty... New pile is: " + compPile);
continue;
} else if (compRemove > a) {
compRemove = num.nextInt(a) + 1;
System.err.println("The amount the computer wanted to remove is to hight... New number to be removed is: " + compRemove);
continue;
} else {
a = a - compRemove;
}
}
if (compPile == 1) {
if (b == 0) {
compPile = num.nextInt(2);
System.err.println("Selected pile is empty... New pile is: " + compPile);
continue;
} else if (compRemove > b) {
compRemove = num.nextInt(b) + 1;
System.err.println("The amount the computer wanted to remove is to hight... New number to be removed is: " + compRemove);
continue;
} else {
b = b - compRemove;
}
}
if (compPile == 2) {
if (c == 0) {
compPile = num.nextInt(2);
System.err.println("Selected pile is empty... New pile is: " + compPile);
continue;
} else if (compRemove > c) {
compRemove = num.nextInt(c) + 1;
System.err.println("The amount the computer wanted to remove is to hight... New number to be removed is: " + compRemove);
continue;
} else {
c = c - compRemove;
}
}
break;
}
}
public void calculate() {
if (pile.equals("A")) {
a = a - remove;
}
if (pile.equals("B")) {
b = b - remove;
}
if (pile.equals("C")) {
c = c - remove;
}
}//end of calculate method
public void display() {
System.out.println("\tA\tB\tC");
System.out.println("\t" + a + "\t" + b + "\t" + c);
}
}