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

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

?? board.java

?? JAVA編程百例書中各章節的所有例子的源代碼,包括套接字編程
?? JAVA
字號:
package ch09.section09;

import example.About;
import java.util.Random;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.MIDlet;

public class Board
    extends Canvas
    implements CommandListener {
  MIDlet midlet;
  Display dpy;
  Options options;
//初始化一個長度為15的字符串
  String letters = "RATEYOURMINDPAL";
  Font font;
  Piece blankp;
  Piece[] all;
  Piece[][] grid;
  Random rand;
//定義坐標
  int gridx;
  int gridy;

//定義長寬
  int gridw;
  int gridh;

//定義單元格區域
  int cellw;
  int cellh;
  int cellyoff;
  int cellxoff;

//定義功能按鈕
  static final int CMD_ABOUT = 0;
  static final int CMD_EXIT = 1;
  static final int CMD_OPTIONS = 2;
  static final int CMD_RESET = 3;
  static final int CMD_START = 4;
  static final int CMD_UNLOCK = 5;
  static final int CMD_ZLAST = 6;
  Command cmd[];
//聲明變量
  static final int INITIALIZED = 0;
  static final int PLAYING = 1;
  static final int WON = 2;
  int gameState;
  boolean cheated;
  void D(String s) {
    System.out.println(s);
  }

  class Piece {
    String label;
    boolean inv;
    int serial;

//單元格初始化坐標
    int ix, iy;

//單元格當前坐標
    int x, y;
    Piece(String str, int ser, int nx, int ny, boolean v) {
      label = str;
      serial = ser;
      x = ix = nx;
      y = iy = ny;
      inv = v;
    }

    void setLocation(int nx, int ny) {
      x = nx;
      y = ny;
    }

    boolean isHome() {
      return (x == ix) && (y == iy);
    }

    void goHome() {
      setGrid(this, ix, iy);
    }

    //設置背景色為白色
    void paint(Graphics g) {
      int px = x * cellw;
      int py = y * cellh;
      if (label != null) {
        if (inv) {
          //邊框為黑色
          g.setColor(0);
          g.setFont(font);
          g.drawRect(px, py, cellw - 2, cellh - 2);
          g.drawString(label, px + cellxoff, py + cellyoff,
                       Graphics.TOP | Graphics.LEFT);
        }
        else {
          //空白框
          g.setColor(0);
          g.fillRect(px, py, cellw - 1, cellh - 1);
          g.setColor(0xFFFFFF);
          g.setFont(font);
          g.drawString(label, px + cellxoff, py + cellyoff,
                       Graphics.TOP | Graphics.LEFT);
        }
      }
    }
  }

  class BoardCommand
      extends Command {
    int tag;
    BoardCommand(String label, int type, int pri, int tag_) {
      super(label, type, pri);
      tag = tag_;
    }
  }

  void setGrid(Piece p, int x, int y) {
    grid[x][y] = p;
    p.setLocation(x, y);
  }

//移動單元格
  void moveBlank(int swapx, int swapy) {
    setGrid(grid[swapx][swapy], blankp.x, blankp.y);
    setGrid(blankp, swapx, swapy);
  }

  void swap(int x1, int y1, int x2, int y2) {
    Piece t = grid[x1][y1];
    setGrid(grid[x2][y2], x1, y1);
    setGrid(t, x2, y2);
  }

  boolean isSolved() {
    for (int i = 0; i < gridh; i++) {
      for (int j = 0; j < gridw; j++) {
        if (!grid[j][i].isHome()) {
          return false;
        }
      }
    }
    return true;
  }

//獲取一個取值范圍在[0..n]之間的一個整數
  int randRange(int n) {
    int r = rand.nextInt() % n;
    if (r < 0) {
      r += n;
    }
    return r;
  }

  void randomize_by_moving() {
    int dx, dy, v;
    for (int i = 0; i < 100; i++) {
      dx = dy = 0;
      v = (rand.nextInt() & 2) - 1; // 1 or -1
      if ( (rand.nextInt() & 1) == 0) {
        dx = v;
      }
      else {
        dy = v;
      }
      if (blankp.x + dx < 0) {
        dx = 1;
      }
      if (blankp.x + dx == gridw) {
        dx = -1;
      }
      if (blankp.y + dy < 0) {
        dy = 1;
      }
      if (blankp.y + dy == gridh) {
        dy = -1;
      }
      moveBlank(blankp.x + dx, blankp.y + dy);
    }
    //移動至右下角
    while (blankp.x != gridw - 1) {
      moveBlank(blankp.x + 1, blankp.y);
    }
    while (blankp.y != gridh - 1) {
      moveBlank(blankp.x, blankp.y + 1);
    }
  }

  void shuffle() {
    int limit = gridw * gridh - 1;
    Piece ta[] = new Piece[limit];
    Piece temp;
    System.arraycopy(all, 0, ta, 0, limit);
    for (int i = 0; i < limit; i++) {
      int j = randRange(limit);
      temp = ta[j];
      ta[j] = ta[i];
      ta[i] = temp;
    }
    for (int i = 0; i < limit; i++) {
      setGrid(ta[i], i / gridw, i % gridw);
    }
    setGrid(blankp, gridw - 1, gridh - 1);
  }

  void randomize(boolean hard) {
    shuffle();
    int ra, rb;
    int x, y;
    if (hard) {
      ra = 7;
      rb = 0;
    }
    else {
      ra = 0;
      rb = 7;
    }
    x = rand.nextInt() & 1;
    y = rand.nextInt() & 1;
    if (x == 1 && y == 1) {
      x = 2;
      y = 0;
    }
    swap(x, y, all[ra].x, all[ra].y);
    swap( (rand.nextInt() & 1) + 1, 3, all[rb].x, all[rb].y);
    if ( (displacement() & 1) == 1) {
      swap(1, 3, 2, 3);
    }
  }

//計算匹配數,空白格必須在右下角
  int displacement() {
    boolean temp[] = new boolean[gridw * gridh - 1];
    int n = 0;
    for (int i = 0; i < gridh; i++) {
      for (int j = 0; j < gridw; j++) {
        Piece p = grid[j][i];
        if (p == blankp) {
          continue;
        }
        temp[p.serial] = true;
        for (int k = 0; k < p.serial; k++) {
          if (!temp[k]) {
            n++;
          }
        }
      }
    }
    return n;
  }

  void resetGrid() {
    Piece temp[] = new Piece[gridw * gridh];
    int k = 0;
    for (int i = 0; i < gridw; i++) {
      for (int j = 0; j < gridh; j++) {
        temp[k++] = grid[i][j];
      }
    }
    for (k = 0; k < temp.length; k++) {
      temp[k].goHome();
    }
  }

  void rearrangeFunnily(boolean hard) {
    resetGrid();
    if (hard) {
      //難級別
      swap(0, 0, 3, 1);
      swap(2, 2, 3, 2);
      swap(3, 2, 0, 3);
      swap(0, 3, 2, 3);
    }
    else {
      //易級別
      swap(2, 2, 3, 2);
      swap(3, 2, 0, 3);
    }
  }

  void setState(int ns) {
    gameState = ns;
    switch (gameState) {
      case INITIALIZED:
        addCommand(cmd[CMD_ABOUT]);
        removeCommand(cmd[CMD_RESET]);
        addCommand(cmd[CMD_START]);
        addCommand(cmd[CMD_UNLOCK]);
        addCommand(cmd[CMD_EXIT]);
        addCommand(cmd[CMD_OPTIONS]);
        break;
      case PLAYING:
        addCommand(cmd[CMD_ABOUT]);
        addCommand(cmd[CMD_RESET]);
        removeCommand(cmd[CMD_START]);
        removeCommand(cmd[CMD_UNLOCK]);
        addCommand(cmd[CMD_EXIT]);
        addCommand(cmd[CMD_OPTIONS]);
        break;
      case WON:
        addCommand(cmd[CMD_ABOUT]);
        removeCommand(cmd[CMD_RESET]);
        addCommand(cmd[CMD_START]);
        addCommand(cmd[CMD_UNLOCK]);
        addCommand(cmd[CMD_EXIT]);
        addCommand(cmd[CMD_OPTIONS]);
        break;
    }
  }

  public Board(MIDlet midlet_) {
    int i;
    midlet = midlet_;
    dpy = Display.getDisplay(midlet);
    gridw = 4;
    gridh = 4;
    font = Font.getFont(Font.FACE_SYSTEM, Font.STYLE_PLAIN, Font.SIZE_MEDIUM);
    cellw = font.charWidth('M') + 7;
    cellh = font.getHeight() + 1;
    cellxoff = 3;
    cellyoff = 0;
    gridx = (getWidth() - (gridw * cellw) + 1) / 2;
    gridy = 10;
    cheated = false;
    rand = new Random();
    //創建單元格數組
    grid = new Piece[gridw][];
    for (i = 0; i < gridw; i++) {
      grid[i] = new Piece[gridh];
    }
    all = new Piece[gridw * gridh];
    for (i = 0; i < (gridw * gridh) - 1; i++) {
      int x = i % gridw;
      int y = i / gridw;
      String s = letters.substring(i, i + 1);
      grid[x][y] =
          all[i] =
          new Piece(s, i, x, y, i < (gridw * gridh / 2));
    }
    //生成空白格
    blankp = new Piece(null, gridw * gridh - 1, gridw - 1, gridh - 1, false);
    grid[gridw - 1][gridh - 1] = blankp;
    all[gridw * gridh - 1] = blankp;
    //設置命令按鈕
    cmd = new Command[CMD_ZLAST];
    cmd[CMD_ABOUT] = new BoardCommand("About", Command.HELP, 5, CMD_ABOUT);
    cmd[CMD_EXIT] = new BoardCommand("Exit", Command.EXIT, 6, CMD_EXIT);
    cmd[CMD_OPTIONS] = ew BoardCommand("Options", Command.SCREEN, 3,
                                       CMD_OPTIONS);
    cmd[CMD_RESET] = new BoardCommand("Reset", Command.SCREEN, 1, CMD_RESET);
    cmd[CMD_START] = new BoardCommand("Start", Command.SCREEN, 1, CMD_START);
    cmd[CMD_UNLOCK] = new BoardCommand("Unlock", Command.SCREEN, 4, CMD_UNLOCK);
    //設置監聽器
    setCommandListener(this);
    //設置選項窗體
    options = new Options(dpy, this);
    //設置初始狀態
    setState(INITIALIZED);
  }

  public void commandAction(Command c, Displayable d) {
    switch ( ( (BoardCommand) c).tag) {
      case CMD_ABOUT:
        About.showAbout(Display.getDisplay(midlet));
        break;
      case CMD_EXIT:
        midlet.notifyDestroyed();
        break;
      case CMD_OPTIONS:
        dpy.setCurrent(options);
        break;
      case CMD_RESET:
        cheated = false;
        resetGrid();
        setState(INITIALIZED);
        repaint();
        break;
      case CMD_START:
        cheated = false;
        if (options.funny) {
          rearrangeFunnily(options.hard);
        }
        else {
          randomize(options.hard);
        }
        setState(PLAYING);
        repaint();
        break;
      case CMD_UNLOCK:
        cheated = true;
        setState(PLAYING);
        repaint();
        break;
    }
  }

  public void showNotify() {
  }

  public void hideNotify() {
  }

  public void paint(Graphics g) {
    g.setColor(0xFFFFFF);
    g.fillRect(0, 0, getWidth(), getHeight());
    g.translate(gridx, gridy);
    g.setColor(0);
    g.drawRect( -2, -2, gridw * cellw + 2, gridh * cellh + 2);
    for (int j = 0; j < gridw; j++) {
      for (int k = 0; k < gridh; k++) {
        grid[j][k].paint(g);
      }
    }
    if (gameState == WON) {
      g.translate( -g.getTranslateX(), -g.getTranslateY());
      g.setColor(0);
      g.setFont(Font.getDefaultFont());
      g.drawString(
          (cheated ? "CHEATER!" : "YOU WIN!"),
          getWidth() / 2,
          getHeight() - 1,
          Graphics.BOTTOM | Graphics.HCENTER);
    }
  }

  public void keyPressed(int code) {
    if (gameState != PLAYING) {
      return;
    }
    int game = getGameAction(code);
    int swapx = blankp.x;
    int swapy = blankp.y;
    int direction = (options.reversed ? -1 : 1);
    switch (game) {
      case Canvas.UP:
        swapy += direction;
        break;
      case Canvas.DOWN:
        swapy -= direction;
        break;
      case Canvas.LEFT:
        swapx += direction;
        break;
      case Canvas.RIGHT:
        swapx -= direction;
        break;
      default:
        return;
    }
    if (swapx < 0 || swapx >= gridw ||
        swapy < 0 || swapy >= gridh) {
      return;
    }
    moveBlank(swapx, swapy);
    repaint();
    if (isSolved()) {
      setState(WON);
    }
  }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品一级在线| 亚洲桃色在线一区| 免费一级片91| 91精品久久久久久蜜臀| 麻豆精品视频在线| 日韩一区二区三区免费看 | 精品亚洲porn| 精品捆绑美女sm三区| 国产成人久久精品77777最新版本| 精品国产凹凸成av人网站| 美女mm1313爽爽久久久蜜臀| 国产日韩欧美亚洲| 成人av网站在线观看免费| 亚洲综合丝袜美腿| 欧美精品免费视频| 亚洲一区二区综合| 欧美精品亚洲一区二区在线播放| 青青国产91久久久久久| 久久影院视频免费| 99久久精品一区| 亚洲第四色夜色| 欧美精品日韩综合在线| 久久国产精品区| 18成人在线视频| 欧美色综合网站| 国产乱子伦视频一区二区三区 | 国产精品一区久久久久| 国产精品久久久久影院亚瑟| 91捆绑美女网站| 奇米精品一区二区三区四区| 日韩一区二区免费高清| 粉嫩久久99精品久久久久久夜| 亚洲日本中文字幕区| 日本丶国产丶欧美色综合| 美女一区二区久久| 国产精品久线观看视频| 欧美精品色综合| 99精品久久久久久| 天堂一区二区在线| 精品少妇一区二区| 91麻豆免费视频| 男女性色大片免费观看一区二区| 中文字幕一区在线观看| 欧美精品丝袜久久久中文字幕| 成人av网站大全| 日本va欧美va精品发布| 久久精品人人爽人人爽| 欧美日韩中文字幕一区| 国产成人精品一区二区三区网站观看| 亚洲第一搞黄网站| 日韩美女啊v在线免费观看| 在线观看日韩毛片| 久久精品二区亚洲w码| 中文字幕精品一区| 成人18视频在线播放| 韩日精品视频一区| 成人sese在线| 韩国一区二区三区| 亚洲成年人影院| 樱花草国产18久久久久| 精品少妇一区二区三区在线播放| 成人免费视频播放| 狠狠色综合播放一区二区| 中文字幕在线不卡视频| 欧美国产日本视频| 日韩限制级电影在线观看| 欧美中文字幕不卡| 91亚洲男人天堂| 国产制服丝袜一区| 国产综合色在线| 日本在线不卡视频一二三区| 91久久精品一区二区| 成人免费黄色大片| 久久精品72免费观看| 日韩av一级片| 亚洲观看高清完整版在线观看 | 国产午夜亚洲精品理论片色戒| 91精品国产乱码久久蜜臀| 在线视频中文字幕一区二区| 色婷婷综合中文久久一本| 风间由美一区二区av101 | 免费看欧美女人艹b| 亚洲成人你懂的| 日韩精品三区四区| 亚洲一区二区精品久久av| 国产精品欧美综合在线| 日韩美女一区二区三区四区| 欧美三级视频在线| 色婷婷激情久久| 激情综合色综合久久综合| 亚洲伦理在线精品| 国产日韩欧美精品在线| 欧美日本一道本在线视频| 丰满放荡岳乱妇91ww| 亚洲一区在线观看网站| 欧美国产日产图区| 久久久午夜电影| 欧美一区二区三区四区五区| 一区二区三区中文免费| 国产精品免费视频一区| 亚洲一区二区成人在线观看| 欧美少妇bbb| 91小视频在线免费看| 一本久久a久久免费精品不卡| 欧美三级电影网| 欧美日韩一区不卡| 精品国产百合女同互慰| 久久色中文字幕| 欧美精品一区二区三区高清aⅴ| 久久久国产精品午夜一区ai换脸| 久久婷婷久久一区二区三区| **性色生活片久久毛片| 亚洲精品成人a在线观看| 免费成人在线视频观看| 九九精品视频在线看| 麻豆国产欧美日韩综合精品二区 | 99精品视频在线免费观看| 日本精品视频一区二区三区| 精品日韩一区二区| 国产精品久久夜| 久久9热精品视频| 97超碰欧美中文字幕| 欧美一级在线视频| 国产精品麻豆欧美日韩ww| 中文字幕制服丝袜成人av| 麻豆精品蜜桃视频网站| 99久久精品免费看国产免费软件| 欧美大片拔萝卜| 国产无遮挡一区二区三区毛片日本| 亚洲bt欧美bt精品| 国产精品正在播放| 欧美一级生活片| 国产精品欧美综合在线| 久久精品久久久精品美女| 成人h精品动漫一区二区三区| 福利一区二区在线| 日韩欧美三级在线| 国产精品久久久久aaaa樱花 | 欧美国产国产综合| 午夜电影网一区| 一区二区三区在线视频播放| 久久99精品久久久久久| 日产精品久久久久久久性色| 色综合久久综合网| 精品对白一区国产伦| 日本美女视频一区二区| 99国产精品一区| 国产亚洲一区二区三区四区 | 日韩免费视频一区二区| 一区二区三区四区国产精品| 激情成人综合网| 在线观看一区二区视频| 国产精品久久久久一区二区三区| 日韩激情一二三区| 欧美日韩高清影院| ●精品国产综合乱码久久久久 | 国产盗摄精品一区二区三区在线| 欧美一区二区三区喷汁尤物| 亚洲一区二区三区在线| 91蜜桃网址入口| 国产免费观看久久| 国产91精品一区二区| 久久久青草青青国产亚洲免观| 国产精品网站导航| 成人性色生活片| 久久一区二区视频| 国产麻豆精品视频| 日韩午夜在线影院| 久久99国产精品免费| 欧美一级在线视频| 极品美女销魂一区二区三区| 日韩午夜av一区| 久久精品国产**网站演员| 日韩一级视频免费观看在线| 九九久久精品视频| 91精品久久久久久久久99蜜臂| 免费高清视频精品| 欧美成人一区二区三区在线观看 | 一区二区欧美精品| 色综合久久天天综合网| 亚洲mv在线观看| 欧美日韩国产一级| 麻豆精品一区二区综合av| 日韩欧美久久久| 麻豆精品精品国产自在97香蕉| 日韩欧美另类在线| 蜜桃视频在线一区| 精品日韩99亚洲| 天堂一区二区在线免费观看| 精品国产sm最大网站免费看| 美脚の诱脚舐め脚责91| 日本一区二区三区四区| 暴力调教一区二区三区| 亚洲国产成人av网| 欧美一级高清片| 91网页版在线| 亚洲综合视频网| 欧美精品一区二区三区高清aⅴ | 91免费国产在线| 亚洲电影在线免费观看|