我之前寫(xiě)了個(gè)猜拳游戲的源代碼,不過(guò)沒(méi)你想的這么精彩。你才給5分就給你你自己修改了,應(yīng)該很簡(jiǎn)單的。要多給點(diǎn)分我可以幫你修改。\x0d\x0aimport java.util.Scanner;\x0d\x0aimport java.util.Random;\x0d\x0apublic class caiquan\x0d\x0a{\x0d\x0afinal int jiandao=0;\x0d\x0afinal int shitou=1;\x0d\x0afinal int bu=2;\x0d\x0a\x0d\x0apublic static void main(String[] args)\x0d\x0a{\x0d\x0aString yn="y";\x0d\x0awhile (yn.equals("y"))\x0d\x0a {\x0d\x0a Scanner scanner = new Scanner(System.in);\x0d\x0a System.out.println("歡迎玩猜拳游戲。請(qǐng)輸入0,1,2:0表示剪刀,1表示石頭,2表示布");\x0d\x0a int a = scanner.nextInt();\x0d\x0a\x0d\x0a Random rd = new Random();\x0d\x0a int b = rd.nextInt(3); \x0d\x0a\x0d\x0a switch (b)\x0d\x0a {\x0d\x0a case 0:\x0d\x0a {\x0d\x0a System.out.println("系統(tǒng)出的是剪刀");\x0d\x0a switch(a)\x0d\x0a {\x0d\x0a case 0:System.out.println("平");break;\x0d\x0a case 1:System.out.println("贏");break;\x0d\x0a case 2:System.out.println("輸");break;\x0d\x0a }\x0d\x0a }\x0d\x0a break;\x0d\x0a case 1:\x0d\x0a {\x0d\x0a System.out.println("系統(tǒng)出的是石頭");\x0d\x0a switch(a)\x0d\x0a {\x0d\x0a case 0:System.out.println("輸");break;\x0d\x0a case 1:System.out.println("平");break;\x0d\x0a case 2:System.out.println("贏");break;\x0d\x0a }\x0d\x0a }\x0d\x0a break;\x0d\x0a case 2:\x0d\x0a {\x0d\x0a System.out.println("系統(tǒng)出的是布");\x0d\x0a switch(a)\x0d\x0a {\x0d\x0a case 0:System.out.println("贏");break;\x0d\x0a case 1:System.out.println("輸");break;\x0d\x0a case 2:System.out.println("平");break;\x0d\x0a }\x0d\x0a }\x0d\x0a }\x0d\x0a Scanner ynn = new Scanner(System.in);\x0d\x0a System.out.println("是否繼續(xù)?是請(qǐng)輸入y,否則輸入n。");\x0d\x0a yn=ynn.next();\x0d\x0a }\x0d\x0a}\x0d\x0a}
創(chuàng)新互聯(lián)公司堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都做網(wǎng)站、成都網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的順義網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
Java實(shí)現(xiàn)猜拳游戲的核心在于電腦隨機(jī)數(shù)的生成,Java中的隨機(jī)數(shù)生成方法是:
首先引入包? ?import java.util.*;??然后???int r=new Random().nextInt(3);??(nextInt中的數(shù)字三代表隨機(jī)數(shù)生成的個(gè)數(shù),從零開(kāi)始)
所以在猜拳的輸入中需要有0、1、2三個(gè)數(shù)字代替,如果要輸入漢字,則用if進(jìn)行相應(yīng)判斷即可。
在實(shí)現(xiàn)的游戲中實(shí)現(xiàn)①猜拳;②記錄勝負(fù);③玩家決定游戲局?jǐn)?shù);④輸出獲勝、失敗及平局;⑤統(tǒng)計(jì)總共的勝負(fù)結(jié)果(根據(jù)獲勝次數(shù)判斷)
①猜拳基礎(chǔ)功能:該部分代碼可以放到一個(gè)方法中,減少主函數(shù)代碼量。
電腦出拳即??int r=new Random().nextInt(3);??注意:該部分一定要寫(xiě)在for循環(huán)內(nèi)部,否則無(wú)法實(shí)現(xiàn)每次不同的隨機(jī)數(shù)。
通過(guò)if判斷雙方出拳是否相等? ?if(a==0r==0)? else?if(a==0r==1)? else if(a==0r==2)? ?即可實(shí)現(xiàn)猜拳,if內(nèi)直接輸出相關(guān)語(yǔ)句即可
②記錄勝負(fù):? 定義猜拳方法為int ,通過(guò)返回值記錄相關(guān)比賽的勝負(fù)情況? ,可以用0--失??;1--獲勝;2--平局 進(jìn)行記錄,在主函數(shù)中對(duì)相應(yīng)拋出的數(shù)字記錄即可
if(a==0r==0){
System.out.println("The computer comes out with cloth,it was a draw. ");
return 2;
}
h=comp.compare(a,r); if (h==1) j++;
登錄后復(fù)制
③玩家決定局?jǐn)?shù): 定義一個(gè)數(shù),在循環(huán)中不大于該數(shù)即可
④輸出獲勝、失敗及平局: j、k即勝利和失敗,平局?jǐn)?shù)即n-j-k。
⑤統(tǒng)計(jì)結(jié)果,直接用if比較i、j的數(shù)字結(jié)果即可。
主函數(shù)部分:
package SS2_5;
import java.util.*;
public class Main {
public static void main(String args[]){
Scanner scanner=new Scanner(System.in);
Compare comp=new Compare();
int h=0,j=0,k=0;
System.out.println("rules:0--cloth;1--stone;2--scissors.\nU can choose how many times you want to play:");
int n=scanner.nextInt();
for(int i=1;i=n;i++){
System.out.print("It's the "+i+" round,your turn:");
int a=scanner.nextInt();
int r=new Random().nextInt(3);
switch (a){
case 0:
h=comp.compare(a,r);
break;
case 1:
h=comp.compare(a,r);
break;
case 2:
h=comp.compare(a,r);
break;
default:
System.out.println("Wrong number!");
break;
}
if (h==1)
j++;
else if(h==0)
k++;
}
System.out.println("The total times you won are "+j+",The draw times are "+(n-j-k)+".");
if(jk)
System.out.println("You are the final winner");
else if(kj)
System.out.println("The computer is the winner.");
if(j==k)
System.out.println("The final result is draw");
}
}
登錄后復(fù)制
compare方法部分
package SS2_5;
public class Compare {
public int compare(int a,int r){
int counter=0;
if(a==0r==0){
System.out.println("The computer comes out with cloth,it was a draw. ");
return 2;
}
else if(a==0r==1){
System.out.println("The computer comes out with stone, you won. ");
return 1;
}
else if(a==0r==2){
System.out.println("The computer comes out with scissor,you lost. ");
return 0;
}
else if(a==1r==0){
System.out.println("The computer comes out with cloth,you lost. ");
return 0;
}
else if(a==1r==1){
System.out.println("The computer comes out with stone,it was a draw. ");
return 2;
}
else if(a==1r==2){
System.out.println("The computer comes out with scissors,you won. ");
return 1;
}
else if(a==2r==0){
System.out.println("The computer comes out with cloth,you won. ");
return 1;
}
else if(a==2r==1){
System.out.println("The computer comes out with stone,you lost. ");
return 0;
}
else if(a==2r==2){
System.out.println("The computer comes out with scissors,it was a draw. ");
return 2;
}
else
return 0;
}
}
登錄后復(fù)制
java
704拖拉機(jī)
精選推薦
廣告
java寫(xiě)簡(jiǎn)單的猜拳游戲
2下載·0評(píng)論
2016年7月27日
用Java編寫(xiě)的猜拳小游戲
2029閱讀·0評(píng)論·0點(diǎn)贊
2021年3月7日
Java猜拳游戲和Random的應(yīng)用
21閱讀·0評(píng)論·0點(diǎn)贊
2022年10月24日
java實(shí)現(xiàn)完整版猜拳小游戲
25下載·0評(píng)論
2018年11月22日
用python實(shí)現(xiàn)功能猜拳
1137閱讀·2評(píng)論·3點(diǎn)贊
2022年7月14日
java猜拳switch計(jì)分制_java----猜拳(10局分勝負(fù))
117閱讀·0評(píng)論·1點(diǎn)贊
2021年3月15日
二手拖拉機(jī)交易市場(chǎng),你還在高價(jià)買嗎?
精選推薦
廣告
利用Java編寫(xiě)簡(jiǎn)單的猜拳游戲
911閱讀·0評(píng)論·1點(diǎn)贊
2022年9月8日
Java簡(jiǎn)單實(shí)現(xiàn)猜拳游戲
1.1W閱讀·1評(píng)論·2點(diǎn)贊
2022年1月23日
java猜拳游戲代碼_Java實(shí)現(xiàn)簡(jiǎn)單猜拳游戲
4496閱讀·0評(píng)論·0點(diǎn)贊
2021年3月1日
用java來(lái)寫(xiě)一個(gè)簡(jiǎn)單的猜拳小游戲
890閱讀·1評(píng)論·1點(diǎn)贊
2022年7月26日
java實(shí)現(xiàn)猜拳游戲
3180閱讀·2評(píng)論·1點(diǎn)贊
2022年5月4日
JAVA編寫(xiě)猜拳游戲
3037閱讀·3評(píng)論·3點(diǎn)贊
2021年3月16日
[Java教程]17.實(shí)戰(zhàn),趣味猜拳小游戲
8040閱讀·2評(píng)論·3點(diǎn)贊
2020年6月24日
怎么用java實(shí)現(xiàn)人機(jī)猜拳?
1959閱讀·6評(píng)論·9點(diǎn)贊
2021年7月22日
Java Random經(jīng)典例子【猜拳游戲】
4318閱讀·0評(píng)論·0點(diǎn)贊
2014年3月22日
java的人機(jī)猜拳代碼_Java實(shí)現(xiàn)人機(jī)猜拳游戲
702閱讀·0評(píng)論·2點(diǎn)贊
2021年3月12日
Java基礎(chǔ)練習(xí)之猜拳游戲
363閱讀·1評(píng)論·1點(diǎn)贊
2021年8月19日
用java寫(xiě)猜拳小游戲
1096閱讀·0評(píng)論·1點(diǎn)贊
2021年9月1日
Java猜拳小游戲
97閱讀·0評(píng)論·0點(diǎn)贊
2022年8月23日
java猜拳小游戲
500閱讀·1評(píng)論·0點(diǎn)贊
2022年7月14日
comp是電腦產(chǎn)生的隨機(jī)數(shù)字(電腦出的拳),people 是人出的拳。 因?yàn)榧舻妒^布只有 1 2 3
。如果電腦的數(shù)字比的你剛好大1,就是它比你的大。 如21,32對(duì)應(yīng)就是(石頭大于剪刀,布大于石頭)。 但也有可能是剪刀大于布 。 那么剪刀的位子是1 ,布的位子是3. 所以當(dāng)電腦數(shù)字減你的數(shù)字等于2時(shí) 就是(電腦出的布 ,你出的石頭這樣的情況了)。
所以是if((comp-people)==-1||(comp-people)==2) 這兩者結(jié)合就是你贏的時(shí)候
package?test;
import?java.util.Random;
import?java.util.Scanner;
/**
*?猜拳游戲思路?
*?1、定義輸入函數(shù)?
*?2、提示用戶輸入猜拳數(shù)值?
*?3、定義隨機(jī)一個(gè)數(shù)作為電腦數(shù)值?
*?4、判斷[用戶輸入數(shù)值]與?[電腦隨機(jī)數(shù)值]?
*?5、能夠相等就是打平,不能相等就利用、||邏輯符判斷輸贏?
*?6、設(shè)定數(shù)值1-石頭?2-剪刀??3-布
*/
public?class?CaiQuanYouXi?{
public?static?void?main(String[]?args)?{
Scanner?in=new?Scanner(System.in);//定義輸入函數(shù)in,Scanner包功能,輸入數(shù)值用的
System.out.println("--------------猜拳游戲---------------");
System.out.println("請(qǐng)輸入一個(gè)數(shù)值:1、石頭?2、剪刀?3、布");//提示輸入數(shù)值?
System.out.println("?");//空行
int?x=in.nextInt();//讓用戶輸入X的數(shù)值?
Random?on=new?Random();//定義電腦的隨機(jī)數(shù)值的函數(shù)on?
int?y=on.nextInt(3)+1;//定義y隨機(jī)函數(shù)數(shù)值范圍(1--3)
if(x=4||x==0){???//判斷用戶是否輸入非1--3范圍?
System.out.println("親,請(qǐng)正確輸入:1、石頭?2、剪刀?3、布。你輸入了:"+x);??
}else{???
/*下面是判斷用戶輸入x的數(shù)值?嵌套if*/?
if(x==y){???
if(x==1){?//判斷打平的情況?
System.out.println("你:石頭------電腦:石頭????PK:很幸運(yùn)打平手");?
}else?if(x==2){?
System.out.println("你:剪刀------電腦:剪刀???PK:很幸運(yùn)打平手");?
}else?{?
System.out.println("你:布------電腦:布????PK:很幸運(yùn)打平手");?
}?
}else?if(x==1y==2||x==2y==3||x==3y==1){?//開(kāi)始判斷贏的情況?
if(x==1y==2){?
System.out.println("你:石頭------電腦:剪刀????PK:恭喜您,贏了!");?
}else?if(x==2y==3){?
System.out.println("你:剪刀------電腦:布???PK:恭喜您,贏了!");?
}else?{
System.out.println("你:布------電腦:石頭????PK:恭喜您,贏了!");
}?
}else?{//開(kāi)始判斷輸?shù)那闆r?
if(x==1y==3){?
System.out.println("你:石頭------電腦:布????PK:很遺憾,輸了!");?
}else?if(x==2y==1){?
System.out.println("你:剪刀------電腦:石頭????PK:很遺憾,輸了!");?
}else?{?
System.out.println("你:布------電腦:剪刀????PK:很遺憾,輸了!");?
}?
}
}
}
}
運(yùn)行后的效果展示:
--------------猜拳游戲---------------
請(qǐng)輸入一個(gè)數(shù)值:1、石頭 2、剪刀 3、布
1
你:石頭------電腦:布??? PK:很遺憾,輸了!
--------------猜拳游戲---------------
請(qǐng)輸入一個(gè)數(shù)值:1、石頭 2、剪刀 3、布
4
親,請(qǐng)正確輸入:1、石頭 2、剪刀 3、布。你輸入了:4
為了讓游戲有參與感,并體現(xiàn)java面對(duì)對(duì)象的思想,我先創(chuàng)建一個(gè)Player選手類,包含選手的名字playerName還有出拳方法guess()。出拳時(shí)采用隨機(jī)獲取0、1和2的方式分別代表石頭、剪刀和布,代碼如下:
public class Player {
private String playerName;
public Player(String playerName) {
this.playerName = playerName;
}
public String getPlayerName() {
return playerName;
}
//出拳方法 0-石頭 1-剪刀 2-布
public int guess() {
//隨機(jī)獲取0、1、2
int num = new Random().nextInt(3);
if (num == 0) {
System.out.print("選手" + this.playerName + "出的是石頭 ");
} else if (num == 1) {
System.out.print("選手" + this.playerName + "出的是剪刀 ");
} else if (num == 2) {
System.out.print("選手" + this.playerName + "出的是布 ");
}
return num;
}
}
然后在主類中,首先要輸入對(duì)局的總數(shù),然后創(chuàng)建兩名選手進(jìn)行pk,在pk()方法中制定了獲勝規(guī)則,詳見(jiàn)代碼注釋。最終統(tǒng)計(jì)并利用BigDecimal計(jì)算勝率(BigDecimal可以很完美的解決整數(shù)除法及其四舍五入保留小數(shù)的問(wèn)題):
public class Main {
public static void main(String[] args) {
System.out.println("請(qǐng)輸入本局局?jǐn)?shù):");
Scanner scanner = new Scanner(System.in);
int sum = scanner.nextInt();
//創(chuàng)建結(jié)果數(shù)組,resultArray[0]代表p1的獲勝局?jǐn)?shù),resultArray[1]代表p2的獲勝局?jǐn)?shù),resultArray[2]代表平局局?jǐn)?shù)
int[] resultArray = new int[3];
//創(chuàng)建兩名選手
Player p1 = new Player("張三");
Player p2 = new Player("李四");
for (int i = 0; i sum; i++) {
//根據(jù)總局?jǐn)?shù)進(jìn)行pk
int result = pk(p1, p2);
if (result == 1) {
resultArray[0]++;
} else if (result == -1) {
resultArray[1]++;
} else {
resultArray[2]++;
}
}
System.out.println("");
System.out.println("最終結(jié)果統(tǒng)計(jì):");
System.out.println("選手[" + p1.getPlayerName() + "]獲勝局?jǐn)?shù)為:" + resultArray[0] + ",勝率為:" +
new BigDecimal(resultArray[0]).multiply(new BigDecimal(100).divide(new BigDecimal(sum), 2, BigDecimal.ROUND_HALF_UP)) + "%");
System.out.println("選手[" + p2.getPlayerName() + "]獲勝局?jǐn)?shù)為:" + resultArray[1] + ",勝率為:" +
new BigDecimal(resultArray[1]).multiply(new BigDecimal(100).divide(new BigDecimal(sum), 2, BigDecimal.ROUND_HALF_UP)) + "%");
System.out.println("平局局?jǐn)?shù)為:" + resultArray[2] + ",平局率為:" +
new BigDecimal(resultArray[2]).multiply(new BigDecimal(100).divide(new BigDecimal(sum), 2, BigDecimal.ROUND_HALF_UP)) + "%");
}
//0-石頭 1-剪刀 2-布
//return 0:平局 1:p1獲勝 -1:p2獲勝
private static int pk(Player p1, Player p2) {
System.out.println("--------------------");
int a = p1.guess();
int b = p2.guess();
System.out.print("\n對(duì)局結(jié)果:");
//出拳相同平局
if (a == b) {
System.out.println("平局");
return 0;
}
//p1獲勝條件:p1出石頭時(shí)p2出剪刀,p1出剪刀時(shí)p2出步,p1出布時(shí)p2出石頭
else if ((a == 0 b == 1) || (a == 1 b == 2) || (a == 2 b == 0)) {
System.out.println("選手[" + p1.getPlayerName() + "]獲勝");
return 1;
}
//p2獲勝條件:p1出石頭時(shí)p2出布,p1出剪刀時(shí)p2出石頭,p1出布時(shí)p2出剪刀
else if ((a == 0 b == 2) || (a == 1 b == 0) || (a == 2 b == 1)) {
System.out.println("選手[" + p2.getPlayerName() + "]獲勝");
return -1;
} else {
//因?yàn)橐?guī)定了隨機(jī)數(shù)產(chǎn)生0、1、2,所以其實(shí)不會(huì)走到本分支
throw new IllegalArgumentException("本局無(wú)效");
}
}
}
對(duì)局5局的運(yùn)行結(jié)果:
我這里就只能統(tǒng)計(jì)當(dāng)前游戲的數(shù)據(jù)了,如果你想統(tǒng)計(jì)多局游戲總的勝率信息,那么需要將每一局的比賽結(jié)果寫(xiě)到txt文件里,最終根據(jù)txt文件內(nèi)容統(tǒng)計(jì)即可。