任務概述:
通過控制臺方式實作一個人機對戰的猜拳游戲,用戶通過輸入 (1.剪刀 2.石頭 3.布),機器隨機生成(1.剪刀 2.石頭 3.布),勝者積分, n 局以后通過積分的多少判定勝負,
- 根據任務目標的要求,我們可以分成得出以下資訊
- 1個測驗類
- 玩家、機器人、游戲場 等3個類
- 三個類的功能(方法用藍色表示,屬性用紫色表示)
- 為了方便比較,將(剪刀,石頭,布)用數字(1,2,3)分別進行表示
- 玩家:拳頭屬性,玩家的得分,對戰的局數,玩家出拳
- 機器:拳頭屬性,機器的得分,生成亂數,
- 游戲場:1.開始預加載的界面 2.比較雙方的資料(機器人的亂數以及玩家輸入的資料) 3.比較后能進行積分的積累 4.能比較雙方積分,并進行結果展示,以及判定輸贏
- 那,,,以上怎么實作呢?
接下來就是我們的代碼了(記得實操呀= ̄ω ̄=)
- 首先是User類
- 根據目標,可以知道我們需要 有 “用戶出拳” 積分
- 因為要回圈錄入用戶輸入的資料 所以用 Scanner 類生成 input 物件
- 屬性:user(承載用戶輸入的 剪刀石頭布) score(承載用戶每輪的得分) num(用戶要進行的游戲次數)
- 方法:setUser錄入用戶輸入的資料
/**
* 用于獲得和存盤用戶的出拳
*/
public class User {
private static Scanner input = new Scanner(System.in);
private int user;//用戶出拳
int score;//用戶積分
int num;//對戰局數
/**
* 提示語,錄入用戶出拳資料,并輸出用戶出拳資訊
* @return
*/
public int setUser(){
System.out.println("請輸入:1-剪刀,2-石頭,3-布");
user = input.nextInt();
if (user==1){
System.out.println("用戶:剪刀");
}else if (user==2){
System.out.println("用戶:石頭");
}else if (user==3){
System.out.println("用戶:布");
}else System.err.println("輸入錯誤!請按規則輸入對應數字!");
return user;
}
}
- 下面是Machine(人機)類
- 重點:亂數
- 屬性:score(承載每輪猜拳 人機的 得分情況),fist(承載亂數后生成的剪刀,石頭,布)
- 方法:在setId方法中 生成Random(隨即類)的random(物件)
public class Machine {
private static int fist;
public int score;
/**
* 生成亂數
* @return 機器人出拳的資料
*/
public int setId(){
Random random = new Random();
int r = random.nextInt(3);
fist = r+1;//獲取機器人的隨機出拳
if (fist==1){
System.out.println("機器人:剪刀");
}else if (fist==2){
System.out.println("機器人:石頭");
}else System.out.println("機器人:布");
return fist;
}
}
- 弄好上面的兩個基本類,就到了我們的“游戲場”了,這是最復雜的部分
- 游戲場 自然要有 游戲規則,初始化界面,計算以及呈現比賽的結果
- 將每一個行為都用函式寫成單獨的函式
- 方法有:
- startMenu() 初始化界面,這里面包括了游戲規則,以及對雙方出拳的判斷,展示每輪的得分情況
- showResult() 將結果展示在控制臺上
- Result() 對雙方的分數做勝負的判斷
/**
* 用戶,機器人的出拳進行對比,
* 對結果進行記錄
* 然后輸出結果
*/
public class Game {
static Scanner input = new Scanner(System.in);
//對用戶類和機器人類進行初始化
User user = new User();
Machine machine = new Machine();
/**
* 開始選單
*/
public void startMenu(){
//--初始化界面
System.out.println("=======歡迎來到猜拳游戲=======");
System.out.println();
System.out.println("*******************************");
System.out.println("——————出拳規則:1-剪刀,2-石頭,3-布——————");
System.out.println("*******************************");
System.out.println("-------》》》猜拳開始《《《------");
System.out.println("-------------------------------");
//獲取用戶想要進行的對戰次數
System.out.println("請輸入對戰局數");
user.num = input.nextInt();//物件.屬性名 用于直接給其屬性賦值,主用于在其他類中
int userFist;//用戶出拳
int machineFist;//機器人出拳
for (int i=0; i< user.num; i++){
//獲取雙方出拳
userFist = user.setUser();
machineFist = machine.setId();
if (userFist==machineFist){
System.out.println("結果:"+"第"+i+"局,平局,不積分");
}else if ((userFist==1)&&(machineFist==2)||(userFist==2)&&(machineFist==3)||(userFist==3)&&(machineFist==1)){
System.out.println("結果:"+"第"+i+"局,機器人贏,機器人積一分");
machine.score++;
}else if ((userFist==1)&&(machineFist==3)||(userFist==2)&&(machineFist==1)||(userFist==3)&&(machineFist==2)){
System.out.println("結果:"+"第"+i+"局,玩家贏,玩家積一分");
user.score++;
}else {
System.out.println("請按規則出拳!");
break;
}
}
//--顯示結果
showResult();
}
//以上是初始化界面
/**
* 輸出對戰結果
*/
private void showResult(){
//顯示對戰次數
System.out.println("--------------------");
System.out.println("對戰次數:"+user.num);
//顯示最終得分
System.out.println("姓名\t得分");
System.out.println("用戶"+"\t"+user.score);
System.out.println("機器人"+"\t"+machine.score);
//顯示對戰結果
int result = Result();
System.out.println("------對戰結果如下------");
if (result==1){
System.out.println("結果:打成平手");
}else if (result==2){
System.out.println("結果:恭喜!您贏了!");//用戶獲勝
}else System.out.println("結果:你輸了,別氣餒,下次再來!");//計算機贏了
System.out.println("游戲結束");
System.out.println("------------------");
}
//以上是輸出對戰的結果
//下面是計算的部分
/**
* 計算比賽結果
*/
private int Result(){
if (user.score==machine.score){
return 1;
}else if (user.score>machine.score){
return 2;
}else return 3;
}
}
最后一步,用測驗類進行測驗(~ ̄▽ ̄)~
public class Guess {
public static void main(String[] args) {
//創建一個游戲場
Game game = new Game();
//直接呼叫,開始游戲
game.startMenu();
}
}
這個小游戲的代碼都比較簡單,主要是方法以及屬性的設計,還有邏輯思路,
下面是成果展示啦


最后,我想送一句我最喜歡的話給努力的你 耐心和堅持總能奇跡般地掃除一切困難和障礙 一起從菜鳥翻身吧!!
還有,感謝您能看到這 ?(? ? ??),我會持續更新的!
還要特別感謝Java控制臺實作猜拳游戲_java_腳本之家 (jb51.net)的作者給我提供了思路借鑒(菜鳥哭泣(ノへ`、))
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/289790.html
標籤:其他
