Reg.java
上传用户:gyyuli
上传日期:2013-07-09
资源大小:3050k
文件大小:4k
源码类别:

J2ME

开发平台:

Java

  1. import javax.microedition.lcdui.*;
  2. import javax.microedition.rms.RecordStore;
  3. import javax.microedition.rms.RecordStoreException;
  4. public class Reg
  5.     implements CommandListener
  6. {   
  7.     private FiveMIDlet midFive;
  8.     private boolean registered;
  9.     private static long nTriedMax = 0x989680L;
  10.     private int nTriedLeft;
  11.     private int serialNo;
  12.     private Form frmReg;
  13.     private StringItem siInfo;
  14.     private TextField tfRegNo;
  15.     private Command cmdOk;
  16.     private Command cmdCancel;
  17.     public Reg(FiveMIDlet m)
  18.     {
  19.         midFive = m;
  20.         registered = false;
  21.         nTriedLeft = 0x989680;
  22.         serialNo = (int)(System.currentTimeMillis() % 0xf4240L);
  23.         load();
  24.         save();
  25.     }
  26.     public boolean canPlay()
  27.     {
  28.         return registered || nTriedLeft > 0;
  29.     }
  30.     public boolean registered()
  31.     {
  32.         return registered;
  33.     }
  34.     public int nTriedLeft()
  35.     {
  36.         return nTriedLeft;
  37.     }
  38.     public void play()
  39.     {
  40.         if(!registered && nTriedLeft > 0)
  41.             save();
  42.     }
  43.     public void register(Display display)
  44.     {
  45.         frmReg = new Form("注册五子棋");
  46.         frmReg.append("您的序列号:[" + serialNo + "]n" + "请把该号码告知作者并获得注册号");
  47.         tfRegNo = new TextField("请输入注册号:", "", 8, 2);
  48.         frmReg.append(tfRegNo);
  49.         siInfo = new StringItem(null, null);
  50.         frmReg.append(siInfo);
  51.         cmdOk = new Command("确定", 4, 1);
  52.         cmdCancel = new Command("取消", 3, 2);
  53.         frmReg.addCommand(cmdOk);
  54.         frmReg.addCommand(cmdCancel);
  55.         frmReg.setCommandListener(this);
  56.         display.setCurrent(frmReg);
  57.     }
  58.     private void freeRes()
  59.     {
  60.         frmReg = null;
  61.         cmdOk = null;
  62.         cmdCancel = null;
  63.         siInfo = null;
  64.         tfRegNo = null;
  65.     }
  66.     public void commandAction(Command c, Displayable s)
  67.     {
  68.         if(c == cmdOk)
  69.         {
  70.             String sRegNo = tfRegNo.getString();
  71.             int regNo = 0;
  72.             try
  73.             {
  74.                 regNo = Integer.parseInt(sRegNo);
  75.             }
  76.             catch(Exception _ex) { }
  77.             if(isRegNoOk(regNo))
  78.             {
  79.                 registered = true;
  80.                 save();
  81.                 midFive.backHome();
  82.                 freeRes();
  83.             } else
  84.             {
  85.                 siInfo.setText("注册号不正确!请重新输入!");
  86.             }
  87.         } else
  88.         if(c == cmdCancel)
  89.         {
  90.             midFive.backHome();
  91.             freeRes();
  92.         }
  93.     }
  94.     private boolean isRegNoOk(int regNo)
  95.     {
  96.         return regNo == serialNo;
  97.     }
  98.     private void save()
  99.     {
  100.         try
  101.         {
  102.             byte bs[] = new byte[5];
  103.             bs[0] = (byte)(registered ? 1 : 0);
  104.             bs[1] = (byte)nTriedLeft;
  105.             bs[2] = (byte)(serialNo >> 16 & 0xff);
  106.             bs[3] = (byte)(serialNo >> 8 & 0xff);
  107.             bs[4] = (byte)(serialNo & 0xff);
  108.             RecordStore rs = RecordStore.openRecordStore("Reg", true);
  109.             if(rs.getNumRecords() >= 1)
  110.                 rs.setRecord(1, bs, 0, 5);
  111.             else
  112.                 rs.addRecord(bs, 0, 5);
  113.             rs.closeRecordStore();
  114.         }
  115.         catch(RecordStoreException _ex) { }
  116.     }
  117.     private void load()
  118.     {
  119.         try
  120.         {
  121.             RecordStore rs = RecordStore.openRecordStore("Reg", false);
  122.             if(rs.getNumRecords() >= 1)
  123.             {
  124.                 byte bs[] = rs.getRecord(1);
  125.                 if(bs.length >= 5)
  126.                 {
  127.                     registered = bs[0] == 1;
  128.                     nTriedLeft = bs[1];
  129.                     if(nTriedLeft > 10)
  130.                         nTriedLeft = 10;
  131.                     int b1 = bs[2];
  132.                     if(b1 < 0)
  133.                         b1 += 256;
  134.                     int b2 = bs[3];
  135.                     if(b2 < 0)
  136.                         b2 += 256;
  137.                     int b3 = bs[4];
  138.                     if(b3 < 0)
  139.                         b3 += 256;
  140.                     serialNo = (b1 << 16) + (b2 << 8) + b3;
  141.                 }
  142.             }
  143.             rs.closeRecordStore();
  144.         }
  145.         catch(RecordStoreException _ex) { }
  146.     }
  147. }