簡體   English   中英

使用AI Java的剪刀石頭布游戲

[英]Rock Paper Scissors Game Using AI Java

對於“我的作業”,我應該使用Java創建一個“石頭,剪刀,剪刀”游戲。 但是,這又增加了一些扭曲。 計算機應根據用戶先前選擇的武器來選擇最有可能擊敗用戶的武器。 例如,如果用戶選擇了Paper 3次,而Rock和Scissors分別只有1次,則計算機應選擇Scissors作為最有可能擊敗Paper的武器,這是用戶迄今為止最常見的選擇。 這是到目前為止我得到的:

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


public class CSCD210HW3 
{              
    public static void main(String[] args)
    {
      displayGreeting();
      computerChoice();
      gameCode();
    }

    public static void displayGreeting()
    {
      System.out.print("This is the classic Rock, Paper, Scissors game everyone has grown to know and love. The \nrules are the same. Paper beats rock, rock beats scissors, scissors beats paper. Good luck fool!");

      System.out.println();
    }
    public static String computerChoice()
    {
        Random randomGenrator = new Random();
        int randomNumber = randomGenrator.nextInt(3);
        int cpuRock = 0;
        int cpuPaper = 0;
        int cpuScissors = 0;

        String weapon = "nothing";
        switch(randomNumber)
        {
           case 0: 
                weapon = "rock";
                cpuRock++;
                break;
           case 1: 
                weapon = "paper";
                cpuPaper++;
                break;
           case 2: 
                weapon = "scissors";
                cpuScissors++;
                break;
        }

        return weapon;
    }

    public static String playerChoice()
    {      
        Scanner kb = new Scanner(System.in);

        String input = "";

        System.out.println();
        System.out.print("Please Choose Your Weapon: ");
        input = kb.next();
        String inputLower = input.toLowerCase();
        return inputLower;
    }

    public static void gameCode()
    {    
            int ties = 0;
            int playerWins = 0;
            int compWins = 0;

            int userScissors = 0;
            int userRock = 0;
            int userPaper = 0;

            String player;
            String comp;

      do
      {
           player = playerChoice();

           if(player == "scissors")
             { 
               userScissors++;
             }
           else if(player == "rock")
             {
               userRock++;
             }
           else if(player == "paper")
             {
               userPaper++;
             }

           comp = computerChoice();

            if(player.equals("rock")&&comp.equals("rock"))
            {
                System.out.println("You and the Computer Both Chose Rock. It's a Tie!");
                ties++;
                userRock++;
            }
            else if(player.equals("paper")&&comp.equals("paper"))
            {
                System.out.println("You and the Computer Both Chose Paper. It's a Tie!");
                ties++;
                userPaper++;
            }
            else if(player.equals("scissors")&&comp.equals("scissors"))
            {
                System.out.println("You and the Computer Both Chose Scissors. It's a Tie!");
                ties++;
                userScissors++;
            }

            else if (player.equals("rock") && comp.equals("scissors"))
            {
                System.out.println("You Chose Rock and the Computer Chose Scissors. You Win!");
                playerWins++;
                userRock++;
            }
            else if(comp.equals("rock") && player.equals("scissors"))
            {
               System.out.println("You Chose Scissors and the Computer Chose Rock. You Lose!");                
               compWins++;
               userScissors++;
            }
            else if(player.equals("scissors")&& comp.equals("paper"))
            {
               System.out.println("You Chose Scissors and the Computer Chose Paper. You Win!");   
               playerWins ++;
               userScissors++;
            }
            else if(comp.equals("scissors") && player.equals("paper"))
            {
               System.out.println("You Chose Paper and the Computer Chose Scissors. You Lose!");
               compWins++;
               userPaper++;
            }
            else if(player.equals("paper") && comp.equals("rock"))
            {
               System.out.println("You Chose Paper and the Computer Chose Rock. You Win!");     
               playerWins++;
               userPaper++;
            }
            else if(comp.equals("paper")&& player.equals("rock"))
            {
               System.out.println("You Chose Paper and the Computer Chose Rock. You Lose!");
               compWins++;
               userRock++;
            }
            else
            {
               System.out.println("Invalid Input. Please Re-Enter. ");
               System.out.println();
            }

        }while(!(player.equals("quit")));

                    System.out.println("Here are the results: ");
                    System.out.println("Ties: " + ties);
                    System.out.println("Computer Wins: "  + compWins);
                    System.out.println("Player Wins: " + playerWins); 
                    System.out.println();
                    System.out.println("Times Rock Chosen: "+userRock);
                    System.out.println("Times Paper Chosen: "+userPaper);
                    System.out.println("Times Scissors Chosen: "+userScissors);

                    return;


         }//end
}

我不知道如何使計算機選擇最有可能擊敗用戶的武器。 我聽說過AI可能會起作用,但是我以前從未使用過。 我將如何去做?

如果計算機的對手隨機選擇石頭,紙或剪刀,那么計算機在猜測方面的成功就不可能比人類更好。 但是,由於人類很少會完全隨機地做任何事情,因此考慮到先前的結果,可能存在一些方法來權衡結果的可能性。 因此,我認為您可以使用模式識別。 例如,對於每種組合或長度為n(因此會有3 ^ n)的石頭,紙或剪刀,您可能還記得它在人類玩家產生的序列中出現的頻率。 因此,在每個回合中,您都要記住n-1個先前的回合,而在每個回合中,您需要增加與最后n個回合中的結果組合相關的計數器(3 ^ n個計數器之一)。 您可以輕松地看到解決問題所需的時間和空間隨n呈指數增長,因此我建議選擇一個較小的n,例如4或5。因此,請從程序隨機猜測開始(選擇每個選項的機會為33.3%) ,然后在通過與人類對戰收集到一定數量的統計數據之后,開始咨詢您的計數器,開始對三種可能結果中的每一種產生偏見。

暫無
暫無

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

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