2014-10-21 149 views
0

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

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

+1

将此代码翻译成代码,并在有更多特定问题时再回来。 *例如,如果用户选择了3次纸张,但每次只选择了1次Rock和Scissors,计算机应该选择剪刀作为最有可能击败纸张的武器,这是迄今为止用户最常使用的选择。* – 2014-10-21 22:41:11

+0

这就是要点。我不知道该怎么做。 – Avsfan9 2014-10-21 22:42:24

+3

然后你应该跟你的老师说话,而不是我们。从广义上讲,首先要记住每件武器的使用量。然后基于此确定答案。 – 2014-10-21 22:43:54

回答

0

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