4

私はこの効果のために何かをするコードのブロックを持っています:

int pieceX = 0;
int pieceY = 0;

int board[8][47] = {{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,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,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,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,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,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,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,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,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}};

if (pieceX > 0 && pieceY < 46) {

  /* If I remove this it doesn't crash */
  if (board[pieceX-1][pieceY] == 0 && board[pieceX][pieceY+1] == 0) {
    pieceX -= 1;
  }
  /*-----------------------------------*/
}

私が知る限り、配列を正しく初期化しており、インデックスの境界内にとどまっています。私は Processing や Arduino をあまり扱っていないので、単純で明白なものであることを願っています。

編集:うーん..このコードで最小限のテスト バージョンを作成したところ、クラッシュしません。つまり、この例にはないコードと関係があります。くそ。それらの行にゼロインしようとしています。(問題のコードを適切に切り分ける前にこれを投稿したことは悪いことです。) これは問題を正確に説明していますが、再現していません。奇妙なバグ。

編集2:これはクラッシュしません:

if (buttonA == HIGH) {
  if (pieceX > 0 && pieceX < 8 && pieceY > 0 && pieceY < 46) {
    if (board[0][0] == 0) {
    }
  }
}

これはクラッシュしません:

if (buttonA == HIGH) {
  if (pieceX > 0 && pieceX < 8 && pieceY > 0 && pieceY < 46) {
    pieceX -= 1;
  }
}

これはクラッシュします:

if (buttonA == HIGH) {
  if (pieceX > 0 && pieceX < 8 && pieceY > 0 && pieceY < 46) {
    if (board[0][0] == 0) {
      pieceX -= 1;
    }
  }
}

何が起こっているのか分かりますか?ButtonA が HIGH になることは決してないので、微調整しているコードは問題にならないはずです (すべてが正常に検証され、アップロードされます)。

編集3:これはクラッシュします:

if (buttonA == HIGH) {
  if (pieceX > 0 && pieceX < 8 && pieceY > 0 && pieceY < 46) {
    if (board[0][0] == 0) {
      pieceX -= 1;
    }
  }
}

これはしません:

if (0 == 1) {
  if (pieceX > 0 && pieceX < 8 && pieceY > 0 && pieceY < 46) {
    if (board[0][0] == 0) {
      pieceX -= 1;
    }
  }
}

これはクラッシュします:

if (buttonA == HIGH) {
  if (pieceX > 0 && pieceX < 8 && pieceY > 0 && pieceY < 46) {
    if (board[0][0] == 0) {
      pieceX = 1;
    }
  }
}

これはしません:

if (buttonA == HIGH) {
  if (pieceX > 0 && pieceX < 8 && pieceY > 0 && pieceY < 46) {
      pieceX = 1;
  }
}

そして、これはしません:

if (buttonA == HIGH) {
  if (pieceX > 0 && pieceX < 8 && pieceY > 0 && pieceY < 46) {
    if (board[0][0] == 0) {
    }
  }
}

編集、ここに完全なソースコードがあります。私は白黒のマリオ博士のクローンに数時間しかかかりません. 私はこの言語で書いたことがないので..少しずさんな可能性があります。処理/ビデオ ゲーム ハードウェア/arduino でのランダムな学習実験の詳細。

4

3 に答える 3

1

これは間違いなくメモリ不足のようです。より少ないメモリを使用できる場合があります。

特定のボード要素が 0 または 1 のように見えます。

私が間違っている場合は、私の声明の残りの部分を無視してください。それ以外の場合は、このような配列を「作成できます」。

 char board [47];
 first  = 0b00000001;    //binary mask, for binary and
 second = 0b00000010;
 third =  0b00000100;
 ...

次に、少しでもあなたを調べるために

if (board[33]&second == 0 )     \\you are testing what was called board[2][33]

これはあなたを助けるかもしれません。

于 2013-05-21T16:22:39.927 に答える