我对C语言比较陌生,为了好玩,我决定创建一个游戏,用户可以选择一个职业来对抗敌人。我创建了一个函数,允许用户增加他们的属性,如力量、速度、智力和健康。如果用户选择从他们使用的任何类中提升这些属性之一,我将如何启用此更改,以便它继续到游戏中的其他方法/级别?
另请注意,这些类是由结构组成的,所以我想我问的是我将如何修改结构属性并将这些更改应用于下一个方法\级别。最后一件事,健康不是结构属性之一,我将其标记为全局变量。我是故意这样做的,因为我不知道如何控制该属性。
struct type
{
int strength;
int intellect;
int speed;
};
//method that allows user to upgrade their given attributes by one
int promote(){
int increase;
printf("Please an attribute to power up.n1.Strengthn2.Intelligencen3.Speedn4.Healthn");
scanf("%d", &increase);
switch(increase){
case 1:
printf("You strength is now at %dn", );//Not sure what to put here
break;
}
可能性1:
使用全局变量(易于实现,但不是最好的)
您需要创建结构的实例,就像为运行状况创建变量一样。由于您将其创建为全局,因此您也可以将其创建为全局。
所以在结构定义之后添加
struct type player_attributes;
这些属性需要在游戏开始时的某个地方初始化,就像在 main 中一样
player_attributes.strength = 10;
player_attributes.intellect = 10;
player_attributes.speed = 10;
现在,只要您需要这些,您都可以将它们视为strength = player_attributes.strength;
终于要更新了——
在您的案例陈述中,您可以添加
case 1:
player_attributes.strength += 5;
printf("You strength is now at %dn", player_attributes.strength
break;
其他属性也是如此。 您还必须确保属性可以通过所有级别访问,如果所有级别的代码都在同一个c
文件(模块)中,则将其全局化就足够了。
如果您正在为不同文件中的不同级别编写代码,则需要添加
extern struct type player_attributes;
到其他文件的顶部。还要确保它们对结构类型定义可见。
这可以通过将结构定义和 extern 行添加到头文件中并将其包含在所有模块中来完成。
可能性2:
使用指向正在传递的结构的指针(绝对是建议的,因为允许轻松缩放)
话虽如此,正如@JonathanLeffler所建议的那样,使用全局变量通常不是一个好主意。
您真正应该做的是在游戏开始的本地范围(函数)中创建player_attributes的实例。然后,所有函数都应将指向struct type
的指针作为参数。以便他们可以读取和写入值。
在您的情况下,您的函数promote
将变为 -
int promote(struct type *attrib){
int increase;
printf("Please an attribute to power up.n1.Strengthn2.Intelligencen3.Speedn4.Healthn");
scanf("%d", &increase);
switch(increase){
case 1:
attrib->strength += 5;
printf("You strength is now at %dn", attrib->strength);
break;
// Other cases here.
}
}
然后,您可以将推广称为
promote(&player_attributes);
从定义它的位置说main
。
这也允许您轻松地同时创建更多玩家,并且同一函数可以处理所有玩家的属性。
我希望这有所帮助。