2

わかりました、今私はテキストベースのRPGの骨組みを持っています。

あなたはいつも知っています:健康モンスターの場所の金の攻撃など

しかし、私が決して解決できなかったのは、クラスがどのように機能するか、複数の .cpp ファイルを使用してゲームを分割し、管理しやすくすることです。

私の質問は、「ランダム化された武器」(疑似ランダムのように)のインベントリを作成するにはどうすればよいですか+複数の.cppファイルを一緒に使用してコードの別々の部分を保持する方法について説明がある人はいますか.

私は複数の説明とハウツーを読みましたが、ほとんどが頭痛の種であるか、ただのゴミで何も説明していないことを覚えておいてください.

必要に応じて、いつでも改善および変更できることを知っているので、コードをコピーして貼り付けビンに貼り付けて見ることができます。

4

1 に答える 1

3

あなたの質問は広すぎると思います。しかし、とにかく提案を提供します。

おそらくRPGなので、見つけることができるアイテムはたくさんあります。いくつかは武器であり、いくつかは鎧であり、いくつかは他の価値があり、そしていくつかは単に役に立たない。私がこれに近づいていた場合、私はそれらすべてを表すクラスを持ってそれを呼び出すことを選ぶかもしれませんItem。私はこれから型を導き出すかもしれません:、、、Weapon.. ..ArmourTrinket

また、どういうわけか、すべての武器をプログラムに登録します。単純なコンストラクターがあったとしましょう...

Weapon::Weapon( const char *name, int cost, int minlevel, int damage, int speed );

さて、この武器のレジストリ/リポジトリは、私が賢明だと感じたどんな種類のコンテナでもあります。これは、Cスタイルの配列、、、または名前の検索を可能vectorにするものである可能性があります。map他の素晴らしいことをすることができるのは、あなたが自分で作成したクラスでさえあるかもしれません。それでは、それを実行しましょう(内部的には、を使用する場合がありますvector)。

あなたが起動するとき、あなたはあなたのすべてのアイテムを登録したいと思うでしょう。異なるアイテムタイプのレジストリに別々のリストを保持していると想像してみましょう。ですから、あなたはAdd武器用の機能と鎧用の機能を持っているかもしれません。

void Repository::Add( Weapon &weapon )
{
    weapons.push_back(weapon);
}

初期化は次のようになります。

Repository repository;   // A global somewhere, maybe...

repository.Add( Weapon( "Plastic Spork", 1, 1, 1, 10 ) );
repository.Add( Weapon( "M. C. Hammer", 5, 5, 5, 15 ) );
repository.Add( Weapon( "Stroustrup", 1000, 100, 0x7fffffff, 1 ) );
// etc...

これで、すべての武器(およびその他のアイテム)をリポジトリで使用できるようになりました。ランダムな武器の束を選択することは今では非常に簡単です。

Weapon Repository::RollWeapon( int minlevel )
{
    //...
}

つまり、私があなたの質問を正しく理解した場合です。おそらくあなたはランダムな統計で武器を生成したいと思っています。これを行うにはいくつかの方法がありますが、登録されたアイテムの統計をランダム化/混乱させる関数をオンにするWeapon(または実際に)ことを検討することをお勧めします。Item

virtual void Item::RandomizeStats();

この関数の武器バージョンは、デフォルトdamage値を使用して+/- 20%変更する可能性があります。その場合、それはこれと同じくらい簡単かもしれません:

virtual void Weapon::RandomizeStats()
{
    int amount = damage / 5;
    damage += (rand() % (amount * 2 + 1)) - amount;
}

そして、それをリポジトリに組み込むこともできます。

Weapon Repository::RollRandomizedWeapon( int minlevel )
{
    Weapon w = RollWeapon( minlevel );
    w.RandomizeStats();
    return w;
}

とにかく、この答えの何かがあなたに役立つことを願っています。私の側にはかなりの推測があります...

于 2012-09-17T03:14:13.427 に答える