Java使用循环,实现猜拳游戏统计多少局及胜率?

作者&投稿:圣届 (若有异议请与网页底部的电邮联系)
java编程 用循环方式实现和计算机玩猜拳的程序 (设定胜出条件--输3次或赢3次即退出)~

大哥,刚刚看到你的就开始写了。各种功能都有,包括判断你输入的字符是否正确,假如不符合的字符就提示。不玩了就可以直接按0退出。
然后,只要是赢三次,输三次都自动退出,并输出你输赢,还可以自动共玩多少局,输赢局数统计!希望能帮到您。

/*
猜拳游戏思路
1、定义输入函数
2、提示用户输入猜拳数值
3、定义随机一个数作为电脑数值
4、判断[用户输入数值]与 [电脑随机数值]
5、能够相等就是打平,不能相等就利用&&、||逻辑符判断输赢
6、设定数值1-石头 2-剪刀 3-布

*/
import java.util.*;//嵌入Java.util包所有

public class Cq{

public static void main(String[] args){
int win=0;//赢的记录
int lose=0;//输的记录
int all=1;//计数总的局数

int a=1;//控制循环条件使用
System.out.println("--------------猜拳游戏---------------");
System.out.println("游戏规则:赢三次便赢,输三次便输。");
while(a>0){//假如a=0的话就不用继续玩
Scanner in=new Scanner(System.in);//定义输入函数in,Scanner包功能,输入数值用的

System.out.println("请输入一个数值:1、石头 2、剪刀 3、布 0、退出游戏");//提示输入数值

System.out.println(" ");//空行

int x=in.nextInt();//让用户输入X的数值

Random on=new Random();//定义电脑的随机数值的函数on

int y=on.nextInt(3)+1;//定义y随机函数数值范围(1--3)

if(x>=4){ //判断用户是否输入非1--3范围

System.out.println("亲,请正确输入:1、石头 2、剪刀 3、布。你输入了:"+x);

}else if(x==0){
a=0;
System.out.println("欢迎再次玩“猜拳游戏”!");
return;

}
else{

/*下面是判断用户输入x的数值 嵌套if*/

if(x==y){

if(x==1){ //判断打平的情况

System.out.println("你:石头------电脑:石头 PK:平手"+" 共玩"+all+"局,"+"赢:"+win+",输:"+lose);
all++;

}
else if(x==2){

System.out.println("你:剪刀------电脑:剪刀 PK:平手"+" 共玩"+all+"局,"+"赢:"+win+",输:"+lose);
all++;
}else {

System.out.println("你:布------电脑:布 PK:平手"+" 共玩"+all+"局,"+"赢:"+win+",输:"+lose);
all++;
}
/* 打平手的判断END*/

}else if(x==1&&y==2||x==2&&y==3||x==3&&y==1){ //开始判断赢的情况

if(x==1&&y==2){

win++;//win1
System.out.println("[你]:石头---VS---[电脑]:剪刀 PK:赢了!"+" 共玩"+all+"局,"+"赢:"+win+",输:"+lose);
all++;

}else if(x==2&&y==3){

win++;//win2
System.out.println("[你]:剪刀---VS---[电脑]:布 PK:赢了!"+" 共玩"+all+"局,"+"赢:"+win+",输:"+lose);
all++;

}else {

win++;//win3
System.out.println("[你]:布---VS---[电脑]:石头 PK:赢了!"+" 共玩"+all+"局,"+"赢:"+win+",输:"+lose);
all++;

}

//判断赢的情况END

}else {//开始判断输的情况

if(x==1&&y==3){
lose++;
System.out.println("[你]:石头---VS---[电脑]:布 PK:输了!"+" 共玩"+all+"局,"+"赢:"+win+",输:"+lose);
all++;
}else if(x==2&&y==1){
lose++;
System.out.println("[你]:剪刀---VS---[电脑]:石头 PK:输了!"+" 共玩"+all+"局,"+"赢:"+win+",输:"+lose);
all++;
}else {
lose++;
System.out.println("[你]:布---VS---[电脑]:剪刀 PK:输了!"+" 共玩"+all+"局,"+"赢:"+win+",输:"+lose);
all++;
}

}//判断输的情况END
if(win==3){
System.out.println("");
System.out.println("");
System.out.println("游戏结束:恭喜您!你已经赢了[电脑]三局!!!"+" 共玩"+all+"局,"+"赢:"+win+",输:"+lose);
a=1;
return;
}else if (lose==3) {
a=1;
System.out.println("");
System.out.println("");
System.out.println("游戏结束:很遗憾,电脑赢了你三盘!继续加油!"+" 共玩"+all+"局,"+"赢:"+win+",输:"+lose);
return;
}
else{continue;}

}//判断是否输入数值1-3范围,如果不是1-3会提醒重新输入 END

}//while

}

}

public static void main(String[] args) {// TODO Auto-generated method stubScanner scanner = new Scanner(System.in);int sman = 0;int scomputer = 0;int sping = 0;int i = 1;for ( ; i > 0; i++) {System.out.println("第"+i+"次猜拳,1:剪刀;2:石头;3:布;4:不玩了;");//玩家的操作int game = scanner.nextInt();if(game == 4){break;}if(game > 4 || game scomputer){result = "胜";}else if(sman == scomputer){result = "平";}else {result = "负";}System.out.println("共游戏"+ (i-1) +"局游戏,玩家胜:"+sman+";电脑胜:"+scomputer+";平:"+sping+";玩家"+result);}public static String result(int val) {String value = "" ;if(val == 1){value = "剪刀";}else if(val == 2){value = "石头";}else if(val == 3){value = "布";}else {value = "未知";}return value;}

为了让游戏有参与感,并体现java面对对象的思想,我先创建一个Player选手类,包含选手的名字playerName还有出拳方法guess()。出拳时采用随机获取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() {
//随机获取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;
}

}

然后在主类中,首先要输入对局的总数,然后创建两名选手进行pk,在pk()方法中制定了获胜规则,详见代码注释。最终统计并利用BigDecimal计算胜率(BigDecimal可以很完美的解决整数除法及其四舍五入保留小数的问题):

public class Main {

public static void main(String[] args) {
System.out.println("请输入本局局数:");
Scanner scanner = new Scanner(System.in);
int sum = scanner.nextInt();

//创建结果数组,resultArray[0]代表p1的获胜局数,resultArray[1]代表p2的获胜局数,resultArray[2]代表平局局数
int[] resultArray = new int[3];
//创建两名选手
Player p1 = new Player("张三");
Player p2 = new Player("李四");
for (int i = 0; i < sum; i++) {
//根据总局数进行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("最终结果统计:");
System.out.println("选手[" + p1.getPlayerName() + "]获胜局数为:" + resultArray[0] + ",胜率为:" +
new BigDecimal(resultArray[0]).multiply(new BigDecimal(100).divide(new BigDecimal(sum), 2, BigDecimal.ROUND_HALF_UP)) + "%");
System.out.println("选手[" + p2.getPlayerName() + "]获胜局数为:" + resultArray[1] + ",胜率为:" +
new BigDecimal(resultArray[1]).multiply(new BigDecimal(100).divide(new BigDecimal(sum), 2, BigDecimal.ROUND_HALF_UP)) + "%");
System.out.println("平局局数为:" + 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("
对局结果:");
//出拳相同平局
if (a == b) {
System.out.println("平局");
return 0;
}
//p1获胜条件:p1出石头时p2出剪刀,p1出剪刀时p2出步,p1出布时p2出石头
else if ((a == 0 && b == 1) || (a == 1 && b == 2) || (a == 2 && b == 0)) {
System.out.println("选手[" + p1.getPlayerName() + "]获胜");
return 1;
}
//p2获胜条件:p1出石头时p2出布,p1出剪刀时p2出石头,p1出布时p2出剪刀
else if ((a == 0 && b == 2) || (a == 1 && b == 0) || (a == 2 && b == 1)) {
System.out.println("选手[" + p2.getPlayerName() + "]获胜");
return -1;
} else {
//因为规定了随机数产生0、1、2,所以其实不会走到本分支
throw new IllegalArgumentException("本局无效");
}
}
}

对局5局的运行结果:

我这里就只能统计当前游戏的数据了,如果你想统计多局游戏总的胜率信息,那么需要将每一局的比赛结果写到txt文件里,最终根据txt文件内容统计即可。




如何使用 VE修改器 开 战地之王AVA 5人房??
然后切到VE,先点左上角的放大镜图标,找到AVA程序,然后在搜索栏里搜索4,点第一次搜索,完成以后切回AVA,选择拯救入门(因为这个是5个人),也别建出来,再切到VE,搜索框输入5,点再次搜索,然后再切回AVA改成4人的模式,切到VE,搜4,就这样来回循环,知道左面搜索的数值在4个以下,一个最...

AVA中生存模式下个个地图的攻略?(如死亡峡谷,回合,逃脱等等)骗分的滚...
下载百度知道APP,抢鲜体验 使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。 扫描二维码下载× 个人、企业类侵权投诉 违法有害信息,请在下方选择后提交 类别 色情低俗 涉嫌违法犯罪 时政信息不实 垃圾广告 低质灌水 我们会通过消息、邮箱等方式尽快将举报结果通知您。 说明 0\/200 提交 取消...

什么是valsava动作?
【提问】老师【回答】学员jiao516,您好!您的问题答复如下:Valsava动作:即吸气后紧闭声门,用力作呼气动作,此时胸腔内压力增高,回心血量明显减少,左、右心发生的杂音一般均减弱,而梗阻性肥厚型心肌病的杂音增强。迅速改变体位,使血液分布和回心血量发生变化,也会影响杂音。如由卧位或下蹲位迅速改变...

华欣vananava水上世界的必玩项目?
有三个项目是喜欢刺激小伙伴必玩的,Aqualoop是一个高18米垂直循环滑道,这个是最刺激的,Abyss是滑梯无底洞,大喇叭位置高达28米,最多可以6个人一起从高空滑下来,这个也很刺激,Boomerango应该叫做回旋飞镖,也是必玩的。

为什么AVA时卡时不卡
正常。。1服务器问题。。2机子配置问题

教我怎么用按键精灵制作AVA切枪脚本
按键精灵是根据你要按的键,他自动帮你按 首先你要知道你需要按哪些键,和这些键的顺序 和按每个键之间的时间 然后在按键精灵里面编辑脚本 最后设置热键启动按键精灵 它就可以自动的帮你按这些键了 而且可以无限循环 (个人认为按键精灵不好用!) 按键精灵5.7版下载 注册码 按键精灵是一个模拟鼠标键盘...

java io read不能结束,一直堵塞在for循环里面,怎么解决
ava io read不能结束,一直堵塞在for循环里面,解决办法 不要用for循环 ,改成while循环 读取完毕关闭for循序break

AVA死亡峡谷如何通关
首先应对的是一大片UAV发射装置,耐久度不佳,不到一匣AK47\/AK47改的弹药就能击坏。第二处则是带闸门的UAV发射装置,耐久度是前者的三倍多,而且每一段时间会在区域刷怪。刷若干强化兵以及黄怪,2\/4个油桶男,第一次刷两个,第二次刷四个:2 4 2 4……循环。过了这里之后,经过彩虹瀑布,...

avascript和actionscript是基于什么标准的
ActionScript 和 JavaScript 共享一个常用标准:ECMAScript。因此,如果您曾经用 JavaScript 编写过一个条件(“if 语句”)或迭代(“循环语句”),则您可以使用 ActionScript。记住 JavaScript 和 ActionScript 一样是区分大小写的。

CSOL和CF还有AVA哪个好玩,我是上班族
CF不用说了,G,素质不是一般的差,但是金币枪买了是永久的,CSOL金币枪有限制,对于上班族来说买了之后几天不玩就到期,很麻烦的,还有AVA没玩过,求指点,这3个游戏哪个... CF 不用说了,G,素质 不是一般的差,但是金币枪买了是永久的,CSOL金币枪有限制,对于上班族来说买了之后几天不玩就到期,很麻烦的,还有...

游仙区15192996195: java程序中如何记录次数 -
潘解派恫: 写3个全局变量(A总数,B输,C赢),没调用一次猜拳函数就A++,判断一下,赢了,A++,B++,C不动;输了A++,C++,B不动最后那3个变量就是要统计的 public int addNum() throws IOException{FileInputStream fin=new FileInputStream("...

游仙区15192996195: 用java编写猜拳游戏 最后统计玩了多少次 自己和电脑积分是多少.最后是谁获胜 -
潘解派恫: public static void main(String[] args) {// TODO Auto-generated method stub Scanner scanner = new Scanner(System.in);int sman = 0;int scomputer = 0;int sping = 0;int i = 1;for ( ; i > 0; i++) {System.out.println("第"+i+"次猜拳,1:剪...

游仙区15192996195: 我们今天学java循环结构,老师要求在猜拳游戏加入一个输入yes,继续,如果是no则跳出,怎么写? -
潘解派恫: 在循环体外定义Boolean变量b=true,while(b){//猜拳游戏 输入no 设置b=false}

游仙区15192996195: java猜拳程序 -
潘解派恫: package cn.xnec; import javax.swing.JOptionPane;import java.util.Random; class RandNumber {public static void main(String args[]) {String str = JOptionPane.showInputDialog("人机大战开始,输入0表示拳头,\n1表示剪刀,2表示布,3退...

游仙区15192996195: java猜拳游戏使用随机数不起作用,求讲 -
潘解派恫: 把int camp放在 do while 里面 import java.util.*;public class GuessWhat { public static void main(String[] args) {Scanner gs=new Scanner(System.in);int s=0;//玩的总局数int h=0;//平局的数目int l=0;//输的数目int count=0;//赢的数目int ...

游仙区15192996195: 急求一个JAVA编程,“编写一个猜拳游戏,分别用0、1、2表示石头、剪子、布. -
潘解派恫: 用我自己的方法写了一个,看LZ喜欢不喜欢 12是石头,23是剪子,31是布.first表示第一个人.second表示第二个人!import java.util.Random;public class Print {public static void main(String[] args) {//"12"是石头,“23”是剪子,“31”是...

游仙区15192996195: java ;while()循环.好难啊! -
潘解派恫: 我刚刚测试过了,你说的功能实现了,基本上没改你的程序:import java.util.Scanner; public class caiquan { /** * @param args */ public static void main(String[] args) { // 猜拳 int xiao = 0; System.out.println("---------欢迎来到游戏世界-----"); ...

游仙区15192996195: 求java 猜拳游戏代码! -
潘解派恫: import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Random; public class FingerGuessing { private String[] op = new String[] { "布", "剪刀", "石头" }; Random r = new Random(); ...

游仙区15192996195: 电脑猜拳游戏,最后老师要求做一个循环,输入yes继续,输入no结束,代码怎么写???? -
潘解派恫: 设置一个全局变量string IsContinue = yes,然后用while(IsContinue==yes)循环将你的猜拳代码括起来,在猜拳代码后面提示yes or no 然后置一条输入语句,改变IsContinue的值就行了

游仙区15192996195: 用JAVA编写一个猜拳游戏【5局3胜】 -
潘解派恫: import java.util.Scanner;/** * 用户输入石头,剪子,布,和系统随机产生的对比,【5局3胜】 * @author ww * */public class Mora { public static void main(String[] ar...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网