在大多数或所有面向对象的游戏中,每个类不仅依赖于它自己的父类。这个类的连接是如何在C++中实现的?你只需要为你需要的父类添加一个指针,或者有更好的方法吗?oo游戏的“概念”
例如一场足球比赛,当人员点击它时,问场景课程他是否踢任何球,并且他是否随后移动它。我希望这是可以理解的,不要太抽象。
在大多数或所有面向对象的游戏中,每个类不仅依赖于它自己的父类。这个类的连接是如何在C++中实现的?你只需要为你需要的父类添加一个指针,或者有更好的方法吗?oo游戏的“概念”
例如一场足球比赛,当人员点击它时,问场景课程他是否踢任何球,并且他是否随后移动它。我希望这是可以理解的,不要太抽象。
我不认为在构造函数中传递父项是一个好主意。相反,您应该使用一个维护所有游戏元素和设施之间交互的列表;例如,下面所示的游戏类将检查任何两个玩家之间的碰撞,并且如果它被检测到告诉他们每个人他们被击中以及由谁击中。
我不确定这是否会对您有所帮助,但我已将其输入以供初始回复,因此我不妨提交。请注意,如果您正在讨论纯文本游戏,所有这些仍然是相关的,只是在这种情况下忽略对图形的暗指。游戏的设计是围绕一个连续的游戏循环,并且可以被认为是非常简单的:
while(true)
for each tick:
react to user input
update player, enemies, objects, etc.
end while
其中,“嘀”的比赛计时钟的每一次迭代,但是你选择来实现它 - 基于FPS ,每一秒,无论如何。在你的例子中,用户点击足球,游戏看到点击并告诉足球移动。要做到这一点很简单,维护一个列表中维护状态的所有游戏元素。为了说明,这里是你可以实现这是一个非常基本的方法:设置传入揽入motion--
class Game {
vector<GameElement> elements;
Football football;
Player currentPlayer;
Game() {
this.football = new Football();
}
void update() {
for e in elements:
e.update();
// Once every element has been updated for the current tick, redraw them on the screen
screen.redraw();
}
void addElement(GameElement e) {
elements.add(e);
}
}
class GameElement {
int posx, posy; // screen coordinates
void paint() {}; // method to draw this element to the screen
virtual void update();
}
class Football: public GameElement {
bool kicked;
int anglex, angley;
double velocity;
void update() {
if(kicked){
// update position, angle, velocity; slow it down, check for bounce, whatever
posx = new x position;
posy = new y position;
if(velocity == 0)
kicked = false;
}
paint(); // call the paint method after the new position has been found
}
}
假设有另一个类,从GameElement,播放器继承,有一种方法踢(足球)即,set kicked = True。所以初始化游戏,你会喜欢的东西将它设置:
Game game = Game();
game.add(new Football());
game.add(new Player());
while(true) {
if(user_input==X)
game.currentPlayer.kick(football);
game.update();
sleep(1);
}
可以改成维护,例如层,而不是整场比赛,再上一个台阶类可以调用每个更新按顺序排列图层,允许将事物涂在彼此之上,让孩子只与兄弟姐妹互动。有很多可能性。
陶然成在扑克游戏的工作类似的问题:这是我所采取的方式:
在你的榜样,一个场景* the_scene添加到人的构造函数。然后,当人初始化时,传递一个指向场景的指针。既然你说父母和孩子,如果父母是场景,那么它只会使用“this”,它会发送父母的地址。
然后,看起来好像你是这么做的。还有一件事,如果你需要人与多于一个类不直接交互的类进行交互,你可以创建一些容器类来存储指向它们的指针,并且只传递一个类来避免构造函数与参数太多。