В настоящее время я пытаюсь сделать RPG-игру, и у меня возникли некоторые проблемы. Это макет у меня до сих пор.
Классы:
- Актер - базовый класс для всего, что «существует», например, отрядов, снарядов и т. Д.
- Юнит - Наследует Актер, основа для всех юнитов.
- Игра - в ней будет только один экземпляр, и он будет содержать указатели на все объекты в игре. Я планирую заставить его вызывать виртуальную функцию gameTick для всех актеров каждые 0,1 секунды.
Проблема, с которой я столкнулся, заключается в том, что я хотел бы, чтобы у всех актеров был указатель на экземпляр Game. Если бы я хотел иметь заклинание, которое наносит 500 единиц урона по радиусу, я бы хотел, чтобы игра обнаружила и вернула все указатели юнитов в этом диапазоне.
Моя проблема в том, что если я включу Game в заголовочный файл Actor, моя программа не будет компилироваться. Как я могу получить доступ к игре у моих актеров? Или я поступаю неправильно?
Заранее спасибо.
// START main.cpp
#include <iostream>
#include "game.h"
int main()
{
std::cout << "All done\n";
return 0;
}
// END main.cpp
// START actor.h
#ifndef __ACTOR_H_
#define __ACTOR_H_
#include <iostream>
//#include "game.h" Causes many errors if uncommented
class Actor
{
public:
Actor();
std::string name_;
};
#endif
// END actor.h
// START actor.cpp
#include "actor.h"
Actor::Actor()
{
name_ = "Actor class";
}
// END actor.cpp
// START unit.h
#ifndef __UNIT_H_
#define __UNIT_H_
#include "actor.h"
class Unit : public Actor
{
public:
Unit();
};
#endif
// END unit.h
// START unit.cpp
#include "unit.h"
Unit::Unit()
{
name_ = "Unit class";
}
// END unit.cpp
// START game.h
#ifndef __GAME_H_
#define __GAME_H_
#include <vector>
#include "unit.h"
class Game
{
public:
std::vector< Actor * > actors_;
std::vector< Unit * > units_;
};
#endif
// END game.h