0

arduinoの「Tetris Clock」を作成するPHPスクリプトに取り組んでいます。数字を表示する一連のブロック テトリスを生成したいと思います。

マイナンバー配列(「0」の例):(表示用フォーマット)

1 1 1 1 1 1
1 1 1 1 1 1
1 1 0 0 1 1
1 1 0 0 1 1
1 1 0 0 1 1
1 1 0 0 1 1
1 1 1 1 1 1
1 1 1 1 1 1

どこ :

1 = must be filled
0 = empty
2 = informed (after check if block can be put)

今、私はそのようなテトリスブロック配列を持っています:

0 0 0 0
0 0 0 0
0 0 0 0
1 1 1 1

また

1 0 0 0
1 0 0 0
1 0 0 0
1 0 0 0

そして、テトリスブロックを数値配列に入れることができるかどうかを確認したいと思います。

例えば。: 最初のブロックを配置した後、次の配列を取得します: (これは "T" ブロックです)

1 1 1 1 1 1
1 1 1 1 1 1
1 1 0 0 1 1
1 1 0 0 1 1
1 1 0 0 1 1
1 1 0 0 1 1
1 2 1 1 1 1
2 2 2 1 1 1

最初に、表を行と列で切り取り、それが自分のブロックに対応しているかどうかを確認しようとしましたが、多くの変更を加えましたが成功しませんでした。

私の 2 つのテスト スクリプトを見ることができます: http://pastebin.com/znnmvT4ghttp://pastebin.com/D9h51Xw3

エラーが発生した場合や番号の解決に失敗した場合にバックトラッキングを使用するために、履歴の追加を保持します。

したがって、最初にブロック配列を数値配列に追加できるかどうかを確認します。

あなたのアイデアをありがとう!

4

1 に答える 1

1

テトリス ブロックを数値配列とまったく同じサイズの配列に配置し、それをゼロだけで囲んでボード上の位置を定義します。(1 ではなく 2 を使用していることに注意してください。これについては後で説明します)

0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
2 2 2 2 0 0

次に、既存のすべての配列値を他の配列の対応する値に追加します。

1 1 1 1 1 1
1 1 1 1 1 1
1 1 0 0 1 1
1 1 0 0 1 1
1 1 0 0 1 1
1 1 0 0 1 1
1 3 1 1 1 1
5 5 5 3 1 1

結果の配列に 5 が含まれているかどうかを確認します。含まれている場合は、テトリス ブロックをその位置に配置することはできません。ブロックが既に存在するからです。

2がないかどうかも確認してください。もしそうなら、埋められてはいけないスペースが埋められています。(これが、1 ではなく 2 を使用する理由です)。

1 1 1 1 1 1
1 1 1 1 1 1
1 1 0 0 1 1
1 1 0 0 1 1
1 1 0 0 1 1
3 3 2 2 1 1
1 3 1 1 1 1
3 3 3 1 1 1

これらのどれも当てはまらない場合は、考えられる解決策があります。

1 1 1 1 1 1
3 3 3 3 1 1
1 1 0 0 1 1
1 1 0 0 1 1
1 1 0 0 1 1
1 1 0 0 1 1
1 3 1 1 1 1
3 3 3 1 1 1

これが唯一の解決策ではない可能性があるため、数値配列内でテトリス ブロックを配置できるすべての可能な場所に対してこれを行う必要があります。最適な場所を見つけて可能な解決策を作成するには、A* のようなアルゴリズムを使用することをお勧めします。

于 2013-02-20T14:26:36.383 に答える