我正在尝试通过制作一个游戏来学习C++ OOP,我有一个Entity类和一个Board类,都包含在main中。我如何在Entity类中编写一个方法来访问Board私有成员,特别是它附近的瓦片?我想编写函数feed()
,根据它附近有多少瓦片是空闲的,将energy
赋给Entity的一个示例。
Entity.h
class Entity{
int x;
int y;
char type;
double energy;
public:
void eat();
... * it has all the constructoros and other stuff but its not relevant
}
Board.h
#include "Entity.h"
class Board{
Entity matrix[20][70];
public:
void printBoard();
Entity getEntity(int i, int j);
... * other functions and contructors. not relevant
}
main.cpp
#include <iostream>
#include "Entity.h"
#include "Board.h"
int main(){
Board* board = new Board();
// here I initialize the board with random entities
}
如何在Entity
中编写一个函数来获取附近的平铺并检查它们?我找不到一种方法来与Entity中的其他类交互。它可以带参数。它不一定要精确为void feed();
3条答案
按热度按时间a5g8bdjr1#
这是设计的问题。你基本上有两个选择:
Board
是包含邻域逻辑的对象,1.或者
Entity
知道它的邻居。在第一种情况下,您需要有一个从任何实体指向电路板的反向指针:
在第二种情况下,构造图元链接到其相邻图元:
第一种情况是首选的(IMHO),因为实体可以很容易地在其他板系统中重用。
jgwigjjp2#
必须有一个角色(或类)应该可以访问每个实体的位置。对于OOP,我建议添加Entity::isNeighbor(int x,int y)或Entity::isNeighbor(const Entity& other),并让Board进行迭代。
注意这可能会导致整个查找的时间复杂度为O(N^2)。你可能想事先对它们进行排序或者使用一些数据结构,如图或邻接矩阵。将来你可能想学习像最近邻这样的算法。
kb5ga3dv3#
您可以在实体类中引用电路板,并在不同的函数中设置,例如