java飞机大战分数显示_Java简单飞机大战(2)

上一篇飞机大战文章差不多介绍了简单的飞机大战的实现,剩下要做的就是添加一个分数排行榜和计分器。计分器十分简单,画一个字符串Score,然后显示当前获得的分数即可。既然是排行榜,当然是要记录前几名的分数,具体使用什么方式存储呢?如果使用数组或者数组队列,在每一次关闭了程序之后,记录的数据就会消失,再次打开之后排行榜上的分数就全部变成0了。所以这里我使用了文件读写来存储分数数据。每一次需要存储的分数都会被写在文本中,当再次打开程序的时候只要读取文件里的数据就会得到数据。

public void fileInput(File file) throws IOException{

FileInputStream fis=new FileInputStream(filename);

DataInputStream dis=new DataInputStream(fis);

for(int i=0;i<3;i++){

count[i]=dis.readInt();

}

fis.close();

}

public void fileOutput(File file,int[] score) throws IOException{

FileOutputStream fos=new FileOutputStream(filename);

DataOutputStream dps=new DataOutputStream(fos);

for(int i=0;i<3;i++){

dps.writeInt(score[i]);

}

fos.flush();

fos.close();

}

这里我创建的是一个现实前三名的排行榜,但是创建数组时使用的容量是4。因为重新打开游戏进行游戏再打开排行榜时,需要重新读写本地存储的排行榜数据再添加新的数据进入比较,所以需要容量为4的数组。在读入当次游戏的数据后将数组进行排序,然后在把前三的数据写入文件中。排行榜上显示的也是数组的前三个数。这样,一个排行榜也写好了。不过游戏还是有一点问题。在进行游戏时,如果点击暂停按钮,最小化窗口然后再打开窗口,这时界面会变成初始界面。因为在暂停的时后在主线程的执行中并没有执行绘制图形,所以JFrame界面刷新后变为初始界面。为了改变这种情况,我决定重写JFrame的paint方法。在paint方法中加入标志位,当暂停时最小化窗口了再打开窗口时先让线程执行绘制的方法,然后再进入暂停按钮对应的标志位的语句。

if(biaozhi[0]==1){

//绘制暂停时的界面}

if(flag){

continue;

}

这样就解决了遇到的问题。暂停后无论怎么移动界面也不会出现问题了。

现在的飞机大战能实现的功能都比较简单,还可以再加入一些元素,比如随着时间增加难度增大,加入BGM,给飞机添加一个最终技能之类的。如果还有什么想要实现的再自己添加就好了。差不多就这些了,很久没有更新,最近要多写点文章了- -。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值