- 浏览: 49777 次
最新评论
-
ljf_home:
想法很不错。
一个云计算的构想 -
lizhi:
Libcloud 可以实现类似功能
一个云计算的构想 -
highill:
浏览器的兼容性问题和性能问题 需要很长时间来解决,中间有很多 ...
强大的HTML5 -
9310974aa:
非常感谢楼主!~~~
J2ME手机编程心得(四) -
longphoenix:
yangyi 写道互联网将更有用了,但是将更不安全了
确实啊 ...
强大的HTML5
首先需要将用户的姓名和分数保存,这就需要一个格式,在这里定义为"用户分数#用户姓名"这样的格式。用户姓名是在记录分数的界面用户输入的,而用户的分数则是从GameScreen类中直接获取的。那如何获取GameScreen的实例呢?可以有多种方法,可以在构造RecordScreen的时候就将实例放到构造函数的参数中,也可以在Midlet的主类SnakeGame中获取GameScreen的实例。我偏向于第二种做法,因为这样看起来结构比较清晰,因为所有的屏幕都是属于这个Midlet的,将所有的屏幕(Screen)都做为主类的成员,再为每个设置get方法就可以在任何时候很方便的获取任意一个屏幕的实例。还有个问题是如何随时获取主Midlet类的实例呢?在JBuilder里面生成的代码中有个静态的变量instance,所以在任何地方都可以用SnakeGame.instance来获取这个类的实例。不过我的习惯是将instance设置成private类型,再写一个getInstance()的静态方法返回instance。这样,如果我想获取GameScreen的实例,就可以在任何地方直接用SnakeGame.getIntance().getGameScreen()获取了。
数据可以获取了,现在就是保存了,保存很简单了,打开一个RecordStore,然后用addRecord方法添加记录就是了,这里的记录表现形式只能是byte数组类型的。代码如下:
int score = gameScreen.getScore();//获取的分数
String name = playerName.getString();//获取姓名
String record = score + "#" + name;//组成字符串
try {
RecordStore rs = RecordStore.openRecordStore("SnakeGame", true);//打开,如果没有就新建
rs.addRecord(record.getBytes(), 0, record.length());//保存
rs.closeRecordStore();//关闭
}
catch (RecordStoreException ex) {
ex.printStackTrace();
}
这样简单就把数据保存进去了。
保存完了应该读取了,而且这个是要按排名先后来排序的,一般来说,遍历整个记录集可以使用RecordEnumeration,我们可以用RecordStore的enumerateRecords来进行遍历,enumerateRecords有三个参数,在这里只需要关心第二个参数就可以了,第二个参数是需要提供一个排序的类,这个类要实现RecordComparator接口,RecordComparator接口里面有compare(byte[] a byte[] b)函数,我们只要按照我们的意图实现这个方法就可以了。我们需要的是比较#前面的数字的大小,因此也比较简单,具体类的代码如下:
class MyExpenseComparator
implements RecordComparator {
public int compare(byte[] a, byte[] b) {
String strA = new String(a);
String strB = new String(b);
int indexA = strA.indexOf("#");
String scoreA = strA.substring(0, indexA);
int indexB = strB.indexOf("#");
String scoreB = strB.substring(0, indexB);
if (Integer.parseInt(scoreA) > Integer.parseInt(scoreB)) {
return this.PRECEDES;
}
if (Integer.parseInt(scoreA) < Integer.parseInt(scoreB)) {
return this.FOLLOWS;
}
return this.EQUIVALENT;
}
}
有了这个排序的类,其他的就好办了,遍历记录然后一条一条显示就可以了,考虑到如果记录多了会很长,因此遍历的时候只取出前10名的记录,后面的全部都删除掉。遍历以及显示记录的代码如下:
private void listRecord() {
String[] names;
try {
RecordStore rs = RecordStore.openRecordStore("SnakeGame", false);
int count = 0;
RecordEnumeration e = rs.enumerateRecords(null, new MyExpenseComparator(), false);
while (e.hasNextElement()) {
int rid = e.nextRecordId();
String str = new String(rs.getRecord(rid));
int index = str.indexOf("#");
String score = str.substring(0, index);
String name = str.substring(index + 1);
if (count++ >= 10)
rs.deleteRecord(rid);
else
append("No" + count + "." + "姓名:" + name + " 得分:" + score + "\r\n");
}
rs.closeRecordStore();
}
catch (Exception e) {
e.printStackTrace();
}
}
显示和记录都完成了,呵呵,再集成到我们的游戏里面去吧,整个RecordScreen的代码如下:
package snakegame;
import javax.microedition.lcdui.*;
import javax.microedition.rms.RecordStore;
import javax.microedition.rms.*;
import java.util.Hashtable;
public class RecordScreen
extends Form implements CommandListener {
private Command cancel;
private Command save;
private TextField playerName = new TextField("您的大名", "Noname", 10, TextField.ANY);
private GameScreen gameScreen;
public RecordScreen() {
super("记录成绩");
this.gameScreen = SnakeGame.getInstance().getGameScreen();
cancel = new Command("取消", Command.EXIT, 1);
save = new Command("保存成绩", Command.OK, 2);
this.append(playerName);
addCommand(cancel);
addCommand(save);
setCommandListener(this);
listRecord();
}
private void saveRecord() {
int score = gameScreen.getScore();
String name = playerName.getString();
String record = score + "#" + name;
try {
RecordStore rs = RecordStore.openRecordStore("SnakeGame", true);
int id = rs.addRecord(record.getBytes(), 0, record.length());
rs.closeRecordStore();
}
catch (RecordStoreException ex) {
ex.printStackTrace();
}
listRecord();
}
private void listRecord() {
String[] names;
try {
RecordStore rs = RecordStore.openRecordStore("SnakeGame", false);
int count = 0;
RecordEnumeration e = rs.enumerateRecords(null, new MyExpenseComparator(), false);
while (e.hasNextElement()) {
int rid = e.nextRecordId();
String str = new String(rs.getRecord(rid));
int index = str.indexOf("#");
String score = str.substring(0, index);
String name = str.substring(index + 1);
if (count++ >= 10)
rs.deleteRecord(rid);
else
append("No" + count + "." + "姓名:" + name + " 得分:" + score + "\r\n");
}
rs.closeRecordStore();
}
catch (Exception e) {
e.printStackTrace();
}
}
public void commandAction(Command command, Displayable displayable) {
if (command == save) {
saveRecord();
SnakeGame.getInstance().gameScreen();
}
if (command == cancel) {
SnakeGame.getInstance().gameScreen();
}
}
}
class MyExpenseComparator
implements RecordComparator {
public int compare(byte[] a, byte[] b) {
String strA = new String(a);
String strB = new String(b);
int indexA = strA.indexOf("#");
String scoreA = strA.substring(0, indexA);
int indexB = strB.indexOf("#");
String scoreB = strB.substring(0, indexB);
if (Integer.parseInt(scoreA) > Integer.parseInt(scoreB)) {
return this.PRECEDES;
}
if (Integer.parseInt(scoreA) < Integer.parseInt(scoreB)) {
return this.FOLLOWS;
}
return this.EQUIVALENT;
}
}
OK,这个功能就实现了!
不过在测试中发现,如果输入的姓名有中文,可能显示的就会有点问题,上面的图片第二条记录,本来填写的是“无名”,结果显示的时候只显示出了“无”字。这个问题有人知道的话请告诉我解决的办法,多谢了!!
发表评论
-
强大的HTML5
2010-02-23 09:50 2291前些天看了一些HTML5方面的资料,感觉 ... -
网站安全不可忽视--一个收费网站的破解过程
2004-10-07 09:23 1181某日在网上偶然打开一个网站,是有PLMM与你视频聊天的,但是要 ... -
教你用VC6做QQ对对碰外挂程序
2005-02-26 14:45 1091前段时间跟以前的同事玩QQ游戏对对碰,结果输的 ... -
用VC实现发送和接受短信
2005-04-14 01:48 3176前些日子感觉得练习一下VC了,所以就有想,平时发短信那 ... -
J2ME手机编程心得(一)
2006-01-18 09:05 910自学J2ME也有一段时间了,总觉得应该把自己学习的心得与 ... -
J2ME手机编程心得(二)
2006-01-18 09:06 1114J2ME的环境配置好了,现在就开始写我们的第一个J2ME的 ... -
J2ME手机编程心得(三)
2006-01-18 09:07 1209上一次已经做完了第一个简单的J2ME程序,但是可能大家最 ... -
Weblogic9.0的破解方法
2006-01-18 09:09 1157weblogic9已经出来了,在官方网站可以下载到试用版 ... -
利用J2ME制作你自己的网络相册
2006-01-21 11:52 1035现在越来越多的手机都支持拍照功能,但是各种型号的手机 ... -
Spring的IOC在J2EE项目中的应用
2006-03-06 17:28 1159前些天大概学习了一下Spring的IOC,感觉还是很方便的 ... -
自做代码生成器(一)介绍
2006-08-03 18:43 1146对数据库的操作中间,不同的地方无非是各个字段的信息,比如 ... -
自做代码生成器(二)规则格式定义
2006-08-03 18:45 1588首先是数据表和java类之间的转换规则,数据库以orac ... -
自做代码生成器(三)动手写代码
2006-08-03 18:46 1265定义好规则和配置格式,就可以开始动手写代码了,首先,需 ... -
自做代码生成器(四)举例实践
2006-08-03 18:47 1340我们先定义一个数据表的xml文件,比如系统用户的表sys ... -
OpenLaszlo在Resin上的部署以及开发
2007-07-04 18:00 1158早就关注过OpenLaszlo这个 ... -
resin3.1处理utf-8格式的jsp时存在的问题
2008-11-05 16:48 6445以前一直使用resin-3.0.x作为服务器,最近想升 ... -
一个网站性能的问题,寻求帮助!
2008-06-27 16:40 2560网站是一个wap站点,负责将用户访问的web站点的页面转换成为 ... -
一个数据层的设计与实现,大伙帮忙看看是否可行,谢谢!
2007-04-20 20:17 4126这里我没有使用Hibernate,我一直都嫌Hiber ...
相关推荐
j2me 手机短信编程(sms),经典 适合编程各个阶段的人学习,一定很有帮助
J2ME是Java技术的一个分支,主要用于嵌入式系统和移动设备,如早期的智能手机和平板电脑,它为开发者提供了跨平台的编程能力。 在这款J2ME手机扫雷游戏中,开发者运用了J2ME的核心技术,包括MIDP(Mobile ...
**J2ME游戏开发实例详解** J2ME(Java 2 Micro Edition)是Java平台的一个子集,专门用于...通过这个J2ME游戏开发实例,你可以深入理解移动游戏开发的各个方面,逐步提升自己的编程技能,为未来的项目打下坚实基础。
MIDP(Mobile Information Device Profile)是J2ME的一部分,主要针对移动设备,特别是手机的游戏和应用开发。MIDP2.0是MIDP的一个版本,增加了更多功能和改进,如更强大的用户界面组件、多媒体支持和数据存储。 ...
给定信息中的“【中文】【 J2ME开发大全 】【pdf】【15.87 MB】”指的是一本关于J2ME开发的经典书籍,该书籍提供了详尽的J2ME开发指南,包括基础概念、编程技巧、最佳实践等内容。作为一本经典书籍,它对于想要深入...
《J2ME手机泡泡堂游戏》是一款基于Java平台开发的移动设备游戏,它以其与经典泡泡堂游戏的高度相似性赢得了玩家的喜爱。此游戏的核心亮点在于它不仅提供了丰富的游戏体验,而且还附带了全部的源代码,这对于开发者和...
【标题】"j2me小练习,教学用" 在IT领域,J2ME(Java 2 Platform, Micro Edition)是...通过实践这个项目,学习者不仅可以提升J2ME编程技能,还能深入理解移动游戏开发的各个方面,为未来更复杂的项目打下坚实的基础。
《J2ME飞翔之旅:1945飞行射击游戏源码解析》 在移动设备尚未普及智能操作系统的时代,Java...通过对这款源码的学习,开发者不仅可以掌握J2ME编程技巧,还能深入理解游戏开发的核心流程,为今后的项目提供宝贵的参考。
这个资源可能是由一位名为“txyly998”的博主分享的,旨在帮助初学者和开发者掌握J2ME编程。 描述中提到的“博文链接”指向了iteye博客的一个页面(https://txyly998.iteye.com/blog/339081),该页面可能包含更...
J2ME,全称Java Micro Edition,是Java平台的一个子集,主要用于嵌入式设备和移动设备,如早期的智能手机和功能手机。它提供了开发和部署小型应用程序的框架,包括游戏。在这个超简单的J2ME游戏实例中,我们主要关注...
- **全面理解手机游戏开发**:通过本书的学习,读者不仅能够掌握具体的编程技巧,还能对整个手机游戏开发过程有一个全面的认识。 - **提升个人与团队能力**:本书提供的实用指南和技术支持,能够帮助开发者和开发...
总的来说,Java手机游戏海底探险源文件提供了一个实践性的学习案例,涵盖了Java编程、J2ME技术、游戏设计与开发等多个重要知识点。通过研究这个项目,开发者不仅可以提升Java编程技能,还能了解到游戏开发的全过程,...
42. **Fyter的博客**:个人技术博客,分享编程经验和心得。 43. **DevExpress**:提供ASP.NET、WinForms等控件和开发工具。 44. **OperaMask**:浏览器插件开发,尤其与JavaScript和Web开发相关。 45. **中国源码...
### 个人收藏的编程下载资源全面解析 在数字化时代,编程资源的获取变得前所未所地便捷,但对于初学者或是寻找特定资源的专业人士来说,筛选出高质量、可靠的学习资料仍然是一个挑战。本文将深入分析一份个人收藏的...
Java 基础学习心得 Java 是一种广泛使用的编程语言,随着其广泛应用,越来越多的人开始学习 Java。那么,Java 学习需要什么根底?下面,我们将详细介绍 Java 学习的基础知识。 Java 学习需要什么根底? Java 学习...
Java学习心得总结 Java是一种广泛使用的高级编程语言,尤其在企业级应用开发中占据着重要地位。学习Java需要循序渐进,扎实基础,才能逐步掌握其精髓。以下是一些关于Java学习的关键点和注意事项: 1. **数据类型*...
每个方向都有其独特的挑战和潜力,如中国庞大的手机用户市场就为J2ME提供了广阔的发展空间。 实习不仅是技能的提升,更是个人成长的过程。在实习结束后,你需要反思,持续学习,保持对新信息的敏感度,这对于一个...
- **J2ME (Java 2 Micro Edition)**:专为移动设备如手机和平板电脑等小型设备设计的 Java 版本。 - **J2SE (Java 2 Standard Edition)**:标准版 Java,适用于桌面应用和企业级应用程序。 - **J2EE (Java 2 ...
此外,文件名"okbase.net"可能是指一个包含更多资源或讨论平台的网站,读者可以在该网站上获取额外的支持、答疑解惑,或者与其他学习者交流心得,进一步提升自己的Java和J2ME技能。 总的来说,《Practical Java》...