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

J2ME

开发平台:

Java

  1. import javax.microedition.midlet.*;
  2. import javax.microedition.lcdui.*;
  3. import javax.microedition.rms.*;
  4. import java.util.*;
  5. import java.io.*;
  6. public class  escapeeMIDlet    extends MIDlet   implements Runnable
  7. {
  8.     private static final String RS_NAME = "BESTTIME";
  9.     private MenuList menuList;
  10.     private escapeeCanvas myCanvas;
  11.     private boolean initDone = false;
  12.     private static final Random random = new Random();
  13.     private boolean hasBestTime = false;
  14.     private long bestTime;// 最好时间
  15.     public escapeeMIDlet() 
  16.     {
  17.     }
  18.     
  19.     public void startApp()
  20.     {
  21.         Displayable current = Display.getDisplay(this).getCurrent();
  22.         if (current == null)
  23.         {
  24.             // first time we've been called
  25.             Display.getDisplay(this).setCurrent(new SplashScreen(this));
  26.         }
  27.         else
  28.         {
  29.             if (current == myCanvas)
  30.             {
  31.                 myCanvas.start();   // start its animation thread
  32.             }
  33.             Display.getDisplay(this).setCurrent(current);
  34.         }
  35.     }
  36.     public void pauseApp()
  37.     {
  38.         Displayable current = Display.getDisplay(this).getCurrent();
  39.         if (current == myCanvas)
  40.         {
  41.             myCanvas.stop();   // kill its animation thread
  42.         }
  43.     }
  44.     public void destroyApp(boolean unconditional)
  45.     {
  46.         if (myCanvas != null)
  47.         {
  48.             myCanvas.stop();   // kill its animation thread
  49.         }
  50.     }
  51.     private void quit()
  52.     {
  53.         destroyApp(false);
  54.         notifyDestroyed();
  55.     }
  56.     public void run()
  57.     {
  58.         init();
  59.     }
  60.     private synchronized void init()
  61.     {
  62.         if (!initDone)
  63.         {
  64.             readRecordStore();
  65.             SoundEffects.getInstance();
  66.             menuList = new MenuList(this);
  67.             myCanvas = new escapeeCanvas(this);
  68.             initDone = true;
  69.         }
  70.     }
  71.     void splashScreenPainted()
  72.     {
  73.         new Thread(this).start();   // start background initialization
  74.     }
  75.     void splashScreenDone()
  76.     {
  77.         init();   // if not already done
  78.         Display.getDisplay(this).setCurrent(menuList);
  79.     }
  80.     void menuListContinue()
  81.     {
  82.         Display.getDisplay(this).setCurrent(myCanvas);
  83.         myCanvas.start();
  84.     }
  85.     void menuListNewGame()
  86.     {
  87.         myCanvas.init();
  88.         Display.getDisplay(this).setCurrent(myCanvas);
  89.         myCanvas.start();
  90.     }
  91.     void menuListInstructions()
  92.     {
  93.         // create and discard a new Instructions screen each time, to
  94.         // avoid keeping heap memory for it when it's not in use
  95.         Display.getDisplay(this).setCurrent(new InstructionsScreen(this));
  96.     }
  97.     void menuListHighScore()
  98.     {
  99.         // create and discard a new High Score screen each time, to
  100.         // avoid keeping heap memory for it when it's not in use
  101.         Display.getDisplay(this).setCurrent(new HighScoreScreen(this));
  102.     }
  103.     void menuListQuit()
  104.     {
  105.         quit();
  106.     }
  107.     void GameCanvasMenu()
  108.     {
  109.         myCanvas.stop();
  110.         menuList.setGameActive(true);
  111.         Display.getDisplay(this).setCurrent(menuList);
  112.     }
  113.     void GameCanvasGameOver(long time,int BULLETS_NUM)
  114.     {
  115.         myCanvas.stop();
  116.         menuList.setGameActive(false);
  117.         Display.getDisplay(this).setCurrent(new GameOverScreen(this, time, BULLETS_NUM));
  118.     }
  119.     void gameOverDone()
  120.     {
  121.         Display.getDisplay(this).setCurrent(menuList);
  122.     }
  123.     void instructionsBack()
  124.     {
  125.         Display.getDisplay(this).setCurrent(menuList);
  126.     }
  127.     void highScoreBack()
  128.     {
  129.         Display.getDisplay(this).setCurrent(menuList);
  130.     }
  131.     // method needed by lots of classes, shared by putting it here
  132.     static Image createImage(String filename)
  133.     {
  134.         Image image = null;
  135.         try
  136.         {
  137.             image = Image.createImage(filename);
  138.         }
  139.         catch (java.io.IOException ex)
  140.         {
  141.             // just let return value be null
  142.         }
  143.         return image;
  144.     }
  145.     // only the MIDlet has access to the display, so put this method here
  146.     void flashBacklight(int millis)
  147.     {
  148.         Display.getDisplay(this).flashBacklight(millis);
  149.     }
  150.     // only the MIDlet has access to the display, so put this method here
  151.     void vibrate(int millis)
  152.     {
  153.         Display.getDisplay(this).vibrate(millis);
  154.     }
  155.     long getBestTime()
  156.     {
  157.         return hasBestTime ? bestTime : -1;
  158.     }
  159.     //****************************************
  160.     boolean checkBestTime(long time)
  161.     {
  162.     
  163.         if (!hasBestTime || (time > bestTime))
  164.         {
  165.             hasBestTime = true;
  166.             bestTime = time;
  167.             writeRecordStore();
  168.             return true;
  169.         }
  170.         else
  171.         {
  172.             return false;
  173.         }
  174.     }
  175.     private void readRecordStore()
  176.     {
  177.         hasBestTime = false;
  178.         RecordStore rs = null;
  179.         ByteArrayInputStream bais = null;
  180.         DataInputStream dis = null;
  181.         try
  182.         {
  183.             rs = RecordStore.openRecordStore(RS_NAME, false);
  184.             byte[] data = rs.getRecord(1);
  185.             bais = new ByteArrayInputStream(data);
  186.             dis = new DataInputStream(bais);
  187.             bestTime = dis.readLong();
  188.             hasBestTime = true;
  189.              
  190.         }
  191.         catch (IOException ex)
  192.         {
  193.             // hasBestTime will still be false
  194.         }
  195.         catch (RecordStoreException ex)
  196.         {
  197.             // hasBestTime will still be false
  198.         }
  199.         finally
  200.         {
  201.             if (dis != null)
  202.             {
  203.                 try
  204.                 {
  205.                     dis.close();
  206.                 }
  207.                 catch (IOException ex)
  208.                 {
  209.                     // no error handling necessary here
  210.                 }
  211.             }
  212.             if (bais != null)
  213.             {
  214.                 try
  215.                 {
  216.                     bais.close();
  217.                 }
  218.                 catch (IOException ex)
  219.                 {
  220.                     // no error handling necessary here
  221.                 }
  222.             }
  223.             if (rs != null)
  224.             {
  225.                 try
  226.                 {
  227.                     rs.closeRecordStore();
  228.                 }
  229.                 catch (RecordStoreException ex)
  230.                 {
  231.                     // no error handling necessary here
  232.                 }
  233.             }
  234.         }
  235.     }
  236.     // this will only be called when we have a best time
  237.     private void writeRecordStore()
  238.     {
  239.         RecordStore rs = null;
  240.         ByteArrayOutputStream baos = null;
  241.         DataOutputStream dos = null;
  242.         try
  243.         {
  244.             rs = RecordStore.openRecordStore(RS_NAME, true);
  245.             baos = new ByteArrayOutputStream();
  246.             dos = new DataOutputStream(baos);
  247.             dos.writeLong(bestTime);
  248.             byte[] data = baos.toByteArray();
  249.             if (rs.getNumRecords() == 0)
  250.             {
  251.                 // new record store
  252.                 rs.addRecord(data, 0, data.length);
  253.             }
  254.             else
  255.             {
  256.                 // existing record store: will have one record, id 1
  257.                 rs.setRecord(1, data, 0, data.length);
  258.             }
  259.         }
  260.         catch (IOException ex)
  261.         {
  262.             // just leave the best time unrecorded
  263.         }
  264.         catch (RecordStoreException ex)
  265.         {
  266.             // just leave the best time unrecorded
  267.         }
  268.         finally
  269.         {
  270.             if (dos != null)
  271.             {
  272.                 try
  273.                 {
  274.                     dos.close();
  275.                 }
  276.                 catch (IOException ex)
  277.                 {
  278.                     // no error handling necessary here
  279.                 }
  280.             }
  281.             if (baos != null)
  282.             {
  283.                 try
  284.                 {
  285.                     baos.close();
  286.                 }
  287.                 catch (IOException ex)
  288.                 {
  289.                     // no error handling necessary here
  290.                 }
  291.             }
  292.             if (rs != null)
  293.             {
  294.                 try
  295.                 {
  296.                     rs.closeRecordStore();
  297.                 }
  298.                 catch (RecordStoreException ex)
  299.                 {
  300.                     // no error handling necessary here
  301.                 }
  302.             }
  303.         }
  304.     }
  305. }