トップページへ

テトリス

乱数

テトリスではランダムなブロックが次々と現れます。 これを実現するためには乱数を利用します。

まず乱数を利用するためにTetrisBlockクラスを記述しているファイルの先頭に次のimportを追加します。

import java.util.Random;

また、TetrisBlockクラス内に次の変数を作成します。

Random rnd = new Random();

ブロック

このクラスは名前の通りブロックの管理を行います。 具体的にはブロックの状態を保持と、回転させることを行います。

まずは、ブロックの状態を保持するための変数Blockを作成します。

private int[][] Block;

Blockはprivateとすることで他のクラスから直接値を変更することを防ぎます。 しかし、このままではBlockの値を外部から得ることができないのでgetBlockメソッドを作成しておきます。

public int[][] getBlock(){
  return Block;
}

TetrisFieldクラスではこのメソッドを使って現在のブロックの形状を取得します。

ブロックの生成

テトリスのブロックは次の7つの形から成り立ちます。

サイトキャプ

これらのブロックをランダムに生成するためのcreateBlockメソッドを作成します。

01 public void createBlock(){
02   int n = rnd.nextInt(7);//ランダムにブロックを生成
03 
04   switch(n){
05     case 0:
06       Block = new int[][]{ {0, 1, 0, 0},
07                       {0, 1, 0, 0},
08                       {0, 1, 0, 0},
09                       {0, 1, 0, 0} };
10       break;
11     case 1:
12       Block = new int[][]{ {0, 0, 0, 0},
13                       {0, 1, 1, 0},
14                       {0, 1, 1, 0},
15                       {0, 0, 0, 0} };
16       break;
17             〜〜〜< 省略 >〜〜〜
18     default:
19       Block = new int[][]{ {0, 0, 1, 0},
20                       {0, 0, 1, 0},
21                       {0, 1, 1, 0},
22                       {0, 0, 0, 0} };
23       break;
24   }
25 }

まず2行目のnextIntメソッドで乱数を生成しています。引数として7を入れることで0〜6の間の値が返ってきます。 そして、生成した乱数で異なったブロックを生成します。 配列内での1はブロック、0は空白とします。

回転

今回はブロックは右回転させることにします。

サイトキャプ

for文でコピー先の配列の左から右、上から下へコピーを行います。 右回転を行うには、コピー元の配列の下から上、左から右へコピーをするようにします。

これを実現するためにgetRotateBlockメソッドを作成します。 ただし、このメソッドでは変数Blockの値を変更しないようにします。 理由は、TetrisFieldクラスで回転後のブロックが壁や積んであるブロックと 重ならないか調べるためにも利用するためです。

01 public int[][] getRotateBlock(){
02   int[][] tmp = new int[4][4];
03 
04   for(int i=0; i<4; i++){
05     for(int j=0; j<4; j++){
06       tmp[i][j] = Block[3-j][i];
07     }
08   }
09 }

次に実際にブロックを回転させるrotateBlockメソッドを作成します。 このメソッドではgetRotateBlockメソッドを利用して得た回転後のブロック形状をBlockに格納することで ブロックを回転させます。

01 public void rotateBlock(){
02   Block = getRotateBlock();
03 }

これで、TetrisBlockクラスの実装は終了です。

最終更新日:2009/02/01
←[前のページ] [Javaトップページ] [次のページ]→

Copylight (c) ガメラボ 2006 - All Rights Reserved

inserted by FC2 system