之四)添加更多的功能

计分功能

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

规定用户游戏时间,游戏时间为地图中方块数 * 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 就清楚了。

转载于:https://www.cnblogs.com/zgl521/archive/2012/09/04/3057793.html

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

  1. java连连看的按钮如何加入_用 JAVA 开发游戏连连看(之四)添加更多的功能

    之四)添加更多的功能 计分功能 大体上我们的程序已经可以跑了起来,可惜,就这么玩玩也太没有意思了,总得有个计分的吧.虽然我们不知道别人是怎么计分的,可是,程序是我们自己动手写的,我的地盘我做主,看看我 ...

  2. MySQL和java连连看_用 JAVA 开发游戏连连看(之一)动手前的准备

    JAVA ,相信大家也不会陌生了吧, JAVA 是一门相当优秀的语言.目前 JAVA 领域 J2EE . JSP . STRUTS 等技术不知有多么的热门,他们的主要用途是用来进行企业开发, J2ME ...

  3. java游戏开始被流星_用 JAVA 开发游戏连连看(之一)动手前的准备

    JAVA ,相信大家也不会陌生了吧, JAVA 是一门相当优秀的语言.目前 JAVA 领域 J2EE . JSP . STRUTS 等技术不知有多么的热门,他们的主要用途是用来进行企业开发, J2ME ...

  4. java连连看算法_用 JAVA 开发游戏连连看(之三)将算法与界面结合起来

    (之三)将算法与界面结合起来 用布局和按钮来实现算法的界面 上面已经说完了算法,相信大家也迫不及待的想进入界面的设计了吧,好了,多的不说,我们开始吧. 既然我们的算法是基于二维数组的,那么我们也应该在 ...

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

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

  6. java连连看倒计时_0053 游戏连连看增加倒计时和暂停功能和提示功能

    原标题:0053 游戏连连看增加倒计时和暂停功能和提示功能 上节课增加了更多的功能,让游戏可以持续玩下去,并处理了游戏结束和重新开始. 这节课来增加更多的功能:提示功能.倒计时功能和暂停功能. 将关卡 ...

  7. Java开发游戏脚本(第一卷)

    游戏脚本开发第一卷 开发前言 开发热身 获取鼠标的坐标信息 鼠标信息数据处理 颜色对比判断鼠标操作 多线程启动脚本 最后结语 开发前言 很多人都不想在玩游戏时进行持续的重复操作,我也不例外,而游戏脚本 ...

  8. 优酷java_youtubie 仿优酷的视频网站,采用JAVA开发,支持Oracle数据库。主要功能包含注册登录, 上传 Jsp/Servlet 238万源代码下载- www.pudn.com...

    文件名称: youtubie下载 收藏√  [ 5  4  3  2  1 ] 开发工具: Java 文件大小: 12657 KB 上传时间: 2015-04-23 下载次数: 1 详细说明:仿优酷的 ...

  9. 关于利用JAVA开发游戏外挂的几点思考

    能够利用JAVA来编游戏外挂,这真的是一个让人很感兴趣的话题. 在讨论这个题目之前,我们首先来给不玩网络游戏的人补一下课,首先网络游戏的概念大家应该都是知道了,从虾米最早接触的文字MUD<重出江 ...

最新文章

  1. 解决Hbuilder打包的APP微信支付时无法唤起支付,且提示{“code“:-100,“message“:“[payment微信:-1]General errors“}的问题
  2. 影像组学视频学习笔记(27)-SimpleITK包介绍、Li‘s have a solution and plan.
  3. VI3的VLAN配置:VST、EST和VGT标记
  4. Linux学习笔记(五)
  5. 监督学习 | 线性回归 之多元线性回归原理及Sklearn实现
  6. Linux文件系统之:通用块处理层 ll_rw_block | +往期文章回顾
  7. android布局layout中的一些属性
  8. 【操作系统/OS笔记05】非连续内存分配:分段、分页、页表
  9. excel删除行闪退_Excel出现闪退如何处理?
  10. 深度学习小笔记04-魏秀参《解析深度学习-卷积神经网络原理与视觉实践》
  11. mpu6050惯性导航学习记录
  12. 西门子PLC S7-200数字量扩展模块
  13. 华为路由器用Linux开发,华为路由交换设备配置综合实验(实验六合一)
  14. 数据分析岗位招聘分析
  15. ES中 minimum_should_match 的用法和误区
  16. css 屏幕背景图片 img.html
  17. java反射为什么消耗资源_Java反射笔记
  18. 华为Freebuds 5电量耐用吗?续航怎么样?
  19. 五脏六腑在脸上的反射区图片_面部五脏反射穴位图
  20. Linux安装CentOS系统

热门文章

  1. 语法制导定义 SDD
  2. bzoj 2351: [BeiJing2011]Matrix(二维Hash)
  3. Java中TimeZone(时区)类的简单使用
  4. python机器学习库sklearn——神经网络
  5. matlab2c使用c++实现matlab函数系列教程-sign函数
  6. js系列教程8-事件全解
  7. 流媒体服务器设计文档,流媒体服务器设文档.doc
  8. 【Fastboot】给android刷整个系统和系统某个单独模块的方法
  9. Swift实战-豆瓣电台(八)播放进度与时间
  10. ajax图片上传,基于firefox