簡體   English   中英

java初學者石頭剪刀布游戲

[英]java beginner rock paper scissors game

我正在為我的介紹 java class 開發“石頭、紙、剪刀”游戲。 提示如下:創建一個“石頭、紙、剪刀”游戲,計算機隨機選擇石頭、紙或剪刀。 讓用戶輸入 1、2 或 3 的數字,每個代表三個選項之一。 確定贏家。 游戲應該要求用戶再次玩,如果是則繼續,如果不是則停止。 一旦用戶停止播放程序應該打印獲勝的總數。

我在正確的位置聲明變量時遇到問題,因為我正在嘗試使用一種方法,以便可以調用它再次玩游戲。

import java.util.Scanner;
import java.util.Random;
public class RockPaperScissors 
{
public static void main (String[] args) 
{    
    Scanner input = new Scanner(System.in);
    System.out.println("Would you like to play \"Rock, Paper, Scissors?\"");
    System.out.println("Answer \"yes\" or \"no\"");
    input.next();
    String answer = input.next();
}

    
public static int letsPlay()
{
    int cMove; 
    int userMove = 0; 
    int cScore = 0; 
    int pScore = 0; 
    int tie = 0;
    int rounds = 0; 
    Random r = new Random();
    

    while (answer.equalsIgnoreCase("yes")) 
        cMove = r.nextInt(3)+1;
        System.out.println("Choose your move!");
        System.out.println("Enter 1 for Rock, 2 for Paper, or 3 for Scissors: ");
        userMove = input.nextInt(); 
        while(input.hasNextInt()) {
            if (userMove!=1 && userMove!=2 && userMove!=3)
            {
                System.out.println("Invalid move. Try again.");
                System.out.println("Enter your move: ");
                input.nextInt();
            }
        } 
        if(userMove==1)
        {
            System.out.println("You have chosen Rock!");  
        }
        else if(userMove==2)
        {
            System.out.println("You have chosen Paper!");  
        }
        else if(userMove==3)
        {
            System.out.println("You have chosen Scissors!");  
        }

            if (userMove == cMove) 
            { 
                System.out.println("Tie Game!");
                System.out.println("");
                tie++;
                rounds++;
            } else if (cMove==1 && userMove==3)
                {
                    System.out.println("Computer chose Rock!");
                    System.out.println("Rock beats Scissors!");
                    System.out.println("Computer Wins!");
                    cScore++;
                    rounds++;
                } 

                else if (cMove==1 && userMove==2) 
                {
                    System.out.println("Computer chose Rock!");
                    System.out.println("Paper beats Rock!");
                    System.out.println("Player Wins!");
                    pScore++;
                    rounds++;
                } 

                else if (cMove==2 && userMove==3) 
                {
                    System.out.println("Computer chose Paper!");
                    System.out.println("Scissors beats Paper!");
                    System.out.println("Player Wins!");
                    pScore++;
                    rounds++;
                } 

                else if (cMove==2 && userMove==1)
                {
                    System.out.println("Computer chose Paper!");
                    System.out.println("Paper beats Rock!");
                    System.out.println("Computer Wins!");
                    cScore++;
                    rounds++;
                } 

                else if (cMove==3 && userMove==1)  
                {
                    System.out.println("Computer chose Scissors!");
                    System.out.println("Rock beats Scissors!");
                    System.out.println("Player Wins!");
                    pScore++;
                    rounds++;
                } 

                else if (cMove==3 && userMove==2) 
                {
                    System.out.println("Computer chose Scissors!");
                    System.out.println("Scissors beats Paper!");
                    System.out.println("Computer Wins!");
                    cScore++;
                    rounds++;
                }
            
        System.out.println("Would you like to play again?");
        System.out.println("Answer \"yes\" or \"no\"");
        input.next();
        String yesorno = input.next();
        if(yesorno.equalsIgnoreCase("yes"))
        {
            letsPlay();
        }
        else {
            System.out.println ("Here are the final scores after " + rounds +" rounds:");
            System.out.println ("You: "+ pScore + "Computer: "+ cScore + "Ties: " + tie);
            }
    }    
}

到目前為止編輯的代碼,它說我的letsPlay方法缺少返回語句:不確定如何繼續..

import java.util.Scanner;
import java.util.Random;
public class RockPaperScissors 
{
public static void main (String[] args) 
{    
Scanner input = new Scanner(System.in);
System.out.println("Would you like to play \"Rock, Paper, Scissors?\"");
System.out.println("Answer \"yes\" or \"no\"");
String answer = input.next();
letsPlay(answer);
}



public static int letsPlay(String answer)
{
int cMove; 
int userMove = 0; 
int cScore = 0; 
int pScore = 0; 
int tie = 0;
int rounds = 0; 
Random r = new Random();
Scanner input = new Scanner(System.in);
cMove = r.nextInt(3)+1;

while (answer.equalsIgnoreCase("yes")) 
    
    System.out.println("Choose your move!");
    System.out.println("Enter 1 for Rock, 2 for Paper, or 3 for Scissors: ");
    userMove = input.nextInt(); 
    while(input.hasNextInt()) {
        if (userMove!=1 && userMove!=2 && userMove!=3)
        {
            System.out.println("Invalid move. Try again.");
            System.out.println("Enter your move: ");
            input.nextInt();
            
        }
    } 
    if(userMove==1)
    {
        System.out.println("You have chosen Rock!");  
    }
    else if(userMove==2)
    {
        System.out.println("You have chosen Paper!");  
    }
    else if(userMove==3)
    {
        System.out.println("You have chosen Scissors!");  
    }

        if (userMove == cMove) 
        { 
            System.out.println("Tie Game!");
            System.out.println("");
            tie++;
            rounds++;
        } else if (cMove==1 && userMove==3)
            {
                System.out.println("Computer chose Rock!");
                System.out.println("Rock beats Scissors!");
                System.out.println("Computer Wins!");
                cScore++;
                rounds++;
            } 

            else if (cMove==1 && userMove==2) 
            {
                System.out.println("Computer chose Rock!");
                System.out.println("Paper beats Rock!");
                System.out.println("Player Wins!");
                pScore++;
                rounds++;
            } 

            else if (cMove==2 && userMove==3) 
            {
                System.out.println("Computer chose Paper!");
                System.out.println("Scissors beats Paper!");
                System.out.println("Player Wins!");
                pScore++;
                rounds++;
            } 

            else if (cMove==2 && userMove==1)
            {
                System.out.println("Computer chose Paper!");
                System.out.println("Paper beats Rock!");
                System.out.println("Computer Wins!");
                cScore++;
                rounds++;
            } 

            else if (cMove==3 && userMove==1)  
            {
                System.out.println("Computer chose Scissors!");
                System.out.println("Rock beats Scissors!");
                System.out.println("Player Wins!");
                pScore++;
                rounds++;
            } 

            else if (cMove==3 && userMove==2) 
            {
                System.out.println("Computer chose Scissors!");
                System.out.println("Scissors beats Paper!");
                System.out.println("Computer Wins!");
                cScore++;
                rounds++;
            }
        
        
    System.out.println("Would you like to play again?");
    System.out.println("Answer \"yes\" or \"no\"");
    input.next();
    answer = input.next();
    
    if(answer.equalsIgnoreCase("yes"))
    {
        main(null);
    }
    else {
        System.out.println ("Here are the final scores after " + rounds +" 
rounds:");
        System.out.println ("You: "+ pScore + "Computer: "+ cScore + "Ties: " 
+ tie);
        }
    }
}

您沒有將 String 答案傳遞給您的letsPlay() 方法,這是因為您的letsPlay() 方法不能將String 作為參數,因為它是在沒有傳遞參數的情況下定義的。 解決此問題的方法是將方法定義更改為需要 String 變量。

public static int letsPlay()

變成

public static int letsPlay(String userInput)

然后在您的方法中,您在 letPLay(String userInput) 方法中使用變量 userInput 而不是 String answer。

您遇到的下一個問題是您在方法中再次調用該方法。 這稱為遞歸,它是完全合法的,但在這種情況下並不理想。 一旦游戲結束,您應該退出游戲,並在您的 main() 方法中詢問用戶是否想再次玩游戲。

public static void main (String[] args) 
{    
    Scanner input = new Scanner(System.in);
    
    do
    {
        System.out.println("Would you like to play \"Rock, Paper, Scissors?\"");
        System.out.println("Answer \"yes\" or \"no\"");
        String answer = input.nextLine();
        letsPlay(answer);

    }while(answer.equalsIgnoreCase("yes"));

}

首先,在您的主要方法中,一個input.next()是多余的並且沒有用,因此請將其刪除。 現在在 main 方法中在String answer = input.next();之后編寫如下語句

letsPlay(answer);

在letsPlay()方法中放一個參數如下:

public static void letsPlay(String answer) {
//Your code..........
//Some last edits...
Scanner input = new Scanner(System.in);
answer = input.next();
if(!(answer.equalsIgnoreCase("yes")))
{
    System.out.println ("Here are the final scores after "+rounds+"        
    rounds:");
    System.out.println("You:"+pScore+"Computer: "+cScore+"Ties: "+tie);
}
}

調用任何線路都不需要額外的方法。 你可以打電話給main

將代碼從letsPlay 方法移到main。

刪除: letsPlay()使用: main(null)

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


public class Main 
{
    public static void main (String[] args) 
    {    
        Scanner input = new Scanner(System.in);
        System.out.println("Would you like to play \"Rock, Paper, Scissors?\"");
        System.out.println("Answer \"yes\" or \"no\"");
        input.next();
        String answer = input.next();
        
        // moved codes to following place from letsPlay
        int cMove = 0; 
        ...
        if(yesorno.equalsIgnoreCase("yes"))
        {
            main(null); // changed with letsPlay()
        }
       ...
    }
}

發生 cMove 未初始化異常。 所以使用這個:

int cMove = 0;

現在,沒有發生任何錯誤。

在構造函數中移動掃描儀 object。 目前你有它在外面,你的代碼不知道它是什么。

這是代碼的修改部分:

public static int letsPlay()
{
    int cMove; 
    int userMove = 0; 
    int cScore = 0; 
    int pScore = 0; 
    int tie = 0;
    int rounds = 0; 
    Random r = new Random();
    
    Scanner input = new Scanner(System.in); // move the input object inside the constructor

希望能幫助到你。

您的代碼中有很多錯誤。 您可以查看代碼中的注釋以正確理解代碼。

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

public class RockPaperScissors {
    public static void main(String[] args) {
        // initialising variable to 0 for score calculation
        int cScore = 0;
        int pScore = 0;
        int tie = 0;
        int rounds = 0;
        Scanner input = new Scanner(System.in);
        System.out.println("Would you like to play \"Rock, Paper, Scissors?\"");
        System.out.println("Answer \"Yes\" or \"No\"");
        String answer = input.next();
        if (answer.equalsIgnoreCase("yes")) {
            // Calling method letsPlay with arguments answer, cScore, pScore, tie, rounds
            // initially cScore = pScore = tie = rounds = 0
            letsPlay(answer, cScore, pScore, tie, rounds);
        }
    }

    // letsPlay Method
    public static void letsPlay(String answer, int cScore, int pScore, int tie, int rounds) {
        int cMove;
        int userMove;
        Random r = new Random();
        Scanner input = new Scanner(System.in);

        // loop untill user chose no
        while (true) {
            // to get random move of computer on every iteration
            cMove = r.nextInt(3) + 1;
            System.out.println("--------------------------------------------------");
            System.out.println("Choose your move!");
            System.out.println("Enter 1 for Rock, 2 for Paper, or 3 for Scissors: ");
            userMove = input.nextInt();

            // loop until user input number 1 or 2 or 3
            while (userMove != 1 && userMove != 2 && userMove != 3) {
                System.out.println("Invalid move. Try again.");
                System.out.println("--------------------------------------------------");
                System.out.println("Choose your move: ");
                System.out.println("Enter 1 for Rock, 2 for Paper, or 3 for Scissors: ");
                userMove = input.nextInt();
            }

            // Print statement for user move
            if (userMove == 1) {
                System.out.println("You have chosen Rock!");
            } else if (userMove == 2) {
                System.out.println("You have chosen Paper!");
            } else {
                System.out.println("You have chosen Scissors!");
            }

            // Print statement for computer move
            if (cMove == 1) {
                System.out.println("Computer chose Rock!");
            } else if (cMove == 2) {
                System.out.println("Computer chose Paper!");
            } else {
                System.out.println("Computer chose Scissors!");
            }

            // Winning, Loosing and Tie conditions
            // increment round to 1 every time
            // increment the winner, looser or tie on every iteration
            if (userMove == cMove) {
                System.out.println("Tie Game!");
                tie++;
                rounds++;
            } else if (cMove == 1 && userMove == 3) {
                System.out.println("Rock beats Scissors!");
                System.out.println("Computer Wins!");
                cScore++;
                rounds++;
            } else if (cMove == 1 && userMove == 2) {
                System.out.println("Paper beats Rock!");
                System.out.println("Player Wins!");
                pScore++;
                rounds++;
            } else if (cMove == 2 && userMove == 3) {
                System.out.println("Scissors beats Paper!");
                System.out.println("Player Wins!");
                pScore++;
                rounds++;
            } else if (cMove == 2 && userMove == 1) {
                System.out.println("Paper beats Rock!");
                System.out.println("Computer Wins!");
                cScore++;
                rounds++;
            } else if (cMove == 3 && userMove == 1) {
                System.out.println("Rock beats Scissors!");
                System.out.println("Player Wins!");
                pScore++;
                rounds++;
            } else if (cMove == 3 && userMove == 2) {
                System.out.println("Scissors beats Paper!");
                System.out.println("Computer Wins!");
                cScore++;
                rounds++;
            }

            // Asking again to play or not
            System.out.println("\nWould you like to play again?");
            System.out.println("Answer \"Yes\" or \"No\"");
            answer = input.next();

            if (answer.equalsIgnoreCase("yes")) {
                // If yes the call letsPlay(answer, cScore, pScore, tie, rounds);
                // But this time value of cScore, pScore, tie, rounds is changed
                // according to conditions
                letsPlay(answer, cScore, pScore, tie, rounds);
            } else {
                // Print if user says didn't want to play again
                System.out.println("==========================================");
                System.out.println("\nHere are the final scores after " + rounds + " rounds:");
                System.out.println("You      : " + pScore + "\nComputer : " + cScore + "\nTies     : " + tie);
            }
            // Exit if user didn't want to play again
            break;
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM