HighRecord.java
上传用户:public
上传日期:2010-01-27
资源大小:484k
文件大小:6k
源码类别:

其他游戏

开发平台:

Java

  1. package GameDisplay;
  2. import javax.microedition.lcdui.*;
  3. import javax.microedition.rms.*;
  4. import java.io.*;
  5. import javax.microedition.lcdui.Displayable;
  6. public class HighRecord extends Canvas implements CommandListener{
  7. Command ok;
  8. private RecordStore rs; //////////////////数据
  9. String theName[]; ////////////////////////姓名数组
  10. int Score[]; //////////////////////////////分数数组
  11. Image imgBg; ////////////////////////////分数背景图
  12. HighRecord() {
  13.     try {
  14.       jbInit();
  15.     }
  16.     catch (Exception e) {
  17.    e.printStackTrace();
  18.     }
  19. }
  20.   private void jbInit() throws Exception {
  21.     imgBg = Image.createImage("/res/score_blank.jpg");
  22.    ok=new Command("确定",Command.OK,1);
  23.        addCommand(ok);
  24.        setCommandListener(this);
  25. try { ///////////////////////////如果数据库无记录则添加五条记录
  26.   rs = openRSAnyway(" ");
  27.   if (rs.getNumRecords() == 0) {
  28.     add("XXX",0);
  29.     add("XXX",0);
  30.     add("XXX",0);
  31.     add("XXX",0);
  32.     add("XXX",0);
  33.   }
  34. }
  35. catch (RecordStoreNotOpenException e1) {
  36.   e1.printStackTrace();
  37. }
  38.  }
  39. public void paint(Graphics g) {
  40. int y = 55;
  41. duchu();
  42. //画背景
  43. g.drawImage(imgBg, 0, 0, Graphics.TOP | Graphics.LEFT);
  44. g.setFont(CustomFont()); //设置字体为“大”
  45. //画排行榜
  46. g.setColor(255, 255, 0);
  47. try {
  48.   for (int i = 1; i < rs.getNumRecords()+1; i++) {
  49.     g.drawString("     " + i + "     " +
  50.              theName[i], 0, y, 0);
  51. g.drawString(String.valueOf(Score[i]),this.getWidth()-60,y,0);
  52. g.drawString("层",this.getWidth()-30,y,0);
  53. y = y + 26;
  54.   }
  55. }
  56. catch (RecordStoreNotOpenException ex) {
  57.   ex.printStackTrace();
  58. }
  59. }
  60. private Font CustomFont() { //定制字体//////////设置粗号,大字号
  61.       return Font.getFont(Font.FACE_SYSTEM, Font.STYLE_BOLD,
  62.                           Font.SIZE_LARGE);
  63.     }
  64. public RecordStore openRSAnyway(String rsname) {
  65. RecordStore rs = null;
  66. int ss = 66;
  67. // 名稱大於32 個字元就不接受?????????
  68. if (rsname.length() > 32)
  69.   return null;
  70. try {
  71.   rs = RecordStore.openRecordStore(rsname, true);
  72.   return rs;
  73. }
  74. catch (Exception e) {
  75.   return null;
  76. }
  77. }
  78. //
  79. public void add(String playerName, int score) { //在rs中增加一条记录
  80. ByteArrayOutputStream bo = new ByteArrayOutputStream();
  81. DataOutputStream doSteam = new DataOutputStream(bo);
  82. try {
  83.   doSteam.writeUTF(playerName);
  84.   doSteam.writeInt(score);
  85.   byte data[] = bo.toByteArray();
  86.   rs.addRecord(data, 0, data.length);
  87.   doSteam.close();
  88. }
  89. catch (Exception e) {
  90.   e.printStackTrace();
  91. }
  92. }
  93.   //用本次玩家的分数和rs中的数据作比较,分数高则储存,第一个参数为玩家姓名第二个参数为分数
  94.        public void matches(String name, int score) {
  95.                int bianhao = 0;
  96.                duchu();
  97.                try {
  98.                    for (int i = 1; i < rs.getNumRecords()+1; i++) {
  99.                            byte[] data = rs.getRecord(i);
  100.                            DataInputStream doSteam = new DataInputStream(
  101.                                            new ByteArrayInputStream(data));
  102.                            System.out.println(doSteam.readUTF());
  103.                            if (Score[rs.getNumRecords()] == doSteam.readInt()) {
  104.                                    bianhao = i;
  105.                                    break;
  106.                            }
  107.                            doSteam.close();
  108.                        }
  109.                if (Score[rs.getNumRecords()] < score)
  110.                {
  111.                        //System.out.println(bianhao);
  112.                        save(name, score, bianhao);
  113.                }
  114.              } catch (Exception e) {
  115.                e.printStackTrace();
  116.                      }
  117.                         try {
  118.                           rs.closeRecordStore();
  119.                         }
  120.                         catch (RecordStoreException ex) {
  121.                         }
  122.        }
  123.   //读出记录并排序
  124. public void duchu() {
  125.         theName = new String[6];
  126.         Score = new int[6];
  127.         try {
  128.                 for (int i = 1; i < 6; i++) {
  129.                         byte[] data = rs.getRecord(i);
  130.                         DataInputStream doSteam = new DataInputStream(
  131.                                         new ByteArrayInputStream(data));
  132.                         theName[i] = doSteam.readUTF();
  133.                         Score[i] = doSteam.readInt();
  134.                 }
  135.                 paixu(Score, theName);
  136.         } catch (Exception e) {
  137.         }
  138. }
  139. //把5条记录排序
  140. public void paixu(int[]Score, String name[]) {
  141.         for (int j = 1; j < 6; j++) {
  142.                 for (int i = 1; i < 5; i++) {
  143.                        int temp;
  144.                        String tempStr;
  145.                         if (Score[i] < Score[i + 1]) {
  146.                                 temp = Score[i];
  147.                                 Score[i] = Score[i + 1];
  148.                                 Score[i + 1] = temp;
  149.                                 tempStr = name[i];
  150.                                 name[i] = name[i + 1];
  151.                                 name[i + 1] = tempStr;
  152.                         }
  153.                 }
  154.         }
  155. }
  156. //存储数据
  157. public void save(String playerName, int score, int bianhao) {//在rs中保存本次数据
  158.         ByteArrayOutputStream bo = new ByteArrayOutputStream();
  159.         DataOutputStream doSteam = new DataOutputStream(bo);
  160.         try {
  161.                 doSteam.writeUTF(playerName);
  162.                 doSteam.writeInt(score);
  163.                 byte data[] = bo.toByteArray();
  164.                 rs.setRecord(bianhao, data, 0, data.length);
  165.                 doSteam.close();
  166.         }
  167.         catch (Exception e) {
  168.                 e.printStackTrace();
  169.         }
  170. }
  171.   public void commandAction(Command command, Displayable displayable) {
  172.         if(command==ok){
  173.         Control.showMenu();
  174.   }
  175.   }
  176. }