当前位置:网站首页>SGDP(1)——猜数字游戏
SGDP(1)——猜数字游戏
2022-08-02 03:26:00 【copcin】
SGDP,Small Game Development Practice(小游戏开发实战),不要以为这个缩写很高级,写它纯粹是为了能让标题短一点~
这是一个为了Java学习实战而做的小专辑,里面的游戏材料大部分都是我把Python书里的游戏项目
俗话说,万事开头难,这个系列的第一个项目总是要来点“难”的
废话少说,如下是这个“难”项目的Java实现
---------------------------正文----------------------------
Java实现
想直接看到运行效果的可以直接复制粘贴(但不建议)
package guess;
import java.util.Random;
import java.util.Scanner;
/**
* 猜数字
* @author Copcin
*/
public class GuessNumber {
//定义类变量number
public static int number=0;
//上限
public static final int maxNum=100;
/**
* 生成随机数
* @return 随机的小于100的整数
*/
public static int gengerateRandint() {
Random random=new Random();
return random.nextInt(maxNum);
}
@SuppressWarnings("resource")
public static void main(String[] args) {
System.out.println("欢迎来到猜数字游戏!");
System.out.println("在任何时候,输入-404即可退出。");
game:
while (true){
// 次数计数器
int count=0;
number=gengerateRandint();
System.out.println("数字已初始化完成");
guess:
while (true) {
System.out.print(String.format("输入一个大于等于0小于%s的整数:",maxNum));
Scanner scanner=new Scanner(System.in);
int input=scanner.nextInt();
count++;
if (input==-404) {
System.out.println("谢谢您的游玩!");
break game;
}
if (input==number) {
System.out.println("恭喜你,猜对了!");
break guess;
} else if (input>number) {
System.out.println("再小些");
} else if (input<number) {
System.out.println("再大些");
}
}
System.out.println("恭喜!你猜了"+count+"次!\n");
}
}
}
运行效果:
欢迎来到猜数字游戏!
在任何时候,输入-404即可退出。
数字已初始化完成
输入一个大于等于0小于100的整数:13
再大些
输入一个大于等于0小于100的整数:70
再大些
输入一个大于等于0小于100的整数:90
再大些
输入一个大于等于0小于100的整数:99
再小些
输入一个大于等于0小于100的整数:95
再小些
输入一个大于等于0小于100的整数:92
再小些
输入一个大于等于0小于100的整数:91
恭喜你,猜对了!
恭喜!你猜了7次!
数字已初始化完成
输入一个大于等于0小于100的整数:-404
谢谢您的游玩!
接下来进行逐行分解(=-=)
第1~10行:包声明,引入Random类与Scanner类。第一行声明文件在guess包中(Eclipse会自动为你生成),第3~4行引入了Random类和Scanner类,这两个类后面会用到,第5~8行是注释文档;
第11~15行:声明类与全局常/变量。第11行声明了GuessNumber类,12~13行定义了一个数字,它就是后面我们要猜的数字,后面会为它赋随机值,14~15行定义了我们要猜的数字的最大值maxNum,它是一个全局常量,它决定了随机生成的数字最大是多少,如果想让游戏变得难一点,可以加大maxNum,反之亦然;
第16~25行:gengerateRandint方法。第17~20行是注释文档,标识了方法作用与返回值,第21~24行是方法主体,22行创建了一个Random的实例对象,23行使用random.nextInt(maxNum)生成了一个大于等于0的小于100(即maxNum)的随机数,并返回它;
第26~58行:程序主体。在这里将其分段:
第26~29行:定义main方法。第26行是因为强迫症想抑制警告才写的,可要可不要,第27行定义了main函数,第28~29行打印了欢迎语句(有没有注意到一个彩蛋,-404退出程序);
第30~35行:主循环开始。第30行给外层循环贴了标签game(后面会用到),第31行主循环开始,第33行定义了count变量,用来给猜数记录次数,第34行用到了刚刚写的gengerateRandint方法,将随机数赋值给全局变量number,第35行在屏幕上打印“数字已初始化完成”,打印它的原因主要是因为在第2次及之后的游玩中,直接提示输入数字会很突兀(当然不想要的也可以删~);
第36~41行:内部循环开始。第36行给内层循环贴了标签guess,第37行内部循环开始,第38行用System.out.print()方法打印提示信息,这里简述一下System.out.print()与System.out.println()的区别:
System.out.println("Hello");
System.out.println("World");
输出是:
Hello
World
而
System.out.print("Hello");
System.out.print("World");
输出是:
HelloWorld
发现区别了吗?System.out.println()方法会在打印文本的时候自动打印换行符,而System.out.print()方法则不会(忽然感觉这一句这么好理解的话用了一页篇幅来说明好浪费纸张)
第39~40行读取了用户输入并把它转为int数值,保存在input变量中,这里用到了Scanner.nextInt()方法,第41行将次数计数器count加一;
第42~54行:判断用户输入。第42~45行判断用户输入是不是-404(小彩蛋),如果是在打印“谢谢您的游玩!”就退出程序,这里用到了我们刚才贴的标签game,在贴了标签后就可以很方便地用如下形式continue/break 循环:
continue/break 标签;
第46~54行的意思只要不是学Java时间不超过3天的童鞋应该都能看懂,童鞋自行理解~;
第55~58行:打印猜数次数。第55行打印猜数次数,即次数计数器count,末尾的\n换行符是为了先空一行再运行第二次。
边栏推荐
- uniapp | Problems with the use of the official map component
- 政府会计的概念、政府会计标准体系、政府会计的特点(会形成小考点)、政府会计要素及其确认和计量、政府预算会计要素、政府财务会计要素
- Shuriken: 1 vulnhub walkthrough
- 真·杂项:资本论阅读笔记(随缘更新)
- 元宇宙:为何互联网大佬纷纷涉足?元宇宙跟NFT是什么关系?
- Alfa: 1 vulnhub walkthrough
- Praying: 1 vulnhub walkthrough
- laravel 写api接口时 session获取不到处理办法
- Mysql创建索引
- Dcat Admin 关闭代码生成器 登录指定地址
猜你喜欢
Orasi: 1 vulnhub walkthrough
文件包含漏洞
元宇宙:为何互联网大佬纷纷涉足?元宇宙跟NFT是什么关系?
2021-09-04 最简单的Golang定时器应用以及最简单的协程入门儿
(5) Modules and packages, encoding formats, file operations, directory operations
hackmyvm: may walkthrough
How to calculate the distance between two points on the earth (with formula derivation)
借贷记账法下的账户结构、借贷记账法的记账规则、借贷记账法下的账户对应关系与会计分录
广告电商「私域打工人」职业前景:你离月薪6万,还差多远?
Shuriken: 1 vulnhub walkthrough
随机推荐
VIKINGS: 1 vulnhub walkthrough
Pycharm packages the project as an exe file
一个网络安全小白鼠的学习之路—nmap高级用法之脚本使用
Summary of php function vulnerabilities
SQL注入(6)
3000字入门图神经网络
uniapp | Problems with the use of the official map component
Smart Tips for Frida Scripting in Kali Environment
Go Build报错汇总(持续更新)
file contains vulnerabilities
2021-09-04 最简单的Golang定时器应用以及最简单的协程入门儿
Laravel 的关联模型 及其 预加载多个关联 with使用方法
英语每日打卡
Laravel打印执行的SQL语句
laravel-admin FROM表单同行展示问题
英语每日打卡
web渗透必玩的靶场——DVWA靶场 1(centos8.2+phpstudy安装环境)
laravel 查询数据库获取结果如何判断是否为空?
Phonebook
[Hello World教程] 使用HBuilder和Uni-app 生成一个简单的微信小程序DEMO