いくつかのソフトウェア設計パターンを使用して、Java で Tetris ゲームを構築しています。基本的に、メイン ゲーム ループによって要求が与えられたときに作成するテトリス オブジェクトのタイプを把握するために、文字列を取得するファクトリ アルゴリズムを作成しました。コードを参照してください。
public class TVShapeFactory {
protected TVShape tvShape = null;
protected GameContainer gc;
TVShapeFactory(GameContainer gc) {
this.gc = gc;
}
public TVShape createShape(String shape) {
if (shape=="TVIShape") {
tvShape = new TVIShape(gc);
}
else if (shape=="TVOShape") {
tvShape = new TVOShape(gc);
}
else if (shape=="TVLShape") {
tvShape = new TVLShape(gc);
}
else if (shape=="TVZShape") {
tvShape = new TVZShape(gc);
}
else if (shape=="TVJShape") {
tvShape = new TVJShape(gc);
}
else if (shape=="TVSShape") {
tvShape = new TVSShape(gc);
}
else if (shape=="TVTShape") {
tvShape = new TVTShape(gc);
}
else {
System.out.println("Error: invalid type of shape");
}
return tvShape;
}
}
gc が何であるかを知らない場合、これは単純に Slick 2D のライブラリの一部であり、完全なゲーム環境で動作するために使用されます。とにかく、ゲームの形状をランダムに生成する他の方法をいくつか作成しました (メインのゲーム ループが毎回ランダムな形状を受け取るようにしますが、RNG はそれをカットしていないように感じます。もっと難しくしたいことに気付きました。 Bastet tetris と呼ばれる有名なテトリス アルゴリズムがありますが、私には意味がありませんでした. HARD テトリス形状生成アルゴリズムを作成するための提案はありますか? これが私の単純な RNG アルゴリズムです:
public TVShape getRandomShape() {
TVShape[] shapes = new TVShape[7];
shapes[0] = createShape("TVIShape");
shapes[1] = createShape("TVOShape");
shapes[2] = createShape("TVLShape");
shapes[3] = createShape("TVZShape");
shapes[4] = createShape("TVJShape");
shapes[5] = createShape("TVSShape");
shapes[6] = createShape("TVTShape");
int index = new Random().nextInt(shapes.length);
return shapes[index];
}