gpt4 book ai didi

c++ - 如何在不使用全局变量的情况下在函数之间使用多个变量?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:42:13 26 4
gpt4 key购买 nike

利用我在编程课上学到的知识,我正在用 C++ 制作一个基于文本的小型回合制战斗游戏。请记住,我可能不知道如何使用或了解更复杂的概念。

我在游戏中有很多变量,用于检查玩家是否拥有某些元素的 bool 值,用于健康值,护甲等的整数。我知道我不应该使用全局变量,所以我打算使用指针来传递函数之间的变量。

通常这不是问题:

attack(int *health, int *armor);

但我有类似的东西:

attack(int *health, int *armor, int *enemyHealth, int *enemyArmor, ......etc);

输入变得越来越乏味,使用全局变量将是一个即时的解决方案。但我想知道另一种方式。此外,有时在调用函数时我不需要传递“*armor”,例如如果玩家没有穿任何盔甲。这也意味着我需要创建很多这样的东西:

if (*armor != nullptr)
{
do things
}

解决方案?如果不清楚,请提前道歉。我是这个网站的新手,我可能需要一段时间才能理解您的回答。谢谢大家!! :)

Here是完整的代码(这个问题的实例还不多,因为我刚刚遇到它,但查看我的函数调用会使其更加清晰)

最佳答案

避免传递数百个变量的方法是使用类或结构组织数据。这个想法是您将所有相关变量收集到一个模拟游戏某些部分的“用户定义类型”中。

例如,我编写了一个非常小的冒险游戏供您检查,看看它是如何工作的:

Wendy 和 Bob 的冒险

#include <string>
#include <iostream>

// this just declares the makeup
// of weapons, it doesn't create any
struct weapon
{
std::string name;
int damage;
};

// this just declares the makeup
// of players, it doesn't create any
// NOTE: it contains a weapon
struct player
{
bool alive;
std::string name;
bool male;
int health;
int armor;
weapon weap;
};

// This performs a single attack
void attack(player& a, player& b)
{
std::cout << "\n";
std::cout << a.name;
std::cout << " strikes at ";
std::cout << b.name;
std::cout << " with " << (a.male?"his":"her") << " ";
std::cout << a.weap.name;

int damage = std::rand() % a.weap.damage;

if(damage == 0)
{
std::cout << " and " << (a.male?"he":"she") << " misses.";
return;
}

int wound = damage - b.armor;

if(wound <= 0)
{
std::cout << " causing no harm.";
return;
}

std::cout << " inflicting ";
std::cout << wound;
std::cout << " damage";

b.health -= wound;

if(b.health < 0)
{
b.alive = false;
std::cout << " killing " << (b.male?"him":"her") << " dead!";
}
else if(b.health < 10)
{
std::cout << " causing " << (b.male?"him":"her") << " to stumble!";
}
else if(b.health < 20)
{
std::cout << " causing " << (b.male?"him":"her") << " to stagger!";
}
else if(b.health < 30)
{
std::cout << " irritating " << (b.male?"him":"her") << " somewhat.";
}
}

int main()
{
std::srand(std::time(0));

std::cout << "Welcome to the Adventures of Wendy & Bob\n";

// We actually create a player here
player bob;

// Give it relevant data
bob.alive = true;
bob.name = "Bob";
bob.male = true;
bob.armor = 4;
bob.health = 100;
bob.weap.name = "knife";
bob.weap.damage = 16;

// same with another player
player wendy;

wendy.alive = true;
wendy.name = "Wendy";
wendy.male = false;
wendy.armor = 3;
wendy.health = 100;
wendy.weap.name = "blade";
wendy.weap.damage = 20;

// Keep fighting till someone dies!
while(bob.alive && wendy.alive)
{
attack(bob, wendy);

if(wendy.alive && bob.alive)
attack(wendy, bob);
}

}

关于c++ - 如何在不使用全局变量的情况下在函数之间使用多个变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26696264/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com