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

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

?? ketrisblock.java

?? UNIJA開發環境下的俄羅斯方塊,適用于X859等機型.是初學者的參考范例
?? JAVA
字號:
import javax.microedition.lcdui.*;

import java.util.Random;

/**
 *
 * <p>Title: </p>
 * <p>Description: 該類為封裝下墜物對象及其操作</p>
 * <p>Copyright: Copyright (c) 2004</p>
 * <p>Company: </p>
 * @author: an unknown Japanese,Jagie
 * @version 1.0
 */

public class KetrisBlock {



  //各種磚塊,1-7為活動磚塊顏色,8為墻磚顏色
  public static final int[] BRICK_COLORS = {
      0x00FF0000, 0x0000FF00, 0x00FFFF00, 0x000000FF, 0x00FF00FF, 0x0000FFFF,
      0x00C0DCC0, 0x00808080};

  /**
   * blockpattern的編碼規則:blockpattern表示一個下墜物體的形狀,一種下墜物的顏色是固定的。
   * 對于一個下墜物,用一個三維數祖表示,第一維用rot表示(旋轉值),第二維用x(也就是行),第三維用y表示(也就是列)。
   * 所以 blockpattern1:田字及四種旋轉形狀
   * blockpattern2:反L字及四種旋轉形狀
   * blockpattern3:L字及四種旋轉形狀
   * blockpattern4:1字及四種旋轉形狀
   * ........................
   */

  protected int blockpattern1[][][] = {
      {
      {
      0, 0, 0, 0}
      , {
      0, 1, 1, 0}
      , {
      0, 1, 1, 0}
      , {
      0, 0, 0, 0}
  }
      , {
      {
      0, 0, 0, 0}
      , {
      0, 1, 1, 0}
      , {
      0, 1, 1, 0}
      , {
      0, 0, 0, 0}
  }
      , {
      {
      0, 0, 0, 0}
      , {
      0, 1, 1, 0}
      , {
      0, 1, 1, 0}
      , {
      0, 0, 0, 0}
  }
      , {
      {
      0, 0, 0, 0}
      , {
      0, 1, 1, 0}
      , {
      0, 1, 1, 0}
      , {
      0, 0, 0, 0}
  }
  };

  protected int blockpattern2[][][] = {
      {
      {
      0, 0, 1, 0}
      , {
      0, 0, 1, 0}
      , {
      0, 1, 1, 0}
      , {
      0, 0, 0, 0}
  }
      , {
      {
      0, 0, 0, 0}
      , {
      0, 1, 0, 0}
      , {
      0, 1, 1, 1}
      , {
      0, 0, 0, 0}
  }
      , {
      {
      0, 0, 0, 0}
      , {
      0, 1, 1, 0}
      , {
      0, 1, 0, 0}
      , {
      0, 1, 0, 0}
  }
      , {
      {
      0, 0, 0, 0}
      , {
      1, 1, 1, 0}
      , {
      0, 0, 1, 0}
      , {
      0, 0, 0, 0}
  }
  };

  protected int blockpattern3[][][] = {
      {
      {
      0, 1, 0, 0}
      , {
      0, 1, 0, 0}
      , {
      0, 1, 1, 0}
      , {
      0, 0, 0, 0}
  }
      , {
      {
      0, 0, 0, 0}
      , {
      0, 1, 1, 1}
      , {
      0, 1, 0, 0}
      , {
      0, 0, 0, 0}
  }
      , {
      {
      0, 0, 0, 0}
      , {
      0, 1, 1, 0}
      , {
      0, 0, 1, 0}
      , {
      0, 0, 1, 0}
  }
      , {
      {
      0, 0, 0, 0}
      , {
      0, 0, 1, 0}
      , {
      1, 1, 1, 0}
      , {
      0, 0, 0, 0}
  }
  };

  protected int blockpattern4[][][] = {
      {
      {
      0, 0, 1, 0}
      , {
      0, 0, 1, 0}
      , {
      0, 0, 1, 0}
      , {
      0, 0, 1, 0}
  }
      , {
      {
      0, 0, 0, 0}
      , {
      0, 0, 0, 0}
      , {
      1, 1, 1, 1}
      , {
      0, 0, 0, 0}
  }
      , {
      {
      0, 0, 1, 0}
      , {
      0, 0, 1, 0}
      , {
      0, 0, 1, 0}
      , {
      0, 0, 1, 0}
  }
      , {
      {
      0, 0, 0, 0}
      , {
      0, 0, 0, 0}
      , {
      1, 1, 1, 1}
      , {
      0, 0, 0, 0}
  }
  };

  protected int blockpattern5[][][] = {
      {
      {
      0, 0, 0, 0}
      , {
      1, 1, 0, 0}
      , {
      0, 1, 1, 0}
      , {
      0, 0, 0, 0}
  }
      , {
      {
      0, 0, 1, 0}
      , {
      0, 1, 1, 0}
      , {
      0, 1, 0, 0}
      , {
      0, 0, 0, 0}
  }
      , {
      {
      0, 0, 0, 0}
      , {
      1, 1, 0, 0}
      , {
      0, 1, 1, 0}
      , {
      0, 0, 0, 0}
  }
      , {
      {
      0, 0, 1, 0}
      , {
      0, 1, 1, 0}
      , {
      0, 1, 0, 0}
      , {
      0, 0, 0, 0}
  }
  };

  protected int blockpattern6[][][] = {
      {
      {
      0, 0, 0, 0}
      , {
      0, 1, 1, 0}
      , {
      1, 1, 0, 0}
      , {
      0, 0, 0, 0}
  }
      , {
      {
      0, 1, 0, 0}
      , {
      0, 1, 1, 0}
      , {
      0, 0, 1, 0}
      , {
      0, 0, 0, 0}
  }
      , {
      {
      0, 0, 0, 0}
      , {
      0, 1, 1, 0}
      , {
      1, 1, 0, 0}
      , {
      0, 0, 0, 0}
  }
      , {
      {
      0, 1, 0, 0}
      , {
      0, 1, 1, 0}
      , {
      0, 0, 1, 0}
      , {
      0, 0, 0, 0}
  }
  };

  protected int blockpattern7[][][] = {
      {
      {
      0, 0, 0, 0}
      , {
      1, 1, 1, 0}
      , {
      0, 1, 0, 0}
      , {
      0, 0, 0, 0}
  }
      , {
      {
      0, 1, 0, 0}
      , {
      1, 1, 0, 0}
      , {
      0, 1, 0, 0}
      , {
      0, 0, 0, 0}
  }
      , {
      {
      0, 1, 0, 0}
      , {
      1, 1, 1, 0}
      , {
      0, 0, 0, 0}
      , {
      0, 0, 0, 0}
  }
      , {
      {
      0, 1, 0, 0}
      , {
      0, 1, 1, 0}
      , {
      0, 1, 0, 0}
      , {
      0, 0, 0, 0}
  }
  };

  private int blockpattern[][][]; /* 當前墜物形狀,為以上定義的七個下墜物之一 */
  private int blockNextpattern[][]; /* 下一個墜物形狀,顯示在游戲容器的右邊 */

  private int x; //blockpattern左上角x坐標,x=i表示左上角距離游戲容器左上角x軸上i個小磚塊單位
  private int y; //blockpattern左上角y坐標,y=i表示左上角距離游戲容器左上角y軸上i個小磚塊單位
  private int oldx; //x的舊值
  private int oldy; //y的舊值
  private int rot; //旋轉值,0-3
  private int oldrot; //旋轉舊值
  private int pattern; /* 組成當前墜物所用小磚塊id(1-7),同時也表示一種下墜物形狀 */
  private int next; /* 組成下一個墜物所用小磚塊id(1-7),同時也表示一種下墜物形狀 */

  private KetrisMap map;
  protected Random rand;

  /* 構造,保存map,初始化blockimage,rand,next */
  public KetrisBlock(KetrisMap map) {
    this.map = map;
    rand = new Random();
    next =Math.abs(rand.nextInt()) % 7 + 1;
  }

  /* 初始化 */
  protected void init() {

    pattern = next;
    next = Math.abs(rand.nextInt()) % 7 + 1;

    /* 得到當前下墜物 */
    switch (pattern) {
      case 1:
        readPattern(blockpattern1);
        break;
      case 2:
        readPattern(blockpattern2);
        break;
      case 3:
        readPattern(blockpattern3);
        break;
      case 4:
        readPattern(blockpattern4);
        break;
      case 5:
        readPattern(blockpattern5);
        break;
      case 6:
        readPattern(blockpattern6);
        break;
      case 7:
        readPattern(blockpattern7);
        break;
    }

    /* 得到下一個下墜物 */
    switch (next) {
      case 1:
        readNextPattern(blockpattern1);
        break;
      case 2:
        readNextPattern(blockpattern2);
        break;
      case 3:
        readNextPattern(blockpattern3);
        break;
      case 4:
        readNextPattern(blockpattern4);
        break;
      case 5:
        readNextPattern(blockpattern5);
        break;
      case 6:
        readNextPattern(blockpattern6);
        break;
      case 7:
        readNextPattern(blockpattern7);
        break;
    }

    x = 5; /* 游戲容器內徑的一半 */
    y = 0; /*     y坐標 */
    rot = 0;




    //判斷map數據,決定y的真正值,之所以這么處理,是因為當game over的時候,最后一個下墜物,可能只能畫出一部分
    //為了達到這個效果,必須讓y成為一個恰當的負值

    while (isCrashAtBegin()) {
      y--;
      if(y<-4){
        break;
      }
    }

    oldx = x;
    oldy = y;

    oldrot = rot;

  }

  /**
   * 設置當前下墜物變量的內容
   * @param nowblock int[][][] 7種下墜物常量之一
   */

  private void readPattern(int[][][] nowblock) {
    blockpattern = new int[4][4][4];

    for (int i = 0; i < 4; i++) {
      for (int j = 0; j < 4; j++) {
        for (int k = 0; k < 4; k++) {
          blockpattern[i][j][k] = nowblock[i][j][k];
        }
      }
    }
  }

  /**
   * 設置下一個下墜物變量的內容。只需要包存4中旋轉變化中的第一種即可,所以rot維值=0
   * @param nowblock int[][][] 7種下墜物常量之一
   */

  private void readNextPattern(int[][][] nowblock) {
    blockNextpattern = new int[4][4];

    for (int i = 0; i < 4; i++) {
      for (int j = 0; j < 4; j++) {
        blockNextpattern[i][j] = nowblock[0][i][j];
      }
    }
  }

  /* 旋轉下墜物 */
  protected void rotBlock() {
    rot++;

    if (rot == 4) {
      rot = 0;
    }
  }

  /**
   * 繪制下墜物,包括清除下墜物的舊圖像,調用繪制下墜物新圖像的函數
   * @param g Graphics
   */

  public synchronized void paint(Graphics g) {

    //如果3維都沒有變化,則無需重畫
    if ( (oldrot != rot) || (oldx != x) || (oldy != y)) {

      //清除舊圖形
      g.setColor(KetrisCanvas.BACKGROUD);
      for (int i = 0; i < 4; i++) {
        for (int j = 0; j < 4; j++) {
          if (blockpattern[oldrot][i][j] == 1) {
            g.fillRect(KetrisCanvas.GAMEAREA_X +
                       (oldx + j) * KetrisCanvas.BRICK_WIDTH,
                       KetrisCanvas.GAMEAREA_Y +
                       (oldy + i) * KetrisCanvas.BRICK_WIDTH,
                       KetrisCanvas.BRICK_WIDTH, KetrisCanvas.BRICK_WIDTH);
          }
        }
      }

      drawBlock(g);
      oldrot = rot;
      oldx = x;
      oldy = y;
    }

  }

  /**
   * 繪制下墜物
   * @param g Graphics
   */

  public void drawBlock(Graphics g) {
    for (int i = 0; i < 4; i++) {
      for (int j = 0; j < 4; j++) {
        if (blockpattern[rot][i][j] == 1) {
          drawBrick(KetrisCanvas.GAMEAREA_X +
                    (x + j) * KetrisCanvas.BRICK_WIDTH,
                    KetrisCanvas.GAMEAREA_Y +
                    (y + i) * KetrisCanvas.BRICK_WIDTH, g, pattern - 1);
        }
      }
    }
  }

  /**
   * 判斷下墜物是不是和map中已有的磚塊重疊,為了處理gameover的時候,只需畫出部分下墜物的情況
    @return true:有重疊,false:無重疊
   */

  public boolean isCrashAtBegin() {
    //行
    for (int i = 3; i >= 0; i--) {
      //列
      for (int j = 0; j < 4; j++) {
        int mx = x + j;

        int my = y + i;
        if (my < 0) {
          my = 0;
        }

        if (blockpattern[rot][i][j] == 1 && map.get(mx, my) != 8 &&
            map.get(mx, my) != 0) {
          return true;

        }
      }
    }
    return false;
  }

  /**
   * 畫小磚塊
   * @param px x坐標
   * @param py y坐標
   * @param g Graphics
   * @param colorIndex 顏色索引值
   */

  public static void drawBrick(int px, int py, Graphics g, int colorIndex) {
    //畫白邊
    g.setColor(255, 255, 255);
    g.fillRect(px, py, 1, KetrisCanvas.BRICK_WIDTH);
    g.fillRect(px, py, KetrisCanvas.BRICK_WIDTH, 1);
    //畫中心
    int color = BRICK_COLORS[colorIndex];
    g.setColor(color);
    g.fillRect(px + 1, py + 1, KetrisCanvas.BRICK_WIDTH - 1,
               KetrisCanvas.BRICK_WIDTH - 1);
    //畫灰邊
    g.setColor(0x00c0c0c0);
    g.fillRect(px + KetrisCanvas.BRICK_WIDTH - 1, py + 1, 1,
               KetrisCanvas.BRICK_WIDTH - 1);
    g.fillRect(px + 1, py + KetrisCanvas.BRICK_WIDTH - 1,
               KetrisCanvas.BRICK_WIDTH - 2, 1);
  }

  /**
   * 在游戲容器的右邊繪出下一個下墜物
   * @param g Graphics
   */

  public void drawNextBlock(Graphics g) {
    //清除繪制區域
    g.setColor(KetrisCanvas.BACKGROUD);
    int px = KetrisCanvas.GAMEAREA_X + 12 * KetrisCanvas.BRICK_WIDTH;
    int py = KetrisCanvas.GAMEAREA_Y + 2 * KetrisCanvas.BRICK_WIDTH;
    int width = KetrisCanvas.BRICK_WIDTH * 4;
    g.fillRect(px, py, width, width);

    for (int i = 0; i < 4; i++) {
      for (int j = 0; j < 4; j++) {
        if (blockNextpattern[i][j] == 1) {
          drawBrick(px + j * KetrisCanvas.BRICK_WIDTH,
                    py + i * KetrisCanvas.BRICK_WIDTH, g, next - 1);
        }
      }
    }
  }

  /**
   * 判斷下墜物是否能下移
   * @param kyouseiflag boolean true:自動下移 false:人工按鍵下移
   * @return boolean
   */
  public boolean checkDown(boolean kyouseiflag) {

    boolean check = true;

    /* 分別掃描下墜物的4行,從最下面的那行開始 */
    for (int i = 0; i < 4; i++) {
      int row = 3;
      while (row >= 0) {
        if (blockpattern[rot][row][i] == 1) {
          if (map.get(x + i, y + row + 1) != 0) {
            check = false;
          }

          row = -1; /* 終止循環 */
        }
        else {
          row--;
        }
      }
    }

    return check;
  }

  /* 下墜物下移1行 */
  public void down() {
    y = y + 1;
  }

  /* 判斷是否能旋轉 */
  public boolean checkRot() {
    boolean check = true;

    int tmpRot = rot + 1;
    if (tmpRot == 4) {
      tmpRot = 0;
    }

    for (int i = 0; i < 4; i++) {
      for (int j = 0; j < 4; j++) {
        if (blockpattern[tmpRot][i][j] == 1) {
          if (map.get(x + j, y + i) != 0) {
            check = false;
          }
        }
      }
    }

    return check;
  }

  /* 判斷下墜物是否可以移動 */
  public boolean checkMove(int direct) {

    boolean check = true;

    /* 分別掃描下墜物的4行 */
    for (int i = 0; i < 4; i++) {
      if (direct == 1) { /* 左移 */
        int row = 0;
        while (row <= 3) {
          if (blockpattern[rot][i][row] == 1) {
            if (map.get(x + row - 1, y + i) != 0) {
              check = false;
            }

            row = 4; /* 終止循環 */
          }
          else {
            row++;
          }
        }
      }
      else { /* 右移 */
        int row = 3;
        while (row >= 0) {
          if (blockpattern[rot][i][row] == 1) {
            if (map.get(x + row + 1, y + i) != 0) {
              check = false;
            }

            row = -1; /* 終止循環 */
          }
          else {
            row--;
          }
        }
      }
    }

    return check;
  }

  /* 左右移動 */
  public void move(int direct) {
    if (direct == 1) {
      x = x - 1;
    }
    else {
      x = x + 1;
    }
  }

  public int getY() {
    return y;
  }

  /* 根據下墜物的當前位置設置地圖數據 */
  public void fixBlock() {
    for (int i = 0; i < 4; i++) {
      for (int j = 0; j < 4; j++) {
        if (blockpattern[rot][i][j] == 1) {
          map.set(x + j, y + i, pattern);

        }
      }
    }
  }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品无遮挡| 欧美性极品少妇| 久久婷婷国产综合国色天香| 美女一区二区三区在线观看| 91精品国产综合久久精品图片| 爽好久久久欧美精品| 91麻豆精品国产| 九一九一国产精品| 国产人妖乱国产精品人妖| 国产sm精品调教视频网站| 国产精品视频一二| 色狠狠一区二区三区香蕉| 亚洲亚洲精品在线观看| 欧美人妇做爰xxxⅹ性高电影| 日韩avvvv在线播放| 精品999在线播放| 成人免费三级在线| 亚洲视频一区二区在线观看| 欧美午夜理伦三级在线观看| 日本欧美肥老太交大片| 亚洲精品一区在线观看| 成人app软件下载大全免费| 一二三四区精品视频| 欧美老人xxxx18| 国内外成人在线| 一区二区欧美精品| 欧美成人a视频| 丁香一区二区三区| 亚洲123区在线观看| 2020国产精品自拍| 欧美主播一区二区三区| 久久成人18免费观看| 中文一区在线播放| 欧美美女bb生活片| 成人午夜激情视频| 亚洲成人免费在线| 欧美国产日本韩| 制服丝袜日韩国产| 91丨porny丨首页| 美国毛片一区二区| 亚洲欧美二区三区| 久久久久久久久久久99999| 欧洲亚洲国产日韩| 国产成人av电影免费在线观看| 亚洲福利电影网| 国产精品久久网站| 精品三级在线看| 欧美性受极品xxxx喷水| 国产成人av电影在线观看| 日本欧美肥老太交大片| 亚洲制服丝袜av| 国产精品系列在线| 亚洲精品在线观| 制服丝袜亚洲网站| 欧美在线观看一二区| 成人午夜激情影院| 国模套图日韩精品一区二区| 丝袜亚洲另类欧美| 一区二区高清视频在线观看| 国产亲近乱来精品视频 | 国产欧美日韩亚州综合| 欧美精品乱人伦久久久久久| 暴力调教一区二区三区| 国产真实乱偷精品视频免| 丝袜国产日韩另类美女| 一区二区三区.www| 亚洲精品欧美激情| 国产精品毛片无遮挡高清| 久久综合狠狠综合久久综合88| 欧美二区三区的天堂| 欧美日韩在线三级| 欧美午夜精品久久久久久超碰| 99精品视频在线免费观看| 丰满岳乱妇一区二区三区| 国产精品一区二区黑丝| 国产精品456露脸| 国产乱码字幕精品高清av| 黑人巨大精品欧美一区| 精品一区二区三区免费观看 | 亚洲欧美电影院| 国产精品盗摄一区二区三区| 日本一区二区高清| 国产精品网曝门| 国产精品每日更新| 亚洲欧美另类小说| 一区二区免费看| 亚洲国产视频a| 亚洲va国产va欧美va观看| 丝袜美腿亚洲一区二区图片| 日本不卡免费在线视频| 蜜桃视频免费观看一区| 日韩电影在线免费| 精品一区二区影视| 国产成人免费在线观看| 99在线精品视频| 91碰在线视频| 欧美三级欧美一级| 日韩免费在线观看| 国产欧美一区二区三区在线看蜜臀| 欧美激情一二三区| 亚洲综合成人网| 日本va欧美va欧美va精品| 九九精品一区二区| 成人app软件下载大全免费| 91丨九色丨尤物| 欧美一区二区国产| 国产欧美一区二区精品性| 亚洲欧美日韩国产综合| 日韩国产欧美在线观看| 精品制服美女丁香| 成人午夜精品一区二区三区| 色呦呦一区二区三区| 欧美一区二区三区性视频| 久久综合给合久久狠狠狠97色69| 国产精品久久久久久久久久久免费看 | 蜜臂av日日欢夜夜爽一区| 国产一区二区在线免费观看| 激情图片小说一区| 7777精品伊人久久久大香线蕉 | 国产人妖乱国产精品人妖| 欧美国产一区在线| 亚洲欧洲精品成人久久奇米网| 亚洲国产人成综合网站| 国产91高潮流白浆在线麻豆| 日韩精品一区二区三区视频播放| 亚洲欧美综合色| 蜜桃视频第一区免费观看| www.亚洲精品| 日韩美女天天操| 一区二区三区在线观看网站| 午夜精品久久久久影视| 偷窥少妇高潮呻吟av久久免费| 久久66热偷产精品| 色婷婷久久综合| 国产麻豆日韩欧美久久| 婷婷久久综合九色综合伊人色| 99国产精品国产精品毛片| 国产精品久久久久久久岛一牛影视 | 国产精品短视频| 激情综合色播激情啊| 欧美日韩亚洲综合一区| 免费在线观看成人| 日韩精品亚洲专区| 99久久精品一区| 亚洲成人资源网| 一本色道久久综合亚洲91| 久久蜜桃av一区二区天堂| 香蕉久久一区二区不卡无毒影院 | 久久黄色级2电影| 欧美特级限制片免费在线观看| 国产亚洲一二三区| 免费成人在线观看视频| 在线免费不卡视频| 亚洲欧洲日韩女同| 国产91精品一区二区| 日韩欧美一级在线播放| 婷婷中文字幕综合| 欧美午夜精品久久久久久超碰| 国产精品久久久久久久久免费相片| 国内精品伊人久久久久av一坑| 6080午夜不卡| 亚洲大型综合色站| 欧美性色黄大片| 亚洲国产欧美一区二区三区丁香婷| 91在线云播放| 国产精品免费视频观看| 高清不卡一区二区| 欧美国产视频在线| av不卡免费在线观看| 中文字幕在线视频一区| 成人黄色一级视频| 国产精品理论在线观看| 国产成人欧美日韩在线电影| 国产日韩影视精品| 成人精品国产一区二区4080| 国产精品美女一区二区| 91浏览器在线视频| 一区二区高清免费观看影视大全| 欧美视频在线一区二区三区 | 欧美一区二区在线免费观看| 偷拍自拍另类欧美| 欧美一区二区精品在线| 久久国产尿小便嘘嘘尿| 精品国产99国产精品| 国产91高潮流白浆在线麻豆| 国产精品人人做人人爽人人添| 成人av电影在线网| 亚洲午夜免费电影| 欧美一级黄色大片| 国产中文字幕精品| 国产精品久久久久久久久动漫| 欧美日韩一区二区三区在线看| 一区二区三区四区在线免费观看 | 麻豆国产91在线播放| www国产成人免费观看视频 深夜成人网| 久久99精品国产麻豆婷婷| 欧美激情一区二区| 欧美三级韩国三级日本一级| 久久成人综合网| 国产精品每日更新|