HighRecord.java
上传用户:public
上传日期:2010-01-27
资源大小:484k
文件大小:6k
- package GameDisplay;
- import javax.microedition.lcdui.*;
- import javax.microedition.rms.*;
- import java.io.*;
- import javax.microedition.lcdui.Displayable;
- public class HighRecord extends Canvas implements CommandListener{
- Command ok;
- private RecordStore rs; //////////////////数据
- String theName[]; ////////////////////////姓名数组
- int Score[]; //////////////////////////////分数数组
- Image imgBg; ////////////////////////////分数背景图
- HighRecord() {
- try {
- jbInit();
- }
- catch (Exception e) {
- e.printStackTrace();
- }
- }
- private void jbInit() throws Exception {
- imgBg = Image.createImage("/res/score_blank.jpg");
- ok=new Command("确定",Command.OK,1);
- addCommand(ok);
- setCommandListener(this);
- try { ///////////////////////////如果数据库无记录则添加五条记录
- rs = openRSAnyway(" ");
- if (rs.getNumRecords() == 0) {
- add("XXX",0);
- add("XXX",0);
- add("XXX",0);
- add("XXX",0);
- add("XXX",0);
- }
- }
- catch (RecordStoreNotOpenException e1) {
- e1.printStackTrace();
- }
- }
- public void paint(Graphics g) {
- int y = 55;
- duchu();
- //画背景
- g.drawImage(imgBg, 0, 0, Graphics.TOP | Graphics.LEFT);
- g.setFont(CustomFont()); //设置字体为“大”
- //画排行榜
- g.setColor(255, 255, 0);
- try {
- for (int i = 1; i < rs.getNumRecords()+1; i++) {
- g.drawString(" " + i + " " +
- theName[i], 0, y, 0);
- g.drawString(String.valueOf(Score[i]),this.getWidth()-60,y,0);
- g.drawString("层",this.getWidth()-30,y,0);
- y = y + 26;
- }
- }
- catch (RecordStoreNotOpenException ex) {
- ex.printStackTrace();
- }
- }
- private Font CustomFont() { //定制字体//////////设置粗号,大字号
- return Font.getFont(Font.FACE_SYSTEM, Font.STYLE_BOLD,
- Font.SIZE_LARGE);
- }
- public RecordStore openRSAnyway(String rsname) {
- RecordStore rs = null;
- int ss = 66;
- // 名稱大於32 個字元就不接受?????????
- if (rsname.length() > 32)
- return null;
- try {
- rs = RecordStore.openRecordStore(rsname, true);
- return rs;
- }
- catch (Exception e) {
- return null;
- }
- }
- //
- public void add(String playerName, int score) { //在rs中增加一条记录
- ByteArrayOutputStream bo = new ByteArrayOutputStream();
- DataOutputStream doSteam = new DataOutputStream(bo);
- try {
- doSteam.writeUTF(playerName);
- doSteam.writeInt(score);
- byte data[] = bo.toByteArray();
- rs.addRecord(data, 0, data.length);
- doSteam.close();
- }
- catch (Exception e) {
- e.printStackTrace();
- }
- }
- //用本次玩家的分数和rs中的数据作比较,分数高则储存,第一个参数为玩家姓名第二个参数为分数
- public void matches(String name, int score) {
- int bianhao = 0;
- duchu();
- try {
- for (int i = 1; i < rs.getNumRecords()+1; i++) {
- byte[] data = rs.getRecord(i);
- DataInputStream doSteam = new DataInputStream(
- new ByteArrayInputStream(data));
- System.out.println(doSteam.readUTF());
- if (Score[rs.getNumRecords()] == doSteam.readInt()) {
- bianhao = i;
- break;
- }
- doSteam.close();
- }
- if (Score[rs.getNumRecords()] < score)
- {
- //System.out.println(bianhao);
- save(name, score, bianhao);
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- try {
- rs.closeRecordStore();
- }
- catch (RecordStoreException ex) {
- }
- }
- //读出记录并排序
- public void duchu() {
- theName = new String[6];
- Score = new int[6];
- try {
- for (int i = 1; i < 6; i++) {
- byte[] data = rs.getRecord(i);
- DataInputStream doSteam = new DataInputStream(
- new ByteArrayInputStream(data));
- theName[i] = doSteam.readUTF();
- Score[i] = doSteam.readInt();
- }
- paixu(Score, theName);
- } catch (Exception e) {
- }
- }
- //把5条记录排序
- public void paixu(int[]Score, String name[]) {
- for (int j = 1; j < 6; j++) {
- for (int i = 1; i < 5; i++) {
- int temp;
- String tempStr;
- if (Score[i] < Score[i + 1]) {
- temp = Score[i];
- Score[i] = Score[i + 1];
- Score[i + 1] = temp;
- tempStr = name[i];
- name[i] = name[i + 1];
- name[i + 1] = tempStr;
- }
- }
- }
- }
- //存储数据
- public void save(String playerName, int score, int bianhao) {//在rs中保存本次数据
- ByteArrayOutputStream bo = new ByteArrayOutputStream();
- DataOutputStream doSteam = new DataOutputStream(bo);
- try {
- doSteam.writeUTF(playerName);
- doSteam.writeInt(score);
- byte data[] = bo.toByteArray();
- rs.setRecord(bianhao, data, 0, data.length);
- doSteam.close();
- }
- catch (Exception e) {
- e.printStackTrace();
- }
- }
- public void commandAction(Command command, Displayable displayable) {
- if(command==ok){
- Control.showMenu();
- }
- }
- }