使用AI Java的岩石纸剪刀游戏

时间:2014-10-21 22:37:06

标签: java methods artificial-intelligence

对于我的作业,我应该使用java创建一个Rock,Paper,Scissors游戏。但是,还有一个额外的转折点。计算机应根据用户之前选择的武器选择最有可能击败用户的武器。例如,如果用户选择纸张3次但摇滚和剪刀每次只选择1次,则计算机应选择剪刀作为最有可能击败纸张的武器,这是用户目前最常用的选择。这是我到目前为止所得到的:

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可能会起作用,但我之前从未使用过AI。我该怎么做呢?

1 个答案:

答案 0 :(得分:0)

如果计算机的对手随意选择摇滚,纸张或剪刀,计算机无法比人类更好地进行猜测。然而,由于人类很少完全随意地做任何事情,因此可能有一些方法来衡量先前结果给出的结果的可能性。所以我认为你可以选择模式识别。例如,对于长度为n的每个组合或岩石,纸张或剪刀(因此会有3 ^ n个),您可以记住它在人类玩家产生的序列中出现的频率。因此,在每个回合中,您都会记住前一轮的n-1次转弯,并且在每次转弯之后,您会增加与最后n圈中的结果组合相关联的计数器(3 ^ n个计数器中的一个)。您可以很容易地看到解决问题所需的时间和空间随n呈指数增长,所以我建议选择一个小的n,如4或5.所以从你的程序随机猜测开始(选择每个选项的可能性为33.3%)然后,在通过与人类对战收集了一定数量的统计数据后,通过咨询您的计数器开始偏向三种可能结果中的每一种。

相关问题