私は現在、自分のゲーム デザインで設計上の問題に直面しています。ひどいものではありませんが、十分に気になるので、他の人の意見を聞きたいです :-)
私は現在 pygame を試しています。小さなスペース シューターを開発しましたが、いくつかのボーナスを処理したいと考えています。
現在、私は現在実装されているすべてのボーナスを派生させる抽象クラス ボーナスを持っています: プレイヤーにいくらかのヘルスを戻す「ヘルス ボーナス」、プレイヤーのヘルスを 1 に落とす「デス ボーナス」です。
私のゲームループでは、これが私がしていることです(大まかに):
def testCollisionBonusBolt():
#bolts are sprites fired by the player that allow him to get the bonuses
collisions = pygame.sprite.groupcollide(bonusesGroup, boltsGroup, True, True)
for col in collisions:
player.bonuses.append(col)
そして、プレイヤーにボーナスを使うように言った直後
class Player:
...
def useBonuses(self):
for bonus in self.bonuses:
bonus.use(self)
これまでのところはすべて問題ありませんが、プレイヤーが撃ったときに爆発して周囲の敵を殺す「爆弾ボーナス」を追加したいと思います。
この「ボーナス」は、私の抽象クラス Bonus の「use(target)」メソッドを他のものと同じように実装していますが、そのようなボーナスをプレーヤーのボーナスのリストに追加するのはちょっと悪い気がします。
ボーナスの背後にある概念は、これが「何かに何かをするもの」であるということです。以前は私のプレーヤークラスのターゲットでしたが、今ではそれほど明確ではありません...もちろん、どのボーナスがどこにあるかを検出した後に player.useBonuses() を呼び出す代わりにたとえば、ボーナスのタイプを(isinstanceを使用して)テストできましたが、ダックタイピングについて読んだすべての議論の後、なぜそれがpythonicな方法なのか、ボーナスの問題をどのように管理できるのか疑問に思っていますか?
ここまで読んでくれてありがとう、皆さんが私を助けてくれることを願っています!
よろしく