0

我正在尝试初始化一个数组来存储蛇游戏的蛇段

“段”类型的结构在这里定义

 typedef struct snakeSegment {
    int x,y;
    }segment

然后我声明蛇的结构(由段组成)

struct snakeSegment snake[200];

下面的代码是snake数组的初始化

/*****************************************/
/* 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++;
  }
}

每当它到达 main 方法并尝试运行 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

你写它的方式,参数snakesnake_length被颠倒,所以你试图在它期望蛇*的地方传递一个 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 回答