我是一名学生正在做一个我需要帮助的小作业项目。我正在制作一个小型的回合制游戏,其中有两个问题。
游戏代码:
#include<iostream.h>
class player
{
public:
int health;
char name[15];
int atk;
int mgatk;
int agi;
int def;
int mgdef;
int turnvalid;
int type;
int ctr;
void turnend(player, player);
void attack(player, player);
void block(player, player);
void menu(player, player);
};
void turnend(player p1, player p2)
{
if(p1.turnvalid == 1)
{
menu(p1, p2);
}
else
{
menu(p2, p1);
}
}
void attack(player p1, player p2)
{
if(p1.turnvalid == 1)
if(p1.type == 1)
{
p2.health = p2.health - (p1.atk/p2.def)*100;
}
else if(p1.type == 2)
{
p2.health = p2.health - (p1.mgatk/p2.mgdef)*100;
}
p1.turnvalid = 0;
turnend(p1, p2);
}
void block(player p1, player p2)
{
if(p1.type == 1)
{
p2.health = p2.health - (p1.atk/p2.def)*50;
}
else if(p1.type == 2)
{
p2.health = p2.health - (p1.mgatk/p2.mgdef)*50;
}
p1.turnvalid = 0;
turnend(p1, p2);
}
void menu(player p1, player p2)
{
int ch;
cout<< "What will you do? \n1.Attack\n2.Block\n3.Counter";
cin >> ch;
switch(ch)
{
case '1':
attack(p1, p2);
break;
case '2':
block(p1, p2);
break;
case '3':
default:
{
cout<< "\nWrong choice! Enter again...\n";
menu(p1, p2);
}
}
}
// this is not a part I am currently using because I can't
// figure out how to make it work
void counter(player p1, player p2)
{
cout<< "Player " << p1.name << "countered!";
}
void main()
{
cout<<"Beginning the game! Know your options!\nAttack to deal damage.\n"
"Block to reduce damage taken.\nCounter to take damage, then deal "
"twice the damage you took on the same turn.";
}
在这个回合制游戏中,玩家现在有两种选择:攻击或阻挡。它们运行正常,但是当我再次将它们重定向到转向菜单时问题出现了。每当我调用该函数时,它会说: [错误] c:\ users \ vive \ desktop \ not games \ utilities \ c ++ programs \ game2.cpp:27:E2268在函数turnend(播放器,播放器)中调用未定义的函数'menu' < / p>
这可能是因为我在定义菜单之前定义了turnend。但如果我在turnend之前定义菜单,就会发生这种情况:
[错误] c:\ users \ madhav \ desktop \ not games \ utilities \ c ++ programs \ game2.cpp:30:E2268在功能菜单(播放器,播放器)中调用未定义的函数'attack'
[错误] c:\ users \ madhav \ desktop \ not games \ utilities \ c ++ programs \ game2.cpp:34:E2268在功能菜单(播放器,播放器)中调用未定义的功能'block'
我基本上被困,我不知道该怎么做。无论我先定义哪一个,我都会收到错误。我已经在班级玩家中宣布了所有这些,为什么会发生这种情况呢?我该如何解决?
另外,如果有人可以告诉我如何使计数器工作,我会非常感激。我想要的是将所造成的伤害加倍,并让计数器最后。这将允许玩家做反击以先获得伤害,然后将伤害加倍。至于atk,mgatk等统计数据,我会将它们加到两个不同的“类”字符上,这些字符将由int变量'type'决定。
对该计划的任何形式的帮助,批评,建议等都非常感谢。提前谢谢!
答案 0 :(得分:3)
错误是由定义中函数名称前面缺少player::
引起的。
只需更换
void attack(player p1, player p2){
(...)
带
void player::attack(player p1, player p2){
(...)
等等。
如果您没有通过将类名放在函数名之前(或在类中定义它)来将已定义的函数标记为类的成员,则编译器会将其识别为完全不同的函数。
但是你可能会更好地学习如何将代码划分为头文件和源文件,以避免将来出现更复杂的错误。