如何用JAVA设计一个游戏,电脑和人玩剪刀石头布游戏,并且能显示游戏结果?

比如人出了石头,电脑出了剪子,则显示人赢了,否则显示电脑赢了,或者平局。比赛次数至少为5次,将每一局的游戏结果写入result.txt文件

写了一下,结果输出到桌面上,你把文件输出路径改成你的桌面路径就可以了,不知道你要不要最终结果

代码:

package com.hmall;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.Scanner;

/**
* @ClassName Mora
* @Description TODO
* @Author dell
* @Date 2019/7/1 13:03
* @Version 1.0
**/
public class Mora {
private static String calculate(String input) {
List<String> list = new ArrayList<>();
list.add("拳头");
list.add("剪刀");
list.add("布");
Random r = new Random();
Integer random = r.nextInt(3);
String temp = list.get(random);
if (temp.equals(input)) {
return "您出了" + input + ",电脑出了" + temp + ",结果为平局";
} else {
if (input.equals("拳头")) {
if (temp.equals("剪刀")) {
return "您出了" + input + ",电脑出了" + temp + ",结果为您赢了";
} else {
return "您出了" + input + ",电脑出了" + temp + ",结果为您输了";
}
} else if (input.equals("剪刀")) {
if (temp.equals("拳头")) {
return "您出了" + input + ",电脑出了" + temp + ",结果为您输了";
} else {
return "您出了" + input + ",电脑出了" + temp + ",结果为您赢了";
}
} else if (input.equals("布")) {
if (temp.equals("拳头")) {
return "您出了" + input + ",电脑出了" + temp + ",结果为您赢了";
} else {
return "您出了" + input + ",电脑出了" + temp + ",结果为您输了";
}
} else {
return "输入数据有误";
}
}
}

public static void main(String[] args) {

Scanner scanner = new Scanner(System.in);
Integer count;
while (true) {
System.out.println("请输入比赛场次(不能小于5):");
count = scanner.nextInt();
if (count >= 5) {
System.out.println("比赛开始");
break;
}
System.out.println("输入小于5,请重新输入");
}
String input;
File f = new File("C:\\Users\\dell\\Desktop\\result.txt");
try {
BufferedWriter bw = new BufferedWriter(new FileWriter(f));

for (int i = 0; i < count; i++) {
System.out.println("请输入您的选择:");
input = scanner.next();
String result = calculate(input);
bw.write(result);
bw.newLine();
System.out.println(result);
}
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

结果:

追问

大佬这么还会这样,,而且我桌面建了result也没记录下来

追答

1.你用的是eclipse?编码改成utf-8了吗?

2.你不需要建result,程序自己创建的,所有比赛比完后就有记录了

追问

没事了全部正常了嘿嘿嘿

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-07-01

package com.views;

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.File;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

/**

* @author zmy

*

*/

public class Test {

private BufferedWriter bw;

private BufferedReader br;

private String filePath = "result.txt";

public Test() throws FileNotFoundException, IOException {

br = new BufferedReader(new InputStreamReader(System.in));// 输入

bw = new BufferedWriter(

new OutputStreamWriter(new FileOutputStream(new File("").getCanonicalPath() + "\\" + filePath)));// 输出写入文本,文件位置为当前程序的根目录

}

public void start() throws IOException {

String hand = "";

for (int count = 1; count <= 5; count++) {

System.out.println("第" + count + "局游戏开始,共五局\n请输入剪刀、石头、布");

hand = br.readLine();

if ("石头".equals(hand) || "剪刀".equals(hand) || "布".equals(hand)) {

System.out.println("您出的为:" + hand);

System.out.println(jduge(hand, count));

} else {

System.out.println("请输入剪刀、石头、布");

count--;

}

}

System.out.println("游戏结束!游戏结果详情请查看" + new File("").getCanonicalPath().toString() + "\\" + filePath);

br.close();

bw.close();

}

/**

* 游戏判定

* @param hand

* @param count

* @return

* @throws IOException

*/

private String jduge(String hand, int count) throws IOException {

String cpu = cpu();

if (hand.equals("剪刀") && cpu.equals("石头")) {

bw.write("第" + count + "局,CPU:" + cpu + "\t玩家:" + hand + "\tCPU获胜\r\n");// 这里的\r\n为单斜杠,复制的时候可能变成双斜杠,改为单斜杠

return "CPU获胜";

} else if (hand.equals("剪刀") && cpu.equals("布")) {

bw.write("第" + count + "局,CPU:" + cpu + "\t玩家:" + hand + "\t玩家获胜\r\n");

return "恭喜您获胜";

} else if (hand.equals("石头") && cpu.equals("布")) {

bw.write("第" + count + "局,CPU:" + cpu + "\t玩家:" + hand + "\tCPU获胜\r\n");

return "CPU获胜";

} else if (hand.equals("石头") && cpu.equals("剪刀")) {

bw.write("第" + count + "局,CPU:" + cpu + "\t玩家:" + hand + "\t玩家获胜\r\n");

return "恭喜您获胜";

} else if (hand.equals("布") && cpu.equals("剪刀")) {

bw.write("第" + count + "局,CPU:" + cpu + "\t玩家:" + hand + "\tCPU获胜\r\n");

return "CPU获胜";

} else if (hand.equals("布") && cpu.equals("石头")) {

bw.write("第" + count + "局,CPU:" + cpu + "\t玩家:" + hand + "\t玩家获胜\r\n");

return "恭喜您获胜";

} else {

bw.write("第" + count + "局,CPU:" + cpu + "\t玩家:" + hand + "\t平局\r\n");

return "平局";

}

}

/**

* 电脑随机出拳

* @return

*/

private String cpu() {

String cpu = "";

int x = 1 + (int) (Math.random() * 3);

switch (x) {

case 1:

cpu = "剪刀";

break;

case 2:

cpu = "石头";

break;

case 3:

cpu = "布";

break;

}

return cpu;

}

public static void main(String[] args) {

try {

new Test().start();// 游戏开始

} catch (IOException e) {

e.printStackTrace();

}

}

}

码字不易,望采纳

追问

为啥第二局就输入不了呢

追答

你接着输入就行了,回车,程序没停止运行就可以的
还有这是eclipse控制台的原因,你是中文输入法状态下,需要鼠标点到最后一行输入,不然会卡掉,就是你图中“您出的为:石头”变成绿色了,正常时黑色的

追问

那我把中文字符全改字母行吧

追答

正常的输入eclipse会为你跳到最后一行(图一)

但是当你的输入法状态时中文的时候,就是你能直接打中文的时候,如果不用鼠标点到最后一行,它就会在光标的位置输入,程序就不能正常接收,比如这样(图二)

就是你每次输入的时候,英文状态下会自动跳到最后不用操作,如果时中文状态下,请用鼠标点到最后一行在输入,输入法,输入法,输入法,输入法,输入法,输入法重要的多说几遍

这个eclipse bug已经存在几个世纪了

追问

但是你这个结果不会在txt文件里输出

追答

游戏结束会提示文件路径(图二)

程序结束了么?你这是一点基础都没有啊,代码里不是已经写了输出流么,程序运行完就有了。好好学,不然头发白掉了

再代码有注释写的很清楚了,文件位置自动获取的不用自己改,一定要程序运行完,一定要程序运行完,一定要程序运行完,还有一点,程序不要在C盘,经常涉及到IO流的话,在C盘没有权限,文件也无法更改,比如日志之类的

本回答被提问者和网友采纳
第2个回答  2019-07-01
public class Game {

@SuppressWarnings("resource")
public static void main(String[] args) throws IOException {
List<String> choice = new ArrayList<String>();
choice.add("剪刀");
choice.add("石头");
choice.add("布");

String resStr = null;

FileOutputStream fos = new FileOutputStream("c:/result.txt");

for(int i=0;i<5;i++) {

Scanner sc = new Scanner(System.in);
String res = sc.next();

int index = (int)(Math.random()*3);
String aiRes = choice.get(index);
System.out.println("第"+(i+1)+"次猜拳,人出的是:"+res);
System.out.println("电脑出的是:"+aiRes);
if(res.equals(aiRes)) {
resStr = "结局是平局。";
System.out.println(resStr);
}else if(aiRes.equals("剪刀")&&res.equals("布")) {
resStr = "电脑胜利。";
System.out.println(resStr);
}
else if(aiRes.equals("石头")&&res.equals("剪刀")) {
resStr = "电脑胜利。";
System.out.println(resStr);
}
else if(aiRes.equals("布")&&res.equals("石头")) {
resStr = "电脑胜利。";
System.out.println(resStr);
}else {
resStr = "人胜利。";
System.out.println(resStr);
}

byte[] b = resStr.getBytes();
fos.write(b);

resStr=null;
}
}
}
输出结果存于C盘中
第3个回答  2019-07-01
你在while外面声明一个变量int win_time = 0;
然后while里面每赢一次 win_time就+1,输一次win_time = 0;
再在你判断输赢那里插一段判断语句

if(win_time == 2){
break;//如果赢的次数是2了,就跳出循环
}
这样就可以实现连赢2次才跳出

补充一下,我说的输赢都是指用户的输赢追问

我想要完整的代码能写一下吗

第4个回答  2019-07-01
想从事java方向的工作,可以到AAA教育学习,AAA教育总部位于北京IT科技企业云集的中关村,从事高端计算机职业教育工作,是国内知名的教育品牌。自07年创建以来,依托先进的办学理念,AAA培养出了数万名专业型、实战型高端技术人才。AAA教育紧密结合软件企业人才需求,自主研发了专业的软件人才培养课程体系。目前已在北京、郑州、沈阳、武汉、上海、深圳等全国主要城市开设直营教学中心和就业基地。学员大多进入阿里巴巴、360、京东、新浪、搜狐、百度、联想、云智慧、神州数码等知名IT企业。
相似回答