テトリス
はじめに
今回から数回に渡ってテトリスを作成していきます。 プログラムはシンプルにするためにゲームとして最低限の要素のみ実現するようにしています。
下のリンクは完成したプログラムです。(↑:ブロックの回転、←↓→:方向移動)
設計
設計というのは大げさですが、プログラムを作る際にどういった構成要素があるかを考える必要があります。 テトリスには単純に考えてゲームのフィールドとブロックの2種類があると考えることができます。 今回は、次のように役割ごとにクラス(ファイル)を分けて作成していきます。
TetrisMain.java:ゲームサイクルの管理・画面描画・入力キーの処理
TetrisField.java:ゲームフィールドの状態を管理
TetrisBlock.java:テトリスブロックの管理
今回はソースコードをダウンロードできるようにしますので必要な方は下記のリンクをクリックしてダウンロードしてください。
TetrisMainクラス
TetrisMainクラスではスレッドとキーボードを利用するためにRunnableインターフェースとKeyListenerインターフェースを利用します。
public class TetrisMain extends Applet implements Runnable, KeyListener{
また、次の変数を用意します。
private TetrisField field = new TetrisField(); //ゲームフィールド
private Thread thread; //ゲーム進行用スレッド
private static int SPEED = 500; //1サイクルの速度(ミリ秒)
次に、コンストラクタ内で初期化とスレッドの実行を行います。
01 public TetrisMain(){
02 addKeyListener(this); //キーリスナーの登録
03 thread = new Thread(this); //スレッドの生成
04 thread.start(); //スレッドの実行
05 }
スレッドの実装は後で行うため、3、4行目をコメントアウトしておいてください。
今回はkeyPressedメソッドを利用してキーが押された場合の処理を行います。
01 public void keyPressed(KeyEvent e){
02 int keyCode = e.getKeyCode(); //押したキーのコードを取得
03 field.setAction(keyCode); //取得したキーコードを渡す
04 }
05 public void keyTyped(KeyEvent e){}
06 public void keyReleased(KeyEvent e){}
3行目で押下したキーによって動作を決定するTetrisFieldクラスのsetActionメソッドを呼び出します。 今は3行目をコメントアウトしておいてください。
画面描画を行うpaintメソッドは次のように作成します。
01 public void paint(Graphics g){
02 field.drawField(g); //フィールドの描画
03 field.drawBlock(g); //ブロックの描画
04 }
TetrisMainクラスはフィールドの情報を持たないためpaintメソッド内では TetrisFieldクラスで用意するメソッドを呼び出し描画を任せます。 3行目をコメントアウトしておいてください。
Copylight (c) ガメラボ 2006 - All Rights Reserved