1

だから私は掃海艇ゲームを開発していて、地雷を割り当てていますが、数字を生成するために、今どこに地雷があるかを確認する必要があります。問題は、列と行を検証するときに、プログラムがゲーム フィールドから出ないようにする必要があることです。

私のコードは次のようになります。

Public Sub avisinhos(ByVal line, ByVal column)
    If mat(line, column) = 0 Then
        mat(line, column) = -1
        numbandeiras = numbandeiras + 1
    End If
    For auxlinha = -1 To 1
        For auxcolumn = -1 To 1

        Next
    Next
End Sub

ゲームのフィールドから出ていないことを確認する IF 関数を作成するにはどうすればよいですか? よろしく、ジョアオ。

4

2 に答える 2

1

疑似コード

int linestart = -1;
int lineend = 1;
int colstart = -1;
int colend = 1;

Assuming a 10 x 10 grid (zero based)

if line < 2 linestart = 0
if line > 8 lineend = 0
if column < 2 colstart = 0
if column > 8 colend = 0

For auxlinha = linestart To lineend
   For auxcolumn = colstart To colend
     // check
   Next     
Next 

個人的にはループを気にしませんが、ループはほとんど何も追加しません

HasMineAbove = (行 > 1) および (gamefield[行 -1,列] = MinePresentValue

私のアプローチになるでしょう、それをすべて1つにします。

auxlinha と auxcolumn が両方とも 0 の場合、大きな混乱が生じる可能性があることは言うまでもありません...

于 2012-05-01T17:26:27.703 に答える
1

あなたのコードが何を言っているのか正確にはわかりません。略語とすべて小文字の名前を使用しているため、少し不可解です。camelCasing を試して、単語をより完全に綴りたいと思うかもしれません。インテリセンスはあなたの友達です。=)

ただし、コーディング スタイルは別として、限られた範囲の値をループしようとしている場合は、モジュラス演算子 (%) を使用して値を制限しておくことができます。たとえば、値を 0 ~ 7 の範囲に維持する必要があり、最終的に値が 12 になる場合は、モジュラス 8 を使用して値 4 の範囲内にループ バックします。

12 % 8 = 4
9  % 8 = 1
15 % 8 = 7
24 % 8 = 0

これはあなたの特定の質問には答えないことは承知していますが、これは便利なテクニックであり、役に立つかもしれません.

于 2012-05-01T17:52:20.010 に答える