任务概述:
通过控制台方式实现一个人机对战的猜拳游戏,用户通过输入 (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)的作者给我提供了思路借鉴(菜鸟哭泣(ノへ`、))
|