Java数字小游戏

21 篇文章 1 订阅
3 篇文章 0 订阅

最近看到网络视频上有一些有趣的小游戏,于是想到用Java代码实现一下:
游戏玩法:由计算机随机产生1~100的整数。用户猜测计算机产生的数字(即答案),用户输入数字,如果输入的数字与答案相同则获胜。当输入的数字小于或大于答案,会出现关于输入数值与答案比较的提示信息,用户通过提示信息进一步猜测答案,直到指定次数后游戏结束。

变量:

  1. 输入数值
  2. 随机产生的答案
  3. 猜测回合(次数)

逻辑流程:

 

import java.util.Random;
import java.util.Scanner;

public class MathGame {
    public static void main(String[] args) {
        Random ran = new Random();//实例化随机对象
        System.out.println("欢迎进入猜数游戏");
        int answer = ran.nextInt(100) + 1;//随机生成一个整数作为猜的目标答案
        int i;

        for (i = 0; i < 10; i++) {
            //给游戏设定一个次数,最多输入10次
            System.out.println("请输入一个整数:");
            //实例化一个输入流对象
            Scanner input = new Scanner(System.in);
                //输入为int类型
                if (input.hasNextInt()) {
                    int inputFigure = input.nextInt();

                    if (inputFigure < answer) {
                        System.out.printf("输入数值比答案小,还剩%2d次机会", 9 - i);
                    } else if (inputFigure > answer) {
                        System.out.printf("输入数值比答案大,还剩%2d次机会", 9 - i);
                    } else {//否则就是等于答案
                        System.out.println("猜中正确答案%2d,获胜,游戏结束", amswer);
                        break;
                    }
                } else {//输入不是int类型
                    if ("end".equals(input.next())) {//判断输入的是否为“end”
                        System.out.println("玩家选择游戏结束");
                        break;
                    } else {
                        System.out.println("输入错误");
                        i--;//i-1 此次输入不算次数
                    }

                }
            }
            if (i == 10) {//输入次数为10次
                System.out.println("游戏结束,失败");
            }
        }
}

拓展: 怎么用最少的次数找到答案?

二分法(粗略)解决思路:答案首先会告诉范围,那么首先猜这个范围的中间值,然后根据猜测提示(偏大还是偏小),继续猜测答案所在区间的中值,以此类推,次数最多的情况是直到区间缩小到2个数二选一。

示例题目:答案是69,给定答案区间[0,100](101个数)

解法示例一(二分法上取整法则):

第一次猜50((100+0)/2),提示偏小,确定区间[51,100](50个数);

第二次猜75((100+51)/2下取整),提示偏大,确定区间[51,74](24个数);

第三次猜62((51+74)/2下取整),提示偏小,确定区间[63,74](12个数);

第四次猜68((63+74)/2下取整),提示偏小,确定区间[69,74](6个数);

第五次猜71((69+74)/2下取整),提示偏大,确定区间[69,70](2个数);

第六次猜69(69、70二选一),提示获胜

或第六次猜70(69、70二选一),提示偏大,锁定69;第七次输入69,提示获胜

解法示例二(二分法下取整法则):

第一次猜50((100+0)/2),提示偏小,确定区间[51,100](50个数);

第二次猜76((100+51)/2上取整),提示偏大,确定区间[51,75](25个数);

第三次猜63((51+75)/2),提示偏小,确定区间[64,75](12个数);

第四次猜70((64+75)/2上取整),提示偏大,确定区间[64,69](6个数);

第五次猜67((64+69)/2上取整),提示偏小,确定区间[68,69](2个数);

第六次猜68(68、69二选一),提示偏小,锁定69;第七次输入69,提示获胜

或第六次猜69(68、69二选一),提示获胜;

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

肆〇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值