亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? maincanvas.java

?? A very smaller script interpretor that java based system. Can work on j2se / j2me / win C++ platform
?? JAVA
字號:
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.Graphics;

//import com.nokia.mid.ui.FullCanvas;



final class MainCanvas

    extends Canvas
    implements Runnable {
  //______________公用的控制變量及常量__________________________
  static private final int MILLIS_PER_TICK = 120;
  public a aMidlet = null;
  public int screenW = 0, screenH = 0; //屏幕寬高
  public final int CHARW = 17, CHARH = 17; //單個字的寬高
  public Font font;
  public static final byte
      STATE_NONE = 0
      , STATE_ERROR = 1
      , STATE_LODING = 2
      , STATE_SPLASH = 3
      , STATE_MENU = 4
      , STATE_GAMERUN = 5
      , STATE_EXIT = 7
      , STATE_HELP = 8
      , STATE_OPTION = 9
      , STATE_ABOUT = 10
      ;

  long timeTaken; //run()的一個周期所用的時間

  private volatile Thread self;

  //各種不同的按鍵狀態(tài)
  static public final byte //在isPressed()中作為參數(shù)使用
      MASK_NUM0 = 0
      , MASK_NUM1 = 1
      , MASK_NUM2 = 2
      , MASK_NUM3 = 3
      , MASK_NUM4 = 4
      , MASK_NUM5 = 5
      , MASK_NUM6 = 6
      , MASK_NUM7 = 7
      , MASK_NUM8 = 8
      , MASK_NUM9 = 9
      , MASK_LEFT = 10
      , MASK_UP = 11
      , MASK_RIGHT = 12
      , MASK_DOWN = 13
      , MASK_FIRE = 14
      , MASK_STAR = 15
      , MASK_POUND = 16
      , MASK_SOFT1 = 17
      , MASK_SOFT2 = 18
      , MASK_SOFT3 = 19
      ;

  int keyFlag = 0; //用來存放鍵是否被按下,用位來表示,當鍵按下時把相應位置1,直到按鍵釋放才置0

  int keyFlagIm = 0;


  //_______________用戶自定義的變量及常量_________________________
  TicTacToe pg;
//--------------------------------------------------------------------------------------
//                                           方法
//--------------------------------------------------------------------------------------

  /**
   * 構造方法
   * @param aMidlet a 向當前畫布傳入一個MIDlet實例
   */
  public MainCanvas(a aMidlet) {
    this.aMidlet = aMidlet;
    screenW = this.getWidth();
    screenH = this.getHeight();

    font = Font.getDefaultFont(); //moto303

    //做相應的初始化操作
    pg = new TicTacToe(this);
  }

  /**
   * 啟動線程
   */
  synchronized public void begin() {
    self = new Thread(this);
    self.start();
  }

  /**
   * 結(jié)束線程
   */
  synchronized public void stop() {
    self = null;
  }

  /**
   * 線程體
   */
  public void run() {
    final Thread currentThread = Thread.currentThread(); //
    while (currentThread == self) {
      try {
        final long startTime = System.currentTimeMillis();

        if (isShown()) {
          repaint(); //所有游戲的繪制和邏輯均在里面實現(xiàn)
          serviceRepaints(); //寫屏
        }
        timeTaken = System.currentTimeMillis() - startTime;
        if (timeTaken < MILLIS_PER_TICK) {
          synchronized (this) {
            wait(MILLIS_PER_TICK - timeTaken); //使每個周期大致相等
          }
        }
        else {
          currentThread.yield(); //讓出控制權,防止餓死其它線程
        }
      }
      catch (Exception ex) {
        // won't be thrown
      }
    }
    //release
  }

  /**
   * 繪制方法
   * @param g Graphics 系統(tǒng)調(diào)度線程調(diào)度時傳入的圖像句柄
   */
  public void paint(Graphics g) { //由此觸發(fā)Canvas的重繪。
    try {
      g.setColor(0x000000);
      g.fillRect(0, 0, screenW, screenH); //清屏

      pg.draw(g);

      //debug
      int drawY = 10;
      g.setColor(0x0000ff);
      g.drawString("MSPF:" + timeTaken, 0, drawY += 18, g.TOP | g.LEFT);
      g.drawString("keyFlag:" + keyFlag, 0, drawY += 18, g.TOP | g.LEFT);
      g.drawString("keyFlagIm:" + keyFlagIm, 0, drawY += 18, g.TOP | g.LEFT);
      //end debug
    }
    catch (Exception e) {}
    finally {
      keyFlagIm = 0; //在每個paint()的最后,把臨時鍵標志強行復位,因為下個周期,他已不再有作用
    }
  }

  //;----------------------------------------------------------------------
  //;                按鍵處理機制 a simple key process arch
  //;----------------------------------------------------------------------
  /**
   * 實現(xiàn)的按鍵方法 ,override Canvas keyPressed
   * @param keyCode int 系統(tǒng)事件調(diào)度線程傳入的鍵碼
   */
  protected void keyPressed(int keyCode) {
    switch (keyCode) {
      case Canvas.KEY_NUM0:
        keyFlag |= (0x00000001 << MASK_NUM0); // 向左移N位后,即該位置1
        break;
      case Canvas.KEY_NUM1:
        keyFlag |= (0x00000001 << MASK_NUM1); // 向左移N位后,即該位置1
        break;
      case Canvas.KEY_NUM2:
        keyFlag |= (0x00000001 << MASK_NUM2); // 向左移N位后,即該位置1
        break;
      case Canvas.KEY_NUM3:
        keyFlag |= (0x00000001 << MASK_NUM3); // 向左移N位后,即該位置1
        break;
      case Canvas.KEY_NUM4:
        keyFlag |= (0x00000001 << MASK_NUM4); // 向左移N位后,即該位置1
        break;
      case Canvas.KEY_NUM5:
        keyFlag |= (0x00000001 << MASK_NUM5); // 向左移N位后,即該位置1
        break;
      case Canvas.KEY_NUM6:
        keyFlag |= (0x00000001 << MASK_NUM6); // 向左移N位后,即該位置1
        break;
      case Canvas.KEY_NUM7:
        keyFlag |= (0x00000001 << MASK_NUM7); // 向左移N位后,即該位置1
        break;
      case Canvas.KEY_NUM8:
        keyFlag |= (0x00000001 << MASK_NUM8); // 向左移N位后,即該位置1
        break;
      case Canvas.KEY_NUM9:
        keyFlag |= (0x00000001 << MASK_NUM9); // 向左移N位后,即該位置1
        break;
      case Canvas.KEY_STAR:
        keyFlag |= (0x00000001 << MASK_STAR); // 向左移N位后,即該位置1
        break;
      case Canvas.KEY_POUND:
        keyFlag |= (0x00000001 << MASK_POUND); // 向左移N位后,即該位置1
        break;

    }
    switch (getGameAction(keyCode)) {
      case Canvas.UP:
        keyFlag |= (0x00000001 << MASK_UP); // 向左移N位后,即該位置1
        break;
      case Canvas.DOWN:
        keyFlag |= (0x00000001 << MASK_DOWN); // 向左移N位后,即該位置1
        break;
      case Canvas.LEFT:
        keyFlag |= (0x00000001 << MASK_LEFT); // 向左移N位后,即該位置1
        break;
      case Canvas.RIGHT:
        keyFlag |= (0x00000001 << MASK_RIGHT); // 向左移N位后,即該位置1
        break;
      case Canvas.FIRE:
        keyFlag |= (0x00000001 << MASK_FIRE); // 向左移N位后,即該位置1
        break;
    }
    //給即時按鍵標志賦值,用這個變量可在isPressed()中檢測到是否有短時按鍵產(chǎn)生
    //set temp key flag value
    keyFlagIm = keyFlag;

  }

  /**
   * 釋放鍵的方法, override Canvas keyReleased method
   * @param keyCode int
   */
  protected void keyReleased(int keyCode) {

    switch (keyCode) {
      case Canvas.KEY_NUM0:
        keyFlag &= ~ (0x00000001 << MASK_NUM0); // 向左移N位后,即該位置1
        break;
      case Canvas.KEY_NUM1:
        keyFlag &= ~ (0x00000001 << MASK_NUM1); // 向左移N位后,即該位置1
        break;
      case Canvas.KEY_NUM2:
        keyFlag &= ~ (0x00000001 << MASK_NUM2); // 向左移N位后,即該位置1
        break;
      case Canvas.KEY_NUM3:
        keyFlag &= ~ (0x00000001 << MASK_NUM3); // 向左移N位后,即該位置1
        break;
      case Canvas.KEY_NUM4:
        keyFlag &= ~ (0x00000001 << MASK_NUM4); // 向左移N位后,即該位置1
        break;
      case Canvas.KEY_NUM5:
        keyFlag &= ~ (0x00000001 << MASK_NUM5); // 向左移N位后,即該位置1
        break;
      case Canvas.KEY_NUM6:
        keyFlag &= ~ (0x00000001 << MASK_NUM6); // 向左移N位后,即該位置1
        break;
      case Canvas.KEY_NUM7:
        keyFlag &= ~ (0x00000001 << MASK_NUM7); // 向左移N位后,即該位置1
        break;
      case Canvas.KEY_NUM8:
        keyFlag &= ~ (0x00000001 << MASK_NUM8); // 向左移N位后,即該位置1
        break;
      case Canvas.KEY_NUM9:
        keyFlag &= ~ (0x00000001 << MASK_NUM9); // 向左移N位后,即該位置1
        break;
      case Canvas.KEY_STAR:
        keyFlag &= ~ (0x00000001 << MASK_STAR); // 向左移N位后,即該位置1
        break;
      case Canvas.KEY_POUND:
        keyFlag &= ~ (0x00000001 << MASK_POUND); // 向左移N位后,即該位置1
        break;

    }
    switch (getGameAction(keyCode)) {
      case Canvas.UP:
        keyFlag &= ~ (0x00000001 << MASK_UP); // 向左移N位后,即該位置1
        break;
      case Canvas.DOWN:
        keyFlag &= ~ (0x00000001 << MASK_DOWN); // 向左移N位后,即該位置1
        break;
      case Canvas.LEFT:
        keyFlag &= ~ (0x00000001 << MASK_LEFT); // 向左移N位后,即該位置1
        break;
      case Canvas.RIGHT:
        keyFlag &= ~ (0x00000001 << MASK_RIGHT); // 向左移N位后,即該位置1
        break;
      case Canvas.FIRE:
        keyFlag &= ~ (0x00000001 << MASK_FIRE); // 向左移N位后,即該位置1
        break;
    }

  }

  /**
   * 用來標示是否某個鍵被按了,這里采用增加一個標志位,可以有效防止在tick()栓測的過程中,短暫按鍵不能被程序知道的問題 參考岳振的思想
   * to determine what key pressed in this game cycle
   *
   * @param keyLabel int
   * @return boolean
   */
  public boolean isPressed(byte keyLabel) {
    if ( ( (keyFlagIm >>> keyLabel) & 0x00000001) == 1) { //曾按過也返回真
      keyFlagIm &= (~ (0x00000001 << keyLabel)); //把相應的位置為0;
//      keyFlagIm = 0; //取一次后把所有的位置0,這種處理方式不支持多鍵同按的系統(tǒng),否則應使用上面一句
      return true;
    }
    if ( ( (keyFlag >>> keyLabel) & 0x00000001) == 1) { //如果此標志位為1則返回真
      return true;
    }
    return false;
  }

  /**
   * 復位鍵狀態(tài),在使用這個鍵后,有時候,我們并不想這個鍵值在下一個循環(huán)中仍有效,因此我們將其復位,防止后
   * 面的操作也被這個鍵值所作用。
   *
   * reset all key flags
   */
  public final void resetKey() {
    keyFlag = keyFlagIm = 0;
  }

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
狠狠色丁香婷婷综合| 成人sese在线| 91视频观看视频| 欧美一级精品在线| 中文字幕一区二区三区视频| 蓝色福利精品导航| 色哟哟日韩精品| 国产清纯美女被跳蛋高潮一区二区久久w| 亚洲精品免费在线观看| 国产在线播精品第三| 欧美男女性生活在线直播观看| 欧美国产一区视频在线观看| 老鸭窝一区二区久久精品| 91高清在线观看| 国产精品久久三区| 极品少妇xxxx偷拍精品少妇| 欧美久久高跟鞋激| 亚洲男帅同性gay1069| 国产不卡一区视频| 精品国产乱码久久久久久免费 | 91在线观看成人| 久久伊人蜜桃av一区二区| 肉色丝袜一区二区| 精品视频一区二区三区免费| 亚洲欧美另类小说视频| 欧美日韩一区二区欧美激情 | 日韩限制级电影在线观看| 一区二区三区鲁丝不卡| 97国产精品videossex| 欧美国产日产图区| 国产不卡一区视频| 中文一区二区完整视频在线观看| 国产精品一级黄| 欧美激情一区不卡| 成人aa视频在线观看| 中文字幕五月欧美| 色哟哟精品一区| 一区二区三区中文免费| 欧日韩精品视频| 一区二区三区四区不卡在线| 欧美性视频一区二区三区| 一区二区三区在线不卡| 欧美日韩一级黄| 蜜臀av亚洲一区中文字幕| 日韩欧美一级二级三级久久久| 蜜桃一区二区三区在线观看| 日韩免费视频一区| 经典三级视频一区| 亚洲国产精品v| 日本韩国视频一区二区| 亚洲国产日韩av| 日韩欧美另类在线| 国产成人在线色| 亚洲乱码中文字幕| 欧美电影一区二区| 国产精品一线二线三线| 国产精品卡一卡二卡三| 欧美亚洲丝袜传媒另类| 成人av高清在线| 亚洲欧美日韩精品久久久久| 欧美日韩国产欧美日美国产精品| 热久久免费视频| 国产日韩欧美麻豆| 在线观看91精品国产入口| 日本在线播放一区二区三区| 久久久精品免费免费| 色94色欧美sute亚洲线路一久 | 中文字幕 久热精品 视频在线| 不卡免费追剧大全电视剧网站| 亚洲综合丝袜美腿| 日韩精品影音先锋| 色呦呦国产精品| 韩国女主播一区| 一区二区三区在线不卡| 精品国产91亚洲一区二区三区婷婷 | 中文字幕一区av| 欧美一区二区三区性视频| 成人性色生活片| 日日夜夜一区二区| 亚洲同性gay激情无套| 欧美一级生活片| 99久久久无码国产精品| 蜜桃久久久久久| 亚洲激情图片qvod| 国产日产欧美一区| 欧美日韩黄色一区二区| 成人免费毛片片v| 免费观看91视频大全| 亚洲欧美日韩久久| 久久久久国产精品麻豆ai换脸 | 欧美在线观看视频在线| 国产福利一区在线| 99久久久无码国产精品| 免费美女久久99| 一区二区三区美女视频| 国产日韩v精品一区二区| 欧美日本国产视频| 色综合久久久久综合体桃花网| 国产乱子伦一区二区三区国色天香| 亚洲黄色在线视频| 国产精品国产三级国产有无不卡| 欧美大胆一级视频| 欧美久久一二三四区| 色噜噜狠狠成人网p站| 成av人片一区二区| 国产夫妻精品视频| 久久综合综合久久综合| 亚洲成年人影院| 亚洲女同ⅹxx女同tv| 亚洲欧美在线高清| 中文字幕一区三区| 亚洲人成影院在线观看| 国产精品成人免费在线| 国产精品久久久久久久久图文区 | 欧美一级片在线观看| 欧美日韩二区三区| 欧美日韩国产精品自在自线| 欧美视频一区在线观看| 欧美自拍丝袜亚洲| 欧美日韩精品一区二区三区| 欧美日韩国产影片| 欧美巨大另类极品videosbest | 国产麻豆精品95视频| 国产一区二区导航在线播放| 国产一区在线观看麻豆| 国产精品99久久久| 成人免费毛片aaaaa**| 成人高清免费观看| 色一情一乱一乱一91av| 欧美三级乱人伦电影| 91精品国产免费| 久久你懂得1024| 国产精品灌醉下药二区| 一区二区三区欧美视频| 人人超碰91尤物精品国产| 国产制服丝袜一区| yourporn久久国产精品| 欧美偷拍一区二区| 精品国免费一区二区三区| 国产精品久久久久久妇女6080| 日韩专区在线视频| 国产人久久人人人人爽| 日韩天堂在线观看| 中文字幕亚洲在| 久久久久99精品一区| 欧美国产精品一区| 久久精品亚洲一区二区三区浴池| 久久久夜色精品亚洲| 亚洲一区国产视频| 中文字幕一区视频| 亚洲激情中文1区| 久久国内精品视频| 久久久五月婷婷| 国产精品午夜免费| 亚洲成在线观看| 极品美女销魂一区二区三区免费| 成人丝袜18视频在线观看| 欧美三级视频在线| 亚洲国产成人在线| 日韩精品一卡二卡三卡四卡无卡| 国产福利一区二区| 欧美日本韩国一区二区三区视频| 精品国产免费人成电影在线观看四季| 国产精品卡一卡二| 免费在线一区观看| 色网站国产精品| 欧美精品一区二| 亚洲国产成人tv| 99视频精品在线| 欧美成人一区二区三区片免费| 国产精品免费视频观看| 午夜精品福利一区二区蜜股av| 国产成人亚洲综合色影视| 欧美三级三级三级爽爽爽| 中文字幕国产精品一区二区| 日韩精品一二三| 在线国产亚洲欧美| 国产精品天天摸av网| 日本怡春院一区二区| 欧美性欧美巨大黑白大战| 亚洲国产精品ⅴa在线观看| 伦理电影国产精品| 欧美日韩亚洲国产综合| 亚洲视频香蕉人妖| 丰满岳乱妇一区二区三区| 日韩免费看的电影| 婷婷综合在线观看| 欧美体内she精视频| 亚洲精品中文字幕乱码三区| 成人18精品视频| 国产精品欧美一区喷水| 国产东北露脸精品视频| 久久婷婷色综合| 精品一区二区精品| 日韩视频一区二区| 另类成人小视频在线| 日韩精品在线网站| 久久 天天综合| 精品国产欧美一区二区| 国产真实乱偷精品视频免|