实现AI指针错误

时间:2014-03-30 11:53:49

标签: c

对于我的uni项目,我试图在C中创建一个基本的坦克游戏,但我刚刚开始学习C并对C有一个非常基本的了解。所以我开始为AI播放器开发一些简单的代码,但是当我使用GNU GCC编译器编译它时,它会出现这些错误并且我不知道如何继续。所以请帮忙吧! :d

  

第41行警告:传递'AIMove'的参数3使整数指针没有强制转换[默认情况下启用]

     

第19行注:预期'int(*)()'但参数的类型为'int'

int PosCheck(int T1Pos, int T2Pos)
{
   int a;

   a = T2Pos - T1Pos;

   if(a == 0) // Stop the tanks trying to overlay
   {
      return 0;
   }

   if(a >= 1 || a < 0) // Allows the tanks to move foward
   {
      return 1;
   }
}

int AIMove(int T1Pos, int T2Pos, int PosCheck()) // AI movement
{
   int b, c;

   if(PosCheck(T1Pos, T2Pos) == 0) // Choose retreat options or stands still
   {
      b = 3 + round(3*(int)rand()/(int)RAND_MAX);
      return b;
   }
   if(PosCheck(T1Pos, T2Pos) == 1) // Chooses foward options
   {
      c = 1 + round(3*(int)rand()/(int)RAND_MAX);;
      return c;
   }
}

main()
{
   int T1Pos;
   int T2Pos;
   int T2MC;

   T2MC = AIMove(T1Pos, T2Pos, PosCheck(T1Pos, T2Pos));
}

1 个答案:

答案 0 :(得分:1)

由于这些问题,该函数将另一个函数作为参数:

int AIMove(int T1Pos, int T2Pos, int PosCheck()) // AI movement
                                             ^^

但是当你调用它时,你传递的是同名函数的结果:

T2MC = AIMove(T1Pos, T2Pos, PosCheck(T1Pos, T2Pos));

PosCheck参数应该做什么?在AIMove内部,您可以调用它,但是如果您想要全局PosCheck函数或参数,则不清楚。

顺便说一句,声明函数指针的常用方法是使用星号:

int AIMove(int T1Pos, int T2Pos, int (*PosCheck)()) // Obviously a pointer.

如果您没有特别想要在那里完成任务,只需删除参数和参数。

T2MC = AIMove(T1Pos, T2Pos);

int AIMove(int T1Pos, int T2Pos)