Java编写猜数、猜拳小游戏(结合文件IO流实现用户信息动态永久存储)

return c;

}

//判断是否确认操作

public static char readConfirmSelection() {

char c;

for (; ; ) {

String str = readKeyBoard(1, false).toUpperCase();

c = str.charAt(0);

if (c == ‘Y’ || c == ‘N’) {

break;

} else {

System.out.print(“选择错误,请重新输入:”);

}

}

return c;

}

//判断输入长度是否合法,合法就返回此字符串

public static String readKeyBoard(int limit, boolean blankReturn) {

String line = “”;

while (scanner.hasNextLine()) {

line = scanner.nextLine();

if (line.length() == 0) {

if (blankReturn) return line;

else continue;

}

if (line.length() < 1 || line.length() > limit) {

System.out.print(“输入长度(不大于” + limit + “)错误,请重新输入:”);

continue;

}

break;

}

return line;

}

//延时加载

public static void loadSpecialEffects() throws InterruptedException {

System.out.println(“请稍等:”);

for (int i1 = 1; i1 <= 100; i1++) {

System.out.print(“加载中:” + i1 + “%”);

Thread.sleep(new Random().nextInt(25) + 1);

if (i1 == 100) {

Thread.sleep(50);

}

System.out.print(“\r”);

}

}

//把全为数字的字符串转换为int类型,并返回其数值

public static int printInt(String x){

Scanner sc = new Scanner(System.in);

if(isNumberic(x)==true){

int y = Integer.parseInt(x);

return y;

}else{

while(true){

System.out.print("你输入的值无意义! 请你重新输入: ");

String num = sc.next();

if(isNumberic(num)==true){

int y1 = Integer.parseInt(num);

return y1;

}

}

}

}

//判断字符串是否全是数字,是返回true,否则返回false

public static boolean isNumberic(String str) {

//使用正则表达式进行判断是否全为数字

Pattern pattern = Pattern.compile(“[0-9]*”);

return pattern.matcher(str).matches();

}

}

功能操作类


**概述:**实现一个特定的功能,提供使用,和工具类相似。

本项目此次使用该类用于实现显示二维码图片,想要更改图片只需修改图片存放的路径,在主程序类中写new PayView(); 就创建好了这个对象,即可展示二维码图片。

public class PayView extends JFrame {

MyPanel mp=null;

public PayView(){

mp=new MyPanel();

this.add(mp);

this.setSize(1273, 809);

this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

this.setVisible(true);

}

public static void main(String[] args){

new PayView();

}

}

class MyPanel extends JPanel{

Image image=null;

public void paint(Graphics g){

try {

image= ImageIO.read(new File(“E:\java\idea_test_8\src\game\1.jpg”));

g.drawImage(image, 0, 0, 1273, 809, null);

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

主程序类


代码结构图:设计各个模块的方法供主方法调用,最终实现项目完整效果。(将余额和游戏次数定义为全局变量,为了避免数据意外重置)

**main()方法:**实现主界面的显示、用户的选择操作。

public static void main(String[] args) throws IOException, InterruptedException {

while (true) {

System.out.println(“**************** TESTGAME ****************”);

System.out.println(“*** 1.登录账号 ———> 开始猜数游戏 ***”);

System.out.println(“*** 2.修改密码 ———> 修改后可保存 ***”);

System.out.println(“*** 3.猜拳游戏 ———> 真好玩到爆炸 ***”);

System.out.println(“*** 4.赞助作者 ———> 可微信支付宝 ***”);

System.out.println(“*** 5.退出游戏 ———> 欢迎下次光临 ***”);

System.out.println(“(内测小程序 功能未完善)”);

System.out.print(“请输入选择:”);

//调用工具类中的判断输入方法

char c = TSUtility.readMenuSelectionPro();

switch © {

case ‘1’:

loginView();

break;

case ‘2’:

updatePw();

break;

case ‘3’:

moraGame();

break;

case ‘4’:

//创建操作类对象

new PayView();

System.out.println(“显示完成!”);

break;

case ‘5’:

System.out.println(“确认退出? y/n”);

char c1 = TSUtility.readConfirmSelection();

if (c1 == ‘Y’) {

System.out.println(“退出程序成功!”);

System.exit(0); //结束程序,JVM退出

} else {

System.out.println(“已取消退出!”);

}

}

}

}

界面效果:

loginView()方法、guessNumber()方法:

1.用户登录,账户存在的话验证文件中的密码是否匹配,密码相同则登录成功进行猜数游戏;如没有账户则进行注册,用户名作为文件名,文件用于存储用户密码(Password)、用户余额(Money)、用户游戏次数(count)

2.定义用户初始条件,新注册的用户有一次试玩的机会(count=1)余额为零(Money=0),消耗完次数之后必须进行充值才能继续玩游戏。充值后的规则是,优先消耗用户的游戏次数,当游戏次数为零时,则五十元余额视为一次游戏次数 (确认玩游戏后在余额充足的情况下自动扣费),当游戏次数为零且余额低于五十时需充值才能继续玩游戏。

public static void loginView() throws IOException, InterruptedException {

//控制循环

boolean b = true;

//创建集合

Properties popr = new Properties();

//定义文件

File file;

File file1;

while (b) {

System.out.println(“请输入账号和密码”);

System.out.print(“账号:”);

String userName = sc.next();

//文件路径初始化

file = new File(“idea_test_8\src\game”, userName);

//判断文件是否存在

if (!file.exists()) {

System.out.println(“账户不存在是否注册账号y/n”);

//使用工具类判断用户输入

char c = TSUtility.readConfirmSelection();

if (c == ‘Y’) {

System.out.print(“账号为:”);

String userName1 = sc.next();

//定义文件路径

file1 = new File(“idea_test_8\src\game”, userName1);

file1.createNewFile(); //创建文件

System.out.print(“密码为:”);

String pw = sc.next();

//密码存到集合、设置其他初始值

popr.setProperty(“Password”, pw);

popr.setProperty(“Money”, String.valueOf(money));

popr.setProperty(“count”, String.valueOf(count));

FileWriter fw = new FileWriter(file1);

//集合中的数据保存到文件

popr.store(fw, “------UserInfo------”);

fw.close(); //释放资源

//使用工具类,调用延时方法

TSUtility.loadSpecialEffects();

System.out.println(“注册成功!”);

} else {

System.out.println(“已取消注册账号!”);

b = false; //结束循环

}

} else {

System.out.print(“密码:”);

String pw = sc.next();

//文件中的内容读取到集合

FileReader fr = new FileReader(file);

popr.load(fr);

fr.close();

//判断密码是否正确

if (popr.get(“Password”).equals(pw)) {

System.out.println(userName + "欢迎你! " + “您目前余额为:”

  • popr.get(“Money”) + “元,免费次数为:” + popr.get(“count”));

b = false;

//猜数小游戏,开始玩游戏

guessNumber(popr,file);

} else {

System.out.println(“密码错误!”);

}

}

}

}

public static void guessNumber(Properties popr, File file) throws IOException {

System.out.println(“宇宙至尊游戏:猜数字(0-100)”);

System.out.println(“开始!”);

while (true) {

//获取count和Money并转为int类型

int count1 = Integer.parseInt(popr.getProperty(“count”));

int money1 = Integer.parseInt(popr.getProperty(“Money”));

//判断账户是否还有免费的次数玩游戏

if (count1 <= 0 && money1 < 50) {

System.out.println(“余额不足,是否充值y/n”);

char c1 = TSUtility.readConfirmSelection();

if (c1 == ‘Y’) {

//充值

addMoney(popr, file);

} else {

System.out.println(“已退出充值!”);

break;

}

} else {

Random r = new Random();

//生成随机数

int number = r.nextInt(101);

System.out.println(“测试使用:” + number);

while (true) {

Scanner sc = new Scanner(System.in);

System.out.println(“请输入你要猜的数字:”);

int guessnumber = sc.nextInt();

if (guessnumber > number) {

System.out.println(“你猜的数字” + guessnumber + “大了”);

} else if (guessnumber < number) {

System.out.println(“你猜的数字” + guessnumber + “小了”);

} else {

System.out.println(“恭喜你猜中了”);

break;

}

}

//判断是否还有游戏次数

if (count1 != 0) {

count1–; //次数减一

//改变集合中的count值

popr.setProperty(“count”, String.valueOf(count1));

} else {

//判断是否有余额

if (money1 != 0) {

//设置使用金额50元玩一次

money1 -= 50;

//改变集合中的Money值

popr.setProperty(“Money”, String.valueOf(money1));

}

}

//集合中的内容写入到文件

FileWriter fw = new FileWriter(file);

popr.store(fw, null);

fw.close();

}

System.out.println(“继续玩? y/n”);

char c = TSUtility.readConfirmSelection();

if (c == ‘Y’) {

//重新获取一次值,为了保证获取到的是充值后的数据

int count2 = Integer.parseInt(popr.getProperty(“count”));

int money2 = Integer.parseInt(popr.getProperty(“Money”));

//判断是否有玩的条件

if (count2 <= 0 && money2 < 50) {

System.out.println(“余额不足,是否充值y/n”);

char c1 = TSUtility.readConfirmSelection();

if (c1 == ‘Y’) {

//充值模块

addMoney(popr, file);

} else {

System.out.println(“已退出充值!”);

break;

}

}

} else {

System.out.println(“已退出游戏!”);

break;

}

}

}

界面效果:

看到这里相信大家都有些疲惫了,其实博主的个人观点是劳逸结合才会让学习的效率变得更高,所以接下来让大家放松一下,换换脑子,欣赏一段最近比较流行的舞蹈,Show Time ~

舞蹈也看了,脑袋也换了,希望各位小伙伴能够收收心,继续来看接下来几个部分的方法设计。

addMoney()方法:实现用户充值的基本功能,并且设置充值金额只能是100、200、300、500及以上,充值成功后用户的余额会增加并且赠送的游戏次数也会到账,也就是修改的内容会保存到用户信息文件中,下次玩游戏时再读取出来并判断用户是否有条件玩游戏。

public static void addMoney(Properties popr, File file) throws IOException {

//设置死循环

while (true) {

System.out.println(“¥¥¥¥ 充值系统 ¥¥¥¥”);

System.out.println(“¥¥ 充一百送5次 ¥¥”);

System.out.println(“¥¥ 充两百送12次 ¥¥”);

System.out.println(“¥¥ 充三百送18次 ¥¥”);

System.out.println(“¥ 充五百及以上送31次! ¥”);

System.out.println(“¥¥¥¥ 充值系统 ¥¥¥¥”);

System.out.println(“请输入您的充值金额:”);

//使用工具类,让用户输入的字符串必须是数字,并转为int类型

String s = sc.next();

int money = TSUtility.printInt(s);

while (true) {

if (money != 100 && money != 200 && money != 300 && money < 500) {

System.out.println(“输入金额错误!请重新输入:”);

String s1 = sc.next();

int money1 = TSUtility.printInt(s1);

money = money1;

} else {

//修改集合中的数据

popr.setProperty(“Money”, String.valueOf(money));

if (money == 100) {

popr.setProperty(“count”, String.valueOf(5));

} else if (money == 200) {

popr.setProperty(“count”, String.valueOf(12));

} else if (money == 300) {

popr.setProperty(“count”, String.valueOf(18));

} else {

popr.setProperty(“count”, String.valueOf(31));

}

//集合中的数据写到文件

FileWriter fw = new FileWriter(file);

popr.store(fw, null);

fw.close();

System.out.println(“充值成功!”);

break;

}

}

break;

}

}

界面效果:

 

updatePw()方法:实现用户修改密码的功能,首先用户输入用户名,判断用户名是否存在,不存在给出提示信息直接退出该功能;如果存在直接设置新密码,然后将新密码写到文件

public static void updatePw() throws IOException {

Docker步步实践

目录文档:

①Docker简介

②基本概念

③安装Docker

④使用镜像:

⑤操作容器:

⑥访问仓库:

⑦数据管理:

⑧使用网络:

⑨高级网络配置:

⑩安全:

⑪底层实现:

⑫其他项目:

了解详情https://docs.qq.com/doc/DSmxTbFJ1cmN1R2dB
密码写到文件**。

public static void updatePw() throws IOException {

Docker步步实践

目录文档:

[外链图片转存中…(img-Z5dKsTM5-1724130510238)]

[外链图片转存中…(img-eepqv6bu-1724130510239)]

①Docker简介

②基本概念

③安装Docker

[外链图片转存中…(img-veAPkXC7-1724130510239)]

④使用镜像:

[外链图片转存中…(img-I76hpsEa-1724130510239)]

⑤操作容器:

[外链图片转存中…(img-QNcq869d-1724130510240)]

⑥访问仓库:

[外链图片转存中…(img-sNyNbsqQ-1724130510240)]

⑦数据管理:

[外链图片转存中…(img-mWZvU29g-1724130510240)]

⑧使用网络:

[外链图片转存中…(img-CiphcsVm-1724130510241)]

⑨高级网络配置:

[外链图片转存中…(img-EFrhu0wc-1724130510241)]

⑩安全:

[外链图片转存中…(img-3t9Vn2DJ-1724130510241)]

⑪底层实现:

[外链图片转存中…(img-WI9Valgm-1724130510242)]

⑫其他项目:

[外链图片转存中…(img-ANwoMn1E-1724130510242)]

了解详情https://docs.qq.com/doc/DSmxTbFJ1cmN1R2dB

  • 15
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值