読者です 読者をやめる 読者になる 読者になる

人工知能に関する断創録

人工知能、認知科学、心理学、ロボティクス、生物学などに興味を持っています。このブログでは人工知能のさまざまな分野について調査したことをまとめています。最近は、機械学習、Deep Learning、Kerasに関する記事が多いです。



フィールドの作成

Javagame

まずは、テトリスの舞台となるフィールドを作成します。まあ盤面を書くだけだから簡単ですね。

tetris01.jar

フィールドのデータ構造

フィールドってのは下のことです。テトリスの盤面です。

f:id:aidiary:20090905091218g:plain

このフィールドはFieldクラスで定義しています。テトリスに正式なルールがあるかはよくわからないんですがとりえあえずフィールドの大きさは25行×10列としています。左右と下に壁(図の灰色部分)を作るため26×12の大きさを取っています。

    // フィールドのサイズ(単位:マス)
    public static final int COL = 12;
    public static final int ROW = 26;

フィールドは26×12の二次元配列で表します。

    // フィールド
    private int[][] field;
    field = new int[ROW][COL];

各マスにブロックがあったら1でなかったら0を入れます。周囲の壁もブロックと同じ扱いです。なのでフィールドの初期化処理で周囲のマスに1を入れます。

    /**
     * フィールドを初期化する
     */
    public void init() {
        for (int y = 0; y < ROW; y++) {
            for (int x = 0; x < COL; x++) {
                // 壁をつくる
                if (x == 0 || x == COL - 1) {
                    field[y][x] = 1;
                } else if (y == ROW - 1) {
                    field[y][x] = 1;
                } else {
                    field[y][x] = 0;
                }
            }
        }
    }

フィールドの描画

フィールドの描画はdraw()です。

    /**
     * フィールドを描画
     */
    public void draw(Graphics g) {
        g.setColor(Color.BLACK);
        g.fillRect(0, 0, MainPanel.WIDTH, MainPanel.HEIGHT);

        g.setColor(Color.LIGHT_GRAY);
        for (int y = 0; y < ROW; y++) {
            for (int x = 0; x < COL; x++) {
                if (field[y][x] == 1) {
                    g.fillRect(x * TILE_SIZE, y * TILE_SIZE, TILE_SIZE,
                            TILE_SIZE);
                }
            }
        }
    }

背景を真っ黒に塗りつぶしてからブロックがあるマスのみ灰色で塗りつぶしています。