对于我的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));
}
答案 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)