2016-10-04 32 views
0

我是编程初学者,我正在用C++制作一款RPG类游戏。(C++)如何从另一个文件调用结构?

目前我只有在使用两个文件在我的程序,它运行的程序,并做一切一个文件,充当游戏中的各种敌人的数据库,以及其他。

“数据库”具有结构模板:

struct monster 
{ 
    string monsterName; 
    int maxMonsterHP; 
}; 

然后在“数据库”文件下:

struct monster starfish; 

starfish.monsterName = "starfish"; 
starfish.maxMonsterHP = 5; 

我的问题是,在我的“主要”的文件,怎么办我呼吁这些价值观并与他们一起工作,像这样?

void monsterAttack(starfish) 
{ 
    cout << "A " << monsterName << "is attacking!" << endl; 
    cout << maxMonsterHP; 
} 

“数据库”文件有遵循此结构中的多个不同的怪物,我想在主代码能够与所有的人一起工作。

+1

你需要一个.h文件,它包含'struct monster'定义,'#include'这两个'.cpp'文件的头文件。 – zneak

+0

和一个'extern struct monster starfish;'在数据库头部,让主看到'海星'。但是我可以提供'std :: map 怪物;'作为替代一站式商店来满足你所有的怪物需求?用法是'怪物[“海星”]'得到海星或'怪物[“Otyugh”]'得到一个Otyugh。在这种情况下,你需要传递的是“怪物”,而不是单个怪物的群体。 – user4581301

+0

@zneak我做了一个头文件,其中包含类“myheader.h”,然后我把'#include“myheader.h”'放在主文件和数据库文件中。如何调用数据库值以在主函数中使用它们? –

回答

0

恭喜冒险尝试学习C++,因为你获得的经验,它会打开你的心思考一种全新的方式。

对于C++初学者有几个提示,可以帮助你在你的方式。 C++是一种面向对象的语言。普遍同意适用于所有面向对象语言的原则和最佳实践。对于你的例子来说,这可能看起来没有必要,但是随着你的项目规模,范围和复杂性的增长,特别是如果你想创造一个真实的游戏,某些实践和思维方式是必须的。

你的问题涉及的面向对象的软件设计的核心原则之一。

在C++中存在structclass关键字用于封装到对象中。它通常是一个很好的实践组相关行为相关数据到合理尺寸的类或源代码的结构。

C++程序员通常将放置对象定义.HPP.H头文件。这是您定义对象结构的位置,并声明变量和函数成员。然后在你使用物体的地方,在你的情况下,你的main()函数,你将包括你的对象的定义与 #include "YourClass.hpp"

其他文件扩展名,你会经常看到的是的.cpp这是对象实施生活。为了实现你的对象的行为,你需要告诉编译器在.cpp文件的顶部包含#include "YourClass.hpp"的对象头部。

这种做法称为从实施分离的定义。你会发现这个过程提高了可读性,同时也提高了编译速度,因为这就是设计语言的使用方式。

摘要:

定义定义头文件.HPP

实现在实施文件你的对象行为的.cpp你的对象

粗体:

下面是类或结构的粗略框架。

// -- your 'MyClass.hpp' file 

class MyClass 
{ 

private: 

    // private member variables go here (invisible from outside) 

    float bar; 

    int foo; 

public: 

    // these are your public member functions 

    // the first two functions are the constructor and destructor 
    // they get called when the object is created and destroyed 
    // respectively 

    MyClass(); 
    ~MyClass(); 

    // other member functions go here 

    int fooFunction(float someArg); 

    // ...etc 

private: 

    // private member functions go here 

    void someOtherFunction(); 

    // ...etc 

} 

然后你的.cpp实现文件看起来是这样的。

// -- your 'MyClass.cpp' file -- 


#include "MyClass.hpp" 

// constructor function implementation 
MyClass::MyClass() 
{ 

    // put code that happens when the object is created 

    foo = 12.0f; 

    std::cout << "Object 'MyClass' created!" << std::endl; 

} 

// destructor function implementation 
MyClass::~MyClass() 
{ 

    // put code that happens when the object is destroyed 

    std::cout << "Object 'MyClass' destroyed!" << std::endl; 

} 

int MyClass::fooFunction(float someArg) 
{ 

    foo = someArg; 

} 

void MyClass::someOtherFunction() 
{ 

    // do something 

} 

我知道你刚开始学习C++,但我对你的建议是首先拿起几个不错的入门书籍上C++。我真的很喜欢C++ Primer 5th Edition。然后你应该熟悉一般的OPP编码实践。

如果您觉得在模式感到舒服,并认真对待游戏开发,请看看Game Engine Architecture, 2nd和[游戏编码完成,第4] [3]。

通过系统地学习编程和C++,它将为您节省大量时间和头痛。互联网充满了像你这样的人的许多伟大的资源。祝你好运!

+0

您不要在标题中声明对象。您可以在头文件中定义类,并在.cpp文件中声明/实例化。 – nicomp

相关问题