0

スネーク ゲーム用にスネークのセグメントを格納する配列を初期化しようとしています

タイプ「セグメント」の構造はここで定義されています

 typedef struct snakeSegment {
    int x,y;
    }segment

次に、ヘビの構造を宣言します (セグメントで構成されています)。

struct snakeSegment snake[200];

次のコードは、スネーク配列の初期化です

/*****************************************/
/* Create snake array of length snake_length */
void initSnake(segment snake[], int snake_length)
{
  int x = 50;
  int y = 50;
  snake[0].x= x;
  snake[0].y= y;
   for (int i = 1; i < 21; i++ ) 
  {
    snake[i].x= snake[i-1].x;
    snake[i].y= snake[i-1].y;
    x++;
  }
}

メイン メソッドに到達して initSnake() 関数を実行しようとするたびに問題が発生します。

ここに主な機能があります

int main() { 
  initDevices();
  remainingSnakes = initGame();
  while ( remainingSnakes ) {
   // waitForStart();
    snakeInPlay= 1;
    currentDirection= 'N';
    initSnake(snake_length, snake );
    renderSnake(snake_length);
  }}

コードの initSnake() 行で、コンパイル時に次のエラーが生成されます: タイプ "int" は、タイプ "segment *" のパラメーターと互換性がありません

同僚に尋ねてみたところ、この問題を抱えている人もいるようです。別の解決策を探しましたが、大幅に変更されないメイン機能が提供されました。なぜこのエラーが表示されるのかわかりませんので、フィードバックをいただければ幸いです。ありがとう!

以下は、モデル化に使用するメイン関数です。

initialiseDevices();
remainingSnakes= initialiseGame();
while ( remainingSnakes ) {
waitForStart();
snakeInPlay= 1;
currentDirection= N;
snakeLength= 10;
initialiseSnake( snake, snakeLength );
renderSnake( snake, snakeLength );
while ( snakeInPlay ) {
newDirection= ReadBoardAngle();
currentDirection= moveSnake ( snake, newDirection, snakeLength );
snakeInPlay= testSnakeCollision( snake, snakeLength );
delay();
}
}
4

4 に答える 4

3

これは、関数が受け取るパラメーターではありません。initSnake(snake_length, snake );

あなたはおそらく意味したinitSnake(snake, snake_length);

于 2013-01-08T17:56:33.737 に答える
3

あなたが書いた方法では、引数snakeと引数snake_lengthが逆になっているため、snake* が必要な場所に int を渡そうとしています。

于 2013-01-08T17:56:44.340 に答える
2

引数を間違った順序で渡しています。

メソッドの署名は次のとおりです。

void initSnake(segment snake[], int snake_length)

あなたは合格しています:

 initSnake(snake_length, snake );

配列intではなく最初のパラメーターとして値を渡していますsegment

于 2013-01-08T17:58:18.723 に答える
1

関数の定義と呼び出しの間で、パラメーターを initSnake に切り替えたようです。

于 2013-01-08T17:56:20.460 に答える