用 JAVA 开发游戏连连看(之四)添加更多的功能

news/2024/7/7 15:22:20

之四)添加更多的功能

计分功能

大体上我们的程序已经可以跑了起来,可惜,就这么玩玩也太没有意思了,总得有个计分的吧。虽然我们不知道别人是怎么计分的,可是,程序是我们自己动手写的,我的地盘我做主,看看我是怎么计分的吧(实现可以放在下一步)。

规定用户游戏时间,游戏时间为地图中方块数 * 4 ,比如说有 120 个方块,那么游戏时间就是 480 秒,如果用户在 480 秒内没有完成游戏,则没有时间奖励分
时间奖励分为剩余时间 * 1 ,即在规定时间内完成游戏的,每提前一秒钟奖励 1 分
当已经选择第二个点后,如果选择的第二个点与第一个点之间无解,扣 1 分,如果有解,则增加 10 分
刷新功能会降低游戏难度,因此,当用户刷新地图时,扣 8 分
提示也要扣分,理由同上,使用一次扣 10 分
炸弹功能,这个更变态啊,使用一次扣 12 分
好了,计分规则定下来了,合理不合理先放在一边,不过,为了方便以后修改计分规则,我们还是将这些定义为常量吧。

//Setting.java

public final static int limitScore = 4; // 每个方块限定的时间

public final static int timeScore = 2; // 时间奖励的分数

public final static int wrongScore = 1; // 选择失败扣分

public final static int freshScore = 8; // 刷新功能扣分

public final static int hintScore = 10; // 提示功能扣分

public final static int bombScore = 12; // 炸弹功能扣分

public final static int correctScore = 10; // 成功消除后加分


现在,我们来一一实现计分功能。

首先,我们定义一个变量来保存用户的总分,另外,消除功能、刷新功能、提示功能和炸弹功能由于都有现成的方法,因此,我们只需要在这些方法中添加上计分功能就行了,唯一麻烦一点的就是计算时间分。

为了满足计时的功能,我们需要在游戏开始的时候记录下当前的时间,同时,在游戏完成时也要记录下完成时的时间,两者相减后就是用户游戏的时间了(如何知道游戏在什么时候结束,这个大家想想,不难办到:))。记录时间可以使用 System.currentTimeMillis() 方法,不过需要注意的是,这是以毫秒来计时的,要记得除以 1000 。

高手排行榜

分数是记下来了,自己每次游戏完成都能知道自己的分数,感觉是不错,不过,光和自己比不够劲啊,要是能和别人比就更好了,嗯,继续满足你的“愿望”:)

(注:以下功能需要一个支持动态页面的空间)

最简单的办法,就是我们在互联网上建立一个保存用户分数的数据库,当用户每次完成后,都让用户可以选择将分数发送到这个数据库中,同时,我们需要做一个后台程序,该程序接收到用户提交来的姓名和分数后,就保存到数据库中,并且,根据当前的分数,告诉用户当前的 Top10 排行榜。后台程序可以使用网页来实现,至于怎么做,这个与程序关系不大,我们只看一看程序这一块怎么做吧。

首先,做法有两种,一种是自己使用 Socket 类来完成 HTTP 的 Get/Post 操作,另一种就是使用 URL 类,前者适用性前(如 J2ME 就不支持 URL 类)后者用起来方便一些,在此,我们就用后者来实现。

游戏完成后,当用户需要提交分数到互联网上时,先弹出一个对话框让用户输入姓名,同时将用户的姓名和分数,还有自己已经做好的页面“凑”成一个合法的 URL 地址,然后,将这个 URL 地址简单的 new 一下 (new 的同时就已经将这些数据发送到了互联网上了 ) ,比方说我做的排行榜的页面为http://www.xhai.com/kyodai/top10.asp ,用户的姓名为“ ZhangJian ”,分数为 2000 分,那么,根据这些信息,我拼凑成的网址就是应该是类似于http://www.xhai.com/kyodai/top10.asp?name=ZhangJian&score=2000 这样样的地址,然后, new URL(“http://www.xhai.com/kyodai/top10.asp?name=ZhangJian&score= 2000”) 就行了:)是不是够简单的?当然,如果有需要,还可以对这些数据进行一下加密,以防用户“作弊”。 (现在已经废弃)

为了在程序中显示排行榜的页面,我们需要程序能够处理页面的功能,显示,如果自己去实现这个功能,虽然并不复杂,但是 JAVA 提供的 JEditorPane 控件却更适合完成这项工作。

我不想用完整源程序来说明,毕竟那太费篇幅,只是截取一段代码来描述一下吧。

JEditorPane HelpPane = new JEditorPane();

HelpPane.setEditable(false); // 禁止用户编辑

HelpPane.setPage(new URL("http://www.xhai.com/kyodai/top10.asp")); // 设置页面

HelpPane.addHyperlinkListener(this); // 添加用户点击链接时的事件处理

public void hyperlinkUpdate(HyperlinkEvent e) {

if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {

JEditorPane pane = (JEditorPane) e.getSource();

if (e instanceof HTMLFrameHyperlinkEvent) {

HTMLFrameHyperlinkEvent evt = (HTMLFrameHyperlinkEvent) e;

HTMLDocument doc = (HTMLDocument) pane.getDocument();

doc.processHTMLFrameHyperlinkEvent(evt);

}

else {

try {

pane.setPage(e.getURL());

}

catch (Throwable t) {

t.printStackTrace();

}

}

}

}


使用配置文件来保存用户信息

假如用户每次要发送成绩到互联网上时都要输入姓名,那有多麻烦啊,为什么我们不将用户的姓名保存起来呢?

其实,不光是用户的姓名需要保存,以后我们添加的其它选项也需要保存起来,因此,我们必须实现一个保存 / 读取用户信息的类,就如果 Windows 的注册表或者 ini 文件一样。在这里,我不想多费口舌,只是告诉一下大家怎么做就行了。

JAVA 提供了一个 java.util.Properties() 类,这个类就是用来保存 / 读取配置文件的,它的 setProperty() 和 getProperty() 方法就是分别用来保存 / 读取配置文件信息的,就如同使用 ini 文件一样,具体的用法查一查 API 就清楚了。


http://www.niftyadmin.cn/n/1860730.html

相关文章

JAVA程序员遇到职业问题是跑路?还是留守?

初级JAVA程序员最担心在公司里遇到原本其他程序员开发的项目,他们“跑路”以后的工作就由新程序员完成。而新员工也不懂内部的逻辑,酱紫让程序员很难处理后续的问题?摆在他们面试的可能就两个词,离职! 坚持&#xff01…

线程之同步的两种条件总结

同步的两种表现形式: 1.同步代码块 synchronized(对象){ 需要同步的代码 } 2.同步函数: 使用的锁是this public synchronized void show(){ } 同步的作用:避免线程的安全隐患 单例 懒汉式 …

用 JAVA 开发游戏连连看(之五)完善用户界面

(之五)完善用户界面 让界面更动起来 整个程序的界面总算是出来了,可惜不太漂亮,这种界面,别说别人,就连自己也不愿意多看几眼,因此,做一些适当的美化工作还是非常有必要的。 想…

程序员是网管吗?

编程的叫程序员 ,修电脑的叫网管,怎么你们就不懂呢?程序猿等于修理工?网管?盗QQ?Photoshop?硬盘文件恢复?装系统? 那对于这种吃力不讨好,并且自己也不擅长的修…

力扣 538. 把二叉搜索树转换为累加树 1038. 从二叉搜索树到更大和树

题目来源: 538:https://leetcode.cn/problems/convert-bst-to-greater-tree/description/ 1038: https://leetcode.cn/problems/binary-search-tree-to-greater-sum-tree/description/ C题解1:递归法。二叉搜索树由大到小&#…

用 JAVA 开发游戏连连看(之六)优化:让程序运行更稳定、更高

之六)优化:让程序运行更稳定、更高效 改善游戏的合理性 到目前为止,我们的游戏基本上算是完成了,为了使程序更合理,我们还需要将整个程序从头再理一遍,看看有没有改进的地方。 首先,在变量…

JAVA工程师如何在工作中提升自己?

“活到老,学到老。”互联网算是最辛苦的行业之一,“加班”对JAVA工程师来说已是“家常便饭”,同时互联网技术又日新月异,很多JAVA工程师都疲于应付,叫苦不堪。如何在繁忙的工作中做好技术积累,构建个人核心…

UI设计师,就该对自己好点!

在这“鸭梨”恒生的城市里,总会或多或少的产生压抑感。因为紧迫,因为人群,因为杂乱,因为日常空间总会产生逼仄的压迫感。我们需要去寻找更多的空间,任何一个每天陪伴你超过一小时的空间,都应该成为你生活的…