C/C++言語でRPGを作ってみるスレ2
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2005/07/09(土) 15:12:42まとめサイト
http://himatanuki.hp.infoseek.co.jp/
まとめサイト(Wiki)
http://gamdev.org/w/?%5B%5BC%2FC%2B%2B%B8%C0%B8%EC%A4%C7%A3%D2%A3%D0%A3%C7%A4%F2%BA%EE%A4%C3%A4%C6%A4%DF%A4%EB%A5%B9%A5%EC%5D%5D
前スレ
C/C++言語でRPGを作ってみるスレ
http://pc8.2ch.net/test/read.cgi/tech/1114834076/
0232デフォルトの名無しさん
2005/07/22(金) 18:57:27構造体の配列にするといいと思う。
struct CHIP{
int image;
int movable;
int enemy_type;
};
class CMap {
CHIP *m_pbyMap;
…
}
0233207
2005/07/22(金) 19:23:37>敵の出現情報とか(川の向こうとこっちじゃ出てくる敵の種類が違う、みたいなやつ)は、
>マップチップに持たせたほうがいいんですかね?
それは別にした方が良い(出現情報自体が、地形情報とは異質の一つの
マップになるから)のでは?
配列で持つなら
地形(表示用マップチップ)
遭遇する敵
イベント情報(イベント番号)
はそれぞれ別にする方がわかりやすいと思う。
0234デフォルトの名無しさん
2005/07/22(金) 19:50:54GDI+については良く分かってないもので適当ですが多分もっと早くなると思う。
DirectDrawとGDI_DDBが早いのはデバイス依存形式で
ビットマップを使っていて、かつビデオメモリにイメージがあるからです。
ttp://himatanuki.hp.infoseek.co.jp/cgi-bin/uploader/src/up0011.lzh
0235デフォルトの名無しさん
2005/07/22(金) 22:58:58GDI+はどうやっても速くならないと思う
0236デフォルトの名無しさん
2005/07/22(金) 23:48:540237デフォルトの名無しさん
2005/07/23(土) 00:55:37微妙にチャットできるようになったらUPします。
0238デフォルトの名無しさん
2005/07/23(土) 05:19:34どうもです。
そうか、構造体って手段がありましたね。
そのほうがわかりやすそうです。
マップエディタ作るまえに、最終的な仕様を決めとかないと
あとで大変なことになりそうですね。。
イベント情報もマップデータが持つのか。
マップチップ構造体
○絵
○敵のタイプ
○イベント情報
○なんか1ビットずつのフラグ
こんな感じになるのかなあ。
↑のやつだと、全部BYTE型ですみそうですけど、
念のためint型で宣言しといた方がいいのかなあ。
でもそれだとメモリいっぱい使いそうだし。
>>234
おつです。
やっぱ、けっこう差があるんですね。
ウチでもDirectDrawのビデオメモリverが異常に早かったようです。
>>237
うはww なんか、高レベルな感じ。
がんばってください。
0239デフォルトの名無しさん
2005/07/23(土) 06:21:09ttp://lamoo.s53.xrea.com/develop/gdiplus/gdiplus_blt.html
GDI+はここのBitmap-OFF と Bitmap-ONの状態で、
Cache-OFF Cache-ONを使えば1.5倍ぐらいになるのは目に見えてる。
内部はDIBだと思うのでその程度の速度にはなるはず。
基本的にGDI+はゲームにつかうためのものじゃ無いとは思うけど。
0240デフォルトの名無しさん
2005/07/23(土) 06:37:00仮に1チップあたり贅沢に16バイト使うとしても
たとえば50x50チップの町を表現するのに 40KBytes。
これは256色ビットマップ200x200程度の容量。ぜんぜん気にならない。
ちなみに SFC の RPGツクールでは、世界マップが 256x256 だった。
これだとちょうど 1MBytes 必要になるな…。今の PC なら気にならんだろうけど。
(それに1チップ16バイトも使わないだろう)
設計さえしっかりしてれば
メモリの節約なんて、完成の1歩手前でも十分間に合うから、
今は作りやすさを優先したほうがいいと思う。
0241デフォルトの名無しさん
2005/07/23(土) 11:19:21>メモリの節約なんて、完成の1歩手前でも十分間に合うから、
通常、それは設計がしっかりできていないというんだよ。
0242デフォルトの名無しさん
2005/07/23(土) 11:56:53それにちっと位贅沢設計でも問題ないだろ。
仮に出来上がったものが1Gbyte以上必須だとしても、それはそれで面白い。
ま、1Gは大げさだが256M位だったら問題なしだろ。
0243デフォルトの名無しさん
2005/07/23(土) 13:32:20それより重要なことがある
設計者として節約の感覚はあったほうがいいとは思うが、
ゲームやるPCのメモリは潤沢だろ
0244デフォルトの名無しさん
2005/07/23(土) 13:45:000245デフォルトの名無しさん
2005/07/23(土) 13:46:490246デフォルトの名無しさん
2005/07/23(土) 14:44:080247デフォルトの名無しさん
2005/07/23(土) 14:46:020248デフォルトの名無しさん
2005/07/23(土) 15:45:31設計がしっかりしているとメモリの節約さえ柔軟にできないのですか?(ニヤニヤ
0249デフォルトの名無しさん
2005/07/23(土) 15:51:34設計がシッカリしているのがまるで悪いことのように思える文章だ。
0250デフォルトの名無しさん
2005/07/23(土) 15:56:54>>241
0251デフォルトの名無しさん
2005/07/23(土) 16:02:26まずは、完成させることが大事であるわけだが。
0252デフォルトの名無しさん
2005/07/23(土) 20:09:170253デフォルトの名無しさん
2005/07/23(土) 20:16:300254デフォルトの名無しさん
2005/07/23(土) 21:56:150255デフォルトの名無しさん
2005/07/23(土) 23:26:46255ゲット。
0256デフォルトの名無しさん
2005/07/23(土) 23:38:170257みふね
2005/07/23(土) 23:42:260258デフォルトの名無しさん
2005/07/24(日) 01:59:550259デフォルトの名無しさん
2005/07/24(日) 12:07:470260デフォルトの名無しさん
2005/07/24(日) 12:28:14ネトゲ進んでますか?
陰から応援してまつ。
0261デフォルトの名無しさん
2005/07/24(日) 20:00:43好きにさせてね 大人にはわかんない
ステキ 奇跡 完璧(ハイ!
0262デフォルトの名無しさん
2005/07/25(月) 19:08:570263デフォルトの名無しさん
2005/07/25(月) 19:35:19それ以外は苦行です (T_T)
0264デフォルトの名無しさん
2005/07/25(月) 19:49:18さすがに気が滅入ってくる。(ハァ...
0265デフォルトの名無しさん
2005/07/25(月) 20:19:570266デフォルトの名無しさん
2005/07/25(月) 23:55:15悪いことは言わん
2Dの短編から作れ
0267デフォルトの名無しさん
2005/07/26(火) 06:53:15http://himatanuki.hp.infoseek.co.jp/
の内容が更新されてないようだが、
いったいどうゆうマネかね。
0268デフォルトの名無しさん
2005/07/26(火) 07:04:200269デフォルトの名無しさん
2005/07/26(火) 07:11:35そう思っていた時期が俺にもありました
今は反省して全てテキストファイルに手書きです
0270デフォルトの名無しさん
2005/07/26(火) 07:47:350271デフォルトの名無しさん
2005/07/26(火) 08:03:14お決まりのルーチンを一からコーディングするなんて無駄が大きすぎる
0272デフォルトの名無しさん
2005/07/26(火) 11:59:450273デフォルトの名無しさん
2005/07/26(火) 15:13:37http://himatanuki.hp.infoseek.co.jp/cgi-bin/uploader/upload.cgi
へtxt形式でうpしますた。
up0012.txtが該当ファイルです。
0274デフォルトの名無しさん
2005/07/26(火) 18:45:34>氏牢徒に長編3DRPGは作れるのか。
>>269
>ゲームはアイテム等のデータを作るためのエディタ作りからはじめなければならない
こんな考え方もありまする。
デザインの「悪い方がよい」原則 "Worse is Better"
http://chasen.org/~daiti-m/text/worse-is-better-ja.html
0275デフォルトの名無しさん
2005/07/26(火) 19:07:110276デフォルトの名無しさん
2005/07/26(火) 20:55:42「こうしなければいけない」とか「こうするのがベスト」なんて一概には言えない。
10人いれば10通りの作り方があるのがゲーム作りであり RPG 作りだ。
耳学問をいくら積み重ねても絶対に作れるようにはならない。
唯一確かなのは他人のソースコードを参考にして自ら作ってみることだ。
それ以外に道は無い。
0277デフォルトの名無しさん
2005/07/26(火) 21:01:51数学なんて7000年以上前と言われてるんだから
0278デフォルトの名無しさん
2005/07/26(火) 21:43:560279デフォルトの名無しさん
2005/07/27(水) 00:37:410280デフォルトの名無しさん
2005/07/27(水) 01:20:36それがどうした?
0281デフォルトの名無しさん
2005/07/27(水) 11:47:500282デフォルトの名無しさん
2005/07/27(水) 13:23:500283デフォルトの名無しさん
2005/07/27(水) 13:26:140284デフォルトの名無しさん
2005/07/27(水) 14:53:310285デフォルトの名無しさん
2005/07/27(水) 20:16:120286デフォルトの名無しさん
2005/07/27(水) 20:36:370287シープラ勉強中 ◆ryjMYLsfPA
2005/07/27(水) 20:50:08定期です。とにかく村人出してみました。
週に二回のペースで上げようと思ってたんですが、
無理っぽいです ノω`)・゚・。。
着手してそろそろ一ヶ月がたつというのに、終わりが見えない。。
8月中に完成させたいと思ってたのですが、絶望的な感じです。
次はなにをやるべきですかね?
音か・・描画か・・はたまた戦闘とか。。
マップエディタも作らなきゃだし、そえばメニューもまだ無いし、
村人はセリフをしゃべれないし。
てゆか、そもそも本来の目的である、クラスの使い方はこれでいいのか、
メモリリークは本当にしてないのか。
orz...
0288デフォルトの名無しさん
2005/07/28(木) 00:29:58残念ながらオブジェクト指向の持ち味はあんまり生かされてないぜ…
完成させるほうが大事だと思うのであんまり突っ込まないけど。
>音か・・描画か・・はたまた戦闘とか。。
>マップエディタも作らなきゃだし、そえばメニューもまだ無いし、
>村人はセリフをしゃべれないし。
絵をゴージャスにするとやる気が出る。これオススメ。
セリフ機能を入れるだけでプチ物語が作れる。これもやる気出る。
マップエディタを作ると疲れてやる気が消耗する。初めはテキストファイル手書きがオススメ。
0289デフォルトの名無しさん
2005/07/28(木) 17:22:500290デフォルトの名無しさん
2005/07/28(木) 18:44:18> セリフ機能を入れるだけでプチ物語が作れる。これもやる気出る。
> マップエディタを作ると疲れてやる気が消耗する。初めはテキストファイル手書きがオススメ。
>>288の要望だなw
0291シープラ勉強中
2005/07/28(木) 20:16:53オブジェクト指向・・。
今はカプセル化とか全然考えてなかったり ^^
最終的にはインターフェースっぽいの以外は隠蔽しちゃうのが
理想的だと思うのですが、私が雑魚なためにどれがインターフェースに当たるのかが
作った段階でイマイチ判断できないので、結果的に全部publicに置くことに・・
あと、オブジェクト間のメッセージのやりとりってのが全然わからないです orz
今は、たとえばマップ動かしたときPlayerの座標を修正する場合、
マップクラスのメンバ関数にPlayreをドーンと参照渡しして、
その中でPlayerの座標をバンバン変えちゃってるんですが、
これはオブジェクト指向的には大丈夫なんでしょうか?
うーん、よくわからず・・
提案してくれた「絵をゴージャス」にってのは私の画力では
不可能なのであきらめるとして、次はセリフに挑戦してみまっす!
とりあえず、
msg1:ここはアリアハンの城下町です。
msg2:北には洞窟があるらしいですよ。
msg3:スライムは弱いけど、おおアリ食いには注意してください。
みたいなテキストファイルを用意しといて、
村人にしゃべりかけたときメッセージの番号で判断して
しゃべらせばいいんでしょうか?
ファイル操作とかほとんどやったことがないので、メチャてこずりそう。
0292シープラ勉強中
2005/07/28(木) 20:18:17>>289
マップエディタはとにかく自分で挑戦してみて、ダメっぽかったら
それ使ってみます。ども。
子ウィンドウとか、どうやって出すんだろ。
あー、課題がいっぱいだわ。
0293デフォルトの名無しさん
2005/07/28(木) 20:47:170295デフォルトの名無しさん
2005/07/28(木) 22:10:39>オブジェクト指向
>オブジェクト間のメッセージのやりとり
例えとしては、
class Player{ //プレイヤークラス
Position m_charaPosition; //メンバ変数 キャラクタの座標)
public:
Position getPosition(){return m_charaPosition}; //キャラクタの座標を返す
void setPosition(Position position){m_charaPosition = position;};//メンバ変数にキャラクタの座標をセットする
}
こんな感じ
Positionはユーザー定義の座標クラス(か構造体)
set〜で外から受けて、get〜で外へ渡す
メンバ変数を直接扱うと、間違った使い方をされてもエラーを返せないから
メンバ関数にしてエラーが出にくいようにしてやろうって事
本当はちょっと違うんだけどね
0296デフォルトの名無しさん
NGNGクラスにまとめましょうっていうことですよ。
例えば、NPCなら現在の座標、どっちを向いているか、
グラフィック、会話データなんかをまとめるわけですよ。
オブジェクト間のメッセージというのは、
例えばNPCが移動したいとするわけですよ。
そうしたときに、マップオブジェクトに問い合わせるわけですよ。
「(x,y)に行ってももいいですか?」
「はい。いいですよ。」
とか。そんな感じですよ。
0297デフォルトの名無しさん
2005/07/28(木) 23:13:49>>291が世界は神がチェスのごとく物体を動かすことで構成していると思うならその手法が最も自然である。
しかし物体が意思を持って自分の判断で歩いていると思うなら>>296のようにするのがいい。
0298シープラ勉強中
2005/07/29(金) 19:38:53ご丁寧にありがとうございます。
参考にしまっす!
>>296 >>297
うーん、メッセージのやりとりはそんなに限定的にやらなくても良さげですね。
座標を変えたい場合は必要なデータだけconstで渡して、
結果を戻り値でPOINT構造体あたりに受け取ったほうが
いいのかとか思ってたんですが、そうすると無駄にプログラムが長くなるし、
どうしようかと考えてました。
とりあえず今まで通り、オブジェクト全体を参照渡しする方法で行ってみます。
毎度毎度、どうもありがとうございます m(__)m
0299デフォルトの名無しさん
2005/08/01(月) 04:39:470300デフォルトの名無しさん
2005/08/01(月) 12:53:480301デフォルトの名無しさん
2005/08/02(火) 09:07:400302シープラ勉強中 ◆ryjMYLsfPA
2005/08/02(火) 14:58:42http://49uper.com:8080/html/img-s/69247.zip
テキストファイルから、任意の文字列を読み込むプログラムを作ってみました。
msg:00000>0です!
msg:00001>aaa
msg:00002>(*^ー゚)b
てな感じのテキストファイルを用意して、
まずテキストファイル全体をメモリ上に読み込む →
メモリ上で「:」を探す → 「:」から「>」の間の数字を読み込む →
数字が指定された数字といっしょなら「>」の後ろの文字列を表示 →
「\n」まで表示されたら関数終了
という流れになってると思うんですが、
文字を出すだけならこれでいいでしょうか?
なんか無駄にプログラムが複雑になってるような気がするのですが・・。
0303デフォルトの名無しさん
2005/08/02(火) 15:02:52専用ツールを作るまではエディタで手打ちすることになるわけだが、
そんなフォーマットじゃ毎回毎回面倒だと思うぞ。
ついでに言えば、csvかtsvにしておくとExcelで一覧できるし何かと便利だぞ。
#と言うわけで、仕様にダメだししたのでソースは見ないw
0304デフォルトの名無しさん
2005/08/02(火) 15:59:47Cのソースからテキストデータだけを分離するのが目的なら
それでも構わんが…全くスマートでは無いw
まぁ、イベントをハードコーディングする方向でいってみるのも
勉強になるだろw
0305シープラ勉強中
2005/08/02(火) 17:35:04ひえー、なんか、めちゃめちゃアフォプログラムって言われてる気がww
>>201みたいなのは私には無理っぽいので、
仕様が決まるまでとりあえずテキストの書式は保留ということで ^^
てゆか、永久に保留しときたい・・
エクセルは触ったことないので、使わない方向で。
どもです m(__)m
0306C++初心者
2005/08/02(火) 17:37:50std::vector<std::string*> messages;
bool LoadFile(char* fname){
std::ifstream ifs(fname);
char line[512], buf[512];
int idx;
if(ifs == false)
return false;
while(ifs.getline(line, sizeof(line))){
if(strstr(line, "msg:") != NULL){
sscanf(line, "msg:%d>%s", &idx, buf);
messages.push_back(new std::string(buf));
}
};
return true;
}
public:
CText(char* fname){
if(LoadFile(fname) == false){
std::cout << "失敗" << std::endl;
exit(1);
}
}
~CText(){
std::vector<std::string*>::iterator it;
for(it = messages.begin(); it != messages.end(); it++){
delete (*it);
}
}
void Draw(int idx){std::cout << messages[idx]->c_str() << std::endl;}
};
暇なんでちょっと書き換えてみたお、どうなんだろ。
0307デフォルトの名無しさん
2005/08/02(火) 18:57:51こんな感じのをお勧めする。間の改行数自由で。そんな難しくはない。
:msg0
0です!
:msg1
aaa
:msg2
(*^ー゚)b
0308デフォルトの名無しさん
2005/08/02(火) 19:05:26例えば、
msg.....1.......aaa
msg.....2.......(*^ー゚)b
みたいなんでいいじゃん。
#ドットのところはタブね。
それなら、1行分の解析もsscanf(line, "%s%d%[^\n]", ...)でいいし。
>306
文字列を%sにしちゃうと空白入れられないぞ。
そもそもmsgも固定でいいなら、
3.......orz
で充分だしね。
0309デフォルトの名無しさん
2005/08/02(火) 19:09:18私は文字列中に\nがあったら改行するなんて仕様をよく作るけど。
0310307
2005/08/02(火) 19:18:32こういうの初めてな人には数字読取のところで「??」ってなるかもしれんが、たぶん定石なので覚えるべし。
bool get_message(const char* in,int id,char* out)
{
const char* p=in;
char* q=out;
int c,n;
//
while(p=strstr(p,":msg")){
//数字までシーク
p+=4;
//数字読取
n=0;
while(*p>='0' && *p<='9'){ n*=10; n+=*p-'0'; p++; }
//メッセージ
if(n==id){
//メッセージ先頭までシーク
while(*p=='\n')p++;
//メッセージ読取
while(*p!='\n'){
*q++=*p++;
}
*q++='\0';
//成功
return true;
}
}
//失敗
return false;
}
0311307
2005/08/02(火) 19:23:14使用例
int main()
{
char in[]=
":msg0\n"
"0です!\n"
"\n"
":msg01\n"
"aaa\n"
"\n"
":msg23\n"
"(*^ー゚)b\n"
"\n";
int id=23;
puts(in);
printf("--↑抽出(ID=%d)↓--\n",id);
char ret[256];
if(get_message(in,id,ret)){
puts(ret);
}else{
puts("Error");
}
}
0312デフォルトの名無しさん
2005/08/02(火) 19:43:14うはwwスゴイwww
なんかいろんな技がいっぱいつまってるww
めちゃめちゃ鵜呑みにしちゃいます!
0313デフォルトの名無しさん
2005/08/03(水) 02:26:54こんな小手先の技術を覚えるよりも、スタンダードな文字列操作を覚えた方がましだ罠。
0314デフォルトの名無しさん
2005/08/03(水) 02:47:440315デフォルトの名無しさん
2005/08/03(水) 02:51:04#>313がそう想定したかはしらんが。
0316デフォルトの名無しさん
2005/08/03(水) 03:03:330317デフォルトの名無しさん
2005/08/03(水) 03:09:56だれも構文解析なんて話はしてないと思うのだが。
0318デフォルトの名無しさん
2005/08/03(水) 03:28:25std::stringべったりな厨は使い物にならん
基本的な文字列操作のアルゴリズムは覚えておくべき
0319デフォルトの名無しさん
2005/08/03(水) 06:34:59まぁC/C++を使うなら、Cの文字列操作も覚えておくべきではあるな。
しかし、メモリ使用量や実行速度に余裕があれば std::string をおとなしく選択するべき。
std::string を必要以上に毛嫌いするような態度は無用。
0320デフォルトの名無しさん
2005/08/03(水) 07:21:55ここで std:string を使う利点はほとんど無い気がする。std::istream ならともかく。
0321デフォルトの名無しさん
2005/08/03(水) 07:29:41> 構文解析においては生の文字列のほうがずっとスマートに書けると思う。
なんで?
0322デフォルトの名無しさん
2005/08/03(水) 08:27:52>>310と同じ機能のものを>>310以上にスマートに書くことができない。
0323デフォルトの名無しさん
2005/08/03(水) 08:34:010324デフォルトの名無しさん
2005/08/03(水) 08:36:540325デフォルトの名無しさん
2005/08/03(水) 08:58:53サンプルとしてならどうでもいいよ。
0326デフォルトの名無しさん
2005/08/03(水) 09:08:570327デフォルトの名無しさん
2005/08/03(水) 09:16:00仕事で使えないとか言うのもあれだな。
ここは一つ、>323(=>325か?)が仕事で使えるコードを出してくれるってことで。
0328310
2005/08/03(水) 09:24:46>>305が混乱しちゃあかんから極力単純に組んだわけだが。「鵜呑みにするな」と書いただろ?
目的を見失う奴のほうが仕事に使えない。
(初心者向けのscanfのサンプルに厳密なチェックを入れて読者を混乱させる奴は無能だ)
0329デフォルトの名無しさん
2005/08/03(水) 10:09:45同じメッセージを何回も使いたいときは容量削減にはなるでしょうけど、非常に特殊な場合でしか使わないとおもうんですよ。。
ここはですね、単純に、msgという命令のあとにただ文章が続くと思ったほうがよいのではないかと、ぼくはおもうんですね。
ID方式にすると、開発者がイベントを編集してメッセージを発言させる命令を記述するときにIDとメッセージとの対応を把握しないといけなくなりますから。。。
しかしながら、>>302がどういうつもりで使用するのか知らないので、何か有効な使い道があれば教えてくださいな。
0330デフォルトの名無しさん
2005/08/03(水) 10:18:19それにしても君の日本語はなんだか読みにくいな。
0331デフォルトの名無しさん
2005/08/03(水) 10:19:59すみません。。MSDNを読んでるうちにこうなりました。。
■ このスレッドは過去ログ倉庫に格納されています