重启 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();
}
}
我希望得到一些帮助。我有一个 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();
}
}