一代是无限制游戏次数,而这个是升级版的猜数小游戏,会限制你玩游戏的次数,涉及到的知识有在一代的基础上,加上了集合和IO流。
1.代码区:
游戏类代码:
package 猜数游戏;
import java.util.Random;
import java.util.Scanner;
public class Game {
public static void game() {
System.out.println("欢迎来到猜数游戏!");
Random r=new Random();
//得到一个1-100的随机数
int i=r.nextInt(100)+1;
//定义一个猜了几次的值x
int x=0;
//进行死循环猜数
while(true) {
x++;//每猜一次就次数加一
//做一个次数的判断如果之前已经猜过5次了,就不能再猜了,这个6呢,是因为死循环开始的时候,次数就加一,所以相当于你玩了5次就不能玩了
if(x<6) {
//自己在控制台输出,要猜的数
Scanner e=new Scanner(System.in);
System.out.println("请输入您要猜的数字:");
int index=e.nextInt();
//这个判断是对于,你猜的数和系统随机的数,进行一个大小的判断
if(index<i) {
System.out.println("你猜的数字"+index+"偏小");
}else if(index>i) {
System.out.println("你猜的数字"+index+"偏大");
}else {
System.out.println("恭喜你,赢下大奖!");
break;//如果猜中了,就要退出循环
}
}
else {
System.out.println("非常遗憾,这次猜数的次数已经用光了");
break;//如果猜的次数超过了5次,也是要退出循环
}}
}
}
运行类代码:
package 猜数游戏;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.Properties;
/**
* Properties集合的父类是Map,每个key对应其value
* @author 小楠
*
*/
public class Properies{
public static void main(String[] args) throws Exception{
//先创建集合,
Properties pr=new Properties();
//然后创建字符缓冲输入流对象,文件对象要存在,并且写了东西,这个下面会介绍
BufferedReader br=new BufferedReader(new FileReader("D:/test.txt"));
//load方法是将文件的内容写入集合中
pr.load(br);
//System.out.println(pr); 这里可以检验,是否写入了集合
pr.clone();//关闭流
//这个是调用getProperty方法,通过key,得到对应的value,因为此时文件中的value是int型的,所以需要对其进行类型转换
int number=Integer.parseInt(pr.getProperty("cot"));
//这个number表示,你玩过这个游戏的次数,如果大于3次就不能玩了
if(number>=3) {
System.out.println("试玩结束,想玩请充值:https://www.xiaonan.com/");
}else {
//调用写好的游戏代码
Game.game();
//并使玩游戏的次数加一
number++;
//将更新了的玩游戏次数,改写到集合中,因为setProperty方法的两个参数都是String类型,所以需要对number进行类型转换
pr.setProperty("cot", String.valueOf(number));
//创造缓冲字符输出流对象,文件对象,就是之前那个文件
BufferedWriter bw=new BufferedWriter(new FileWriter("D:/test.txt"));
//用集合特有的store方法进行写入,该方法第二个参数是对其进行描述的,可以写空
pr.store(bw, null);
//关闭流
pr.clone();
bw.close();
}
}
}
该文件的作用是,用来记录玩家玩过这个猜数小游戏的次数,这个文件的初始内容就只有一行,也就是cot=0,cot是集合中的key,次数是cot对应的value值,当玩过一次游戏之后,对应的value值就会发生变化,进行加一操作;当我们设置了免费玩这个的游戏次数后,就可以通过其cot对应的value的值来进行判断,是否还能免费玩。
设计思路:
在一代的基础上,再次添加了一个玩游戏次数的限制,因为刚学习完IO流,就想着集合和IO流之间进行一个相互的写入,先将文件中的数据,写到集合中,然后再将修改后的数据从集合中写入到文件中,然后再读取文件中的数据进行判断玩游戏的次数条件。
这里使用了集合Properties特有的方法void(Reader reader);是将文件中的内容写到集合中
void store(Writer writer, String comments),第二个参数是对其进行修饰,可以填null
运行结果:
前三次:
当第四次执行的时候,就会提示免费次数用光
此时文件中的内容是,也随着程序的运行修改了
谢谢观看,非常感谢!