重启 java 程序

Restart java program

我希望得到一些帮助。我有一个 java 战舰游戏,想给玩家一个选择,让他们在完成后再次玩游戏,但我真的不知道该怎么做。任何帮助都会很棒!

public class Battle {

public static void main(String[] args) throws IOException{

    int[][] board = new int[5][5];
    int[][] ships = new int[3][2];
    int[] shoot = new int[2];
    int size;//for the fleet, under construction!
    int health= 3;
    int attempts=0,
        shotHit=0;
    boolean sendout = false;

    //reads the rules

    File myFile = new File ("Rules.txt");
    Scanner inputFile = new Scanner(myFile);

    while (inputFile.hasNext())
        {
            String str = inputFile.nextLine();
            System.out.println(str);
        }
    inputFile.close();


    Scanner position = new Scanner(System.in);

    whatShip ship = new whatShip(health);
    health = ship.WhatShip(health);



    System.out.println("\n");
    System.out.println("Enter the name of your vessel:");
    String name = position.nextLine();

    //intro read

    System.out.println("\n");
    System.out.println("INTRO");
    System.out.println("\n");
    System.out.println("Onbard the "+name);
    File myFile1 = new File ("Intro.txt");
    Scanner inputFile1 = new Scanner(myFile1);

    while (inputFile1.hasNext())
    {
        String str = inputFile1.nextLine();
        System.out.println(str);
    }
    inputFile1.close();
    System.out.println("\n");



    int row = entryIntMinMax("Enter "+name+"'s longitude, row", 1, 5);





    int col = entryIntMinMax("Enter "+name+"'s latitude, column",1,5);





    System.out.println("ALL HANDS, MAN YOUR STATIONS");

    initBoard(board);
    initShips(ships);

    System.out.println();

    do{
        showBoard(board);
        shoot(shoot);
        attempts++;

        if(hit(shoot,ships)){
            hint(shoot,ships,attempts);
            shotHit++;
        }                
        else
            hint(shoot,ships,attempts);
        health =enemyShoot(row, col, health);
        health =enemyShoot(row, col, health);
        health =enemyShoot(row, col, health);
        health =enemyShoot(row, col, health);
        health =enemyShoot(row, col, health);
        health =enemyShoot(row, col, health);
        health =enemyShoot(row, col, health);

        changeboard(shoot, ships, board);


    }


    while(shotHit!=3);

    System.out.println("\n\n Enemy fleet destroyed sir! You sunk 3 ships in "+attempts+" attempts");
    showBoard(board);
}

这是我的主要方法。任何批评也很好!

首先,将上述代码第一部分(直到 do-while 语句)中的(几乎)全部内容放入 introPhase() 方法或其他内容中。

其次,将您的 do-while 放入第二个 gamePhase() 方法或其他方法中。

最后,用某种条件循环语句包围两者。

你应该得到这样的结果:

boolean finishFlag = false;
while(!finishFlag) {
    introPhase();
    gamePhase();
    finishFlag = getExitInfoFromUser();
}

祝你好运!

这是另一个更抽象、更简单的例子,说明它的样子。

定义 类、方法和变量,以便更轻松地处理您正在编程的内容。

// Game class, here you define what the game would look like
public class Game {
    private Scanner scanner = new Scanner(System.in);
    // Could probably create a class Board and work on this class.
    // private Board board;
    private int[][] board;
    // Could probably create a class Ship and work on this class.
    // Could also include the two dimensional array in the Board class
    // private Ship[][] ships board;
    private int[][] ships;
    // Could probably create a class Player and work on this class.
    // private Player board;
    private int attemtps;
    private int health;

    // Define a status the game is currently in
    private enum Status {
        IDLE, STARTED, ENDED;
    }

    // Variable for the current game status
    private Status gamestatus;

    // Nothing done, default is idle when new game class is initialized
    // Maybe you have options and stuff and a menu, where you IDLE at.
    public Game() {
        gamestatus = Status.IDLE;
    }

    // This method "starts" the game, though defines variables to 
    // have Game beeing started
    public void start() {
        System.out.println("Welcome to battleship");
        // Change status, maybe you want to validate the current gamestatus 
        // at some point
        gamestatus = Status.STARTED;
        // this method could initialize some variables and stuff to default values in order to represent a fresh game
        setInitialValuesOfGame();
        // Random loop that gets 5 inputs and emulates a game due to this.
        int i = 0;
        while(gamestatus.equals(Status.STARTED)) {
            System.out.println("Test input: ");
            String input = scanner.nextLine();
            // Just make it look like there would happen something
            board[i%5][0] = i;
            ships[i%3][0] = i;
            // Make game look like it did end after a few iteration
            ++i;
            if(i == 5) {
               end();
            }
        }
        // Loop is over, ask for restart
        restart();
    }

    public void restart() {
        System.out.println("Hey would you like to restart: yes"); // Making it look like input
        String input = "yes"; // Input here, but make it a literal for showing purposes
        if (input.equals("yes")) {
            start();
        } else {
            System.out.println("bye bye");
        }
    }

    public void end() {
        gamestatus = Status.ENDED;
        // Do more stuff that would make the game end
    }

    // Setting default values
    private void setInitialValuesOfGame() {
        board = new int[5][5];
        ships = new int[3][2];
        attemtps = 0;
        health = 3;
    }

    // This is just your starting point, i´d programm as less as possible in here.
    public static void main(String[] args) {
        Game game = new Game();
        game.start();
    }
}