Java實現人機猜拳小遊戲
阿新 • • 發佈:2020-01-07
本文例項完成人機猜拳互動遊戲的開發,供大家參考,具體內容如下
階段一:實驗——分析業務,建立使用者類
1.分析業務,抽象出類、類的特徵和行為
2.創建出使用者類
階段二:實驗——創建出計算機類
1.建立計算機類Computer。實現計算機出拳
2.產生一個1—3的隨機數,模擬計算機的出拳結果
階段三:實驗——建立遊戲類,選擇對戰對手
1.建立遊戲類Game
2.編寫遊戲類的初始化方法initial()
3.編寫遊戲類的開始遊戲方法startGame()
階段四:實驗——實現一局對戰
分別呼叫使用者類和計算機類的出拳方法showFist(),接受返回值並比較,給出勝負結果
階段五:實驗——實現迴圈對戰,並累計得分
實現迴圈對戰,並且累加贏家的得分
階段六:實驗——顯示對戰結果
遊戲結束後,顯示對戰結果
編寫showResult()方法,比較二者的得分情況,給出對戰結果
階段七:實驗——完善遊戲類的startGame()
輸入並儲存使用者姓名,遊戲結束後顯示雙方的各自得分
Game.java
import java.util.Scanner; public class Game { Scanner sc = new Scanner(System.in); User User;//使用者玩家 Computer Computer;//電腦玩家 int count;//對戰次數 int score;//分數 //遊戲類的初始化方法 public void initial(){ //建立使用者物件 User= new User(); //建立電腦物件 Computer = new Computer(); //初始化對戰次數為0 count = 0; } //開始遊戲的方法 public void startGame(){ System.out.println("--------------------歡迎進入遊戲世界-----------------------\n\n"); System.out.println("\t\t*******************"); System.out.println("\t\t** 猜拳,開始 **"); System.out.println("\t\t*******************\n\n"); System.out.println("出拳規則:1.石頭 2.剪刀 3.布"); System.out.print("請選著對方角色(1:劉備 2:孫權 3:曹操)"); int choose = sc.nextInt();//接收使用者選擇的角色 switch(choose){ case 1: Computer.computerName = "劉備";//把值賦給電腦類的name System.out.println("你選擇了"+Computer.computerName+"對戰"); break; case 2: Computer.computerName = "孫權"; System.out.println("你選擇了"+Computer.computerName+"對戰"); break; case 3: Computer.computerName = "曹操"; System.out.println("你選擇了"+Computer.computerName+"對戰"); break; default: System.out.println("輸入有誤!"); break; } System.out.println("請輸入你的姓名:"); User.userName = sc.next(); System.out.println("要開始嗎(y/n)"); String con = sc.next(); if(con.equals("n")){//如果不開始輸入"n"的話 就提示退出 System.out.println("系統退出!"); } int perFist;//使用者出的拳 int comFist;//計算機出的拳 while(con.equals("y")){ //出拳 perFist = User.showFirst();//呼叫使用者類的方法 comFist = Computer.chuQuan();//呼叫電腦類的方法 //裁決 if((perFist == 1 && comFist == 1) || (perFist == 2 && comFist == 2) || (perFist == 3 && comFist == 3)){ System.out.println("結果:和局,真衰!");//平局 }else if((perFist == 1 && comFist == 3) || (perFist == 2 && comFist == 1) || (perFist == 3 && comFist == 2)){ System.out.println("You lost!");//使用者輸了 System.out.println("結果:你被KO"); Computer.score++;//記錄電腦贏的分數 }else{ System.out.println("You win!");//使用者贏了 System.out.println("結果:恭喜,你贏了!"); User.score++;//記錄使用者贏的分數 } count++;//對戰次數依次加一 System.out.println("是否進入下一輪(y/n)"); con = sc.next(); } //如果結束 則顯示最後的結果 showResult(); } //顯示最後的輸出結果 public void showResult(){ System.out.println("------------------------------------------------"); System.out.println(Computer.computerName+"\tVS\t"+User.userName); System.out.println("對戰次數:"+count); System.out.println("姓名"+"\t"+"積分"); System.out.println(User.userName+"\t"+User.score); System.out.println(Computer.computerName+"\t"+Computer.score); if(User.score>Computer.score){//如果使用者的分數大於電腦的分數 則使用者贏 System.out.println(User.userName+"贏了!"); }else{ System.out.println(Computer.computerName+"贏了!"); } System.out.println("-------------------------------------------------"); } }
User.java
import java.util.Scanner; public class User { String userName;//使用者名稱 int score;//積分 public int showFirst() { System.out.print("請出拳:1.剪刀2.石頭3.布(輸入相應的數字):"); Scanner sc = new Scanner(System.in); int choice = sc.nextInt(); switch(choice) { case 1: System.out.println("你出拳:石頭"); break; case 2: System.out.println("你出拳:剪刀"); break; case 3: System.out.println("你出拳:布"); break; default: System.out.println("輸入錯誤!"); break; } return choice; } }
Computer.java
import java.util.Scanner; public class Computer { String computerName;//電腦名 int score;//電腦積分 public int chuQuan() { int random =(int)(Math.random()*3)+1; switch(random) { case 1: System.out.println(computerName+"出拳:石頭"); break; case 2: System.out.println(computerName+"出拳:剪刀"); break; case 3: System.out.println(computerName+"出拳:布"); break; default: System.out.println("輸入有錯,請重新輸入:"); break; } return random; } }
Main.java
public class Main { public static void main(String[] args) { Game g = new Game(); g.initial();//呼叫初始化方法 g.startGame();//呼叫開始遊戲的方法 } }
總的來說,User和Computer類比較好寫,就是Game類要求比較多,但是按照步驟一步一步走穩,就不會有太大的問題,但是注意name和score這兩個在兩個類中都可以出現,但是要注意區分,給讀者客觀上有一種提示。最後,Main中,可以不用再去初始化或者建立一個新的物件,直接呼叫前面那一系列方法就行,寫的越多,錯的機率就越大。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。