在大多數或所有面向對象的遊戲中,每個類不僅依賴於它自己的父類。這個類的連接是如何在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」,它會發送父母的地址。
然後,看起來好像你是這麼做的。還有一件事,如果你需要人與多於一個類不直接交互的類進行交互,你可以創建一些容器類來存儲指向它們的指針,並且只傳遞一個類來避免構造函數與參數太多。