c ++ txt文件逐行字符串和int用于纸牌游戏

Posted

技术标签:

【中文标题】c ++ txt文件逐行字符串和int用于纸牌游戏【英文标题】:c++ txt file into array line by line string and int for card game 【发布时间】:2018-08-12 15:08:27 【问题描述】:

我需要将.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

每一行是:typenameattackhealth

我只能使用类型 1 卡;即我需要每种类型的牌组。

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

【问题讨论】:

可以说,此时您最好的选择是这些C++ books。 1) 定义卡片表示结构; 2) 定义一个函数,读取并返回一张这样的卡片; 3) 反复使用该功能。 如果你做一些谷歌搜索,你绝对可以找到大量的例子。 我用谷歌搜索过,但我很难理解如何实现,因为我在同一个程序中有 2 个文件可以做到这一点。 在互联网上搜索“c++ 读取文件结构空间分隔”。 *** 上已经有很多类似的问题。 【参考方案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&gt;&gt;

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++ 松耦合”和“c++ 紧耦合”。在对现有代码进行更改时,紧密耦合会导致许多令人讨厌的错误。这可以在行业代码中看到。 并不复杂;花时间去理解它。偷工减料会在以后给你带来很大的痛苦。 已经让我的代码正常工作了,我应该开始一个新问题还是只编辑问题?

以上是关于c ++ txt文件逐行字符串和int用于纸牌游戏的主要内容,如果未能解决你的问题,请参考以下文章

libGDX:如何在按键后逐行读取和显示.txt文件中的文本?

C++文件读写操作逐字符读取文本和逐行读取文本

vbs逐行读取txt文件并且逐行复制文件到其它文件中

3.C++逐行读取txt文件数据,利用getline -zobol的windows编程教程

在 Java 中逐行处理文本文件和连字符字符串

如何逐行读取txt文件