gpt4 book ai didi

c++ txt文件逐行字符串和纸牌游戏int成数组

转载 作者:行者123 更新时间:2023-11-30 02:18:49 25 4
gpt4 key购买 nike

我需要将一个.txt 文件读入一个数组 并将它们存储在一个deck 中。 .txt 文件如下所示:

1 Dwarf 2 4
11 Armour 1
6 Wall 0 5
10 Sword 2
4 Bless 2 2
1 Cannon 4 1
1 Dwarf 2 4
1 Cannon 4 1
2 Fireball 3
1 Cannon 4 1

每一行是:type name attackhealth

我只能使用类型 1 卡;即,每种类型我都需要一个套牌。

我已经看过了,但我正在努力寻找这个特定问题的答案。谁能用通俗易懂的英语为我指出正确的方向?

最佳答案

假设您的记录如下所示:

1 Dwarf 2 4

在类里面建模:

class Type_1_Card
{
int type;
std::string name;
int attack;
int health;
};

建模中,您可以选择最适合数据列的类型和成员。
每行都是模型的一个实例。

说到行,您需要为每一行提供某种容器(也称为数据库)。由于行数在运行时未知,因此请使用std::vector,因为它可以根据需要进行扩展。

std::vector<Type_1_Card> database;

为了遵循数据隐藏封装 的原则,我们将让类输入数据,因为类知道布局(字段和成员)。 C++ 允许重载运算符和方法,因此我们将重载一个熟悉的方法:operator>>

class Type_1_Card
{
// yada, yada, yada
public:
friend std::istream& operator>>(std::istream& input, Type_1_Card& card);
};

std::istream&
Type_1_Card ::
operator>>(std::istream& input, Type_1_Card& card)
{
input >> card.type;
input >> card.name;
input >> card.attack;
input >> card.health;
return input;
}

这通过允许在卡片中读取以下代码来隐藏数据:

std::fstream data_file(/*...*/);
Type_1_Card card;
while (data_file >> card)
{
database.push_back(card);
}

神奇的是,card 的内容没有暴露、隐藏,功能被封装到类或对象中。

编辑 1:扩展封装
在您的程序中,您可能希望按名称查找卡片。您可以向类添加一个方法,然后搜索数据库:

class Type_1_Card
{
// yada, yada, yada
public:
bool is_card_name(const std::string& key_name) const
{
// Remember, comparison is case sensitive, 'A' != 'a'
return name == key_name;
}
};

这允许您使用名称在数据库中搜索卡片。
这是蛮力技术。有使用库函数的更简单的方法,但这有待进一步研究。

const size_t index = 0U;
const size_t size = database.size();
for (index = 0; index < size; ++index)
{
if (database[index].is_card_name("Dwarf"))
{
std::cout << "Dwarf card found at index " << index << "\n";
}
}

关于c++ txt文件逐行字符串和纸牌游戏int成数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51810082/

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