RPG等でのアイテムの処理

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
雨蛙

RPG等でのアイテムの処理

#1

投稿記事 by 雨蛙 » 14年前

C++でRPGを作ろうと考えて勉強中なのですが、アイテムの考え方で行き詰ってしまいました

不思議のダンジョンシリーズやMMORPGなど、アイテム集めが楽しみの一つであるゲームのなかには、
アイテムに、
「祝福されたロングソード+3
・攻撃力10
・3方向に攻撃できる
・STRを4あげる」
のようについているものがあります。
このようなアイテムのシステムをもったゲームを作るときの、変数の形などはどのようにすればいいのでしょうか?

・アイテムクラスに、種類や値段などの情報、追加効果のリストを持たせる
・プレイヤークラスにアイテムのリストをもたせて、その中にアイテムオブジェクトを入れる
として、listを使えばよさそうとまではわかったのですが、この使い方がよくわかりませんでした。

int型のソートの仕方などはわかったのですが、クラス中の変数を使ってソートする方法がよくわからず、
ここがわかれば何とかなりそうです。

環境はVC++2010Expressを使っています。
C/C++は龍神録の館の内容を1からやって、その他サンプルなどを中心に勉強したぐらいです。

アバター
h2so5
副管理人
記事: 2212
登録日時: 15年前
住所: 東京
連絡を取る:

Re: RPG等でのアイテムの処理

#2

投稿記事 by h2so5 » 14年前

雨蛙 さんが書きました: int型のソートの仕方などはわかったのですが、クラス中の変数を使ってソートする方法がよくわからず、
ここがわかれば何とかなりそうです。
メンバ変数を比較する比較関数を定義して、listのsort関数の引数に渡すことで実現できます。
サンプルコードを書いてみました。

コード:

#include <iostream>
#include <list>
using namespace std;
 
class item{
public:
    // 値段
    int price;
    // コンストラクタ    
    item(int _price) : price(_price){};
    
    // 値段で昇順にソートする比較関数
    static bool comp(const item &a, const item &b);
};
 
bool item::comp(const item &a, const item &b){
    return (a.price < b.price);
}
 
int main() {
    
    list<item> itemList;
    itemList.push_back(item(200));
    itemList.push_back(item(500));
    itemList.push_back(item(100));
 
    // 比較関数を使ってソート
    itemList.sort(&item::comp); 
    
    // 出力
    for(list<item>::iterator it = itemList.begin();it != itemList.end();++it)
        cout << it->price << endl;
    
    return 0;
}

雨蛙

Re: RPG等でのアイテムの処理

#3

投稿記事 by 雨蛙 » 14年前

ありがとうございます
比較関数をitemクラスに持たせればいいのですね
あと、後出しになってしまって申し訳ないのですが、変数を指定してソートする簡単な方法はないでしょうか?
たとえばitemクラスが、
int price とint typeの二つの関数を持つ場合に、
sort( price )やsort ( type )のようにソートするにはどうすればいいのでしょうか。
さらには、type=1のものだけを抜き出して、priceの順にソートする方法なども知りたいです。

もうひとつ、プレイヤークラスにアイテムのリストを持たせたい場合は、
class pleyer{
list<item> itemlist;
}
のようにして、Pleyer.itemlist.sort(&item::comp)のように指定すればいいのですか?

返信も遅く質問を後から追加してしまってすみません。

もし、RPGを作る上で、キャラクタの描画方法やマップチップなどの解説ではなく、このようなアイテムの処理方法や、クラスの使い方を解説しているサイトなどあれば教えてくださるとありがたいです

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: RPG等でのアイテムの処理

#4

投稿記事 by softya(ソフト屋) » 14年前

雨蛙 さんが書きました:あと、後出しになってしまって申し訳ないのですが、変数を指定してソートする簡単な方法はないでしょうか?
たとえばitemクラスが、
int price とint typeの二つの関数を持つ場合に、
sort( price )やsort ( type )のようにソートするにはどうすればいいのでしょうか。
比較関数を増やせばよいだけだと思います。
これはC言語のqsortでも変わりませんよね。
雨蛙 さんが書きました:さらには、type=1のものだけを抜き出して、priceの順にソートする方法なども知りたいです
type=1の物を優先してpriceの順にソートする比較関数を作れば良いのではないでしょうか?
雨蛙 さんが書きました:は、
class pleyer{
list<item> itemlist;
}
のようにして、Pleyer.itemlist.sort(&item::comp)のように指定すればいいのですか?
試してみれば分かります。
そうしたほうが自分で自分の知識としてモノに出来るって事ですね。
そう心配せずに、とりあえず書いてみませんか?
雨蛙 さんが書きました: もし、RPGを作る上で、キャラクタの描画方法やマップチップなどの解説ではなく、このようなアイテムの処理方法や、クラスの使い方を解説しているサイトなどあれば教えてくださるとありがたいです
私は存じません。
こう言うところは自分で考えたほうが面白いと私は思いますけど。
多少効率悪くてもプレイ時に分からなければOKです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

雨蛙

Re: RPG等でのアイテムの処理

#5

投稿記事 by 雨蛙 » 14年前

わかりました。とりあえずいろいろ試してみます

閉鎖

“C言語何でも質問掲示板” へ戻る