Как сделать зацикливание в этой Java-игре? - PullRequest
0 голосов
/ 13 ноября 2018

Я студент колледжа, только изучая основы программирования на 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);
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...