Java實(shí)現(xiàn)人機(jī)猜拳小游戲
本文實(shí)例完成人機(jī)猜拳互動(dòng)游戲的開(kāi)發(fā),供大家參考,具體內(nèi)容如下
階段一:實(shí)驗(yàn)——分析業(yè)務(wù),創(chuàng)建用戶類(lèi)
1.分析業(yè)務(wù),抽象出類(lèi)、類(lèi)的特征和行為
2.創(chuàng)建出用戶類(lèi)
階段二:實(shí)驗(yàn)——?jiǎng)?chuàng)建出計(jì)算機(jī)類(lèi)
1.創(chuàng)建計(jì)算機(jī)類(lèi)Computer。實(shí)現(xiàn)計(jì)算機(jī)出拳
2.產(chǎn)生一個(gè)1—3的隨機(jī)數(shù),模擬計(jì)算機(jī)的出拳結(jié)果
階段三:實(shí)驗(yàn)——?jiǎng)?chuàng)建游戲類(lèi),選擇對(duì)戰(zhàn)對(duì)手
1.創(chuàng)建游戲類(lèi)Game
2.編寫(xiě)游戲類(lèi)的初始化方法initial()
3.編寫(xiě)游戲類(lèi)的開(kāi)始游戲方法startGame()
階段四:實(shí)驗(yàn)——實(shí)現(xiàn)一局對(duì)戰(zhàn)
分別調(diào)用用戶類(lèi)和計(jì)算機(jī)類(lèi)的出拳方法showFist(),接受返回值并比較,給出勝負(fù)結(jié)果
階段五:實(shí)驗(yàn)——實(shí)現(xiàn)循環(huán)對(duì)戰(zhàn),并累計(jì)得分
實(shí)現(xiàn)循環(huán)對(duì)戰(zhàn),并且累加贏家的得分
階段六:實(shí)驗(yàn)——顯示對(duì)戰(zhàn)結(jié)果
游戲結(jié)束后,顯示對(duì)戰(zhàn)結(jié)果
編寫(xiě)showResult()方法,比較二者的得分情況,給出對(duì)戰(zhàn)結(jié)果
階段七:實(shí)驗(yàn)——完善游戲類(lèi)的startGame()
輸入并保存用戶姓名,游戲結(jié)束后顯示雙方的各自得分
Game.java
import java.util.Scanner;
public class Game {
Scanner sc = new Scanner(System.in);
User User;//用戶玩家
Computer Computer;//電腦玩家
int count;//對(duì)戰(zhàn)次數(shù)
int score;//分?jǐn)?shù)
//游戲類(lèi)的初始化方法
public void initial(){
//創(chuàng)建用戶對(duì)象
User= new User();
//創(chuàng)建電腦對(duì)象
Computer = new Computer();
//初始化對(duì)戰(zhàn)次數(shù)為0
count = 0;
}
//開(kāi)始游戲的方法
public void startGame(){
System.out.println("--------------------歡迎進(jìn)入游戲世界-----------------------\n\n");
System.out.println("\t\t*******************");
System.out.println("\t\t** 猜拳,開(kāi)始 **");
System.out.println("\t\t*******************\n\n");
System.out.println("出拳規(guī)則:1.石頭 2.剪刀 3.布");
System.out.print("請(qǐng)選著對(duì)方角色(1:劉備 2:孫權(quán) 3:曹操)");
int choose = sc.nextInt();//接收用戶選擇的角色
switch(choose){
case 1:
Computer.computerName = "劉備";//把值賦給電腦類(lèi)的name
System.out.println("你選擇了"+Computer.computerName+"對(duì)戰(zhàn)");
break;
case 2:
Computer.computerName = "孫權(quán)";
System.out.println("你選擇了"+Computer.computerName+"對(duì)戰(zhàn)");
break;
case 3:
Computer.computerName = "曹操";
System.out.println("你選擇了"+Computer.computerName+"對(duì)戰(zhàn)");
break;
default:
System.out.println("輸入有誤!");
break;
}
System.out.println("請(qǐng)輸入你的姓名:");
User.userName = sc.next();
System.out.println("要開(kāi)始嗎(y/n)");
String con = sc.next();
if(con.equals("n")){//如果不開(kāi)始輸入"n"的話 就提示退出
System.out.println("系統(tǒng)退出!");
}
int perFist;//用戶出的拳
int comFist;//計(jì)算機(jī)出的拳
while(con.equals("y")){
//出拳
perFist = User.showFirst();//調(diào)用用戶類(lèi)的方法
comFist = Computer.chuQuan();//調(diào)用電腦類(lèi)的方法
//裁決
if((perFist == 1 && comFist == 1) ||
(perFist == 2 && comFist == 2) ||
(perFist == 3 && comFist == 3)){
System.out.println("結(jié)果:和局,真衰!");//平局
}else if((perFist == 1 && comFist == 3) ||
(perFist == 2 && comFist == 1) ||
(perFist == 3 && comFist == 2)){
System.out.println("You lost!");//用戶輸了
System.out.println("結(jié)果:你被KO");
Computer.score++;//記錄電腦贏的分?jǐn)?shù)
}else{
System.out.println("You win!");//用戶贏了
System.out.println("結(jié)果:恭喜,你贏了!");
User.score++;//記錄用戶贏的分?jǐn)?shù)
}
count++;//對(duì)戰(zhàn)次數(shù)依次加一
System.out.println("是否進(jìn)入下一輪(y/n)");
con = sc.next();
}
//如果結(jié)束 則顯示最后的結(jié)果
showResult();
}
//顯示最后的輸出結(jié)果
public void showResult(){
System.out.println("------------------------------------------------");
System.out.println(Computer.computerName+"\tVS\t"+User.userName);
System.out.println("對(duì)戰(zhàn)次數(shù):"+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){//如果用戶的分?jǐn)?shù)大于電腦的分?jǐn)?shù) 則用戶贏
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("請(qǐng)出拳:1.剪刀2.石頭3.布(輸入相應(yīng)的數(shù)字):");
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("輸入錯(cuò)誤!");
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("輸入有錯(cuò),請(qǐng)重新輸入:");
break;
}
return random;
}
}
Main.java
public class Main {
public static void main(String[] args) {
Game g = new Game();
g.initial();//調(diào)用初始化方法
g.startGame();//調(diào)用開(kāi)始游戲的方法
}
}

總的來(lái)說(shuō),User和Computer類(lèi)比較好寫(xiě),就是Game類(lèi)要求比較多,但是按照步驟一步一步走穩(wěn),就不會(huì)有太大的問(wèn)題,但是注意name和score這兩個(gè)在兩個(gè)類(lèi)中都可以出現(xiàn),但是要注意區(qū)分,給讀者客觀上有一種提示。最后,Main中,可以不用再去初始化或者創(chuàng)建一個(gè)新的對(duì)象,直接調(diào)用前面那一系列方法就行,寫(xiě)的越多,錯(cuò)的幾率就越大。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
java 設(shè)計(jì)模式之單例的實(shí)例詳解
這篇文章主要介紹了java 設(shè)計(jì)模式之單例的實(shí)例詳解的相關(guān)資料, 希望通過(guò)本文能幫助到大家,讓大家徹底理解掌握單例模式,需要的朋友可以參考下2017-09-09
Java HelloWorld原理分析_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
我們初學(xué)java的第一個(gè)程序是"hello world"。下面通過(guò)實(shí)例代碼給大家講解Java HelloWorld原理分析,感興趣的朋友一起學(xué)習(xí)吧2017-05-05
java?集合工具類(lèi)Collections及Comparable和Comparator排序詳解
這篇文章主要介紹了java集合工具類(lèi)Collections及Comparable和Comparator排序詳解,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-06-06
Mybatis collection查詢集合屬性報(bào)錯(cuò)的解決方案
這篇文章主要介紹了Mybatis collection查詢集合屬性報(bào)錯(cuò)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09
springcloud?eureka切換nacos的配置方法
這篇文章主要介紹了springcloud?eureka切換nacos,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-01-01
springboot中請(qǐng)求路徑配置在配置文件中詳解
這篇文章主要介紹了springboot中請(qǐng)求路徑配置在配置文件中,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01
Java數(shù)據(jù)封裝樹(shù)形結(jié)構(gòu)代碼實(shí)例
這篇文章主要介紹了Java數(shù)據(jù)封裝樹(shù)形結(jié)構(gòu)代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-01-01
java 學(xué)習(xí)筆記(入門(mén)篇)_java的安裝與配置
學(xué)習(xí)Java已經(jīng)很長(zhǎng)時(shí)間了,由于基礎(chǔ)不好遇到問(wèn)題就無(wú)從下手,所以,打算寫(xiě)Java的隨手筆記來(lái)鞏固基礎(chǔ),加強(qiáng)學(xué)習(xí),接下來(lái)講解java的安裝,配置等,感興趣的朋友可以參考下2013-01-01
Spring的定時(shí)任務(wù)@Scheduled源碼詳解
這篇文章主要介紹了Spring的定時(shí)任務(wù)@Scheduled源碼詳解,@Scheduled注解是包org.springframework.scheduling.annotation中的一個(gè)注解,主要是用來(lái)開(kāi)啟定時(shí)任務(wù),本文提供了部分實(shí)現(xiàn)代碼與思路,需要的朋友可以參考下2023-09-09

