2014-10-21 52 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%), ,然後,通過與人對戰收集一定數量的統計數據後,通過諮詢您的計數器開始偏倚三種可能的結果。