java - 剪刀石头布游戏(菜单法)

标签 java methods

正如标题中所说,我正在尝试创建一个以菜单作为方法的 RPS 游戏,问题是我不知道如何在任何时候从该菜单调用输入。 为了更好的想法,这是我的代码:

import java.util.Scanner;
import java.util.Random;

public class RockPaperScissors
{
    public static void main (String [] args)
    {
        Scanner keyboard = new Scanner (System.in);
        String player1choice, player1Name;
        int mainMenu,subMenu;
        String again;
        player1Name = "";


    welcomeBanner ();
    mainMenu = getMenu (keyboard);


    if (mainMenu == 1)
    {
        keyboard.nextLine();
        player1Name = getAName (keyboard);

        for (int i = 0; i < 50; ++i) System.out.println();
        main (null);
    }

    if (mainMenu == 2)
    {
        System.out.println("Welcome "+player1Name); //add name input
        subMenu =getsubMenu (keyboard);
        System.out.println("You have chosen: "); //add option chosen

        System.out.println("Cpu has got, It's a Tie!");//cpuChoice add


    }

    if (mainMenu == 3)
    {
        keyboard.nextLine();
        String exitRequest;
        System.out.print("Are you sure you want to exit? (Y/N): ");
        exitRequest = keyboard.nextLine ();
        if (exitRequest.equals("y") || exitRequest.equals("Y"))
        {
            System.out.println("Good Bye!");
            System.exit(0);
        }
        else if (exitRequest.equals("n") || exitRequest.equals("N"))
        {
            for (int i = 0; i < 50; ++i) System.out.println();
            main(null);
        }

    }
}
static void welcomeBanner()
{
    for (int i = 0; i < 60; i++)
    {
        System.out.print('*');
    }
    System.out.println("");
    System.out.println("*        Welcome To The Rock, Paper, Scissors Game         *");
    System.out.println("*----------------------------------------------------------*");
    System.out.println("*     Created by: Jonathan Gutierrez, and I am NoxBot!     *");
    for (int i = 0; i < 60; i++)
    {
        System.out.print('*');
    }
    System.out.println("");
    System.out.println("");
}
static int getMenu (Scanner aKeyboard)
{
    int playermenuChoice;
    System.out.println("1. Enter Player Name");
    System.out.println("2. Play a Game");
    System.out.println("3. Exit Application");
    System.out.println("");
    System.out.print("Enter your choice: ");
    playermenuChoice = aKeyboard.nextInt();
    return playermenuChoice;

}
static int getsubMenu (Scanner aKeyboard)
{
    int submenuChoice;
    System.out.println("Enter 1 for Rock");
    System.out.println("Enter 2 for Paper");
    System.out.println("Enter 3 for Scissors");
    System.out.println("");
    System.out.print("Enter choice: ");
    submenuChoice = aKeyboard.nextInt();
    return submenuChoice;
}
static String getAName (Scanner aKeyboard)
{
    String player1Info;
    System.out.print("Enter your name: ");
    player1Info = aKeyboard.nextLine ();
    return player1Info;
}
static String computerChoice ()
{
    String cpuChoice;
    cpuChoice = "";
    Random randomNumbers = new Random();
    int cpu = randomNumbers.nextInt (2) + 1;
    switch (cpu)
    {
        case 1:
        cpuChoice = "Rock";
        break;
        case 2:
        cpuChoice = "Paper";
        break;
        case 3:
        cpuChoice = "Scissors";
        break;
    }
    return cpuChoice;
}

因此,当玩家选择选项 1 时,程序会要求输入玩家的姓名,并且我想在任何时候使用该输入(特别是当 mainMenu ==2 时)。我怎样才能做到这一点?

编辑:这是我的新代码:

import java.util.Scanner;
import java.util.Random;
public class RockPaperScissors
{
    public static void main (String [] args)
    {
        Scanner keyboard = new Scanner (System.in);
        String player1choice, player1Name, subMenu;
        int mainMenu;
        String again;
        player1Name = "";

        welcomeBanner ();
        mainMenu = getMenu (keyboard);

    if (mainMenu == 1)
    {
        keyboard.nextLine();
        player1Name = getAName (keyboard);

        for (int i = 0; i < 50; ++i) System.out.println();
        welcomeBanner ();
        mainMenu = getMenu (keyboard);
        System.out.println("");
        System.out.println("Welcome " + player1Name);
        System.out.println("");

    }

    if (mainMenu == 2)
    {

        subMenu =enterPlayersChoice (keyboard);
        keyboard.nextLine();
        String cmpu = computerChoice ();
        for(int i = 0; i < 3; i ++)

        if (subMenu.equals(cmpu))
           System.out.println("It's a tie!");
        else if (subMenu.equals("rock"))
        if (cmpu.equals("scissors"))
        System.out.println("Rock crushes scissors. You win!!");
        else if (cmpu.equals("paper"))
        System.out.println("Paper eats rock. You lose!!");
        else if (subMenu.equals("paper"))
        if (cmpu.equals("scissors"))
        System.out.println("Scissor cuts paper. You lose!!");
        else if (cmpu.equals("rock"))
        System.out.println("Paper eats rock. You win!!");
        else if (subMenu.equals("scissors"))
        if (cmpu.equals("paper"))
        System.out.println("Scissor cuts paper. You win!!");
        else if (cmpu.equals("rock"))
        System.out.println("Rock breaks scissors. You lose!!");
        else   System.out.println("Invalid user input.");
        System.out.println("");


    }

    if (mainMenu == 3)
    {
        keyboard.nextLine();
        String exitRequest;
        System.out.print("Are you sure you want to exit? (Y/N): ");
        exitRequest = keyboard.nextLine ();
        if (exitRequest.equals("y") || exitRequest.equals("Y"))
        {
            System.out.println("Good Bye!");
            System.exit(0);
        }
        else if (exitRequest.equals("n") || exitRequest.equals("N"))
        {
            for (int i = 0; i < 50; ++i) System.out.println();
            main(null);
        }

    }
}
static void welcomeBanner()
{
    for (int i = 0; i < 60; i++)
    {
        System.out.print('*');
    }
    System.out.println("");
    System.out.println("*        Welcome To The Rock, Paper, Scissors Game         *");
    System.out.println("*----------------------------------------------------------*");
    System.out.println("*     Created by: Jonathan Gutierrez, and I am NoxBot!     *");
    for (int i = 0; i < 60; i++)
    {
        System.out.print('*');
    }
    System.out.println("");
    System.out.println("");
}
static int getMenu (Scanner aKeyboard)
{
    int playermenuChoice;
    System.out.println("1. Enter Player Name");
    System.out.println("2. Play a Game");
    System.out.println("3. Exit Application");
    System.out.println("");
    System.out.print("Enter your choice: ");
    playermenuChoice = aKeyboard.nextInt();
    return playermenuChoice;

}
public static String enterPlayersChoice(Scanner aKeyboard)
{
    String input = "";
    System.out.print("You have a choice of picking rock, paper, or scissors: ");
    input = aKeyboard.nextLine();
    String inputLower = input.toLowerCase();
    return inputLower;
 }
static String getAName (Scanner aKeyboard)
{
    String player1Info;
    System.out.print("Enter your name: ");
    player1Info = aKeyboard.nextLine ();
    return player1Info;
}
public static String computerChoice ()
{
    String cpuChoice;
    cpuChoice = "nothing";
    Random randomNumbers = new Random();
    int cpu = randomNumbers.nextInt (2) + 1;
    switch (cpu)
    {
        case 1:
        cpuChoice = "rock";
        break;
        case 2:
        cpuChoice = "paper";
        break;
        case 3:
        cpuChoice = "scissors";
        break;
    }
    return cpuChoice;
}

} 为了完成这个,我希望游戏显示一条消息,无论玩家获胜还是失败,但它被跳过(mainMenu ==2)有什么想法吗?

最佳答案

这是一种以不同方式重新排列现有应用程序的方法。一些主要更改包括使除 main 方法之外的所有方法都变为非静态,以及为应用程序的入口点创建一个 RockPaperScissorsNew 对象。我还添加了类变量,因此您无需将 Scanner 作为对象传递给所有方法。

为了回答您最初的问题:如何重用用户输入的输入,我提供的解决方案是在类变量中保留该信息。

import java.util.Random;
import java.util.Scanner;


public class RockPaperScissorsNew {

    //Class variables
    Scanner keyboard;
    String player1choice, player1Name; //Name will be stored here.
    int mainMenu,subMenu;

    public RockPaperScissorsNew()
    {
        keyboard = new Scanner(System.in);  
        welcomeBanner();  //Display the welcome banner once.
        while(true)       //Repeatedly display the main menu.
            getChoice();  //Get the user's choice
    }

    public void getChoice()
    {
        int choice = -1;          //Set choice to fail first.
        while (choice > 3 || choice < 0)  //Wait until user choice passes.
        {
            choice = getMenu();  
        }
        if (choice == 1) { //Choose your sub option.
            getAName();    // Get the user name.
            System.out.println("Your name is " + player1Name); //Saved
        }
        if (choice == 2)
            getsubMenu();
        if (choice == 3)
            System.exit(0);
    }

    public void welcomeBanner()
    {
        for (int i = 0; i < 60; i++)
        {
            System.out.print('*');
        }
        System.out.println("");
        System.out.println("*        Welcome To The Rock, Paper, Scissors Game         *");
        System.out.println("*----------------------------------------------------------*");
        System.out.println("*     Created by: Jonathan Gutierrez, and I am NoxBot!     *");
        for (int i = 0; i < 60; i++)
        {
            System.out.print('*');
        }
        System.out.println("");
        System.out.println("");
    }

    public int getMenu ()
    {
        int playermenuChoice;
        System.out.println("1. Enter Player Name");
        System.out.println("2. Play a Game");
        System.out.println("3. Exit Application");
        System.out.println("");
        System.out.print("Enter your choice: ");
        playermenuChoice = Integer.parseInt(keyboard.nextLine().trim());
        return playermenuChoice;
    }

    public int getsubMenu ()
    {
        int submenuChoice;
        System.out.println("Enter 1 for Rock");
        System.out.println("Enter 2 for Paper");
        System.out.println("Enter 3 for Scissors");
        System.out.println("");
        System.out.print("Enter choice: ");
        submenuChoice = Integer.parseInt(keyboard.nextLine().trim());
        return submenuChoice;
    }

    //This method has been changed to use the class variable, and no longer
    //returns a string.
    public void getAName ()
    {
        //String player1Info;
        System.out.print("Enter your name: ");
        player1Name = keyboard.nextLine ();
        //return player1Info;
    }

    public String computerChoice ()
    {
        String cpuChoice;
        cpuChoice = "";
        Random randomNumbers = new Random();
        int cpu = randomNumbers.nextInt (2) + 1;
        switch (cpu)
        {
            case 1:
            cpuChoice = "Rock";
            break;
            case 2:
            cpuChoice = "Paper";
            break;
            case 3:
            cpuChoice = "Scissors";
            break;
        }
        return cpuChoice;
    }

    public static void main(String...args)
    {
        new RockPaperScissorsNew();
    }
}

关于java - 剪刀石头布游戏(菜单法),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36478238/

相关文章:

java - 如何检查 10 位数字是否为质数?

Ruby:从循环迭代方法中返回更清晰的结果

java - 在 Java 中处理 Not Acceptable 方法参数的最佳方法是什么?

java - 将 json 解析为 java 对象时出错 : java. lang.NullPointerException

java - java 填充数组列表

java - 如何使用 itext 在 pdf 中添加多个页眉和页脚

java - Minecraft Spigot 插件编码,存在 Player.sendMessage 问题

C# 从另一个方法引用一个方法变量

python - 如何获取class(__init__)的输入参数个数?

java - Java 中的访问器方法