C/C++言語でRPGを作ってみるスレ2
レス数が1000を超えています。これ以上書き込みはできません。
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/
0002デフォルトの名無しさん
2005/07/09(土) 15:17:310003デフォルトの名無しさん
2005/07/09(土) 15:17:59乙カレチャーン
0004デフォルトの名無しさん
2005/07/09(土) 15:18:22ゲーム製作技術板でやれよ クズ
0005デフォルトの名無しさん
2005/07/09(土) 15:22:15ゲーム製作技術板に逝け。
0006デフォルトの名無しさん
2005/07/09(土) 15:23:15乙
0007デフォルトの名無しさん
2005/07/09(土) 15:33:260008デフォルトの名無しさん
2005/07/09(土) 15:39:000009デフォルトの名無しさん
2005/07/09(土) 15:43:15でじゃぶー?
0010デフォルトの名無しさん
2005/07/09(土) 15:45:13C++でRPGゲームを作成する
ttp://pc8.2ch.net/test/read.cgi/gamedev/1101161690/
0011デフォルトの名無しさん
2005/07/09(土) 16:32:45注意書きくらい読もうねw
0012デフォルトの名無しさん
2005/07/09(土) 17:13:380013デフォルトの名無しさん
2005/07/09(土) 18:30:080014武家諸法度@co.jp
2005/07/09(土) 18:45:50つくってみたーよさん来てるかな。
0015デフォルトの名無しさん
2005/07/09(土) 19:02:37お、前スレ1さん。
お勉強の方はどうっすか?
0016デフォルトの名無しさん
2005/07/09(土) 19:55:08キテルーヨ
0017デフォルトの名無しさん
2005/07/09(土) 21:13:170018デフォルトの名無しさん
2005/07/09(土) 22:08:07RPGを作るためのシステムを作る
にしたほうがいいかもな。
で、実際にゲーム作るのはゲ製板でやればいいし。
0019デフォルトの名無しさん
2005/07/09(土) 22:21:34・クラス
Object
├Controler - 一階層かます(なくても良いかも)
|├GameControler - ゲームの進行を管理
|├GraphicControler - 表示を管理
|├SoundControler - 音の管理をする。
|├ButtleControler - 戦いを管理。
|| 行動の順や、「この人が"戦う"選んでるからこの人にダメージ」なジャッジをする
|└MapControler - マップを管理(町、ダンジョンの切り替えなどをつかさどる)
|
└GameObject - 一階層かます(ゲーム内登場物という共通特性がある場合に。Nameとか)
├Actor - 演者。主に有生物。
|├People - 町の人とか、戦わないマップキャラで終わる人々。
|├Enemy(Monster?) - 敵。Battleable実装
||└[性格を持った敵] - 振る舞いが特化されていて、個々に実装必要な奴。ボスなど。Battleable実装
|└MainActor(Player?) - 主人公とその仲間。Battleable実装。
| └[性格を持った仲間] - それぞれ実装を必要とする場合のキャラ。
| NPCを含むためControlable実装は任意。
0020デフォルトの名無しさん
2005/07/09(土) 22:22:45OOとしてはイマイチだな。
コントローラーて・・・
0021デフォルトの名無しさん
2005/07/09(土) 22:26:01├MapChip - マップの特性を持った構造体(構造定義せずに配列とかでも良い?)
├Item - アイテム共通の性格。
|└[個々のアイテム] - 性格を持ったアイテム。振る舞いは個々に違うため別個に記述。
├Magic
|└[個々の魔法] - 性格を持った魔法。振る舞いは個々に違うため別個に記述。
└Skill(Action?) - スキル。プレイヤーごとにインスタンスを4つまで保持し、戦闘時コマンドとして表示。
├Spel - 呪文をとなえる。(PlayerのMagicリストを参照したい)。
├Fight - たたかう。
├UseItem - アイテムを使う。(Playerのアイテムリストを参照したい)
├Defence - 防御
├Escape - 逃げる。(隊列先頭の奴に強制的に付加されるって、なぁ)
└[その他] - 昨今のドラクエの"とくぎ"など。
さっきの続き
0022デフォルトの名無しさん
2005/07/09(土) 22:32:400023デフォルトの名無しさん
2005/07/09(土) 23:13:36昔ム板でRPGのクラス設計のスレがあって、そんときもそんな感じだったな
0024デフォルトの名無しさん
2005/07/10(日) 00:17:050025デフォルトの名無しさん
2005/07/10(日) 00:30:530026デフォルトの名無しさん
2005/07/10(日) 00:47:04「防御」はダメージを与えないで防御力一時アップとか、あとはナレーションの辻褄だけだし
0027デフォルトの名無しさん
2005/07/10(日) 00:49:42逆にアイテムはクラスのほうが柔軟性が増す
0028デフォルトの名無しさん
2005/07/10(日) 01:17:180029デフォルトの名無しさん
2005/07/10(日) 01:33:00ノウハウ貯めるためのスレじゃないんだねスマソ(^^;
0030デフォルトの名無しさん
2005/07/10(日) 01:40:100031デフォルトの名無しさん
2005/07/10(日) 02:01:30そういうのは自治スレでやってくれ
0032デフォルトの名無しさん
2005/07/10(日) 02:15:23ゲーム関係の話題はゲーム製作板へどうぞ。
この注意書きが読めない基地外でつか?
誰が見ても100%板違い。議論の余地は無い。OK?
0033デフォルトの名無しさん
2005/07/10(日) 02:22:17そんな板はありません。
で、なんかコンソールベースのRPG見てああなるほどって思ったけど
グラフィック使ってるとこ見ると、やっぱゲ製作のがいいんじゃないかと思った。
荒れるからさここらへんで定義を見直そう。
プログラム板でRPGを作ってみるということは
ようするにプログラムの勉強のためだよね?よくわからんが・・・
それならライブラリなど使わずにテキストベースかGDIでアルゴリズムの勉強としてなら
ここでもいいんジャマイカ?
で、openglとかdirectxとか使うともうゲームの勉強になっちまうから、ゲ製作のほうが適している。
荒れないですむと思う。
そもそも作ってみるスレというのがあまりよくわからない。
作って何がしたいのか。
それでおれは作って勉強してみるスレと解釈したがまあわからんもんねる
0035デフォルトの名無しさん
2005/07/10(日) 03:05:59SDL=Simple DirectMedia Layerでゲームだ
http://pc8.2ch.net/test/read.cgi/tech/1103655588/
Irrlicht初心者質問スレ
http://pc8.2ch.net/test/read.cgi/tech/1104179696/
【C++】 DirectX初心者質問スレ Part4【C++】
http://pc8.2ch.net/test/read.cgi/tech/1115484821/
OpenGLスレ Part7
http://pc8.2ch.net/test/read.cgi/tech/1118151979/
各板対抗 RPGツクールでゲームinム板
http://pc8.2ch.net/test/read.cgi/tech/1059441167/
0036デフォルトの名無しさん
2005/07/10(日) 03:27:56んなーこたーないw
0037デフォルトの名無しさん
2005/07/10(日) 03:34:22そういう不確定な話やごたごたをこのスレに持ち込まないで欲しい
ローカルルールの揚げ足を取るのイクナイ
0038デフォルトの名無しさん
2005/07/10(日) 06:49:050039デフォルトの名無しさん
2005/07/10(日) 07:07:130040武家諸法度@co.jp
2005/07/10(日) 07:07:40その前の過程でここに載せて、この先どうやって作ったらいいかとか聞いてもいいし、(それだったら、その専用スレのほうがいいかも)
初心者のために、>>19、>>21みたいなことを書いてもいいし、
まっ、とりあえずRPG関連で、C/C++なら、何だっていいわけ。
楽しく書いて、楽しく学ぶ。
これが一番かな。
そろそろデフォルトの名無しさんにもどろ。
0041デフォルトの名無しさん
2005/07/10(日) 07:32:44で、今どのヘンまで進んでるん?
0042デフォルトの名無しさん
2005/07/10(日) 09:04:42いいんじゃない。
0043デフォルトの名無しさん
2005/07/10(日) 09:10:170044デフォルトの名無しさん
2005/07/10(日) 09:21:14なんかそんな本でてそーw
0045デフォルトの名無しさん
2005/07/10(日) 09:33:350046デフォルトの名無しさん
2005/07/10(日) 09:36:40作るスレにすべきでしょ? ゲームの話をする所じゃないんだから。
0047デフォルトの名無しさん
2005/07/10(日) 10:16:09プログラムの話ばっかだったかと。
0048デフォルトの名無しさん
2005/07/10(日) 10:26:190049デフォルトの名無しさん
2005/07/10(日) 11:06:30>>19>>21ぐらいからやっとそういう話になってきたけど
本題に入る前に話がそれていくw
0050デフォルトの名無しさん
2005/07/10(日) 11:54:23それいいな。ゲ製板からは歓迎されそうな気がする。
[ マ板 ]
システム提供↓↑ゲーム本編作成。システム要望
[ ゲ製板 ]
0051デフォルトの名無しさん
2005/07/10(日) 12:12:09大間違い。ここは「ム板」。
0052デフォルトの名無しさん
2005/07/10(日) 12:24:110053デフォルトの名無しさん
2005/07/10(日) 12:52:270054デフォルトの名無しさん
2005/07/10(日) 13:44:220055デフォルトの名無しさん
2005/07/10(日) 14:11:29C/C++言語でRPGシステムを作ってみるスレ
RPGシステムに関するC/C++プログラミングの話題。アルゴリズム・
データ構造・処理の効率化・ライブラリ等など、プログラミング
の話題限定で語りませう。ゲーム製作の話はゲ製板で。
でOK?
0056デフォルトの名無しさん
2005/07/10(日) 14:53:430057デフォルトの名無しさん
2005/07/10(日) 15:08:170058デフォルトの名無しさん
2005/07/10(日) 15:20:160059デフォルトの名無しさん
2005/07/10(日) 16:29:25ム板なんだから、前スレにあったように「作ることを楽しむ」スレであって欲しい。
一番の問題は「実際に作ってる人」が少ないってことだな。
0060デフォルトの名無しさん
2005/07/10(日) 16:44:510061デフォルトの名無しさん
2005/07/10(日) 18:15:200062デフォルトの名無しさん
2005/07/10(日) 18:16:340063デフォルトの名無しさん
2005/07/10(日) 20:09:48そか。がんがれ。
0064デフォルトの名無しさん
2005/07/10(日) 20:49:17ですわ。。
汎用性とか考え出すとキリが無いよ orz
0065デフォルトの名無しさん
2005/07/10(日) 20:58:150066デフォルトの名無しさん
2005/07/10(日) 20:58:330067デフォルトの名無しさん
2005/07/10(日) 21:04:11orz
0068デフォルトの名無しさん
2005/07/10(日) 21:43:34コーディングしている時間なんて全然大したことない。むしろ楽な部分。
一人で延々とテストプレイを繰り返してるとイヤになること請け合い。
まじでテストプレイヤーが欲しくなるよ。
006964
2005/07/10(日) 23:08:42ゲームを本格的に作るの初めて+クラスを本格的に使うの初めてなので。
勢いで始めましたけど、やぱちょっと無謀だったか。。
>>68
超小規模なのになる予定なので、
そこは一番心配してないです ^^
0070デフォルトの名無しさん
2005/07/11(月) 00:43:03まあ頑張って。実際に作ってる人が少ないから期待してるよ。
0071デフォルトの名無しさん
2005/07/11(月) 02:33:08自分もそうなりがち。頭でっかちというか。
だから、初心者の頃の、とにかくコーディング
という気持ちも忘れないようにしてる。
0072デフォルトの名無しさん
2005/07/11(月) 13:38:510073デフォルトの名無しさん
2005/07/11(月) 13:45:470074デフォルトの名無しさん
2005/07/11(月) 20:52:31ム板的な視点で見ると、バランス調整自体をコーディングしたい。
インターフェイスをカットしたモードでAIが超高速でレベル上げする。
その統計を収集して、ここら辺で詰まるみたいなグラフを描くとかね。
進化するAI(GAとかか)ならFF6のバニシュデスみたいな穴も発見可。
つかプロのコンシューマのRPGでは既にそういうことやってんのか?知らないけど。
0075デフォルトの名無しさん
2005/07/11(月) 20:56:26プレーヤーがどこで迷って、その分どれだけ歩いてどれだけ敵に遭遇してレベルが上がるか
ってのはやっぱり人間がテストしないと分からん気がする。
0076デフォルトの名無しさん
2005/07/11(月) 21:01:22ROMに焼いた時点で進化を止めるのかい?
0077デフォルトの名無しさん
2005/07/11(月) 21:13:41デバッグとかバランス調整に使うだけなんだからゲーム本体には含めないだろ。
0078デフォルトの名無しさん
2005/07/11(月) 21:20:34それは1つ楽するために10倍ぐらい苦労するアプローチだな(w
俺的には>>75に同意。やっぱ実際にプレイしてみないことには
バランスの善し悪しは分からん気がする。
0079デフォルトの名無しさん
2005/07/11(月) 21:31:49ゲーマーもさまざまなんだし。
FF4なんかは2バージョンあったよね、普通のとムズいのと。
0080デフォルトの名無しさん
2005/07/11(月) 21:32:57AI(に満たちないほどの単純作業のルーチンだが)で発見できるといいかもしれん。
総当りだとものすごい時間かかりそうだが。
0081デフォルトの名無しさん
2005/07/11(月) 21:52:46最初はシンプルでいいから、なるべく後から構成要素の追加拡張が容易なフレームワークを設計するのが先だな。
0082デフォルトの名無しさん
2005/07/11(月) 22:09:300084デフォルトの名無しさん
2005/07/12(火) 01:49:22イベントの到達不能バグの自動検出は
未踏ソフトなんとかでどっかの学生が題材にしていた
なんつーか、微妙だったけど。
0085シープラ勉強中 ◆ryjMYLsfPA
2005/07/12(火) 15:08:54途中経過です。
前回のと動きはあんま変わってません。
キャラが動くだけです。
中身はメチャクチャかき混ぜたので、いまいち把握できてません。
メモリリークとかあったらホントごめんなさい。
絵がでるオブジェクトに使うために、基本クラスを作ったのですが、
GetX() とか、SetWide() みたいなのが大量にできちゃっいました。
これは一般的なんでしょか?
ソースがいたずらに長くなってしまう・・。
町の人とPlayerのクラスも共通のとこがいっぱいあるから、
もう一個基本クラスを作ったほうがいいかもしんないし。
あー、基本クラスのことだけで、三日は費やしてるわ orz
0086デフォルトの名無しさん
2005/07/12(火) 15:47:30LoadImageとTransparentBltを適当に補ったら動いたんだけど、
ほとんど真っ暗だった(つд`
GetXとかはinlineするといいかも。
0087デフォルトの名無しさん
2005/07/12(火) 16:45:50設計次第でコーディング時間は短縮される。
0088シープラ勉強中 ◆ryjMYLsfPA
2005/07/12(火) 17:32:40あ、やぱしww
前スレでもそう言ってるの見ましたから、エラーがでると思ったんですが。
描画はあとで差し替える予定ですので、そのときまでは解決しないかもです。
前スレ821さんのような技術がないんで。。
ちなみに、実行ファイルは正常に動作するんでしょうか?
>>87
オブジェクト志向ってのがなんなのか全然わからない orz
そのクラスの中で自己完結的に動作すれば
オブジェクト志向を名乗っていいんでしょか?
(初期化→動作→表示→開放 みたいな・・)
ポリモーフィズムってのはあきらめました ^^
0089デフォルトの名無しさん
2005/07/12(火) 17:37:06いいたい事は色々あるが、
ttp://himatanuki.hp.infoseek.co.jp/cgi-bin/uploader/src/up0007.png
これで正常な動作なのかどうかだけ聞きたい。
009089
2005/07/12(火) 17:53:19パスにスペースが入ってるのが駄目だったのかもしれん。
移動したらちゃんと表示されるわ。
しかしなぜデバッグビルド?
0091デフォルトの名無しさん
2005/07/12(火) 18:01:01ひえ〜えぇ、
そんなんなっちゃったんすかww
↓が意図した絵です。だいじょぶでしょか。
http://49uper.com:8080/html/img-s/65914.jpg
ところで、質問ばかりですみませんが
デバッグビルドってなんですか?
ちなみにツールは VC++6.0 Standard です。
009289
2005/07/12(火) 18:09:08OK。ばっちりだ。
デバッグビルドっていうのはデバッグするためのビルド。
デバッガをつかってステップ実行したりできるように
ソースの情報が入っていたりする。
VC6なら
ビルド->アクティブな構成の設定->Win32Release
とかにすればReleaseビルドになるとおもう。多分。
あと、メモリリークしてると思う。
ベースクラスのデストラクタもvirtualじゃないし。
0093デフォルトの名無しさん
2005/07/12(火) 18:13:56オブジェクト指向って、要はメッセージの送受信だけでプログラムの
流れを表現しましょうとゆー考え方だと思う。
例えば、プレイヤーオブジェクト P と敵オブジェクト E があって、
PがEを攻撃して2ポイントのダメージを与えたとする。
このとき、オブジェクト指向では E に「体力を2ポイント減らしなさい」
というメッセージを送る。例えば E.hp_herase(2) という具合。
ここでのミソは、E の内部構造がどうであれ、.hp_herase() という
メッセージ(つまりメソッド)が分かっていればプログラムが書ける、
というところ。仮に体力が E.hp というメンバで表されているとしても、
その値を外部から変更するのは無しにして、体力を変更するメッセージ
(メソッド)を使いましょう、ということ。
ゲーム全体がオブジェクト間のメッセージのやりとりだけで破綻なく
記述できれば、オブジェクト指向の設計として成功しているといえる。
しかし実際は、往々にしてオブジェクトの関係(メッセージのやりとり)が
チョー煩雑になったり内部メンバを直接変更したくなったりする。
「それは設計が悪いから」とゆーのがオブジェクト指向設計の切り捨て方。
0094デフォルトの名無しさん
2005/07/12(火) 19:05:010095シープラ勉強中
2005/07/12(火) 19:05:44おお、役に立ちそうな情報をありがとうございます。
設定を変更したら、いつもより小さめな実行ファイルができました!
てゆか、デバッガ使ったことない、、今まで無駄なことしてたのかああぁ。
メモリリークはしてますか・・
実行しちゃった人、ごめんなさい m(__)m
仮想関数はちょっとやってみた程度なのでよくわからないです。
私のお勉強本には、デストラクタの virtual は乗ってないし。。
ちょっと研究してみます。
ホントありがとうございます。
>>93
こっちにも役にたちそうな情報が!
クラスを使いはじめて思ったんですが、
他のプログラマさんが作ったライブラリを使ってみないと、
自分ではうまく作れないような気がしてます。
(標準のやつ以外使ったことないww)
わかりやすくて安全で使いやすくて見やすい
プログラムを書けるようになるには、あと何年かかるんだろうか。
どもです。
0096デフォルトの名無しさん
2005/07/12(火) 22:32:27とりあえずデストラクタをvirtualにしないと継承したクラスを
ベースクラスに入れて使ったときにメモリリークする。
CPeopleとCPlayerにはどちらもDrawメンバ関数があるけど
こういうやつをベースクラスに落とし込む。
ついでに例えば
CPlayerのメンバ変数に
HBITMAP hBitmap;
とでもしておいてCreateでビットマップをLoadImage、
DeleteでDeleteObjectとしたりする。
DrawではHDCを渡すだけ。
とか。
0097デフォルトの名無しさん
2005/07/12(火) 22:41:07描画管理はここに任せて、派生クラスは継承したメンバ関数で、
なるべく描画処理の細かいロジックは気にしない。
0098デフォルトの名無しさん
2005/07/12(火) 22:47:58>とか。
デザパタのVisitorパターンもどきになるな。
描画オブジェクトはデバイスコンテキストを受け取って、自分自身を描画する。
systemの描画イベントが発生したら、リストアップされている描画オブジェクトに
順にdraw要求を出していけば、自動的に各オブジェクトが条件や状態に合わせ
た個別描画をしてくれる。
さらに複数の描画オブジェクトをまとめた集合を現すクラスにも同様のI/Fをつ
けることで、コンポジットパターンを活用できる。
0099デフォルトの名無しさん
2005/07/12(火) 23:21:380100デフォルトの名無しさん
2005/07/12(火) 23:29:200101デフォルトの名無しさん
2005/07/13(水) 00:10:25while (1) {
gijutsu--;
burando--;
kabuka--;
timer++;
}
}
0102デフォルトの名無しさん
2005/07/13(水) 00:55:040103デフォルトの名無しさん
2005/07/13(水) 00:56:01うちどめしとかんといかんな
0104デフォルトの名無しさん
2005/07/13(水) 01:13:45オーバーフローの方もな・・・。
0105デフォルトの名無しさん
2005/07/13(水) 11:44:22俺ソニー株持っているけど、そのうち文字通りの「億万」長者になれそうだなw
0106デフォルトの名無しさん
2005/07/13(水) 13:01:150107シープラ勉強中
2005/07/13(水) 17:26:48>>96〜
前スレ821さんが描画専用のクラスを作ってたみたいなので、
私もそれに習おうと思ってました。
明日あたりに、試作型をつくってみまっす!ども。
スーパークラスのデストラクタのvirtualは、昨日いくつかググってみたのですが、
イマイチよくわからず。。
とりあえず付けときますw
関数名はオーバーライドして使う気が無いなら、
同じ名前はさけたほうがいいのかなあ。
(効果的なvirtualの使い方がわからないだけなんですけどね・・)
0108デフォルトの名無しさん
2005/07/13(水) 18:28:00デザパタの本買うといい、できればGOFの。
virtualの使い方が分かるだけでなく、
パターンの組み合わせで設計することができる(と嬉しいな)。
設計の会話になると〜〜パターンって出てくるくらいだから、意識はしてたと思うけど。
がんばれ!(おれもがんばる・・・)。
実際にC++の例が見たいなら
ttp://www.01-tec.com/document/cpp_design_pattern.html
あたりが揃ってるかな。
0109デフォルトの名無しさん
2005/07/13(水) 19:47:10ttp://www.atmarkit.co.jp/fjava/devs/object01/object01.html
あたりで勉強すると良いと思う。
0110デフォルトの名無しさん
2005/07/13(水) 19:55:26お、いいなそこ。ブックマークしとこ。
と思ったら既にブックマークしてあった。orz
ブックマーク膨らみすぎ…
0111デフォルトの名無しさん
2005/07/13(水) 20:57:36あるある、いいなと思ったら既にブ(ry
極論すれば、オブジェクト間の情報伝達は全てパケット通信でできる。
localohostを使ってもいいし、あるオブジェクトは地球の裏側にあってもいい。
しかしそれでは実現が難しいケースがある、というのが現実。
理論としては、聞いただけでオラなんだかワクワクしてこまいか?
0112シープラ勉強中 ◆ryjMYLsfPA
2005/07/13(水) 22:10:40ちょっとためしにグラフィック専用のクラスの雛形を作ってみました。
PlayerはTransparentBlt()で描画して、
BackGroundはBitBlt()で描画するプログラムです。
どうもいまだにHBITMAPとHDCをいつ開放していいのか
よくわからないのですが、これ、大丈夫ですかね?
描画クラスとPlayerクラスでHDCとHBITMAPを引数として
いっぱい受け取ってるのに何一つ開放してないし、
*m_pHbitmapはBitmapOriginalのアドレスを記憶したあとも
開放しないでそのまんまなんですが・・。
描画クラスのhBitmapOldもそのままですし。
うー、毎度のことですが、メモリリークしてたらごめんなさい。
あ、あと、*m_pHbitmapはBaseクラスに持たした方がいいですかね?
ファイルも分けてないし、見にくいプログラムですみませんが、お願いします m(__)m
>>108 >>109
なんかわかりやすそうなサイトですね。
私もブックマークしときました!
どうもありがとー。
0113シープラ勉強中 ◆ryjMYLsfPA
2005/07/13(水) 22:26:01void BitBlt (int x, int y, RECT rect, HBITMAP hBitmap, HDC hdc, HDC hMemDC)
関数の一番下で、
::SelectObject(hMemDC, hBmpOld);
するのを忘れてました orz
これやんなきゃまずいんですよね?
追加お願いします。
0114デフォルトの名無しさん
2005/07/13(水) 23:01:010115デフォルトの名無しさん
2005/07/13(水) 23:09:50ちょっと遊びで作ってみてひけらかし。
ソースはださない。あまりにも行き当たりばったりで見れたもんじゃないし、
文句をいわれそうだから。
ttp://himatanuki.hp.infoseek.co.jp/cgi-bin/uploader/src/up0009.lzh
0116デフォルトの名無しさん
2005/07/13(水) 23:20:52さぁ、実行環境がGDIより限られるからじゃないかな。
>>115
どろどろしたものが湧いて出た!!!
やべー!逃げる!
おれもひけらかしてぇ・・・。
もしや、(・∀・)作ってミターヨさんでは?
0117デフォルトの名無しさん
2005/07/14(木) 00:14:43ちがうよん。
0118デフォルトの名無しさん
2005/07/14(木) 00:17:370119117
2005/07/14(木) 00:26:00おおー、よくできてますね。アスキーアートよりずっと見栄えがする(w
SDL 使ってるのかな。コードに興味があるのでソースを希望してみるテスト。
余談だけど、ちゃんと動くプログラムは汚いことが多いです。
もし気にしてるならその必要はないですよ。
あと、コードを流用していたとしても無問題です。
コードそのものをこのスレに貼ってる時点で著作権とか放棄してるつもり。
0120安倍なつみ
2005/07/14(木) 00:53:490121デフォルトの名無しさん
2005/07/14(木) 01:10:130122デフォルトの名無しさん
2005/07/14(木) 01:16:01オブジェクト指向はそのソースとは程遠いので、
提示されたリンク先を読んでも、そのソースの
どこをどうするということには繋がりにくいだろうな。
具体的な視点から考えるのも良いかもしれない。
現状の CGraphic や CObjectBase は、クラスとしての意義が全く無い。
何のメリットも無いクラスを作るのは無駄にプログラムを複雑にしていると言えるだろう。
クラスを作る前に、クラスを作ることによるメリットを考えると良いよ。
クラスによるわかりやすいメリットとしては
・解放を忘れてはいけないリソースがある場合
RAII(Resource Acquisition Is Initialization) の考え方でリソースリークを根絶
・2つ以上の変数について整合性が必要な場合
変数を private にして整合性が崩れる可能性を根絶
というようなものがある。
HBITMAP や HDC のリークが心配なら、
それらをクラスにしてコンストラクタで取得し
デストラクタで解放すればいい。
とは言っても、いつ解放して良いのかわからないのでは問題外なので、
まずはMSDNでよく調べてくるべきだろう。
0123デフォルトの名無しさん
2005/07/14(木) 02:50:22<気になった点>
・RECT型変数の値渡し
・大域変数と仮引数のシンボルが同じなので危険な香り (今は問題になっていないが・・・)
・ハンドル型のアドレスを保持しておく意味が分からない
・属性を持たない具象クラスは必要ないぽ
・WM_DESTROYでのリソース解放部分が怪しげ
・hMemMemDCにちょっとワラタ
<修正・改良すべき点>
・ある程度のサイズを持った構造体orクラスインスタンスは参照・アドレス渡しにする
・DCを削除する際は初期の状態に戻すべき (SelectObject)
・リソース管理クラスを作っておけば解放(や所有権)が明確化される
・HDCは必要な時にGet、Createすれば解放のタイミングは問題にならない。
(ハンドル数の節約にもなるが、フラグメンテーションが発生する可能性はないのだろうか・・・謎)
0124デフォルトの名無しさん
2005/07/14(木) 09:52:02丁寧なご指摘、感謝です m(__)m
>>122
>現状の CGraphic や CObjectBase は、クラスとしての意義が全く無い。
いや、おっしゃるとおりで。。
今は絵を出すのに必死で、絵に必要なの以外のメンバは書いてないので、
オブジェクト指向もなにもあったもんじゃないです orz
MSDNは、がんばって調べてみます。
どうもありがとうございます。
>>123
広域変数とローカルの名前が同じなのは、全然考えてなかった・・変えときます。
ビットマップの読み込みと開放、バックバッファの作成と削除
この二つは制御するクラスを作ってみます。
::SelectObject()の話は、バックバッファ用のやつ(広域のhMemDC)のことでしょうか?
そえば最後に戻してないですね。。
作成したときの情報を、どっかに保存しておくべきか。
構造体やらの参照渡しも心がけておきます!
MemMemは、hWorkDCとかにすべきですかね ^^
色々ありがとうございました。
>>115
おー、すごい!
人の見ると刺激になります。
私もがむばらねば。
0125デフォルトの名無しさん
2005/07/14(木) 16:06:560126デフォルトの名無しさん
2005/07/14(木) 16:50:09時々でいいから思い出して下さい。
0127デフォルトの名無しさん
2005/07/14(木) 17:32:15よく出来ていると思う。ややCPU率が高い気も。
ドラクエ系ではすぐにたどり着けるマップも、wiz系だとムズい。
ソースは自由でいいと思う。自分も作品をうpしたい時に出しやすいし。
>>123
自分はCだけど、そういうのは1つの関数の中でやってしまうかな。
BitBlt2() {
CreateCompatibleDC();
SelectObject();
BitBlt();
SelectObject();
DeleteDC();}
0128115
2005/07/14(木) 21:13:41実は迷路生成と、迷路表示だけが目的で
切った張ったしてでっち上げたもので、
悪影響しかないと思いますのでソースは勘弁してください。
一応肝の迷路生成と迷路表示だけは抜粋しておきます。
// マップを全部壁にして、穴掘り法で迷路を生成する。
// 周りには番兵として道がある。
void MazeSub(int x, int y){
if(Map[y][x] != MAP_ROAD){
return;
}
int r = rand() & 3; // 次の道の方向
int p = (rand() & 2) - 1; // 回転方向を適当に変えて遊ぶ(-1か1)
for(int i = 0;i < 4;i++){
int px = GetDirX(r);
int py = GetDirY(r);
if(Map[y + py * 2][x + px * 2] == MAP_WALL){
Map[y + py][x + px] = MAP_ROAD;
Map[y + py * 2][x + px * 2] = MAP_ROAD;
MazeSub(x + px * 2, y + py * 2);
}
r = (r + p) & 3; // 回す
}
}
0129115
2005/07/14(木) 21:15:26void DrawField(SDL_Surface *screen){
SDL_Color col;
col.r = 255; col.g = 255; col.b = 255;
DrawBox(screen,
X_CENTER - X_HALF, Y_CENTER - Y_HALF,
X_CENTER + X_HALF, Y_CENTER + Y_HALF,
255, 255, 255);
int px = GetDirX(chara_dir);
int py = GetDirY(chara_dir);
for(int i = 0;i < 3;i++){
bool front = Map[chara_y + py * i + py][chara_x + px * i + px] == MAP_WALL;
bool left = Map
[chara_y + py * i + GetLeftY(chara_dir)]
[chara_x + px * i + GetLeftX(chara_dir)] == MAP_WALL;
bool right = Map
[chara_y + py * i + GetRightY(chara_dir)]
[chara_x + px * i + GetRightX(chara_dir)] == MAP_WALL;
DrawFieldSub(screen, left, right, front, i);
if(front)// 前に壁があったらそれ以上描画しない
break;
}
}
0130115
2005/07/14(木) 21:20:04bool wall_left, bool wall_right, bool wall_front, int depth){
if(wall_left){// 左上
SDL_DrawLine(screen, (int)(X_CENTER - (X_HALF / (1 + Z_BLOCK * depth))),
(int)(Y_CENTER - (Y_HALF / (1 + Z_BLOCK * depth))), (int)(X_CENTER - (X_HALF / (1 + Z_BLOCK * (depth+1)))),
(int)(Y_CENTER - (Y_HALF / (1 + Z_BLOCK * (depth+1)))), 255, 255, 255);
// 左下
SDL_DrawLine(screen, (int)(X_CENTER - (X_HALF / (1 + Z_BLOCK * depth))),
(int)(Y_CENTER + (Y_HALF / (1 + Z_BLOCK * depth))), (int)(X_CENTER - (X_HALF / (1 + Z_BLOCK * (depth+1)))),
(int)(Y_CENTER + (Y_HALF / (1 + Z_BLOCK * (depth+1)))), 255, 255, 255);
}else{// 左
SDL_DrawLine(screen, (int)(X_CENTER - (X_HALF / (1 + Z_BLOCK * depth))),
(int)(Y_CENTER - (Y_HALF / (1 + Z_BLOCK * depth))), (int)(X_CENTER - (X_HALF / (1 + Z_BLOCK * depth))),
(int)(Y_CENTER + (Y_HALF / (1 + Z_BLOCK * depth))), 255, 255, 255);
if(depth < DRAW_DEPTH){
SDL_DrawLine(screen, (int)(X_CENTER - (X_HALF / (1 + Z_BLOCK * depth))),
(int)(Y_CENTER - (Y_HALF / (1 + Z_BLOCK * (depth+1)))),
(int)(X_CENTER - (X_HALF / (1 + Z_BLOCK * (depth+1)))),
(int)(Y_CENTER - (Y_HALF / (1 + Z_BLOCK * (depth+1)))),
255, 255, 255);SDL_DrawLine(screen, (int)(X_CENTER - (X_HALF / (1 + Z_BLOCK * depth))),
(int)(Y_CENTER + (Y_HALF / (1 + Z_BLOCK * (depth+1)))),
(int)(X_CENTER - (X_HALF / (1 + Z_BLOCK * (depth+1)))),
(int)(Y_CENTER + (Y_HALF / (1 + Z_BLOCK * (depth+1)))),
255, 255, 255);if(!wall_front){SDL_DrawLine(screen,
(int)(X_CENTER - (X_HALF / (1 + Z_BLOCK * (depth+1)))),
(int)(Y_CENTER - (Y_HALF / (1 + Z_BLOCK * (depth+1)))),
(int)(X_CENTER - (X_HALF / (1 + Z_BLOCK * (depth+1)))),
(int)(Y_CENTER + (Y_HALF / (1 + Z_BLOCK * (depth+1)))),
255, 255, 255);}}}
// 右については略
// 左と座標を逆にして処理しているだけ。
0131115
2005/07/14(木) 21:20:38// 上
SDL_DrawLine(screen,
(int)(X_CENTER - (X_HALF / (1 + Z_BLOCK * (depth+1)))),
(int)(Y_CENTER - (Y_HALF / (1 + Z_BLOCK * (depth+1)))),
(int)(X_CENTER + (X_HALF / (1 + Z_BLOCK * (depth+1)))),
(int)(Y_CENTER - (Y_HALF / (1 + Z_BLOCK * (depth+1)))),255, 255, 255);
// 下
SDL_DrawLine(screen,
(int)(X_CENTER - (X_HALF / (1 + Z_BLOCK * (depth+1)))),
(int)(Y_CENTER + (Y_HALF / (1 + Z_BLOCK * (depth+1)))),
(int)(X_CENTER + (X_HALF / (1 + Z_BLOCK * (depth+1)))),
(int)(Y_CENTER + (Y_HALF / (1 + Z_BLOCK * (depth+1)))),255, 255, 255);
if(wall_left){
SDL_DrawLine(screen,
(int)(X_CENTER - (X_HALF / (1 + Z_BLOCK * (depth+1)))),
(int)(Y_CENTER - (Y_HALF / (1 + Z_BLOCK * (depth+1)))),
(int)(X_CENTER - (X_HALF / (1 + Z_BLOCK * (depth+1)))),
(int)(Y_CENTER + (Y_HALF / (1 + Z_BLOCK * (depth+1)))),255, 255, 255);
}
if(wall_right){
SDL_DrawLine(screen,
(int)(X_CENTER + (X_HALF / (1 + Z_BLOCK * (depth+1)))),
(int)(Y_CENTER - (Y_HALF / (1 + Z_BLOCK * (depth+1)))),
(int)(X_CENTER + (X_HALF / (1 + Z_BLOCK * (depth+1)))),
(int)(Y_CENTER + (Y_HALF / (1 + Z_BLOCK * (depth+1)))),255, 255, 255);
}}}
0132115
2005/07/14(木) 21:24:47ごめんなさい。適当に整形してみてください。
整理すると消せる部分があるんですが、面倒でやっていません。
あと、文字表示にはSDL_kanjiを使っています。
配布ファイルに含めてしまったBDFは実は権利関係がまずいかもしれません。
FreeBSDからぶっこ抜いてきたものですから大丈夫だとは思いますが…
もし次があるとしたら、あるいは次の人は東雲あたりを使ったほうがいいとおもいます。
0133デフォルトの名無しさん
2005/07/14(木) 23:15:28次からはアップローダを使おうな。
0134デフォルトの名無しさん
2005/07/15(金) 14:46:400135デフォルトの名無しさん
2005/07/15(金) 15:20:100136デフォルトの名無しさん
2005/07/15(金) 16:55:070137127
2005/07/15(金) 17:16:11SDLは分からないけど、結構簡単に3Dが作れるっぽいね。
SDL_DrawLineの引数の、(int)(X_CENTER - (X_HALF / (1 + Z_BLOCK * depth))),
とかは、同じコードを複数で使っているみたいだから、
LEFT_OVER_Xとかマクロ値にしてしまうとすっきりしそう。
僕も部分うp。BitBlt2。変数名がダサい・・。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/730.txt
BitBltは、引数がHDC限定だけど、これはHWNDかHBITMAPでもOK。
C++なら、BitmapBefore、BitmapAfterをコンストラクタとかにすればいいのかな。
0138デフォルトの名無しさん
2005/07/15(金) 18:25:26>>129
>>130
>>131
0139デフォルトの名無しさん
2005/07/15(金) 19:48:12UD
0140デフォルトの名無しさん
2005/07/15(金) 21:02:370141115
2005/07/15(金) 22:16:22Draw*という関数は自作です:-)
0142127
2005/07/16(土) 05:06:00ウィンドウに描画したつもりが、デスクトップに描画にされる場合があるので。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/734.txt
0143デフォルトの名無しさん
2005/07/17(日) 02:35:29何故そのアドレスを渡そうとするのかよく分からないのですが。
あと、0か1しか返さないのにint型を返すと言うのも違和感が・・・。
boolとintはほとんど一緒ですけどね。
0144デフォルトの名無しさん
2005/07/17(日) 03:29:02インターフェースがすごくわかりにくい。
せめて構造体を使ったほうが分かりやすいしバグも出にくい。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/740.txt
C言語だと関数のオーバーロードができないので
BitmapBefore0,1,2っていう名前になっちゃってるけど…。
0145デフォルトの名無しさん
2005/07/17(日) 04:54:43Cではbool型がないからintを使うのは普通(C99はべつ)。
0146デフォルトの名無しさん
2005/07/17(日) 06:34:06サイズも4バイトだし。
0147デフォルトの名無しさん
2005/07/17(日) 08:22:32俺は初期化と終了処理は慣例的にopen/closeにしてる。
0148127
2005/07/17(日) 14:09:13intとかでやってたので、そのままやってしまってた。
戻り値は大体あんな感じかな。場合によっては、正負0の3パターンを返すとか、
引数にchar *型を渡すと、エラーメッセージを得られるとか。
引数は、構造体にまとめた方がいいのか。
増やす時に、ちょっと直すだけでいいとかもあるし。
before/afterはダイエットとかの広告のをいただいた。違う人だろと思いつつ。
0149シープラ勉強中 ◆ryjMYLsfPA
2005/07/17(日) 15:52:14定期あげ。
あんま変わってませんが。
当たり判定のとこが激しくキモいので、もうちょっと練らなきゃです。
町の人と主人公と主人公の仲間を統括するような
クラスを作らなきゃいけないような気がするけど、
いいのが思いが浮かびません orz
早く村人いっぱい出したい。。
0150シープラ勉強中 ◆ryjMYLsfPA
2005/07/17(日) 15:57:05でも斜め移動を残したら、判定たいへんそうですし。
あとスクロールさせたら画面がチラつくから、
バグってるのかどうかがわかりにくいです (T_T)
0151デフォルトの名無しさん
2005/07/17(日) 16:47:37CreateWindowにWS_VISIBLEをつけるとShowWindowがいらなくなるし、
while(GetMessage(&msg, 0, 0, 0) > 0)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
のようにした方がいい気がする。
関係ないけど自分がコーティングするときと比べると
だいぶ横幅が結構狭いですね。
ディスプレイの解像度はどのくらいでしょうか?
0152デフォルトの名無しさん
2005/07/17(日) 16:54:38精度の低いタイマーを使うのかと、開発環境を聞きたいです。
他にも色々あるけど。
0153デフォルトの名無しさん
2005/07/17(日) 18:04:27アドバイス程度にしておこうよ。
0154シープラ勉強中
2005/07/17(日) 18:20:42どもです。windowsに関しては無知そのものなので
ちょこっと調べてみました m(__)m
WS_VISIBLE
可視状態のウィンドウを作成します。
::GetMessage()の戻り値
WM_QUIT メッセージを取得すると、0 が返ります。
エラーが発生すると、-1 が返ります。たとえば、hWnd パラメータが
無効なハンドルを指していた場合、エラーが発生します。
とありました。
いずれもご指摘の通りにした方が良さげですね。感謝!
パソの解像度は 1400*1050 です ^^
画面の半分ちょいぐらいでプログラム書いてますので、幅は狭めかも。
空いてる部分で2ちゃんとかしてるので、こうなってしまいました。
使ってるのは東芝のノートパソで、celelon1.8ギガのやつです。
コンパイラはVC++6.0 Standerdです。
Timerは、とりあえず30フレ出ればなんでも良かったのと、
マルチスレッドが全然わからないんで。。
あと::PeekMessage()と::Sleep()使う方法は知ってるのですが、
あんまパソに負担かけたくなくて。
今のタイマーだとCPU使用率も5〜15%なので、
パソにやさしそうなのでこれ使ってます。
最終的にはマルチスレッドというのをやりたいと思ってます。
ご指摘ありがとうございました。
0155127
2005/07/17(日) 18:53:39CPU率が高いかな。
RPGとか動きの少ないゲームは、移動とかしない時は、FPS4でいいと思うけどな。
3枚の視界サイズのメモリビットマップに、視界の全キャラの全足踏みパターンを
書いておいて、WM_TIMERで250ミリ秒毎に0→1→2→1と描画するだけ。
キャラが移動した時、画面がスクロールした時には、
3つの歩行パターン全部に更新部分を描画する。
0156デフォルトの名無しさん
2005/07/17(日) 19:12:220157デフォルトの名無しさん
2005/07/17(日) 19:18:40俺の環境だとCPU利用率が1%ぐらい。
0158157
2005/07/17(日) 20:38:48俺のマシンのスペックは今となっては高くない。
CPUはPentium3 900MHz
グラフィックはVIAのオンチップで
0159デフォルトの名無しさん
2005/07/17(日) 21:31:04OSは?
0160157
2005/07/17(日) 21:35:51メモリは256M
0161デフォルトの名無しさん
2005/07/17(日) 21:50:04>// 開放(この開放のしかたはいいのか?)
>void Free ();
よくねーよボケー!!!
Free(); としましょう。それじゃ宣言止まりです。
0162デフォルトの名無しさん
2005/07/17(日) 22:01:12それじゃ解放処理呼ばれて無いわw
メモリリークしまくりんぐ
0163デフォルトの名無しさん
2005/07/18(月) 07:33:37まだカーソルキーでスプライトを動かせるだけですが、マルチスレッド使ってます
画像データに、シープラ勉強中◆ryjMYLsfPAさんのものを使わせてもらっています
あと、コードはいろんなところからパクってます:-)
ttp://gamdev.org/up/img/2912.zip
0164デフォルトの名無しさん
2005/07/18(月) 09:11:05http://www.google.co.jp/search?as_q=RPG+%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0&num=100
0165デフォルトの名無しさん
2005/07/18(月) 09:54:21http://pc8.2ch.net/test/read.cgi/gamedev/1086023829/
推薦図書/必読書のためのスレッド in ゲ製作技術
0166デフォルトの名無しさん
2005/07/18(月) 13:14:38うちは600MHzぐらいorz。すごく重いとかいう意味ではなくて、
一般的にfpsが高い方が作品としてすぐれているみたいに考えられているけど、
RPGや、ゲームではないけどテキストエディタとかは、
描画の回数を減らせるなら減らした方がいいのではという意味で書いた。
>>163
まずは、基本的な移動という感じですな。
お互いレベルアップできるようにがんばりましょう。
0167シープラ勉強中
2005/07/18(月) 14:40:07おお、そんな技もあるのかあ。
プログラムはどんどん重くなっていきますし、
いずれはそんな方法も使ったほうがいいのかなあ。
ちょっと難しそう・・どうもありがとうです。
>>156
わたしも欲すぃ。
町の人のセリフとか、どうやって個々に持たせるのか
全然思いつかないし (T_T)
あと、イベントとか、ホントどうするんだろうか・・。
>>161
うはwwほんとだwwww
いちおうFree()の中で開放してるやつは
全部デストラクタにも入ってるので
このプログラムではあんま結果は変わらないのですが、
過去のヤツでは問題アリアリのもあったかも。。
てゆか、たぶんFree()作ったときからそのヘンテコ記述でしたよぉ。
気づいてくれて、ありがとうございます m(__)m
>>163
おー、なんか私の知らない未知のテクノロジーがいっぱいww
絵はどう使っても問題ないんですよ。
でも、、ホントにあんなんでいいんですかね ^^
改変とかもバシバシやっちゃっても全然かまわないので。。
マルチスレッドうらやますぃ。
0168デフォルトの名無しさん
2005/07/18(月) 15:30:29クリティカルセクションをコンストラクタとデストラクタで
ロック/アンロックしてる部分は知らなかったんで「なるほど」と思いますた。
定石なのかもしれませんが・・。
wineからMSIMG32.dllの部分だけとって使おうと思ったら、
まだ実装すんでないのね。
0169デフォルトの名無しさん
2005/07/18(月) 15:32:39ふむふむ。
0170デフォルトの名無しさん
2005/07/18(月) 15:59:30御指摘通り、yaneSDKからパクってます(;´Д`)
コードを抜き出して組み込んでも良いと書かれていたので、
そうさせてもらってます:-)
(他の部分もコードを読んでいるんですが、
yaneSDKの中身はおいらにとっては難しすぎますorz)
使えるオープンソースは使っていこうという方針っす
0171デフォルトの名無しさん
2005/07/18(月) 16:11:16CriticalSectionはEnter回数をWin32側がカウントしているんじゃなかったけ。
そもそも動作しているスレッドがロックしているとか、ロック回数を保持するとか
必要あるのかな?
0172デフォルトの名無しさん
2005/07/18(月) 17:44:10ソース読んでない&&Java屋の戯言だから間違っているかもしれんが...
コンストラクタでロック、デストラクタでアンロックしているようだから>>168で合ってるはず。
再帰ロックすると、単純にデストラクタでDeleteCriticalSectionを実行するとバグるからだと思う。
0173デフォルトの名無しさん
2005/07/18(月) 23:27:26WinでもConvertToFiber(うろ覚え)みたいなAPIで使えるよね。
ライブラリでも拾えるし。
0174デフォルトの名無しさん
2005/07/18(月) 23:38:01無理してスレッドやらコルーチンやら使わなくてもいい希ガス。
0175デフォルトの名無しさん
2005/07/19(火) 00:44:11本当は出したくなかったんですが参考になればと思って出します。
数年前に某所で発表したものです。
見た記憶のある人は黙っておくこと。
問題があるソースだということは分かっています。
いまさら作り直すのも手間ですし、時間もかかるのでパス。
あと、バグがありますが消してません。場所も特定済みですが。
マップチップは前スレの852あたりから拝借。
マップエディタ、NPCエディタ、イベントエディタは…公開しない。
0176デフォルトの名無しさん
2005/07/19(火) 02:16:24わお!スクリプト記述キター!
やはりゲームシステムとゲーム内容は分離すべきですね。
なんかちょっとやる気出てきたゾ。
0177175
2005/07/19(火) 06:33:50マップが適当なのは組み立て方が
良く分からなかったのと面倒だったから。
ソース自体は素敵処理が満載で、
まんま使ったりしようとすると恐らく
痛い目にあうからやめた方が無難。
ただし、スクリプトの実現や、
NPCの実現の一つの手法としては
もしかしたら参考になるかもしれない。
0178デフォルトの名無しさん
2005/07/19(火) 19:03:03うあっ、また未知のテクノロジーがw
NPCエディタとか、イベントエディタとか
やぱ作らなきゃいけないのかぁ。
どこまでできるかな。。
0179デフォルトの名無しさん
2005/07/19(火) 19:16:45作った方が楽できることもあるし、ゲームよりもエディタの方が
大掛かりになってしまうこともある(後者はある意味本末転倒)。
それに、一口にエディタといってもコンバータに毛が生えたようなものから
GUIベースの凝ったものまで色んな形があり得る。
エディタはプレイヤーには見えない(ゲーム開発者だけが使う)道具だから、
「何がしたいか」をはっきりさせて手抜きできるところは手を抜かないと。
何から何まで本格的にやってたらとてもじゃないけど完成しないよ。
0180デフォルトの名無しさん
2005/07/19(火) 20:33:55がんばろっと…
0181デフォルトの名無しさん
2005/07/19(火) 21:50:320182デフォルトの名無しさん
2005/07/19(火) 21:51:590183デフォルトの名無しさん
2005/07/19(火) 21:58:56今できそうなことを着実にこなして、脳内を快感物質で満たし続ける方がいいよ
そうすればやる気も持続しやすくなるはず
0184デフォルトの名無しさん
2005/07/19(火) 22:10:40全体の量が多くなるからねぇ…
0185デフォルトの名無しさん
2005/07/20(水) 08:43:08基礎だけなら、シューティングやシュミレーションなんかとそれほど変わらんとおもうが、
大抵、RPGはドラクエとかFFみたく凝りたがる人が多いからね。
とりあえず、Rogueのソース読みこなせればいっきに世界が広がるよ
と言ってみるテスト。
0186デフォルトの名無しさん
2005/07/20(水) 11:24:43ソース以前に操作方法でつまづいた orz
0187デフォルトの名無しさん
2005/07/20(水) 16:34:12まずは外部依存でイベントを実行できるアドベンチャーを作ってみるとか。
0188デフォルトの名無しさん
2005/07/20(水) 20:09:45本家#1のやつね。あれはイベントスクリプトなんてものはないし、
そもそもNPCがいないし。フラグ管理もアイテムのみだ。
NPC以外の全てが詰まってるステキなゲーム。
0189デフォルトの名無しさん
2005/07/20(水) 20:20:120190デフォルトの名無しさん
2005/07/20(水) 20:25:05SUGEEEEEEEEEE
やっぱレベルが違うわ
自分はまだマップ読み込み+表示レベルっす
あと、スクリプト初心者な俺には
ttp://www4.nasuinfo.or.jp/~hobby/index.shtml
がかなり参考になった。AVGだし、C言語だけどね。
0191デフォルトの名無しさん
2005/07/20(水) 20:39:53一番最初のシナリオ。ASCIIの外伝とかじゃないやつ。
Wizardryはシナリオごとに#1、#2〜と番号が振ってある。
0192デフォルトの名無しさん
2005/07/20(水) 20:41:570193デフォルトの名無しさん
2005/07/20(水) 22:52:120194デフォルトの名無しさん
2005/07/20(水) 23:50:130195デフォルトの名無しさん
2005/07/21(木) 00:48:550196デフォルトの名無しさん
2005/07/21(木) 16:45:17>>149が落とせなかったんで現状把握が出来てないのだが、
今どこまで進んでて、どの辺りが詰まってるん?
0197デフォルトの名無しさん
2005/07/21(木) 16:53:55せんし1のくびをはねた
せんし1はまひした
せんし1はどくにおかされた
せんし1はいしになった
せんし1ははいになった
せんし1のレベルが7さがった
どうする?
0198デフォルトの名無しさん
2005/07/21(木) 17:15:45それでも生きてるのか…?
0199デフォルトの名無しさん
2005/07/21(木) 17:40:37Wizには死より悪い状態がある。それが灰。
灰よりさらに悪い状態もあって、それがロスト。
0200デフォルトの名無しさん
2005/07/21(木) 17:44:19>>149は、プレイヤーらしきキャラが画面上を歩くだけのプログラムです。
今はフィールドのプレイヤーと町の人の共通の処理を、
なんとかクラスにまとめられないかを考え中です。
動きうんぬんよか、どういうクラスにするのかが難しい。
早くゲームっぽい動きを考えるとこまで行きたいよぉ。
>>188さんの提案は凄く魅力的。
まずはイベントとか無いのを作るほうが、
モチベーションを維持できそうな気がする。
スクリプトってなに?
0201デフォルトの名無しさん
2005/07/21(木) 18:18:43たとえば王様のイベントがあったとして、
event.cpp
----------
void king()
{
if(dead){
msg("おおぅ、勇者のくせに死んでしまうとは情けない");
msg("明日から来なくていいよ");
sound("derodero.wav");
}
}
↑こんな風に直接コーディングするのではなく
↓こういうテキストを用意して、プログラムからこのテキストを解析することにより
上のコードと同じような動作を再現させる。
event.txt
----------
event king
if $dead
msg おおぅ、勇者のくせに死んでしまうとは情けない
msg 明日から来なくていいよ
sound derodero.wav
endif
endevent
0202デフォルトの名無しさん
2005/07/21(木) 19:13:11げっ、マジですか?
それってメチャ難しそうなんですけど・・
たまにサイトとかで「独自のスクリプトを組んで〜」みたいなのを
見かけるのですが、コレのことだったのかぁ。
こりゃ無理ですわ orz
0203デフォルトの名無しさん
2005/07/21(木) 19:15:10動く物(その場でアニメーションを含む)はスプライトを扱う基底クラスを
作って、それを継承すると後々楽になると思う。
下はパッと考えで書いたので甘すぎるクラスになっているが、
基本的にはdoMove()で次の位置を決めdraw()で描画といった形。
NPCObjectはそれぞれランダムで決めた方向に進む処理をdoMove()に実装し、
UserObjectはkeyDirectionに従って進む方向を処理する。
その他オブジェクトは移動なしのスプライトアニメーションに使う等。
class MoveableObject{
MoveableObject(void);
MoveableObject(int controller, int xPos, int yPos);
virtual ~MoveableObject(void);
virtual void doMove(void);
virtual void draw(void);
protected:
int controller; //0 = user controll, 1 = non player controll
int xPos, yPos;
};
0204デフォルトの名無しさん
2005/07/21(木) 19:17:02class UserObject: public MoveableObject{
UserObject(void);
UserObject(int xPos, int yPos);
virtual void doMove(void);
virtual void keyEvent(int direction);
protected:
int keyDirection;
};
class NPCObject: public MoveableObject{
NPCObject(void);
NPCObject(int xPos, int yPos);
virtual void doMove(void);
};
class OtherObject: public NPCObject{
..その他、小爆発アニメーションなど
};
0205デフォルトの名無しさん
2005/07/21(木) 20:26:21けれども、自由にNPCを追加したりするときに重宝する。
マップとスクリプトあれば、同じシステムでいくらでもゲーム作れるからね。
まあ、それがRPGツクールなんだけど。
何も完全構文である必要はない。@eとか@nとか、プレフィックス+1文字で
どうにかするとかもできる。
0206デフォルトの名無しさん
2005/07/21(木) 20:44:10RPGならどうしても大規模ゲームになるよね。
0207デフォルトの名無しさん
2005/07/21(木) 20:46:26スクリプトは、バイナリの簡単な仮想マシンにすると実装は楽だね。
大きなスクリプト書くのはしんどいがw
0208207
2005/07/21(木) 21:15:22プトシステムに簡易アセンブラ(ラベルのアドレス化と簡単なニーモック、
フラグレジスタの変換程度)、といった形が現実的かも。
実行時にテキストを読み込んで処理するのはちょっとしんどいし、配布
にも不利だからね。
0209デフォルトの名無しさん
2005/07/21(木) 21:19:080210シープラ勉強中 ◆ryjMYLsfPA
2005/07/21(木) 21:23:10定期です。
本格的に>>149と変わってないのですが。
当たり判定で、ちょっとハマってしまいまして。。
>>203
私のプログラムでは、
CObjectBase ってのが MoveableObject に当たると思います。
てゆか、ベースクラスのメンバ変数を protected のとこで宣言すると、
派生クラスで直接使えるのにびっくりしてしまった。
あー、C++を覚えながらRPGを作るのは、やぱ無謀だったか。
>>203と>>204に仮想関数がやたらと多いのは、
いったいなぜでしょうか?
アフォな質問で申し訳ありませんが、
お願いします m(__)m
0211デフォルトの名無しさん
2005/07/21(木) 21:24:40それはちょっと大袈裟すぎ…
0212デフォルトの名無しさん
2005/07/21(木) 21:25:260213デフォルトの名無しさん
2005/07/21(木) 21:37:44既存の組み込みスクリプトでええじゃないか。
0214デフォルトの名無しさん
2005/07/21(木) 21:39:41ゲーム作りたがる人は地味だから、これを飛ばしたがるけどねw
簡易電卓をまず作ってみるといい
0215デフォルトの名無しさん
2005/07/21(木) 21:45:57仮想メンバ関数を多用しているのは、端的に言うと>>212の意味。
基底クラスなどでvirtual宣言している仮想メンバ関数は継承クラスで再定義できる。
>>203を例にとると、
static MoveableObject spriteTable[MAX_SPRITE_COUNT];
int eventLoop()
{
for(int i = 0; i < MAX_SPRITE_COUNT; i++){
spriteTable[i]->doMove();
}
return(returnCode);
}
void intialize()
{
memset(spriteTable, 0, sizeof(spriteTable));
spriteTable[0] = new MoveableObject();
spriteTable[1] = new UserObject();
spriteTable[2] = new NPCObject();
while(!exitFlag){
eventLoop();
}
}
こんな感じで使うとして、i==0の時はMoveableObjectクラスのdoMoveに制御がまわり、
i==1 -> UserObjectクラスのdoMove()
i==2 -> NPCObjectクラスのdoMove()に制御がまわる。
使う側はその実際のクラスがなんであれ基底クラスとして扱えば
実際の制御は派生クラスで行ってくれるという感じ。
詳しくは派生クラスとバーチャル関数辺りを調べれば出てくると思う。
0216デフォルトの名無しさん
2005/07/21(木) 21:46:04BulletMLみたいにXML使ってもよかですかい?
0217デフォルトの名無しさん
2005/07/21(木) 21:51:34>これを飛ばしたがるけどねw
飛ばすもなにも、自己流で勉強した人はまず、そんなプロセス通らないだろ。
役に立つのは確かだから俺からもオススメするが。
なによりも知的好奇心が気持ちよく満たされる。
0218207
2005/07/21(木) 21:54:01「状態の設定」には良いんだけどね>XML。
処理の「流れ」をどう表現するか……。
結局、XMLに記録するものがまた「テキストスクリプト」になる気がw
0219デフォルトの名無しさん
2005/07/21(木) 21:56:43誤: static MoveableObject spriteTable[MAX_SPRITE_COUNT];
正: static MoveableObject *spriteTable[MAX_SPRITE_COUNT];
0220デフォルトの名無しさん
2005/07/21(木) 22:00:52自己流でやっていて、Cを覚えようとして、
BASICインタプリタ作った俺はなに?
0221デフォルトの名無しさん
2005/07/21(木) 22:01:380222デフォルトの名無しさん
2005/07/21(木) 22:02:290223デフォルトの名無しさん
2005/07/21(木) 23:47:070224(-_-;)
2005/07/22(金) 05:38:41だれか、このスレのLogを取って置いてくださいませ。
来年の4月には取りに着ますので。
よろしくお願いします。
0225デフォルトの名無しさん
2005/07/22(金) 06:58:57そもそも、VC++6.0 Standerdってなんですか?Yahooで調べてみたけど、いまいちよく分からん。
というより、Cで3DRPGを作れるの?聞く話によると、Javaの方がいいという。
まったく初心者の俺は、これだけで混乱してしまう。
だれか、厨房と思わずに教えてくれー!!
0226デフォルトの名無しさん
2005/07/22(金) 07:10:02>聞く話によると、Javaの方がいいという。
言語なんて飾りです
エロい人にはそれが分からんのです
・・・つまり
センスがある人ならCだろうがJavaだろうが作ってしまう
センスが無い人は、どの言語を選ぼうが作れない
ただそれだけのこと
0227デフォルトの名無しさん
2005/07/22(金) 07:33:32VC++6.0 Standerd とは マイクロソフト製のC言語、C++言語でプログラミングをする統合開発環境
Cで開発する場合、画像を表示する窓(ウィンドウ)から作らなくてはならない
Javaで開発する場合は、その窓を作らなくてもよい
3Dゲームを作る場合は、すでにあるライブラリーを使う場合が多いけどその時はCのほうがライブラリーを使いやすく、使用例が多くあります
0228デフォルトの名無しさん
2005/07/22(金) 09:53:580229デフォルトの名無しさん
2005/07/22(金) 11:02:16あたり判定
ソースを読んでみたのだが、今プレイヤーが壁に向かっているか否かは
CPlayer::HitCheckMap()の中でcMap.GetMap()を使用して背景スプライト番号で
判定しているが、これを障害物マップに置き換えてみてはどうだろうか。
あるいは背景スプライト番号(m_pbyMap)の意味を拡張して、
障害物フラグも内包するなど、今は8ビットだがこれを16ビットにして
下8ビットをスプライト番号、上位8ビットを障害物フラグなど。
unsigned short mapItem;
mapItem = cMap.GetMap(...);
if(!(mapItem & 0xff00) && ((mapItem & 0x00ff) == 1)){
mapItem = cMap.GetMap(進行方向);
if((mapItem & 0xff00) || ((mapItem & 0x00ff) != 1)){
m_byWalkFlag &= ~WALK_XXXX;
nHit = true;
}
}
この場合CMap::m_pbyMapの内容は村人の移動とともに書き換えることになる。
絵付きで細かく説明しないとわかりにくいかもしれないが、ご容赦。
0230デフォルトの名無しさん
2005/07/22(金) 11:13:43訂正
誤:この場合CMap::m_pbyMapの内容は村人の移動とともに書き換えることになる。
正:この場合CMap::m_pbyMapの上位8ビットは村人の移動とともに書き換えることになる。
0231シープラ勉強中
2005/07/22(金) 17:56:03なるほど。一つのインターフェイス、複数のメソッドってやつですかね。
う〜ん、でも効果的な使い方が思い浮かばないです orz
>>215のを利用すると、プレイヤーキャラと町の人をソートして、
上から順番に表示するプログラムとか、やりやすそうに
なるような気がしなくもないですけど、、うーん。
もうちょっと考えて見ます。
ども!
>>229
おー、それはいいかもです!
マップチップの種類はそんなに多くならなそうですし、
8ビットのうち、1ビットは進入可能か不可能かの判定フラグにしてもいいですね。
村人の移動で書き換えるのも良いさげ!
でもそれだと、もう一個フラグが必要になるかなあ。
マップチップデータはunsigned short型にして、上位8ビットには
なんか他のデータを入れようかと思ってました。
敵の出現情報とか(川の向こうとこっちじゃ出てくる敵の種類が違う、みたいなやつ)は、
マップチップに持たせたほうがいいんですかね?
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を読んでるうちにこうなりました。。
0332デフォルトの名無しさん
2005/08/03(水) 11:19:56単純に組むのにキャラを一文字ずつ加工するのってどうなのよ。
sscanf()使ったほうがよっぽど単純だと思うけどねぇ。
>313の言うアナクロってのはそういうことでしょ。
#そりゃぁ、昔はライブラリに頼るより自分で書いたもんだが今時、ねぇ……
0333デフォルトの名無しさん
2005/08/03(水) 11:45:380334デフォルトの名無しさん
2005/08/03(水) 11:49:400335デフォルトの名無しさん
2005/08/03(水) 12:15:260336デフォルトの名無しさん
2005/08/03(水) 12:40:330337デフォルトの名無しさん
2005/08/03(水) 12:42:13可読性の高いコードきぼんぬ
0338デフォルトの名無しさん
2005/08/03(水) 12:55:590339デフォルトの名無しさん
2005/08/03(水) 12:56:570340シープラ勉強中 ◆ryjMYLsfPA
2005/08/03(水) 15:08:21http://49uper.com:8080/html/img-s/69433.zip
>>310さんのを入れてみました。
どうも「\n」の改行コードをフラグにしようとすると、うまくいきませんでした。
もしかしてこれがバイナリモードとテキストモードの違いってやつでしょうか。
もうちょっと研究が必要なようです。
いずれは条件分岐とか入れられるようになるんだろうか・・。
>>319
std::string使ったことない orz
やらなきゃとは思ってるんですけどねぇ。
>>329
今はただキャラクタにセリフしゃべらせたくて、コードに直書きするのもアレなので
無理にファイルから読み込んでるだけですので、あんま気にしないでー。
>>328
マジ勉強になりました。ホント感謝です m(__)m
0341デフォルトの名無しさん
2005/08/03(水) 15:11:23メモ帳で保存したファイルの改行は \r\n 。
これをテキストとしてオープンすると 「\r\n」→「\n」の変換が自動で行われるので \r を気にしなくてもいい。
バイナリとしてオープンすると \r が残るので解析がちょっとめんどくさくなる。
0342シープラ勉強中
2005/08/03(水) 15:51:00// 指定された文字がファイル中にいくつあるか数えて返す
int FileSearch (char _str) {
int _num = 0;
for (int i = 0; i < m_dwFileSize; i++)
if (m_pchBuffer[i] == _str)
_num++;
return _num;
}
↑の関数をメンバに入れて、数を数えてみました
cout << cText.FileSearch('a') << endl;
cout << cText.FileSearch('m') << endl;
cout << cText.FileSearch('\n') << endl;
cout << cText.FileSearch('\r') << endl;
--結果--
3
12
63
63
どうも、\nと\rは同じ数だけあるようです。
うわさによると「\r\n」は二バイトらしいので、
解析もややこしそうですね。。
あれ?でも私のプログラムは改行一個飛ばすときは
一回しかインクリメントしてませんけど飛ばせたような・・。
あー、よくわからず。
0343シープラ勉強中
2005/08/03(水) 17:42:16\rが入ってたら後で面倒なことになりそうなので、
\rはGetしないことにしました。
実行結果の「r=」ってのは\rの数で、
「n=」ってのが\nの数です。
こういうのって、普通はどう処理するんでしょうか?
1:最初から\rが入らない書式で保存しとく
2:\rが入らない形でファイルオープン
3:\rが入ってても、大丈夫なプログラムを組む
4:\rが入ってたら抜く
私はとりあえず4の手段を使ったのですが・・ (´・ω・`)
>>341さんの言ってるのは2ですかね。
どうやら::CreateFile()ではできないようです。。
ttp://bbs.wince.ne.jp/ch1/mqbbs.cgi?&FILE=bbs.log.29&MODE=MSG&NUM=2837
Q
>一つ気になったんですが、open()関数では、開き方にバイナリやテキストの指定が
>できますが、CreateFile()では、そういう指定はできないのでしょうか。
A
>無いです。
>常にバイナリモードでオープンされると考えてください。
0344デフォルトの名無しさん
2005/08/03(水) 17:58:13fopen や ifstream は使ったことないん?
0345デフォルトの名無しさん
2005/08/03(水) 18:03:02素直にifstreamかfopenを使って置け。
それらを使えば、改行コードは'\n'とだけ意識していれば事が足りる。
0346デフォルトの名無しさん
2005/08/03(水) 18:14:34うはwwそっちですかww
::CreateFile()は前にちょっと触ったことあったのと、
>>175さんが使ってたので、これでいいのかなとww
全然迷いもなく使ってました。
・
・
::fopen()を使ったほうがいいみたいですね ^^
ifstreamは知らないので、::fopen()の方を研究してみます。
てゆか、今日今まで凄い無駄なことしてたっぽい orz
0347デフォルトの名無しさん
2005/08/03(水) 18:31:47背中がかゆい…
0348デフォルトの名無しさん
2005/08/03(水) 20:54:18pFile = ::fopen("msg003.txt", "r");
// ファイルのサイズ計る
int n = 0;
while (::fgetc(pFile) > 0)
n++;
// ファイルポインタを先頭に戻す
fseek(pFile, 0, SEEK_SET);
char *pchBuffer;
pchBuffer = new char[n + 1];
::fread(pchBuffer, sizeof(char), n, pFile);
pchBuffer[n] = '\0';
::fclose(pFile);
cout << "size = " << n << endl;
cout << pchBuffer;
delete [] pchBuffer;
いちおーできたんですが、
このファイルのサイズの計り方はアリなんでしょうか?
例文が一個も見つからなかったから、手探りでした (ノω`)・゚・。。
0349シープラ勉強中
2005/08/03(水) 20:59:56MSDNとのにらめっこはキツかった (T_T)
0350デフォルトの名無しさん
2005/08/03(水) 21:11:42と思ったが、テキストモードではftellを信用できないことに
気づいた。
0351デフォルトの名無しさん
2005/08/03(水) 23:50:52>\rが入ってたら(中略)こういうのって、普通はどう処理するんでしょうか?
5:バイナリモードで開き、\rと\nを双方とも改行コードとして扱う(自前で処理)。\r\nと連続している場合はまとめて改行1つ分として扱う。
3の具体例の一つだが、これならSEEK_END→ftellでも問題ないし、直接fseekでも、
バッファに読む→直接インデックス作成→インデックスからポインタ指定で読み出しでもOK
作業してるソフトが違っても改行コードの違いはここで吸収できる。
もっとも、自分だったら簡易スクリプトコンパイラを作ってインデックス付きのバイナリ(ある意味で中間言語形式)にしてると思う。
(MinGWで出たerror/warning)
65行目と168行目 符号付数値と符号無し変数の比較で警告
0352デフォルトの名無しさん
2005/08/04(木) 05:18:49悪くはない。getcしまくるのはアレなんでfseekしましょう。
> int n = 0;
> while (::fgetc(pFile) > 0)
> n++;
fseek(pFile,0,SEEK_END);
int n=ftell(pFile);
> ::fread(pchBuffer, sizeof(char), n, pFile);
> pchBuffer[n] = '\0';
n=fread(pchBuffer, sizeof(char), n, pFile);
pchBuffer[n] = '\0';
0353デフォルトの名無しさん
2005/08/04(木) 05:22:20while (::fgetc(pFile) > 0)
↓
while(fgetc(pFile)!=EOF)
0354デフォルトの名無しさん
2005/08/04(木) 11:21:13fread(pchBuffer, 1, n, pFile);
でいい。
0355デフォルトの名無しさん
2005/08/04(木) 12:38:070356デフォルトの名無しさん
2005/08/04(木) 12:43:08ファイルを開いて読んだりシークしたりしなくてもファイルサイズや属性を
得ることができそうなものだが。
0357デフォルトの名無しさん
2005/08/04(木) 14:19:28unix はろくに知らんが、win32 でも sys/stat.h の _stat ってのが使える。
俺はシークを好んで使うが。
0358デフォルトの名無しさん
2005/08/04(木) 14:20:37// C++らしくstd::mapで作ってみた。
#include <string>
#include <map>
#include <iostream>
int main()
{
char in[]= (
":msg0\n"
"0です!\n"// 1行のみなら空行をあけない
":msg01\n"
"aaa\n"
"\n"
"\n"// 必要ならいくらでも改行を
":msg3\n"
"\n"// この場合はメッセージは空
":msg23\n"
"(*^ー゚)b\n"
"\n"
);
std::map<int, std::string> msgs = parseMessages(in);
std::cout << "msg" << 23 << '[' << msgs[23] << ']' << std::endl;
return 0;
}
// ':'の場所は(先頭の場合を除いて)行頭に限定→メッセージ中にも':'を使える
// 次のタグまでをメッセージとする→複数行のメッセージも扱える
// ":msg"以外のタグが追加される可能性を考慮
// ファイル末尾も適当に何とかする
// 関数本体は次に
0359358 ジャスト32行かよw
2005/08/04(木) 14:22:03{
std::map<int, std::string> rtn;
std::string buf(inputBuffer);
unsigned pos = 0;
while ((pos = buf.find(':', pos)) != std::string::npos) {
++pos;// ':'の次をポイント
if (buf.compare(pos, 3, "msg") == 0) {// メッセージタグ
int id = atoi(buf.c_str() + pos + 3);// 必要ならstrtol()やsscanf()も
unsigned nextPos;
unsigned bodyPos = buf.find('\n', pos + 3);
if (bodyPos != std::string::npos) {
++bodyPos;
nextPos = buf.find("\n:", bodyPos);
if (nextPos == std::string::npos) {
// 次のタグがない場合は最終行まで(末尾の改行は除く)
nextPos = buf.size() - 1;
}
rtn[id] = buf.substr(bodyPos, nextPos - bodyPos);
std::cout << '[' << rtn[id] << "]\n";
}
pos = nextPos;
} else {// その他のタグでは改行を見つけておく
pos = buf.find('\n', pos);
if (pos == std::string::npos) {// 改行が見つからないなら最後をポイント
pos = buf.size();
}
}
}
return rtn;
}
0360デフォルトの名無しさん
2005/08/04(木) 14:28:180361358
2005/08/04(木) 14:42:36隙間の空行が任意ってだけか。
つーことで、「仕様に反して」は割愛。
うーん、マジックナンバーの3が気になるなぁ……
#ちゃんと"msg"から長さを得るべきだね。
0362デフォルトの名無しさん
2005/08/05(金) 07:57:21でもあまり変ってないような。
0363デフォルトの名無しさん
2005/08/05(金) 18:41:10| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|
| もっと濃い構文解析器きぼん!!! |
|_______________|
∧∧ ||
( ゚д゚)||
/ づΦ
0364デフォルトの名無しさん
2005/08/05(金) 18:44:34http://pc8.2ch.net/test/read.cgi/tech/1115335709/l50
0365デフォルトの名無しさん
2005/08/05(金) 19:44:320366デフォルトの名無しさん
2005/08/05(金) 19:50:130367シープラ勉強中
2005/08/05(金) 23:18:13>>351
なるほど。プログラムでなんとかするってことですか。
今はバイナリモードで開く意義がわからないのでテキストモードを使いますが、
バイナリモードを使う必要がでてきたら、その方法を試してみます。ども。
簡易すくりぷとこんぱいら??
>>352
>>350さんも言ってましたが、どうもテキストモードで開いてもftell()は
改行コードを"\r\n"で計算するようです(私の環境だけ?)
ちょっとためしてみましたが、fread()の戻り値より、ftell()の戻り値の方が
"\r"分だけ多く返ってきました。
バイナリモードで開く場合は、その方法を使ってみまっす。ども。
>>353
MSDN調べてて、なんかやたら-1を見ると思ったら、EOFは-1なんですね ^^
知りませんでした。
>>359
STLカコイイ・・
私もいつかそんなプログラムを組んでみたいです。
0368デフォルトの名無しさん
2005/08/05(金) 23:33:40・ファイルサイズ
今回ファイルサイズが欲しい理由は、単純にバッファを用意するためなんだから
ftell()で行数分多く返ってきてもそのまま使えば医院で内科医?
>352のようにfread()の戻り値でナルキャラ書き込めば無問題。
・STL(つーか、map)
>358に書いたように、msgs[23]と書けてしまう単純さに注目。
セットする方も、固定値ならばmsgs[2] = "Whee!";で済んでしまう。
つまりこれらはいつか到達する目標ではなく、初心者こそ使うべき道具だと思うぞ。
0369シープラ勉強中 ◆ryjMYLsfPA
2005/08/06(土) 05:46:57やっつけで一文字ずつ表示するやつを作ってみました。
http://49uper.com:8080/html/img-s/69951.zip
ファイル関係はわからないことも多いのですが、次に進みたいと思います。
>>368
>ftell()で行数分多く返ってきてもそのまま使えば医院で内科医?
医院で内科医てww
fgetc()を何回も回すよりは、そっちのほうが良さげですね。スマートだし。
MSDNには
ftell 関数が返す値は、テキスト モードで開いたストリームに対しては、物理バイト オフセットを表さない場合があります。これは、テキスト モードでは CR-LF (キャリッジ リターンとライン フィード) シーケンスをライン フィード (LF) に変換するからです。
って書いてあったんですが、これは「"\r"も数える」って意味なんですかね?
「キャリッジ リターン」と「ライン フィード」はググってみたら、
どっちも改行に関係あるようですが。。
STLにはなんとなく苦手意識がww
まだ一個もやってません orz
「msgs[23]と書けてしまう単純さ」って素晴らしいです。
どうもありがとうございます m(__)m
0370デフォルトの名無しさん
2005/08/06(土) 09:20:14CR = キャリッジリターン = '\r'
LF = ラインフィード = '\n'
CR-LF = "\r\n"
ということが判明。
で、上の文は、テキストモードで開かれてるファイルは
CR-LF が LF に変換されてるって書いてあるようですね。
でも、わざわざ「場合があります」って書かれてるってことは、
結果は環境によって異なるってことかなぁ。
0371デフォルトの名無しさん
2005/08/06(土) 16:26:42実装及び実行時依存なんだと思う。
例えば先頭からバイナリ読み込みの典型であるfread()やテキスト読み込みの典型であるfgets()、
1バイト読み込みであるfgetc()で読み進んだ場合のftell()は変換後の(先頭からの)オフセットを返すが、
読み込みを全く伴わない終端からのfseek(SEEK_END)の後のftell()では変換前のオフセットを返すとか。
しかし、面倒だからCrLfの解説しないで様子見てたんだけど、辿り着ける人はちゃんと解説に辿り着けるんだねぇ。
ちょっと>370に感心した。
0372デフォルトの名無しさん
2005/08/06(土) 16:34:580373デフォルトの名無しさん
2005/08/06(土) 17:31:43作り間違ったら、後々大幅修正しなきゃいけないし。
>>371
うはー、複雑。
ちゃんと両方のモードに対応した関数を作っといてほすぃ。。
一段落したら std::ifstream をがんばってやってみようかなぁ。
どうやらバイナリかテキストを選択できるみたいですし。
読み込んだサイズを計る関数ぐらいありますよね。
>>372
めちゃめちゃ大まじめですけど o(T_T)o
0374デフォルトの名無しさん
2005/08/06(土) 17:32:440375デフォルトの名無しさん
2005/08/06(土) 23:30:470376デフォルトの名無しさん
2005/08/07(日) 00:13:070377デフォルトの名無しさん
2005/08/07(日) 05:45:39低水準であっても
0378デフォルトの名無しさん
2005/08/07(日) 20:04:27最初から最後までレベルが高いなんて有り得ないと思われ。
それは仕方がないから傍観汁。
0379デフォルトの名無しさん ◆ErakzB51PM
2005/08/07(日) 21:20:40http://gamdev.org/up/img/3008.zip
イベントスクリプトにXMLを使ってみますた
ゲームの形になるのは、まだまだ先だなぁ(;´Д`)
0380デフォルトの名無しさん
2005/08/08(月) 00:25:42ワロス
0381デフォルトの名無しさん
2005/08/08(月) 06:41:18枯れたライブラリのほうがウマイよな。
というわけで関連ライブラリスレ。
http://pc8.2ch.net/test/read.cgi/gamedev/1008220559/l50
イケてるライブラリ見つけたら紹介よろしくきぼんぬ >ALL
0382デフォルトの名無しさん
2005/08/09(火) 00:05:280383デフォルトの名無しさん
2005/08/09(火) 00:13:38ってかできない理由がわからない
0384デフォルトの名無しさん
2005/08/09(火) 00:58:30C++にはRPGを作るためのいろんな機能が備わってると勘違いしてるな。
0385デフォルトの名無しさん
2005/08/09(火) 01:06:280386デフォルトの名無しさん
2005/08/09(火) 02:32:54業務でRPGにまわされたときにゲーム製作?と思って歓喜
↓
業務についたあと、自殺を何度も考える
0387デフォルトの名無しさん
2005/08/09(火) 02:54:53おお!同志よ!
そして実態を知ったときのあの落胆。。。
0388382
2005/08/09(火) 18:45:55//C言語だと絵の表示や文字色の変更さえもできないから、
//それだけで作ったRPGってどんなふうなのかなと。
//C言語だけでもこれだけできるんだぞ、みたいな、
//参考になるゲームがあったら教えて欲しいかなとか思ったりしたんだけど
0389382
2005/08/09(火) 18:47:250390デフォルトの名無しさん
2005/08/09(火) 18:47:26できるから上のようなレスが付くわけで
0392デフォルトの名無しさん
2005/08/09(火) 19:06:460393382
2005/08/09(火) 19:25:00っで。恥かきついでに教えて君させてください。
C言語だけで作った手本になるようなゲームってありますか?
できればソースも見られるようなのだと助かるんですけど?
0394デフォルトの名無しさん
2005/08/09(火) 19:51:020395デフォルトの名無しさん
2005/08/09(火) 20:07:46質問がちょっと的外れな気がするなあ。
君は今どの程度Cを使えるんだい?
0396382
2005/08/09(火) 22:16:16ちょっと前に初級シスアドを取ったので、
それじゃあ今度はプログラムを勉強してみようかなと。思い立って、
C言語の本を買って見たけど、特に何かをしたい訳じゃなかったので。
ゲーム造りは前に「カードワース」というのでやったことがあるので、
配列とかポイントとか作りながら覚えるのにゲームを作りながらやったら、
分かりやすいかなとか。思ったんだけど。――百年早い?
0397デフォルトの名無しさん
2005/08/09(火) 22:19:42無理。いきなりRPG作ろうとか思うな。
まずちゃんとC勉強して来い。
もしくはRPGツクールで作れ。
0398デフォルトの名無しさん
2005/08/09(火) 22:24:570399382
2005/08/09(火) 22:47:19でもその前にちょっと質問。
文字色付けるのは見つけたんだけど、これでいいんでしょうか?
#include <stdio.h>
#define ESC ((char)0x1b)
int main(void)
{
printf("hello, world\n");
printf("%c[31m赤色にしてみる%c[0m\n", ESC, ESC);
printf("%c[4m青色にしてみる%c[0m\n", ESC, ESC);
printf("%c[32m緑字にしてみる%c[0m\n", ESC, ESC);
printf("%c[36m水色にしてみる%c[0m\n", ESC, ESC);
printf("%c[45;36mピンク字に青文字にしてみる%c[0m\n", ESC, ESC);
printf("%c[30m黒色にしてみる%c[0m\n", ESC, ESC);
printf("%c[45;30mピンク時に黒色にしてみる%c[0m\n", ESC, ESC);
printf("good-by\n");
return (0);
}
%c[以下のどの文字が何に対応しているのかとか、さっぱり分からないですけど。
この色とかってもしかして、機種依存になってますか? ってか、スレ違い?
0400デフォルトの名無しさん
2005/08/09(火) 22:53:33DOSでプログラミング
http://pc8.2ch.net/test/read.cgi/tech/1047001533/
0401382
2005/08/09(火) 23:03:22みなさん、お騒がせしまた。orz
0402デフォルトの名無しさん
2005/08/09(火) 23:12:55まあ本人が納得してるならいいか。
0403デフォルトの名無しさん
2005/08/09(火) 23:19:33激しく無駄なprintf()の使い方だな。
例えば
>printf("%c[31m赤色にしてみる%c[0m\n", ESC, ESC);
は
printf("\x1b[31m赤色にしてみる\x1b[0m\n");
でよい。
0404デフォルトの名無しさん
2005/08/10(水) 07:15:59画面への表示をやりたかったら、全てライブラリを使うことになる
ANSIで決められた標準関数だけを使えば、どのコンパイラでも動くので
一見コンソール入出力関数群がC言語の組み込みコマンドのように見えるだけで
ライブラリが無ければ本来、ファイルの読み書きすらC言語単体では出来ない
初心者にありがちな、
C言語=printf scanf
っていう勘違いは入門書が悪いからだろうか?
C言語でもWin32APIを使えばグラフィカルなゲームは作れる
0405デフォルトの名無しさん
2005/08/10(水) 09:26:30って考えは間違いじゃないでしょ。
>C言語でもWin32APIを使えばグラフィカルなゲームは作れる
なかったら作れないじゃん、ない場合はC言語だけ使うってことだろうし。
0406デフォルトの名無しさん
2005/08/10(水) 09:31:42GLUTでもSDLでも使えば?
大部分のコンピューターでグラフィカルなゲームが作れるぞ
0407デフォルトの名無しさん
2005/08/10(水) 09:43:15だから
C言語≠標準関数
勘違いしている奴多すぎw
0408デフォルトの名無しさん
2005/08/10(水) 11:00:010409デフォルトの名無しさん
2005/08/10(水) 11:21:26規格に完全に準拠している処理系は存在しないって意味?
そんなことないと思うけど。
0410デフォルトの名無しさん
2005/08/10(水) 12:23:340411デフォルトの名無しさん
2005/08/10(水) 12:43:58べつにここじゃないと吐けない愚言でもなかろう。
0412デフォルトの名無しさん
2005/08/10(水) 13:00:27boostスレ見ればわかるけど他はボロボロ
0413デフォルトの名無しさん
2005/08/10(水) 13:38:18CとC++の区別もつかないのはどうかと思うよ。
0414デフォルトの名無しさん
2005/08/10(水) 13:41:17コンシューマにゃ無数にあるんじゃねえの?
昔すぎるとアセンブラがたくさん混じってるだろうし、
最先端だとC++やその他何か違うものも使ってたりするだろうけど。
0415シープラ勉強中 ◆ryjMYLsfPA
2005/08/11(木) 19:55:13http://49uper.com:8080/html/img-s/70913.zip
なんとか村人をしゃべらせてみました。
Zでしゃべりかけて、Xで文字送りという不思議使用です
とにかくテキストを出す方法に疑問ありまくりなんですが、
私が考えた方法は
まずpFileBufferにファイルの全情報を読み込む
pTempBufferに表示したい分だけの文字列をpFileBufferから読み込む
テキストは4行なので、pDrawBuffer[4]を用意
(pDrawBuffer[0]は一行目、[1]は二行目・・ てな感じで使う)
pDrawBuffer[?]にpTempBufferから一文字ずつ入れて表示
という流れになってると思います。
細かい計算はなんとかするとして、特に疑問なのが、
一行にひとつずつバッファを用意するのは一般的なんでしょうか?
なにやら凄く無駄なことをしてる気がするのですが。
自力で改行をコントロールするのに、この方法しか思いつかなかった orz
あと、表示はTextOut()を使ってるのですが、これは大丈夫でしょうか?
DrawText()ってのも試してみたのですが、
自動改行がいまいちコントロールできなかったので、やめちゃったんですけど。
説明下手で申し訳ありませんが、
どなたかご意見お願いします m(__)m
>>379
すごいなあ (´・ω・`)
0416デフォルトの名無しさん
2005/08/11(木) 20:18:18行末の改行コードは消そう。TextOutで表示されちゃってるから。
まあ表示処理に関しては好きにしていいと思う。
思うが、文字列をpTempBufferに置いてあるとして、
DrawTextで、nCount(3番目のパラメーター)を一文字分ずつ
増やしていけば、改行で云々せずともかってに描画してくれる気もする。
という感想。あくまで感想であってアドバイスではない。
0417デフォルトの名無しさん
2005/08/11(木) 21:19:18改行はウチでは出てなかったんですが↓
http://49uper.com:8080/html/img-s/70929.jpg
環境によって変わるのかな・・。
よくわかりませんが、改行は表示用文字列には入れない方向で行ってみます。
ども m(__)m
なぜか、フォントによっては出ることもあったんですよね。
0418デフォルトの名無しさん
2005/08/11(木) 22:00:50『AR丸ゴシック体M』
なんてフォントは家のマシンには入っていない。
0419デフォルトの名無しさん
2005/08/11(木) 22:24:35クラスの階層図と、もうちょっとソース中のコメントがほしいです
あとはクラスによって.hファイルが無い(もしくは他のファイルに含まれている)のがちょっと見難いかも
改行はうちの環境でも出ませんでしたよ
0420デフォルトの名無しさん
2005/08/12(金) 00:14:00http://himatanuki.hp.infoseek.co.jp/cgi-bin/uploader/src/up0013.gif
0421420
2005/08/12(金) 00:17:49つまんない台詞でスクリーンショット撮っちゃったな orz
0422シープラ勉強中
2005/08/12(金) 17:21:01スクリーンショットまでとってもらってすみません
フォントは「MSゴシック」あたりが一般的かもですね。なんかよく聞くし。
選べるのが一番いんんでしょうが。
あと、ちゃんとした台詞はひとつもないのでww
>>419
階層図ってのは、>>19 >>21 みたいなヤツでしょか?
継承してるのだけならなんとかなりそうなので、
どっかに書いときます。(ときたま自分でもわけわかめになりますから・・)
ヘッダーファイルは何をどこに入れればいいのかまだ研究中なので、
もうちょっと待ってください。
コメントは・・どうしよ。
お二方とも、ありがとうございます m(__)m
0423デフォルトの名無しさん
2005/08/12(金) 20:10:590424デフォルトの名無しさん ◆ErakzB51PM
2005/08/12(金) 21:27:50書いたこと無いよ(´・ω・`)
>>422
フォントは「MS ゴシック」か「MS 明朝」
どのWindowsにも、この2つは必ず入っている筈
0425デフォルトの名無しさん
2005/08/12(金) 21:42:440426デフォルトの名無しさん
2005/08/12(金) 22:50:47こんな感じのゲームを作るときってやっぱりクラスとかCにない機能を使ったりしますか?
0427デフォルトの名無しさん
2005/08/12(金) 22:52:430428デフォルトの名無しさん
2005/08/12(金) 22:58:50C++使ってる意味がないじゃないか
0429デフォルトの名無しさん
2005/08/12(金) 23:03:59それと、ゲームでまで等幅フォントは見たくないぞ。
0430デフォルトの名無しさん
2005/08/13(土) 00:51:592chもプロポーショナルやん。
あ、ソースが等幅フォントか・・・。
0431デフォルトの名無しさん
2005/08/13(土) 01:17:410432デフォルトの名無しさん
2005/08/13(土) 01:22:20PCゲームはやらんから知らんけど
0433デフォルトの名無しさん
2005/08/13(土) 01:24:560434デフォルトの名無しさん
2005/08/13(土) 01:53:41doxygen 使えばそれっぽいのは生成できる。
コメントのスタイルとしても doxygen に対応させておくのがお勧め。
0436382
2005/08/13(土) 02:27:40http://himatanuki.hp.infoseek.co.jp/cgi-bin/uploader/src/up0014.lzh
スレの底下げに来てるようだけど、本人いたってマジメです!
直す所とかヘンな所があったら教えてもらえると助かります orz
あと、データのセーブ方法がまったく分かりません orz
0437これで動くはず・・・
2005/08/13(土) 13:09:51#include <stdlib.h>
typedef struct _St{/* ココ ニ データ */ ; sturct _St * Prev, * Next}St; /* コノ コウゾウタイ ハ、 ヒツヨウ ニ オウジテ ヘンコウ シテクダサイ */
void ReleaseDataAll(St * data){St * fr; if(data){do{fr = data; data = data->next ,free(fr);}while(data);}}/* データ カイホウ ヨウ */
int LoadData(const char * fileName, St * data){FILE * fp; St * Save; if(!(fp = fopen(fileName, "rb"))/* バイナリ ヨミコミ センヨウ */{return -1;}
Save = data = (St *)malloc(sizeof(St)); if(!data){fclose(fp); return -2;} data->Prev = NULL;
while(fgets(data, sizeof(St)-sizeof(St *)*2, fp) != EOF){data->next = (St *)malloc(sizeof(St)); if(!(data->next)){ReleaseDataAll(Save);retrun -2;}
data->next->prev = data; data = data->next;} data->next = NULL; fclose(fp); return 0;
}/* シタ ノ カンスウ ガ セイジョウ ニ ドウサ スレバ ウゴク ハズ */
int SaveData(const char * fileName, St * data){FILE * fp; if(!(fp = fopen(fileName, "wb+"))/* バイナリ シンキ ヨミカキ モード*/{return -1;}
do{fputs(data,fp); fseek(fp,-(sizeof(St*)*2), SEEK_CUR); data = data->next}while(data); close(fp);, return 0;
}/* コノ カンスウ ハ ドウサ ノ ホショウ ハ ナシ */
0438デフォルトの名無しさん
2005/08/13(土) 13:23:39がんばってるな
好感持った
0439デフォルトの名無しさん
2005/08/13(土) 13:29:28処理がmain関数に集中しているので見通しが良くなるように
関数に分割してみよう。
static int flag_rand = YES;
元ソースでも可だけど、ここでは意味を明瞭にしたほうが良いと思う。
ランキングはスコアの配列(優れた順に並ぶ)を用意して、表示するだけ。
スコアと名前を構造体を使ってセットにする等、適宜工夫して。構造体や
配列の操作の良い練習になるはず。
セーブ・ロードはその配列をファイルに入出力するだけ。
C ファイル操作でぐぐれ。
0440382
2005/08/14(日) 00:10:49構造体とか配列は、意味不明で読み飛ばしてた所でした… orz
なんかその辺りが分からないと、後が続かなそうですね。
関数の分割もいいかげん覚えないと、自分でも読みにくくなってきました。
もちっと勉強してきます。
んで、とりあえず、あれこれいじってできた所まで上げておきます。
http://himatanuki.hp.infoseek.co.jp/cgi-bin/uploader/src/up0015.lzh
0441デフォルトの名無しさん
2005/08/14(日) 00:17:30がんばりは分かるが、スレ違いってことに気づけ。
0442デフォルトの名無しさん
2005/08/14(日) 07:03:470443デフォルトの名無しさん
2005/08/14(日) 07:57:02#define YES 0に違和感。
真偽値を表すとき、慣例は真は0以外の値、偽は0にする。
0444デフォルトの名無しさん
2005/08/14(日) 11:29:44#define TRUE 1
#define FALSE 0
大抵の人はコレを使う。他の言語でも似たような意味で使われるから。
0445382
2005/08/14(日) 12:35:52ではその辺りも変更しながらやってみます。
で、あとは自力、か他スレで聞いて勉強して、
RPG作れるようになったら、また来ます! (`・ω・´)
みなさん、色々ありがとう、おじゃましました!
0446デフォルトの名無しさん
2005/08/14(日) 16:18:390447デフォルトの名無しさん
2005/08/14(日) 16:30:45この短期間でめちゃめちゃ上達してますね。
末恐ろしい・・がんばってください。
0448デフォルトの名無しさん
2005/08/14(日) 19:26:19慣習だと
#define TRUE (!0)
#define FALSE (0)
だよ
しかも if(ほにゃらら==TRUE)って使い方はしない
if(ほにゃらら)
って使う
0449デフォルトの名無しさん
2005/08/14(日) 20:15:55#define YES 1
#define NO 0
だろうな
0450デフォルトの名無しさん
2005/08/14(日) 23:54:510451デフォルトの名無しさん
2005/08/15(月) 00:47:100452デフォルトの名無しさん
2005/08/15(月) 01:58:45>#define TRUE (!0)
>#define FALSE (0)
>だよ
これは間違いないが
>しかも if(ほにゃらら==TRUE)って使い方はしない
>if(ほにゃらら)
>って使う
これってどうなん?
あまり好きじゃないな
0453デフォルトの名無しさん
2005/08/15(月) 02:07:36else if(はにゃーん==FALSE){ }
else{ ここに来ることがある }
ので、==TRUE は使いたくない
0454デフォルトの名無しさん
2005/08/15(月) 02:18:560455デフォルトの名無しさん
2005/08/15(月) 02:30:54は(TRUEが1であるかぎり)期待したとおりの結果を返す。しかしバカ げたことである。
一般にTRUEやFALSEを相手に明示的にテストするこ とは望ましくない。
なぜならライブラリ関数の中には(有名なのは isupper()、isalpha()など)条件が
成立したときに非0の値を返すが、 その値は必ずしも1ではないものがある(さらに、
もし君が「if((a == b) == TRUE)」が「if(a == b)」の改良版であると信じるのなら、
な ぜそこで止めるのか。なぜ「if (((a == b) == TRUE) == TRUE)」を 使わないのか)。
おおまかな目安としては、TRUEとFALSEを(あるいは 似た物を)ブール値をあらわす
変数に代入する際や、関数の引数、ブー ル値を返す関数の戻り値としてだけ使うこと。
けっして比較に使って はいけない。
0456デフォルトの名無しさん
2005/08/15(月) 02:39:39#define TRUE (1==1)
#define FALSE (1!=1)
0457デフォルトの名無しさん
2005/08/15(月) 03:02:50おまえら↓逝けよ。
すれ立てるまでもない質問はここで 第69刷
http://pc8.2ch.net/test/read.cgi/tech/1123220967/
C言語なら俺に聞け! Part 112
http://pc8.2ch.net/test/read.cgi/tech/1123432321/
C++相談室 part41
http://pc8.2ch.net/test/read.cgi/tech/1120190961/
0458デフォルトの名無しさん
2005/08/15(月) 03:08:07そっちへ誘導するなよ
低レベルの話はここでやってもらったほうがいい
0459デフォルトの名無しさん
2005/08/15(月) 03:20:26if ((a == b) == TRUE)なんて書かないだろ…
0460デフォルトの名無しさん
2005/08/15(月) 08:22:010461デフォルトの名無しさん
2005/08/15(月) 09:45:57スーファミとかの話か?
0462デフォルトの名無しさん
2005/08/15(月) 19:57:45何も考えずにBG面に描こうとするとそうなるな(スーファミとかの話)
最近はBG面にプロポーショナルで描くソフトも増えてるが(GBAとかの話)
プロポーショナルにすると、改行位置の調整が面倒くさいってのもあるんじゃないすかね
0463デフォルトの名無しさん
2005/08/15(月) 20:06:06等幅だと文字数だけだから楽だし。
0464デフォルトの名無しさん
2005/08/15(月) 20:12:59プロポーショナルフォントなんてありえない話だったから。
プロポーショナルフォントって単に文字幅が文字毎に異なるだけじゃなくて
前後の文字の組み合わせによっても字間が変わるような面倒なこともしてる。
0465デフォルトの名無しさん
2005/08/17(水) 21:38:43攻撃力と守備力の関係ではないでしょうか。
勇者の攻撃力が 10、魔物の守備力が 3 なら
単純に 10 − 3 = 7 が魔物に与えるダメージってわけにはいかないような。
たとえばドラクエとかではどうなってるんでしょうか。
攻撃力−守備力> HP なら絶対 1 発で倒せるのか、とか考えると
そうでもないような。
ほかにもすばやさとか属性、魔法の効き目なんかを考えると
ややこしい。
当方 C++ 初心者でコマンドプロンプトで動く RPG を勉強しながら作ってるんですが
一番悩むのは上記ほか経験値をどのくらい稼いだら次のレベルに上がるか
レベルが上がると HP、MP がどのくらい上昇するか、
それに応じてどこに行けるようになるか、どのくらいの強さの魔物と戦うか、
ということなんですが。
0466デフォルトの名無しさん
2005/08/17(水) 21:58:26私は、とりあえず適当に作ってますがw
0467デフォルトの名無しさん
2005/08/17(水) 21:59:27その辺は完全にゲームバランスだからね。RPGツクール(体験版もあり)を参考にするもよし、市販のRPGを参考にするもよし。
本来はこっちなんだろうけど。
http://pc8.2ch.net/gamedev/
0468デフォルトの名無しさん
2005/08/17(水) 22:17:12を思い出す俺ももう歳だな
0469デフォルトの名無しさん
2005/08/17(水) 22:22:09どういうゲームにしたいかによるでしょ
レベル上げ必須なのか、サクサク進むのか、程よいのかって
全体的に自分の理想から指針を練っておくといいね
あとはテストプレイのみ
0470デフォルトの名無しさん
2005/08/17(水) 23:30:290471デフォルトの名無しさん
2005/08/18(木) 04:03:17のみ001
0472デフォルトの名無しさん
2005/08/19(金) 17:02:290473デフォルトの名無しさん
2005/08/19(金) 20:56:280474デフォルトの名無しさん
2005/08/19(金) 21:42:31ゲームと名が付く話題は特に馬鹿ばっか集まってくるからな。
0475シープラ勉強中 ◆ryjMYLsfPA
2005/08/19(金) 22:10:34みんなどうやってモチベーションとか維持してるんだろうか orz
http://49uper.com:8080/html/img-s/72602.zip
無理やりパーティーキャラーを出してみました
当たり判定はつけてないんですが、
こいつらは無くてもいいですよね・・(バグりそうでつけるのが怖い・・)
次は戦闘に行くのが筋のような気がするのですが、
最近まんねり気味で、なんか新しいことがやりたいので、あえて音楽に挑戦してみます。
噂によると、MCIというのを使うと、比較的簡単に鳴らすことができるらしいので。。
>>465
早くバランス調整とかで悩んでみたいです (T_T)
0476デフォルトの名無しさん
2005/08/19(金) 23:27:22MCIは確かMCIデバイスを開いてコマンドを(テキストで)送って制御するはず。言うなればCDプレーヤーの再生、停止、早送り、
トラック選択のボタン操作をコマンドに置き換えているようなもので、細かい制御には不向き。(MP3はActiveMovieの機能を使えば・・・)
勝負はどんな音楽を使うかなんだけどね。
スクリプトなら多少は相談に乗ります。でも自分だとADV仕様+RPG対応な物を作るかも。
0477デフォルトの名無しさん
2005/08/19(金) 23:51:36おぉ、台詞枠もゴージャスになったネ
クラスも増えてきて、もはや解析する気が起きねーぜバーローwww
>みんなどうやってモチベーションとか維持してるんだろうか orz
セックル
マジレスするとやっぱり絵だって。さすがに全部自作は無理があるだろう。
誰かに頼むか素材使ったほうがいいんじゃね?
しかし素材使うと、「どっかで見たことある感じで萎え...orz」ってことになりかねない諸刃の剣
0478デフォルトのたぬきさん
2005/08/20(土) 00:20:01http://himatanuki.hp.infoseek.co.jp/test_rpg1.zip
この2日で新たに作ってみまシタ。
何だか、色々な所から勝手に使ってるモノが多いのでヤヴァイかも。
タイトル画面や、コマンドメニューもお粗末ながら付いてマス。
音楽の再生もMCIでやってるケドも、>>476の言う通り、細かい制御には不向きだった。
詳しい事は同梱してるテキストを参照して下さいな。
>>475
一ヶ月でスゴイ進歩に驚いた。
この調子なら今年中に完成しそうな予感がするヨ。
>>477
>どっかで見たことある感じで萎え...orz
スゴイ当てはまる悪寒。
0479デフォルトの名無しさん
2005/08/20(土) 00:57:15ソース眺めてみた…
継ぎ接ぎだらけのフランケンシュタインに見えた…
ガンガレ
0480シープラ勉強中 ◆ryjMYLsfPA
2005/08/20(土) 07:34:36http://49uper.com:8080/html/img-s/72687.zip
二行書いたら音が鳴ったのにびっくりです。
まだ複数ファイル同時再生の方法がわからないので、
もうちょっと調べてからMCIに移行しまっす。
音はフリーのを盗ってきました。
>>476
スクリプト!スクリプト!
今は取り掛かる気力が無いんですが、
戦闘とマップエディタを作ったあとにでも、ぜひ指南してくださいませ〜。
音楽はどっかでフリーのを パク(ry してきます ^^
>>477
> クラスも増えてきて、もはや解析する気が起きねーぜバーローwww
うはwwやぱ、クラス増えてきたら解読困難になってきますよね。
私も自分で組んでて、ちょくちょく
「あれ?これはどっからつながってるんだ??」ってなりますし・・
C++は集団作業に向いてるって思ってたんですが、
実はCより把握が難しい気がしてきた。。
セックルと「絵を誰かに〜」ってのは無理っぽい ^^ ので、
絵はどっかのフリーの素材を パク(ry してくるしかないか。
RPGツクール系の絵を公開してるサイト様はいくつか見つけたのですが、
絵のサイズが違うので拡大しなくちゃです。
でも拡大するとあからさまに絵が崩れちゃって、描いた人に申し訳ないし。
さて、どうしようか。
0481シープラ勉強中 ◆ryjMYLsfPA
2005/08/20(土) 07:39:29タイトル画面がやたらとカッコよすww
MCI再生は参考にさせていただくかもー。
いっしょにがんばりましょう (`・ω・´)
>>215
今ごろですが、オーバーライドの方法を参考にさせていただきました
m(__)m
新しいことをやったので、
ちょっとモチベーション上がってきたかな
上の方でだれかが言ってましたが、
すぐ結果の出るのをやり続けるのがいいかもねー。
0482デフォルトの名無しさん
2005/08/20(土) 11:35:13音入れに取りかかってるようなので
適当に曲を作ってみた。使えるようだったら使ってくれ。
MacのSoundtrackで適当にループを並べただけなので
品質についてはいいっこなしということで。
44.1kHz 16 bit Stereoと無駄にでかいので自分でモノラルにするなり
サンプリング周波数を落とすなり適当に料理してくださいな。
http://gamdev.org/up/img/3044.zip
http://gamdev.org/up/img/3045.zip
0483シープラ勉強中 ◆ryjMYLsfPA
2005/08/20(土) 20:58:04MCIでwavファイルを繰り返し再生してみました。
特殊な構造体と特殊な命令のオンパレードで意味わからないです orz
便利は便利なんでしょうけど、
あまりのブラックボックスぶりに、MCI使いたくなくなってきた。
なんか音楽再生には専用のスレッドがあったほうがいいとかなんとか
そろそろマルチスレッドにも取り掛かるべきかなぁ・・
>>428
長い音のサンプルが必要なときは使わせていただきます。
どうもありがとー (^o^)/
0484デフォルトの名無しさん
2005/08/20(土) 21:08:150485デフォルトの名無しさん
2005/08/20(土) 21:14:20mciSendStringのほうが簡単。そりゃもうsndPlaySound並みに。
もしかしたらできることの範囲が狭くなるかも(?)しれないけど。
0486シープラ勉強中
2005/08/20(土) 21:46:48(:D)| ̄|_
>>485
おお、そっちはもっと難解そうで即スルーしたんですが、
食わず嫌いだったか。。
今度はstringの方をやってみます。
なんとか実用に耐えるものを作らねば!
0487デフォルトの名無しさん
2005/08/20(土) 21:58:02ゲームはBGMだけじゃなく効果音も同時に鳴るので
多チャンネルを視野に入れておいた方がいいと思う。
確かDirectSoundを使うと多チャンネルも使えるようになるみたいだが、
MCI関係で多チャンネルが使えるかどうかは不明。
出来ないようなことを誰かが言っていたような気もする。
とりあえず>>483のソースに手を入れて多チャンネルの実験してみる。
0488デフォルトの名無しさん
2005/08/20(土) 22:03:18環境依存かもしれんが…
0489デフォルトの名無しさん
2005/08/20(土) 22:12:070491デフォルトの名無しさん
2005/08/20(土) 22:43:33飲まれるほど難しくないぜ
int main()
{
mciSendString("open a.mid alias test",NULL,0,0);
mciSendString("play test",NULL,0,0);
getchar();
mciSendString("close test",NULL,0,0);
}
a.mid のところを適当に変えて実行してみれ。(wav でも mid でも OK)
0492シープラ勉強中
2005/08/20(土) 23:01:04おお、普通に鳴りました。
てゆか、stringの方は変数いらないんですか。
・・・乗り換え決定ww
ファイル名にスペ-スがあったら鳴らないみたいです。
命令をスペースで区切ってるからかな?
0493デフォルトの名無しさん
2005/08/20(土) 23:14:150494デフォルトの名無しさん
2005/08/20(土) 23:16:43とりあえず同時再生は出来が、サウンドカード依存もありそう。
昔の初期SoundBlasterとかPCM1チャンネルの場合は鳴らないような気もするが、
最近はサウンドカード自体が多チャンネル持っていると思うので
あまり神経質にならなくてもいいのかもしれない。
しかし、MCIのループはちょっと問題ありかも。
ループするときにちょっと空白時間があるので、ループ前提の曲の場合は
空白時間が気になるかも。曲を空白前提で作れば問題とならないが。
改行多すぎなので2つに分割
0495デフォルトの名無しさん
2005/08/20(土) 23:17:47>>483に追加
LRESULT CALLBACK WinProc (
HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_COMMAND:
switch(LOWORD(wParam)){
case 1:
PlaySound("コイン音 貯金箱に一枚 coin08.wav",
NULL, SND_ASYNC | SND_FILENAME);
break;
}
break;
case WM_CREATE:
//ボタン配置
CreateWindow("BUTTON", "効果音",
WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS |
WS_CLIPCHILDREN | BS_PUSHBUTTON,
0, 128, 64, 24, hWnd, (HMENU)1,
(HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE), NULL);
}
0496デフォルトの名無しさん
2005/08/21(日) 01:34:15RPGやノベルなら気にならないかもしれんが…
DirectX使うかMIDI再生を自前で書くかした方がいいw
0497デフォルトのたぬきさん
2005/08/21(日) 02:05:44MCIのループは>>496の言う通り、致命的だった。
http://himatanuki.hp.infoseek.co.jp/TestRPG01.zip
今度は"新しい事"って事で、走る事とコマンドメニューが表示可能になった。
一番大きいのは音楽の複数同時再生とループ再生かな?
>>479
今度は縫い跡が目立つヤクザのおじさんに格上げ。
>>482
本当に申し訳ない。
折角作って頂いたのに使ってません。
今度は使うと約束しマス。
>>シープラ勉強中 ◆ryjMYLsfPA
もし良かったら、自分の音楽再生のコードを使う?
ってか分かり難いコード書いてゴメン。
0498デフォルトの名無しさん
2005/08/21(日) 02:34:010499デフォルトの名無しさん
2005/08/21(日) 04:44:280500デフォルトの名無しさん
2005/08/21(日) 08:39:490501デフォルトの名無しさん
2005/08/21(日) 10:17:30いや別に使えと強制してるわけでもなんでもなく
使えたら使ってね程度の素材なんで、全く気にする必要ないです。
ループの区切れ問題はとりあえずそのままにしておいて
その他が組み上がった後に、もう一度他の道を検討する方針が良いのでは?と思った。
0502シープラ勉強中 ◆ryjMYLsfPA
2005/08/21(日) 13:49:14stringの方を使ってみました
まだ実用的ではないのですが、同時再生も普通にできるみたいです。
stringの方はcommandよか遅いとかなんとか各方面で見ますね。。
mciSendString()関数にはファイルバッファも入れられるようですけど、
バッファも入れたほうが早く鳴るのかなぁ。
メモリにやさしくなさそうだけど。
>>497
うう、ありがたいお言葉。。
>>495
それも同時に鳴るってことは、
単発BGM専用で::PlaySound()を使うのもアリですね。
0503デフォルトの名無しさん
2005/08/21(日) 17:20:47BCC Developerインスコとウィンドウの表示が(猫みながら)できた
マップ歩くぐらいまで出来たらうpしたいと思う
0504シープラ勉強中
2005/08/21(日) 17:57:38勘違いしてました orz
>>503
コンパイラ入れるのと、ウィンドウ表示が一緒なんて早すぎです。
おおいにがんばってください。
私はもう疲れた・・
0505デフォルトの名無しさん
2005/08/22(月) 00:42:43mciよりも下位レベルのwaveOut系APIを使用して
再生時にループフラグを指定しています。
>>483のソースに手を加えたmainと
ループするBGMと単発の効果音を担うようにCSoundクラスを作りました。
wavファイルは>>483のファイルを使用しているので
同じフォルダーに置いてください
http://gamdev.org/up/img/3053.zip
起動時にBGM(その2_02.wav)を延々と鳴らし続け、
「効果音」ボタンで「コイン音」
「一時停止/再生」ボタンでBGMの一時停止と再開
BGMボタンが沢山並んでいますが適当なループするwavを同フォルダに配置し、
そのファイル名をWinMain.cppの適切な箇所で書き換えれば
ボタンを押す事によって対応したBGMに切り替わるはず。
と、今アップしたソースの確認をしたら改行コードがCR(Mac)になっていたので
VC++でコンパイル出来なかった。改行コードをMac(CR)からWin(CR+LF)に変えてください。
0506デフォルトのたぬきさん
2005/08/22(月) 15:29:54>>501氏が言う通り、ループの区切れ問題はそのままにして
他の事をするべきだと思ったケドも、何をすればイイのか分からない。
現状(>>497)を見て、次に何をすればイイのか
アドバイスをくれると本当に嬉しい。
でも、スクリプトとかマップ関係は出来ない悪寒。
>>503
ガンガレ、期待してる。
>>505
今度、コードを移植させるカモ。
0507デフォルトの名無しさん
2005/08/22(月) 15:56:26現状芝生のみのマップにもうちょっと絵を描いてみてはどうだろう
せっかく沢山のチップを用意しているのだから勿体ない。
絵が描かれると同じ歩くにも気分が良くなるし。
マップエディタ使わなくても方眼紙に色塗って作れる。
絵を描いたら次は建物への当たり判定を作るとか。
0508シープラ勉強中
2005/08/22(月) 16:09:51低レベルAPI高レベルプログラム キタ━(゚∀゚)━!!!
私が雑魚すぎて、ソース見てもなにがなんだか・・
音とは全然関係ないのですが、CSoundにやたらとvirtualがあるのはなぜですか?
派生させてオーバーライドして使うんでしょか?
waveOutは私もやろうかとは思ってるのですが、
鳴るまで一ヶ月ぐらいかかりそうで手が出せないです (T_T)
0509デフォルトの名無しさん
2005/08/22(月) 16:23:49CSoundはそのままで使えますが、やたらとvirtual付けているのは
クセみたいなもんなのであまり気にしないで良いと思います。
今のCSoundではvirtualの使い方の参考にはならないでしょう。
waveOutはwavファイルの入力をやってくれないので
CSoundのほとんどはwavファイルからヘッダを分離しPCMデータのみを取り出す処理です。
PCMデータを取り出したら、あとはwaveOutキューにWAVEHDRを
送り込んであげれば鳴ってくれます。
同じ物を1つ1つ作るのも面倒なので、CSoundが使えるようだったら
そのまま使ってかまいません。
つか、そのまま使えるように他の処理系に依存しないようになっているはず。
0510デフォルトの名無しさん
2005/08/22(月) 18:10:06乙。俺も使わせてもらうかも。
CSoundに効果音の機能を付けてしまってるのは良くないと思う。
機能が完全にクラスから独立してるから、別クラスで実装すべき。
サンプルとしてはこれで構わないかもしれないけど。
ところでWinMain.cppに「製作者:シープラ勉強中◆ryjMYLsfPA」って書いてあったから
シープラ勉強中さんが作ったのかと勘違いしてしまったよ。
紛らわしいから次からは消してくれ…。
0511デフォルトの名無しさん
2005/08/22(月) 18:22:35いくつかお小言。
・BOOLなんていう、MSローカルなアナクロint型はやめて素直にboolを使おう。
・それが見易いと信じているなら止めないが、型名の後のTabコードは却って醜い。
・0以外を返す予定がない関数はvoidにしよう。
・PausedBGM()はIsPausedBGM()とでもしたほうが判りやすくないか?
#ついでに言うなら、bool IsPausedBGM() const {return pausedFlag;}でよさそうだが。
・アンダーバー二つで始まる識別子は予約されているから避けよう。
・上でも書いたが、内部の変更を伴わないメンバ関数はconstにした方が使いやすい。
・コンストラクタも分けるほどのものかなぁ。default引き数を使えば一つで済むが。
#まぁ、お好みで。一つで済ますとInitialise()も同梱できるおまけ付き。
・malloc()/free()ではなくnew/deleteを使おう。
・上でも書いたが、ただのゲッターはインライン化を期待して宣言に入れては?
#もしくはinline指定をしておくか。
0512511
2005/08/22(月) 18:24:000513シープラ勉強中 ◆ryjMYLsfPA
2005/08/23(火) 09:59:35サウンド再生クラスの途中経過です。sciSendString()使いました。
ヤバいのができそうですww
今後は
○seとbgmのクラス作る
○サウンド再生スレッド作る(猫でも見ながらやってみます)
○sciSendCommand()のバージョンも作ってみる
という流れでいってみます。
週末までかかりそうう。。
>>509
どうもありがとうございます。
もし万が一私がwaveOut()に挑戦することがあれば、
最大限参考にさせていただきます m(__)m
あと、私も WinMain.cppの上の名前だけは消してほしかった ^^
0514503
2005/08/23(火) 14:26:52WASDで上下左右に移動
>>504
>>506
激励サンキュー!
とにかく動くもの作ってプログラム覚えるよ
いつになったら追いつくのか見当もつかねーけど
参考サイト
GamDevPukiWiki - FF風RPGを作れ
http://gamdev.org/w/?%5B%5BFF%C9%F7RPG%A4%F2%BA%EE%A4%EC%5D%5D#content_1_5
猫でもわかるプログラミング
http://www.kumei.ne.jp/c_lang/
0515デフォルトの名無しさん
2005/08/25(木) 01:57:550516デフォルトの名無しさん
2005/08/25(木) 07:42:320517デフォルトの名無しさん
2005/08/25(木) 14:25:410518デフォルトの名無しさん
2005/08/25(木) 14:37:335人で協力すると、結構すごいもの作れるんじゃね?
0519デフォルトの名無しさん
2005/08/25(木) 15:39:25シープラ勉強中 ◆ryjMYLsfPA
デフォルトのたぬきさん
503
以上3名だと思う。
0520デフォルトの名無しさん
2005/08/25(木) 16:56:231+1=2にならないところがソフトウェア開発の難しいところだ。
0521デフォルトの名無しさん ◆ErakzB51PM
2005/08/25(木) 17:33:26居るのに勘定に数えてもらえなかったとです
ヒロシです('A`)
0522デフォルトの名無しさん
2005/08/25(木) 17:43:03ほかにはいませんかー ゚∀゚)ノ
0523デフォルトの名無しさん
2005/08/25(木) 17:48:15もっとがんがれ。
0524デフォルトの名無しさん
2005/08/25(木) 17:51:10・シープラ勉強中 ◆ryjMYLsfPA
・デフォルトのたぬきさん
・503
・ヒロシ
0526デフォルトの名無しさん
2005/08/25(木) 20:21:53増えていく感じで無間地獄になってるw
RPG作るのって難しいね。
0527シープラ勉強中
2005/08/25(木) 20:41:33湿気でパソコンが壊れないか凄く心配です。
>>514
ウィンドウだしてから、凄いスピードで絵動かすとこまで行ってますね。
がんばってください。
>>515 >>524
どもども ^^
>>525
歓迎超歓迎
人の見ると刺激になりますよん。
>>526
あー、わかりますわかります。途中からゴールが見えなくなるww
0528ヂフォルトの名無しさん
2005/08/25(木) 20:50:14( ,_ノ` )y━・~~~ あの頃は若かった…
マップクラスの大まかな設計
↓
マップエディタを作る
↓
エディタの開発に合わせてマップクラス拡張
↓
(´∀`)マップクラス肥満化
↓
編集機能の拡張
↓
(´∀`)クラス間結合のスパゲッティ化
↓
ゲーム本体に取り掛かる
↓
マップクラスに足りないインターフェースがあるのに気付き、拡張
↓
(´∀`)肥(ry
↓
マップクラスの拡張に合わせて、エディタのほうも修正
↓
クラス間依存関係の混沌により、小さな修正も一苦労
↓
(´∀`)吐血
↓
_、_
( ,_ノ` )y━・~~~ 封印
そして今年、デザインパターンが俺に悟りを開かせた
封印が解かれる…
0529デフォルトの名無しさん
2005/08/25(木) 20:53:45かっけぇええええええ!!!!!
0530デフォルトの名無しさん
2005/08/25(木) 21:20:58http://gamdev.org/up/img/3068.png
こんな感じになった
Windows2000だとエスケープシーケンスNGだっけ
0531デフォルトの名無しさん
2005/08/25(木) 21:29:58NT系でエスケープシーケンス使うには色々条件が必要
0532デフォルトの名無しさん
2005/08/25(木) 21:31:12俺もコマンドプロンプトでRPG作ってるけど半角でたった16*32だ。ちっちぇー
0533503
2005/08/25(木) 22:16:19http://gamdev.org/up/img/3070.png
ダウンロード
http://gamdev.org/up/img/3069.zip
変更点
ツクール素材に対応
キー入力をGetAsyncKeyStateに変更して(;´Д`)なめらか〜
マップ表示
ゲームっぽくなってきたー!!
どうしよう
これ用の新しいウィンドウを開いて、
エスケープシーケンスの代わりになるようなの
(win32APIとか?)に作り変えるとなると、
C言語以外の知識も必要になりますよね?
今はC言語覚えるだけで頭の中が一杯なんで、
他に手を出したくないんですけど、
何かいい方法ないでしょうか?
なかったらこのまま突っ走ってもいいですか?
ちなみに、私のWindows98 だとこうなります。
http://himatanuki.hp.infoseek.co.jp/cgi-bin/uploader/src/up0017.png
>>503 落ちなくなりました! ってか、カラフルで笑ったw
0535デフォルトの名無しさん
2005/08/25(木) 22:38:41次のステージがおまいを待ってるぜ (D風味)
0536デフォルトの名無しさん
2005/08/25(木) 23:22:57Cygwinでコンパイルしたら次の傷害が発生しました。
・makefileが通らない。
*一般的なmakefileではセパレータはタブなんですが、bccでは空白でもいいようですな。
*どっちみち、bcc限定になっているので使いようがありませんでしたが。
・実行すると>534のスクリーンショットと似た画面でSegmentationFaultを起こす。
*mapが出てない。
*入力プロンプトもない。
未だソースは見てないので参考までに。
0537デフォルトの名無しさん
2005/08/25(木) 23:31:13例えば シープラ勉強中のメッセージウィンドウやNPC、マップ関係とかを
デフォルトのたぬきさんのウィンドウ/タイトル画面と合わせたらRPGにググッと近づくんじゃね?
それに >>503とか ◆382ingG3ec も協力すれば、作業の分担とかもできそうだし。
>>520が言ってる通りに 1+1=2 見たいに上手くは行かないと思うけど
このスレ住人達なら、何とかなりそうだとオモタ。
ガンガレ!
0538デフォルトの名無しさん
2005/08/25(木) 23:38:380539デフォルトの名無しさん
2005/08/26(金) 00:26:030540デフォルトの名無しさん
2005/08/26(金) 00:29:49エスケープシーケンスのかわりは猫でもわかる。
0541デフォルトの名無しさん
2005/08/26(金) 06:36:35#include <windows.h>
int main( void )
{
HANDLE hStdout = GetStdHandle( STD_OUTPUT_HANDLE );
for ( int lpc = 0; 15 > lpc; lpc++ ) {
COORD pos;
pos.X = pos.Y = lpc;
SetConsoleCursorPosition( hStdout, pos );
SetConsoleTextAttribute( hStdout, lpc + 1 );
WriteFile( hStdout, "H", strlen("H"), 0, 0 );
}
return 0;
}
0542デフォルトの名無しさん
2005/08/26(金) 10:50:12それが、プログラムの世界。
0543デフォルトの名無しさん
2005/08/26(金) 13:10:17WriteFile()だとファイルにリダイレクトされたときに落ちるから
WriteConsole()の方が無難だと思われ。
神様ありがとう! さっそく組み込んできます! (`・ω・´)
共同制作は、面白そうなんだけど、
C言語覚え始めの私は、他の人のソースが読めないんでムリポ… orz
標準ライブラリの関数だけでも頭が混乱気味なのに、
<windows.h>が入ってくると、まるで呪文にしか見えません。
でもでも、みんなで協力してできたら勉強になるだろうし楽しそうだから、
中心になる人がいたら、企画立ててみると面白いかもしれませんね。
0545デフォルトの名無しさん
2005/08/26(金) 19:39:36って顔見知りに(時間のある)プログラマはいないわけだが。
0546シープラ勉強中
2005/08/26(金) 20:22:24相変わらず>>521さんが勘定に入ってないのはワラタ
共同制作にはあこがれますけど、私のレベルじゃ無理です。
自分のプログラムですら常に手探り状態ですし。
マルチスレッド意味わからんぽ (ToT)
なんじゃこりゃ。
>>544
同意。<windows.h>なんてマジ呪文です呪文。
どこの天才があんなにいっぱい特殊な型作ったんだよまったく。
>>525は、winXPでもダメでした↓
http://49uper.com:8080/html/img-s/74372.png
あ、そうそう、 ◆382ingG3ec さんはまさか>>382さんですか?
0547デフォルトの名無しさん
2005/08/26(金) 21:45:37ttp://kasai86.ld.infoseek.co.jp/dos/esc.htm
でもダメだった・・・
>546、他
企業の仕事は統率が取れてこそ意味があるもの。
なぜ統率が取れるかといえば、指揮系統がしっかりと存在していて、仕事の計画が
しっかりと出来ていて、仕様書や関係資料がしっかりと揃えられているから。
これはゲーム製作もプログラミングも同じこと。
構想・概要→企画立て→仕様決め→仕様詳細決め&関連資料・素材集め→(プログラミング・ゲーム本体の製作)→仕上げ
大体使うルーチンの仕様やクラス決めは仕様の段階で決めておき、なるべく余分なものは追加しないように。
仕様詳細の段階で関数の細かい仕様(関数リファレンスに書いてあるようなこと)とかクラスのメンバーとかは極力固定する。
データのフォーマットもこの段階で固定すべきだろう。
今になってこんな事言うのは酷かもしれないが、つぎはぎだらけだとどこか頓挫するので、そのときは最初からやり直したほうが良い。
(>546)
>windows.h
何人ものプログラマーが何ヶ月も話し合ってきた仕様から作られたんでしょ?
もっともあれはWindowsのプログラムを組むのに必要な「おまじない」だし・・・
MS発祥らしいハンガリアン記法(変数型1〜2文字+変数名)はその前からだけど。
Cは分かるがC++の段階ですでに呪文。継承や多態性の当たりでモウダメポ。
WindowsAPIなんてリファレンス読みながら使うもんじゃないかと思う。
0548デフォルトの名無しさん
2005/08/26(金) 22:02:26>同意。<windows.h>なんてマジ呪文です呪文。
>どこの天才があんなにいっぱい特殊な型作ったんだよまったく。
1年後の君もたぶん呪文を書いてます。
ある程度大きいプロジェクトなら必然的にたくさんの型ができるわけで。
0549デフォルトの名無しさん
2005/08/26(金) 22:04:02> 今になってこんな事言うのは酷かもしれないが
なに先走ってんのよ(笑
ここじゃ誰も共同制作してないし、誰も「やる」とは言ってない。
0550382 ◆382ingG3ec
2005/08/26(金) 23:20:23お騒がせしました、これできっとだいじょうぶです。ダメだったら泣きます!
(ヘッダファイルの最後に ; を付け忘れて、一時間悩んだのは内緒です)
http://himatanuki.hp.infoseek.co.jp/cgi-bin/uploader/src/up0018.lzh
>>546
ノシシ はいはいはい、>>382です! ヨロシクです!
>>549
うん、見事にダレもヤルとは言ってないね、残念だけどw
でも、文脈からすると共同作業の話ではないんじゃと思うんだけど?
0551デフォルトの名無しさん
2005/08/27(土) 01:53:05ゲーム中にはまだ使われてなかったから気付かなかったが、
Player04.bmp 見るとけっこう人物の絵も進んできてるな。感心w
0552シープラ勉強中
2005/08/27(土) 12:21:10はやく呪文かけるようになりたい・・
>>550
凄い綺麗なんで感動しました。
コンソールでこんなに表現できるなんて驚きです。
私がコンソールでやるときは、最大限参考にさせていただきます。
念のためあぷ
http://49uper.com:8080/html/img-s/74545.png
http://49uper.com:8080/html/img-s/74546.png
>>382の段階ではCのことあんまわかってなかったっぽいのに、
もうこんなにできるなんて・・進むの早い人多すぎ。
>>551
あの絵はこのたびめでたくボツに決まりました ^^
ドット絵描ける人を尊敬しちゃう今日この頃。
0553デフォルトの名無しさん
2005/08/27(土) 12:45:33妄想している時が 一番楽しい。
作ってる時が 一番長く、、
バグッた時が、 一番分けがわからず、
諦めた時が、 一番むなしい。
だが、作り上げた時に 手にする物に比べれば”上の物”などゴミなのですよ。
0554デフォルトの名無しさん
2005/08/27(土) 14:29:53ここをこうしろあーしろと言われるときが一番むかつく
完成品としてマスターCDを納入したときには、もう見たくない。
製品を手にしたときになって初めてお疲れさんと自分で思う。
0555デフォルトの名無しさん
2005/08/27(土) 14:37:520556デフォルトの名無しさん
2005/08/27(土) 15:02:150557デフォルトの名無しさん
2005/08/27(土) 20:19:140558デフォルトの名無しさん
2005/08/27(土) 21:35:340559デフォルトの名無しさん
2005/08/27(土) 22:11:50なかなかの名言だ。
次スレのテンプレにしよう。
0560デフォルトの名無しさん
2005/08/27(土) 22:17:250561503
2005/08/27(土) 22:21:52スクロールできたぁあああ!!!
wikiの通りやるなら次はマップエディタか
ツクール素材使うなら重ね合わせがちょい難しいかもしれん
参考サイト
GamDevPukiWiki - マップエディタ
http://gamdev.org/w/?%5B%5B%A5%DE%A5%C3%A5%D7%A5%A8%A5%C7%A5%A3%A5%BF%5D%5D
GamDevPukiWiki - FF風RPGを作れ
http://gamdev.org/w/?%5B%5BFF%C9%F7RPG%A4%F2%BA%EE%A4%EC%5D%5D#content_1_6
0562デフォルトの名無しさん
2005/08/28(日) 06:57:490563デフォルトの名無しさん
2005/08/28(日) 07:42:52俺も俺も
>>561 のを起動すると、【msvcr80.dllが見つかりません】って出てしまうんです。
で、どうもVisual Studio をインストールしないといけないらしいんですけど、
私のマシンだと旧式で貧弱なんでムリらしいんです。
で、必要な.dll だけ手に入れる方法とか、なにか別の方法ありますか?
0565デフォルトの名無しさん
2005/08/28(日) 11:07:35ここにいろいろ書いてあった
msvcr80.dllは配布時に同梱しないと動かないっぽい
0566デフォルトの名無しさん
2005/08/28(日) 11:30:55そんなヤバそうな関数使ってるようには見えないけど。
0567デフォルトの名無しさん
2005/08/28(日) 12:13:27新しいコンパイラはランタイムにも新しいものが必要なの鴨
0568デフォルトの名無しさん
2005/08/28(日) 13:59:18VisualStudio2003 or VisualC++2003でWindowsAPIを直接使用しない関数使ってるなら
使用ライブラリを全てスタティックリンクにでもしない限り使われると思うけど・・・
設定変更で古いdll使うように出来ない?そういう設定があると思うんだけど・・・
0569デフォルトの名無しさん
2005/08/28(日) 14:20:520570503
2005/08/28(日) 21:12:37DLL付きでUPしました
特に新しい関数とか使ってないのでコンパイルの設定の問題かなぁと思ってます
>>568さんのいうとおり古いDLLを使う設定を探す方向で研究中
>>569さんの方法でやってみるとmsvcr80.libがないと言われ検索してみましたが見つかりませんでした
DLL添付でも動かないならBCCに戻そうかな
けど、プログラムが始まる前(?)に閉じてしまいました(涙
例えるなら初めて作った"Hello,world"の.exeをクリックした時のように…
DOSのコマンドからやってみても警告も何も起こらないで終了してしまいました。
う〜ん、なんででしょうね? 私のが98だからなのかなぁ…さっぱり分からない。
0572デフォルトの名無しさん
2005/08/28(日) 22:00:46・ある程度以上、左側に歩くとタイル表示の出方がまばらになり、さらに左へ歩くとアプリケーションエラーで異常終了
・ある程度以上、上に歩くとパタパタといった感じで地面のタイルが置かれていく。見た目に良くない
0573デフォルトの名無しさん
2005/08/28(日) 22:01:490574デフォルトの名無しさん
2005/08/28(日) 23:51:57ども
9x系ダメなのかなぁ
一応95でも大丈夫なようにAPI選んでます
TransparentBltとかは避けたのに意味なかったかー!!
もうちょっと調べてみます
>>572
スタート地点が表示できる一番左上なんです
それ以上左や上にいくと配列の添え字にマイナスが渡され・・・・(((( ;゜Д゜)))ガクガクブルブル
ちょっと酷いバグなんで直します(^^;
0575シープラ勉強中 ◆ryjMYLsfPA
2005/08/29(月) 11:21:59ちょっと気分を変えるために503さんのを改変してみました。
動きはまったく変わってないのですが、
>>566さんが指摘されてたリソース部分をできるだけ抜いてみました。
http://aploda.com/dl.php?mode=pass&file_id=0000023966
//★★--
//------
で囲まれてる部分が改変部分です。
とりあえず動いたのですが、、
なぜか実行するとCPU使用率が100%に!!
重いアルゴリズムではないので、100%なんてありえないと思うのですが・・。
>>570のは5%ぐらいでしたし。なぞです。
誰か、どうして100%になるのか教えてください〜 (T_T)
0576デフォルトの名無しさん
2005/08/29(月) 13:17:34Timerのインターバル変えたらどうなる?
それか、MainLoop()でSleepしてみるとか。
#私ゃMFC使いだからよく判らんが、WndProc()に連続して突入しているなら後者で変化があるはず。
0577デフォルトの名無しさん
2005/08/29(月) 15:59:139xではUNICODEでビルドした奴は実行不可。
>>575
どこでどう違って負荷が違うかは知らないが、
単純に処理が重いだけ。タイマーインターバルを
もっと大きく取ると負荷が減るのが分かると思う。
ちなみに俺では>>570のも余裕で100%
0578デフォルトの名無しさん
2005/08/29(月) 16:58:00Celeron1.2GHz256MBメモリWin2K
0579デフォルトの名無しさん
2005/08/29(月) 22:39:34WIN32APIは一昨日から勉強中
Cは入門書読んで足し算するだけのコンソールアプリ作ってウホウホ喜んだ程度
開発環境はMinGW + 萌ディタ
カーソルキーを押すと丸緑が現れて動きます
残像が残るのは影分身です
ttp://gamdev.org/up/img/3094.zip
言い訳:
コードは7割丸写し(でも手打ち)&中途半端
が、数学の宿題がほぼ白紙なので、そっちが落ち着いてからゆっくり直すつもり
引くに引けない状況をつくって三日坊主対策、ということでご容赦ください
0580デフォルトの名無しさん
2005/08/29(月) 23:26:470581デフォルトの名無しさん
2005/08/30(火) 03:41:54改悪かもしれませんが、少しでも参考になれば幸いです。
ちなみに、同梱のEXEはVC++6&non UNICODEでビルドしましたので、
9x系OSの方でも実行できるかと思います。
ttp://gamdev.org/up/img/3095.zip
開発者の皆さんガン(・∀・)ガレ!!
0582503
2005/08/30(火) 06:13:35dllなしでも動き9xにも対応してると思われる版
設定いじってました。どうやらmsvcr80.dllなしで起動できたっぽい
・/MDを/MTに変更
UNICODEはNGと577氏にアドバイスをもらったのでそこからいろいろ調べてました
・2000/XPは内部がUNICODEなのでUNICODEを使ったほうが変換処理がいらないので動作が速い
・9x系は起動できないケースがある
・tchar.hを使えばMBCSとUNICODEで同じソースにできる
charの変わりに_TCHARを使う
文字列を_T(〜)で囲む
オプション変更でMBCSとUNICODEどっちにでも出来る
というわけで大収穫です。みなさんありがとう。ちゃんと動かないほうが勉強になっていいですね(^^;
>>575
結構重いですよね〜
減色やFPS減らす前にもうちょっと見直してみるつもり
ツクール素材なので2倍にしなくてはならずStrechBlt使うともっと重くなりそう
>>579
しっかり動いてました。がんがれー!
ところで美乳ってなんですか?w
>>581
スクロールしてない場合はキャラクタと文字だけ画面更新してるんですね
知らないAPIもあったので調べながら読んでます
0583579
2005/08/30(火) 11:55:10美乳はおまじないです。萌ディタの文字コード判別が弱いので
一昔前からHTMLなど書いてる人には懐しい言葉かもしれません
ただEUC-JP用の呪文らしいのにSJISのファイルに効く理由は不明
デバッグ用にMessageBox仕掛けたら大量ダイアログ。
ぶぁぁぁぁあって出るの。恐い!きもい!
0584デフォルトの名無しさん
2005/08/30(火) 13:19:300585↑
2005/08/30(火) 14:37:470586デフォルトの名無しさん
2005/08/30(火) 16:17:26google://ネイサンズ
OKです!
動いています、スムーズです。スムーズ過ぎて酔いそうです(笑
ってか。みんなの話についていけない…… orz
0588シープラ勉強中 ◆ryjMYLsfPA
2005/08/30(火) 19:01:35http://aploda.com/dl.php?mode=pass&file_id=0000024434
未だに音楽再生やってます。
_beginthreadex()でスレッドを作成、mciString()で鳴らしてます。
サンプルが全然見つからなかったので、もうてきとーにやっちゃったんですが、
ゲームのメインスレッドは作ったらゲーム終了まで永遠にwhileループして、
その中でSleep()でウェイトとってFPSコントロールして・・
って感じでいいんでしょか?
あと、私は_beginthreadex()でスレッド作ったんですが、
windowsだとCreateThread()を使ったほうがいいんでしょうか?
すみませんが、どなたかよろ m(__)m
>>576 >>577 >>578
16*16のマップチップを40*30個敷き詰めて、FPSは 1000/20=50 でぐらい?
で100%はちょっとおかしいと思ったのですが、そうでもないんでしょかねぇ。
ちなみに>>577さんのスペックはどんな感じなんですか?
>>579
いらっさい♪
>>587
実は私は>>382さんぐらいできるなら、もうwindowsプログラムに進んだほうがいいと思ってます。。
0589デフォルトの名無しさん
2005/08/30(火) 19:19:55_beginethreadexの方がいい
CreateThreadだとメモリリークすることがある
0591579
2005/08/30(火) 20:39:02・丸緑が分身しなくなった
・夜になった
・見よう見まねでいろいろやった
*予定は未定
マップだけスクロールするようなものを作る
自機を中央に固定してマップを動かす
ビットマップの指定色を透過
0592デフォルトの名無しさん
2005/08/30(火) 20:40:380593デフォルトの名無しさん
2005/08/30(火) 21:26:41そのままではCランタイムがマルチスレッドを考慮しない状態になってしまうため
新しいスレッドでCランタイムライブラリを使う場合はCランタイムライブラリに入ってる(とはいってもMS独自の関数だが)
_beginthreadex(_beginthread)を使う必要があるという話とはまた違うのかな?
0594デフォルトの名無しさん
2005/08/30(火) 21:38:48そう、それの事
だから、スレッド内でCランタイム関数を全く使わずに
Win32APIのみ使うならば問題は起きないけど、
スレッド内でCランタイム関数を使うと
結果的にメモリリークを引き起こすという話
0595デフォルトの名無しさん
2005/08/30(火) 22:10:58http://himatanuki.hp.infoseek.co.jp/cgi-bin/uploader/src/up0021.lzh
>>588 スシ食いねえ。(^^ゞ (実は私はポインタの使い所もよく分かっていない素人です。)
0597デフォルトの名無しさん
2005/08/31(水) 03:09:08>>497 デフォルトのたぬきさん
>>582 503
>>588 シープラ勉強中 ◆ryjMYLsfPA
>>591 579
>>596 ◆382ingG3ec
最終UPレスを抽出してみた
もし抜けてたらスマヌ
0598503
2005/08/31(水) 05:11:42速度UPしまくりんぐでCPU使用率低減
WM_PAINTじゃなくてもBMPの読み込みや作成が出来るみたい
なので起動後に一度だけするように変更しました
ウィンドウにマウスカーソル乗ってる場合だけ
CPU使用率がやたら高くなる場合があるけどなぜだ〜
>>583
Yahooにアクセスしたときに京って返してくる謎がやっと解けた……
>>586
ネイサン、事件です!
ぐぐったら同じネタ思いついた奴イパーイいた(´・ω・`)ショボーン
>>587
今回もっと凄いです!
>>588
ラグとかないです〜
>>591
快適に動いてます。透過勉強中です〜ヽ(・∀・)人(・∀・)ノナカーマ
>>596
windows2000で動いてます。凄い!!
0599デフォルトの名無しさん
2005/08/31(水) 06:10:26兄さん…メモリリークしてまっせ…
0600デフォルトの名無しさん
2005/08/31(水) 06:14:490601503
2005/09/01(木) 07:53:43マップチップの拡大できたぜイヤッハー!!
マップチップ1枚ごとにStretchBltで拡大してみたけど遅すぎて無理
高速化のため起動時に拡大したビットマップを作った
メモリは余分に使うことになったが、メインループでStretchBltを使わずに済んだ
おかげで以前と変わらぬ速度をキープ
>>561で作る気になっていたマップエディタにはまだまだ着手できねぇええええええええ
0602デフォルトの名無しさん
2005/09/01(木) 08:41:340603503
2005/09/01(木) 23:27:32透過勉強中
モノクロビットマップの作成に成功
BitBltを使う時にSetBkColorを設定すれば特定の色を白、それ以外を黒にできて便利
さらにのNOTSRCCOPYを使えば白と黒を反転できるのでスクリーンショットのようになる
いかにもゲーム作ってる気分になってきた
0604503
2005/09/02(金) 00:53:54http://gamdev.org/up/img/3122.zip
速報!透過できました
0605デフォルトの名無しさん
2005/09/02(金) 01:44:09ちゃんと透過処理出来てますね。
あとは工夫してCPU負荷を抑えることができれば。
0606デフォルトの名無しさん
2005/09/02(金) 16:50:290607デフォルトの名無しさん
2005/09/02(金) 20:28:491秒ごとにランダムなマップをへこへこ描画するようになりました
クラスがもうわけわかんない
*予定は未定
土日中にスクロールするものを作る(チップ単位の予定)
ウィンドウサイズをきっちりする
キャラクターを表示する
0608579
2005/09/02(金) 20:40:37上のは俺です
ビットマップハンドルをどこで管理すればいいのか
私は自分のソース見ていてちょっぴり鬱になったので、土日で書き直しをする予定です。
スパゲティはキライです、でも、ワケワカメはもっとキライです。orz
0610デフォルトの名無しさん
2005/09/03(土) 22:31:220611デフォルトの名無しさん
2005/09/03(土) 23:00:59この際ワカメスパゲッティを食べなさい
0612579
2005/09/04(日) 21:14:00とりあえず下キーで下にだけスクロールするようなものができました
10回ほどスクロールすると配列の外にアクセスするはずなのに普通に表示されるのが怖い
BCCとGCC(+strip)では実行ファイルのサイズが10KBほど違うのはどうしてだろう
*予定は未定
4方向スクロール
マップの端まで来たらスクロールしない
ソースが自分でも読めなくなってきたので書き直す
次はメッセージ部分をやる予定です。
http://himatanuki.hp.infoseek.co.jp/cgi-bin/uploader/src/up0024.lzh
0614デフォルトの名無しさん
2005/09/04(日) 23:02:490615デフォルトの名無しさん
2005/09/04(日) 23:55:080616デフォルトの名無しさん
2005/09/05(月) 08:07:010617デフォルトの名無しさん
2005/09/05(月) 08:17:010618デフォルトの名無しさん
2005/09/06(火) 23:28:09うちの委託先のバカコードより、輪をかけてひどいな。
0619デフォルトの名無しさん
2005/09/06(火) 23:40:200620デフォルトの名無しさん
2005/09/07(水) 01:30:280621デフォルトの名無しさん
2005/09/07(水) 02:33:55口だけってことにされちゃうぞ
0622デフォルトの名無しさん
2005/09/07(水) 04:47:470623デフォルトの名無しさん
2005/09/07(水) 06:53:29否定だけの意見なんて非建設的だよ。
0624デフォルトの名無しさん
2005/09/07(水) 07:26:390625デフォルトの名無しさん
2005/09/07(水) 08:05:52及ばずながら>>612の実装と定義を勝手に分けてみますた。(CMap.cpp, CGame.cpp追加)
http://himatanuki.hp.infoseek.co.jp/cgi-bin/uploader/src/up0025.zip
0626デフォルトの名無しさん
2005/09/07(水) 16:52:51おつです。でもファイル増えたら管理めんどくさくなるぅ (^_^;
0627デフォルトの名無しさん
2005/09/07(水) 17:28:55100行程度の何もしないウィンドウに驚いてた頃の俺みたいだ
将来的に何千何万行のコードを自分で書くというのに
0628デフォルトの名無しさん
2005/09/07(水) 17:31:50一日に何行ぐらい書いてますか?
0629デフォルトの名無しさん
2005/09/07(水) 18:19:340630デフォルトの名無しさん
2005/09/07(水) 19:04:520631デフォルトの名無しさん
2005/09/07(水) 20:21:010632デフォルトの名無しさん
2005/09/07(水) 20:54:32寧ろ、次にそうできるように心がけて作品を作る。
0633デフォルトの名無しさん
2005/09/07(水) 21:14:21何年かかけて100万行くらい書いたつもりだけど
残ったのは20万行いかない。
0634579
2005/09/07(水) 21:51:434方向スクロールができるようになった
(スクロール量が)多い日も安心、(チップが)ズレない(配列外に)漏れない
*予定
週末までにソースをできるだけ綺麗にする
マップエディタ作りたくなってきた
0635デフォルトの名無しさん
2005/09/07(水) 23:12:53今の流れはRPGつくるスレというよりWin32API&C/C++のお勉強スレだもんな。
早く魔法使いになりたい。…ってことで、定期上げです。
http://himatanuki.hp.infoseek.co.jp/cgi-bin/uploader/src/up0026.lzh
メッセージを出してみました。
ついでに無理やりエンデングも(♀の所に行って下さい)
課題:ソースが怪しい。コマ抜けが(ry
予定:課題をなんとかしたいなぁ…
0638シープラ勉強中
2005/09/08(木) 16:25:12C/C++やWin32APIを学ぶスレってことでいいんですよね
てゆかWin32むずかすぃ。
むずかしい上にブラックボックスいじってても楽しくない。。
>>637
http://aploda.com/dl.php?mode=pass&file_id=0000027166
なんか、みるみるゴージャスになっていきますね。
超えられない壁ってのがウケた。
私はコマぬけなかったっぽいですよん。
0639デフォルトの名無しさん
2005/09/08(木) 17:05:35APIが難しいならMFCを使えばいいじゃない。
#少なくとも横着はできる。
0640デフォルトの名無しさん
2005/09/08(木) 17:22:18絵描いたりシナリオ組み立てたり?
いつかやるんだろうけどまだプログラムがなぁ
0641デフォルトの名無しさん
2005/09/08(木) 18:01:390642デフォルトの名無しさん
2005/09/08(木) 18:17:230643デフォルトの名無しさん
2005/09/08(木) 18:36:59でも、APIを理解しないままMFC使うっていうのも、結構苦痛な気がするな。
0644シープラ勉強中 ◆ryjMYLsfPA
2005/09/08(木) 21:32:21最近503さんが透過処理をしてたのを見て私もやってみました。
背景透過は難しそうだったから、ずーっとほっぽってたので・・
まだ実用には耐えらるデキではないのですが。
お勉強がてら絵も動かしてみました。
作ってる途中、こういう捨てクラスをてきとーに作ってもC++力は
上がらないんじゃないかと考えてしまって鬱に orz
>>639
C#とかMFCは楽ちんそうなので、
いずれやってみようとは思ってるんですけど。
ただ今は簡単なAPIもよくわからないので、
せめて子ウィンドウぐらいはちゃんと作れるようになってからと思ってます。
あー、道のりは長いです。。ども。
>>640
そうそう、プログラムがねぇ。
0645デフォルトの名無しさん
2005/09/08(木) 21:37:44自分のプログラムレベルが上がったような気になるよ。錯覚ですけど。
絵が描ける人はみんな尊敬しちゃう。
0646デフォルトの名無しさん
2005/09/08(木) 22:58:30マリオ作れそうだな。こういうふうにちっさいプログラムたくさん作るほうが勉強にはなると思う。
しかしクラスは使ってるものの、まだまだ構造化プログラミングの域を脱してない感じでござるよ、忍忍。
もうちょっと機能ごとに関数やクラスを細かく分けてもいいんジャマイカ。
たとえばCPlayer::Moveとかね。でかすぎ。関数名から連想される範囲の挙動ではないよ。詰め込みすぎ。
あと、小さいプログラムとは言え、マジックナンバー多すぎ。ちゃんと定数定義しろよぅ…
俺がピー子なら、たぶんあなたの鼓膜破れるね。
0647579
2005/09/08(木) 23:09:19作る時間が制限されそうなので出来たものだけ投下しておきます
ttp://himatanuki.hp.infoseek.co.jp/cgi-bin/uploader/src/up0027.zip
カーソルキーで4方向にスクロール
1,2,3キーで意味なくスクロール速度が変わります
*優先度順の予定(未定)
マップデータとマップチップのフォーマットを決めて描画部分を書き直し
土日で透過できるようになったらいいな
マップエディタは青写真だけ描いておく
>>646
もし俺があなたにダメ出しされたら脳ごと破裂しそうです
0648646
2005/09/08(木) 23:55:11>if (!(scrollDirection % 2)) { //DIR_UP or DIR_DOWN
こんな、定数の値に依存した判定してたんじゃ、マジックナンバー使うのと変わらんから
定数といっしょにマクロ(or関数)定義しとけよ…
#define IS_HORZ(dir) ((dir)%2==1)
#define IS_VERT(dir) ((dir)%2==0)
みたいな。
あと、CGame::GetKeyの名前は変えたほうがいいと思う…
あと、WM_PAINT以外のところで BeginPaint 使っちゃダメだよ…
あと、CMapの変数を外部から直接いじってんじゃねーー!クラスの意味ねーだろ禿げ!ボケ!美乳!m9(^Д^)プギャー
構造体として使うスタンスならいいけどさ…理解しにくいよ…
0649デフォルトの名無しさん
2005/09/09(金) 00:10:570650デフォルトの名無しさん
2005/09/09(金) 00:45:550651デフォルトの名無しさん
2005/09/09(金) 00:54:190652シープラ勉強中
2005/09/09(金) 19:24:45ひぃー、耳がああぁぁー!! (((;゚Д゚)
マジックナンバーは行き当たりばったりで作ったフラグとか、
行き当たりばったりで作ったアニメチップ指定用番号とか、
行き当たりばったりで作ったウェイトなんかが全部それかと。。
CPlayer::Move()が長くなったのは、
最初は左右に移動する程度の動きしかもたせないつもりだったのですが、
行き当たりばったりでジャンプとかつけたせいでどんどんどんどん長くww
構造化プログラミングってのは始めて聞いた単語だったのでwちょとググってみたのですが、
飛ばし読みしまくったためか特徴がイマイチよくわからず orz
上から順番どおりに処理するとか (入力→動作→表示みたいな・・)
gotoをあんま使わないとか、ごく普通のことが書かれてたような。。
欠点は通過する処理が多くなるとかなんとか・・
>>579
美乳さん、着実に進化してますね。綺麗にスクロールしました!
今後はCGameクラスにゲームで使いそうなオブジェクト達を集めるんでしょか?
なんか私と違う組み方っぽいので興味津々。
てゆか、私がおかしいのか。。
0653646
2005/09/09(金) 21:20:12いや、アニメチップとかは仕方ないねん。ウェイトもまぁ気にしないねん。
フラグ管理が糞やねん!絶対自分でも忘れるだろこのド低脳がーーー!!!
ビット演算なんかちまちま使ってねーで種類ごとにboolなりintなりlong longなり使いやがれ。
それで速度がコンマ何%変わることに何の問題があるかって話だ。
あと、ひとつのメソッドで何もかも処理してたんじゃクラス使う意味がねーんだよー。
言葉で伝える自身はねーからソースを示してやる。
http://himatanuki.hp.infoseek.co.jp/cgi-bin/uploader/src/up0028.txt
>構造化プログラミングってのは始めて聞いた単語だったのでwちょとググってみたのですが、
>飛ばし読みしまくったためか特徴がイマイチよくわからず orz
ごめんなさい、構造化って言ってみたかっただけです。俺もよくわかってません。
要するにオブジェクト指向には程遠いよ、ってことだす。
0654646
2005/09/09(金) 21:21:410655デフォルトの名無しさん
2005/09/09(金) 22:15:490656646
2005/09/09(金) 22:25:540657デフォルトの名無しさん
2005/09/09(金) 22:35:37というかメソッド内では結構構造化してると思う
0658579
2005/09/09(金) 23:29:33耳から脳漿が噴出したくらいで済みました
GetKeyは入力回りを書き換ようかと思ってるのでなくなると思います
CGameからCMap::MoveやCChar::Move(予定)を呼んで各自で判定するような方向で
ほかはざっくり修正しました
>>652
>CGameクラスに〜
今のところは漠然とそんな方針です
オブジェクト指向的なのかどうか分からないので急に方向転換するかもしれませんが
・マップとかの仕様を適当に決めた、というか実装を書いたあとから泣く泣く仕様変更する
・1日に書いたコードを書き直す確率が150%。一度書き直してもう一度書き直す確率が50%の意味
0659シープラ勉強中
2005/09/10(土) 08:45:48なるほど、入る処理と入らない処理が明確で凄くわかりやすい!
細かく関数化しといたほうが柔軟性も高そう!
激しく参考にしまっす。どもありがとー。
0660名無しさん@そうだ選挙に行こう
2005/09/11(日) 12:05:39君が構造化プログラミングだと思っているのは構造化定理だ。
プログラムの停止性検証とかの話題がホットだった頃のものだ。
停止性ってのは、プログラムの無謬性を検証するための一分野。
構造化プログラミングというのは、乱暴に言えば、高凝集疎結合を目指すテクニックのこと。
オブジェクト指向言語で開発していて「構造化できていない」と言われたら、クラス間の依存関係が強すぎるということで、カプセル化がなってない。
0661579
2005/09/11(日) 17:59:23おざなりにキャラクター表示するようになった
クラスがやたらに増えた
今後の予定は透過とエディタってずっと言ってる気がする
>>660
もう3倍くらい乱暴に言ってもらわないと俺には理解できないです
ゲームバランスは知りません。レベルアップもありません。
http://himatanuki.hp.infoseek.co.jp/cgi-bin/uploader/src/up0030.lzh
>>638
いつもありがとう〜!
コマ抜けはパソコンの処理能力が問題っぽいです。
ヘタレPCでもOKなスリムなプログラムを組まないとダメらしいです…orz
構造化とかオブジェクト指向とかの概念は、さっぱり分からない…orz
C++を勉強すれば分かるようになるのかなぁ?
0663名無しさん@そうだ選挙に行こう
2005/09/11(日) 22:12:470664名無しさん@そうだ選挙に行こう
2005/09/11(日) 22:32:440665名無しさん@そうだ選挙に行こう
2005/09/11(日) 22:47:44するとともに各部品をブラックボックス化することで保守を容易にする。
オブジェクト指向はオブジェクト(制御する項目やリソースなど。GUIのWindowやアイコン、ボタン、表示など)を中心にプログラムを組むこと
classは構造化を容易にし、オブジェクト指向なプログラムを組みやすくするのに必要。
とはいえ継承や多態性は少々面倒かもしれない(習得しないclass使いこなせないけど)
0666デフォルトの名無しさん
2005/09/12(月) 09:53:11えーと、検索できるようにキーワードを出してあげたというくらいのつもりなのだけれども。
0667579
2005/09/13(火) 00:02:57いきなり停止性とか無謬性とか言われて面喰らってしまったわけです
透過できた
CSurfaceと派生クラスを整理した
windresの使い方を理解した
0668デフォルトの名無しさん
2005/09/14(水) 22:51:34Javaは俺が作ってるから要らないよ
C++でやらなきゃすみわけが出来んでしょ
http://himatanuki.hp.infoseek.co.jp/cgi-bin/uploader/src/up0031.lzh
今後の課題
・敏捷UPの効果が永続的なのはマズイですよね?
・敵をてきとうに復活させたいなぁ(動かすのはムリポ)
・メッセージの整理(ソースに直書きした方がいい?)
・全体的なソースの整理
今後の予定
・とりあえずソース整理からかな…
>>663 >>668
あ〜。私の場合はPCの性能的にJavaはムリポなので、
やるとしても C++ & Win32api になると思います。
けど、今はC言語(の標準ライブラリ)で精一杯なんで… orz
とりあえず、あれこれ見てみて、
構造化とか色々な概要は分かった、ような気がします。
この手のノウハウって色々応用できそうだけど、
理解したとしても実践するのは難しそうですね。
0670デフォルトの名無しさん
2005/09/14(水) 23:29:38Win32APIで画像処理するくらいならJavaのが速い
0671デフォルトの名無しさん
2005/09/15(木) 00:39:360672デフォルトの名無しさん
2005/09/15(木) 00:44:120673デフォルトの名無しさん
2005/09/15(木) 01:56:530674デフォルトの名無しさん
2005/09/15(木) 04:46:210675デフォルトの名無しさん
2005/09/15(木) 04:48:320676デフォルトの名無しさん
2005/09/15(木) 23:38:56最速目指すならD言語使っとけ
0677デフォルトの名無しさん
2005/09/15(木) 23:40:300678デフォルトの名無しさん
2005/09/15(木) 23:45:330679デフォルトの名無しさん
2005/09/15(木) 23:47:19どちらにしろこのスレはC++で作るスレなんだから、話を戻そうや
0680デフォルトの名無しさん
2005/09/16(金) 00:05:080681デフォルトの名無しさん
2005/09/16(金) 00:06:440682デフォルトの名無しさん
2005/09/16(金) 00:08:410683デフォルトの名無しさん
2005/09/16(金) 00:17:120684デフォルトの名無しさん
2005/09/16(金) 00:28:490685684
2005/09/16(金) 00:29:430686デフォルトの名無しさん
2005/09/16(金) 00:34:000687デフォルトの名無しさん
2005/09/18(日) 20:53:380688デフォルトの名無しさん
2005/09/18(日) 20:57:28クラス図は無いの?
http://himatanuki.hp.infoseek.co.jp/cgi-bin/uploader/src/up0032.lzh
今後の予定:メッセージの整理はこれからやります。
>>670
あ〜、ゴメン。勘違いしてました。
調べなおしたら私の環境でもムリポではなかったです。
でもどちらにしても、当分は手を出せそうにないけれど…
速度はよく分からないけど、Javaだと画像の透過処理が楽そうでいいですね。
ってか、この手の話はスレ違いになりそうかな(^^ゞ
>>688
リベンジということは、先輩でしょうか? よろしくです!
クラス図は >>19>>21 にあるだけ、かな?
前スレは見ていないので分かりませんが。
(実は私がクラス図の意味をイマイチ分かっていないってのは内緒です)
0690デフォルトの名無しさん
2005/09/18(日) 21:26:52int main(void)
{
(void)Clear();
ここまで読んだ。
何このキャスト? lint ツール使ってんの?
0691デフォルトの名無しさん
2005/09/18(日) 21:57:36描画や音声はコントロールされる側なんだよな。
実際にコントロールするのはシナリオ、入力、イベントの3つのはず。
「進行スクリプト」という名のルートシナリオがまずあって
「シーン」という場面を切り替えてゲームを進行する。
シーン毎に「シナリオ」、「入力」、「イベント」のコントローラーがあって
それらコントローラーは黙々と「チップオブジェクト」や各種「データ」を生成、管理する。
そのためシーンはオブジェクトを管理するための「スクリーン」を持つ必要がある。
しかし "スクリーンは" あれこれ付け替えると描画処理に負担がかかるから
一定の規則を持った "複数レイヤーの配列としてルートオブジェクトにする" べきである。
したがってシーンが持つべきはスクリーンを掃除する「大道具」である。
「照明」さんや「音響」さんは「アクター」の演技によって生じる「SE」を「タイミングイベント」によって鳴らし
シーンの終わりに「幕担当」さんが彼ら裏方(大道具、照明、音響)と一緒にシーンを切り替える。
優れたシナリオが"描け"れば、優れたゲームエンジンにランデブれるぜ・・・!?
0692デフォルトの名無しさん
2005/09/18(日) 21:58:570693デフォルトの名無しさん
2005/09/18(日) 21:59:510694デフォルトの名無しさん
2005/09/18(日) 22:11:40ビュー:描画、音声、ファイル出力等
コントローラ:シナリオ、入力、イベント
この分類の仕方で行けば使いやすいエンジンに育て上げることができるよ。
シナリオクラスをどう仕上げるかが一番の腕の見せ所。
0695デフォルトの名無しさん
2005/09/19(月) 04:56:42ttp://www.radiumsoftware.com/0307.html#030702
0696デフォルトの名無しさん
2005/09/19(月) 11:49:11「ドアに話しかける」がどうしてまずい設計なのか良くわからないな
0697デフォルトの名無しさん
2005/09/19(月) 12:02:25のに
>「ドア」と会話する必要が出て
くると、
>「ドア」クラスが「NPC」クラスとはまったく異なった「枝」に継承されていた
ときまずいんでないの
0698デフォルトの名無しさん
2005/09/19(月) 12:20:04うん、でも継承させればいい話。
話しかけるって言うのはいわば方言で
そのオブジェクトに対して「普通一般的に行う行動」を
Talkというメソッドにしてるだけでしょ?
0699デフォルトの名無しさん
2005/09/19(月) 12:25:30○うん、でも「NPC」クラスに継承させればいい話。
0700デフォルトの名無しさん
2005/09/19(月) 13:10:02「ドアに話しかける」は設計じゃなくて仕様に含まれる挙動。
その挙動を自然に表せなかった設計(単一継承ツリー)が悪いって話。
0701デフォルトの名無しさん
2005/09/19(月) 13:43:44全てのチップオブジェクトにMeddle(action)を追加するようにすればこんな問題にはならないな。
※Meddle 弄くる、干渉する
0702デフォルトの名無しさん
2005/09/19(月) 14:18:38あははー。浅はか過ぎる。 >695 のリンク先読んでから言ってんの?
0703デフォルトの名無しさん
2005/09/19(月) 14:27:470704デフォルトの名無しさん
2005/09/19(月) 14:33:26すべての基底となるベースクラスに Do(action) を追加すれば、もっといいってこと?
確かに各オブジェクトが action に対するパーサを拡張するだけで何でもできる。
0705デフォルトの名無しさん
2005/09/19(月) 14:45:09そう、すべての基底となるベースクラスがprotectedなパーサクラスをコンポジットしてる。
単なる岩だってこちらから触ることは出来るでしょ。反応がない=触れないじゃない。
0706デフォルトの名無しさん
2005/09/19(月) 14:59:300707デフォルトの名無しさん
2005/09/19(月) 15:02:43自由に作成できる action や拡張可能なパーサを設計するのは、簡単な話なの?
問題が action やそれに対するパーサの設計に移っただけな気がする。
0708デフォルトの名無しさん
2005/09/19(月) 15:14:26tip->Do(this, ACTION_TALK);
}
Do(Tip* tip, action) {
if (tip->GetGroup() != group) {
System.Message("噛み付かれた。");
System.AttackResult(this,tip,MSG_ATACK);
}
}
0709デフォルトの名無しさん
2005/09/19(月) 15:14:420710デフォルトの名無しさん
2005/09/19(月) 15:16:22BITE_ATTACKとかそんなんか、Skillクラスあたりだな
0711デフォルトの名無しさん
2005/09/19(月) 15:22:34Tip *tip = System.CurrentPos(this, direction);
if (tip != NULL) {
tip->Do(this,ACTION_TALK);
}
}
こっちでいいか。汎用的になった。
0712デフォルトの名無しさん
2005/09/19(月) 15:27:40やるがよい。
0713デフォルトの名無しさん
2005/09/19(月) 18:48:030714デフォルトの名無しさん
2005/09/19(月) 19:24:350715デフォルトの名無しさん
2005/09/19(月) 19:38:120716デフォルトの名無しさん
2005/09/19(月) 21:59:500717デフォルトの名無しさん
2005/09/19(月) 23:19:230718デフォルトの名無しさん
2005/09/19(月) 23:37:520719デフォルトの名無しさん
2005/09/20(火) 18:04:16ってか。あいかわらず話についていけてません… orz
>>690
キャストは飾りです。
作りはじめの時に自作関数が目立つようにくらいの軽い気持ちで付けてただけです。
……無意味なので、こんど消しときますね。
ちなみにlintツールは使っていません。作製環境は BCC + HC_Editor です。
ところで最近ちょっと気になってるんですが、getsを使いまくっているのは邪道ですか?
いや、ダメ出しされても既に直す気力が湧かないくらい使いまくってるんですけど。
それなりに対処しているつもりなんで、いいですよね? イイトイッテクダサイ orz
0721デフォルトの名無しさん
2005/09/20(火) 20:20:33こういうことあるとJavaを褒めたくなるな
0722デフォルトの名無しさん
2005/09/20(火) 20:41:57>作りはじめの時に自作関数が目立つようにくらいの軽い気持ちで付けてただけです。
#define call
call Clear();
>ところで最近ちょっと気になってるんですが、getsを使いまくっているのは邪道ですか?
邪道って…意味わかってんのか?
>いや、ダメ出しされても既に直す気力が湧かないくらい使いまくってるんですけど。
ラップすれば直すのは簡単だろ。
こういうの↓作って
char *gets10(char *buf)
{
char* p;
fgets(buf,10,stdin);
p=strchr(buf,'\n');
if(p)*p='\0';
return buf;
}
ファイル全体の gets を gets10 に一括置換すればいいだけの話。
0723デフォルトの名無しさん
2005/09/20(火) 22:54:130724デフォルトの名無しさん
2005/09/20(火) 22:57:100725デフォルトの名無しさん
2005/09/20(火) 23:38:24| 時代はインタラクティブUMLですよ
\
 ̄ ̄ ̄|/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
( ・∀・) ∧ ∧ < 手間かかるもん作らせんな
( ⊃ ) (゚Д゚;) \____________
 ̄ ̄ ̄ ̄ ̄ (つ_つ__
 ̄ ̄ ̄日∇ ̄\| BIBLO |\
 ̄ ======= \
0726デフォルトの名無しさん
2005/09/20(火) 23:42:58拡大縮小絞込みなどが出来るUMLってのも興味あるけどw
0727デフォルトの名無しさん
2005/09/20(火) 23:56:300728デフォルトの名無しさん
2005/09/21(水) 00:07:040729デフォルトの名無しさん
2005/09/21(水) 00:17:380730デフォルトの名無しさん
2005/09/21(水) 00:21:280731デフォルトの名無しさん
2005/09/21(水) 17:28:450732684
2005/09/21(水) 17:34:150733デフォルトの名無しさん
2005/09/21(水) 18:50:390734デフォルトの名無しさん
2005/09/21(水) 18:54:21C++だと無いんだよな
そうか! そういう手がありましたね!
んじゃ、そんな感じで直しいれてみます。
邪道って使い方おかしかったですか?
深刻なバグになりかねない gets を使うのはプログラマ失格だみたいな、
鼻息の荒い意見を見たもので、ちと鬱になってたんですよ。…グチってゴメン。
>>733 ノシ はいはいはい、点呼1です!
0736デフォルトの名無しさん
2005/09/21(水) 19:55:41//<cstdio>使ってgetsは名前空間stdに収められていることが前提。
template <std::size_t N>
char *gets(char (&buf)[N])
{
std::fgets(buf, N, stdin);
if (char *p = strchr(buf, '\n'))
*p = '\0';
return buf;
}
http://himatanuki.hp.infoseek.co.jp/cgi-bin/uploader/src/up0033.lzh
gets の直しは、判定部分ではなく入力部分で直せたので、ラクに済みました。
教えてもらったのと違うようにやってみたんですけど、これでもだいじょうぶですよね?
レイアウトの関係上、半角30字以上は入れられたくないので
(実際、それだけの入力が必要な場面も想定していないので)
入れた場合は強制終了するようにしてあります。
/*-------------------------------------------------------------------*/
訂正前の抜粋・こんな感じ・Game.c 内 void WriteScreenInputArea(void)
{
char get_s[50];
gets(get_s);
if (strlen(get_s) > 30)
Err("WriteScreenInputArea// 入力文字数が多すぎます"); //←ゲームの強制終了
}
/*-------------------------------------------------------------------*/
訂正後の抜粋・こんな感じ・Game.c 内 void WriteScreenInputArea(void)
{
char get_s[30+3];
int mojisuu;
mojisuu = strlen(fgets(get_s,30+3,stdin));
if (mojisuu > 30+1)
Err("WriteScreenInputArea// 入力文字数が多すぎます"); //←ゲームの強制終了
else
get_s[mojisuu-1] = '\0';
}
/*-------------------------------------------------------------------*/
0739デフォルトの名無しさん
2005/09/22(木) 00:11:08fgets() の第二パラメータはsizeofを使うのが常道。
0740デフォルトの名無しさん
2005/09/22(木) 04:09:58Cから継承した標準関数はグローバルが実体で
std の中に using されてる実装が多く、おそらく
グローバルな定義では意図したとおりに置き換わらない。
「ちゃんとしたラッパ」は自分で作った名前空間に収めるべき。
0741デフォルトの名無しさん
2005/09/22(木) 12:29:43やっぱそうだよな、スマソ。
0742デフォルトの名無しさん
2005/09/22(木) 19:24:29fgets は NULL を返すことがあるからチェックしてから strlen に渡そう。
0743503
2005/09/22(木) 20:23:38ノシ 点呼2!!
マップエディタは全然ゲームと作り方が違うので時間かかってるよ
RPGツクールのマップチップって思ったより複雑(隣接チップによっての変化やアニメーション)
いっそツクールが吐いたデータを読み込んだほうが楽かもしれない(軽く解析済み)
0744デフォルトの名無しさん
2005/09/22(木) 20:57:28例えばforを3回まわす所を5回まわすハメになってもFPSを維持できるなら見過ごすとか
0745デフォルトの名無しさん
2005/09/22(木) 21:13:410746デフォルトの名無しさん
2005/09/22(木) 21:18:210747シープラ勉強中
2005/09/23(金) 19:28:41実はそろそろやめたくなってますが・・
たまに見る、ラッパーライブラリとか言う言葉は、
なにか既存の関数をラッピングするように包んでるから
そう呼ばれてるんですね。
見るたびに、「ラッパーってなんだろ?」とか思ってました。
一段落したらDirectXを包んでるやつとか使ってみたいな。
>>737
ひし形の敵に殺られちゃいましたww
328さん、完成に向けてものすごいスピードで進んでますね。
その情熱を見習いたい。
>>743
ツクールのマップデータって、プログラム解析しなくても読めるんですね。
驚愕です。
ファイル操作で壁にぶち当たってる私とはえらい違いだわ。
マップチップのアニメーションとかも考えなきゃいけないのかぁ orz
0748デフォルトの名無しさん
2005/09/24(土) 01:59:52別になくてもいいと思うけど。
0749シープラ勉強中 ◆ryjMYLsfPA
2005/09/24(土) 14:17:03http://aploda.com/dl.php?mode=pass&file_id=0000031631
自力では完成させる自信がまったく無いマップエディタです
セオリーとか知らないので、思うままにやりましたw
なんか無意味に大きくしすぎたかも。。
http://aploda.com/dl.php?mode=pass&file_id=0000031632
↑の絵にちゃんとなってるでしょうか?
実行したら即ファイルを読み込む仕様なので、
それが失敗した場合即エラーがでるかもです。
構造体のサイズがコンパイラによって違ったりするらしいですし、
私のとこ以外の環境でちゃんと動くのか激しく疑問。
これからの予定
○名前を指定してセーブ&ロードができるようになりたい
(あのお決まりのダイアログボックスみたいなのはどうやって出すんだろ・・)
○ラジオボタンとかチェックボタンとかも出したい
○スクロールバーもあると便利かも
○絵以外も貼れるようになりたい(フラグとか)
win32の勉強がまだまだ不足なので、相当時間かかりそうです。
美乳さんのエディタはどうなってるんだろうか。
>>748
余裕があったら、川とか海の2パターンアニメをがんばって入れてみます。
マップチップはツクール素材を使ってしまおうかなぁ。
0750デフォルトの名無しさん
2005/09/24(土) 14:35:23つ ダイアログボックス(モーダル)(VCの場合)
0751579
2005/09/24(土) 14:54:44ほとんど変化ないけどとりあえず成果物
移動不可地形をどうするか悩んでいたらあっと言う間に2週間
Haskellに触ってみてから、身の程知らずだったことに気づくまでの5日間を含んでいるのは秘密
マップエディタの進捗状況は2%といったところ
そうだよね、うん、手持ちの本にも書いてありました…orz
ありがとう、直してきます。
>>747 >>749
ありがとう。情熱というよりも、暇人なんですよw
>>749は、win98でOK、画像どおりに表示されていますよ!
んでも、画面のチラつきが目立つのは、PC性能のせいなのかな?
>>644はすごくスムーズだったんだけど…?
>>751
いや、かなり進んでいるように見えるんですけど?
マウス操作とかグラフィック関係は、
ざっと調べただけでも、すごく複雑そうですよね。
みなさん、がんばってください!
(私は手を出さないで正解だったとか思ってるのは内緒です。)
0753デフォルトの名無しさん
2005/09/25(日) 16:50:13大して難しくないから?
0754デフォルトの名無しさん
2005/09/25(日) 17:42:23(なんかWikiみたいのがなかったっけ?)
じゃないと単なるオナニーで終わるだろ。
0755デフォルトの名無しさん
2005/09/25(日) 17:54:20できたゲームが楽しけりゃ立派なセックルだよ。
0756デフォルトの名無しさん
2005/09/25(日) 17:56:59サウンドは>>457あたりで話されていてMCIやwaveOutを使用した
コードが出ている模様。…まーそれなりに真面目に見ると
データのパック、暗号化、ストリーミング処理、Oggフォーマット対応、
DirectSoundによる複数音発声や一元管理などが無いんで少し物足りないけど。
0758デフォルトの名無しさん
2005/09/25(日) 18:03:01おかげでいいのができそうだけど、こんなんで完成するのはいつの日か
0759デフォルトの名無しさん
2005/09/25(日) 20:12:50俺的名言
もらった
http://himatanuki.hp.infoseek.co.jp/cgi-bin/uploader/src/up0035.lzh
今後の課題・マップ移動・セーブ方法・メッセージ整理・etc…
まだまだ先は長そうです orz
公開するほどのノウハウは私にはないけれど、
失敗レポート作ると復習になっていいとか言うから、
もう少し落ち着いたらやってみようかな?
ってか、未だにconstの使いどころがナゾだったり、
分からないことだらけです。orz
0761デフォルトの名無しさん
2005/09/26(月) 03:20:35C言語って標準でスタック用意してないの?
0762デフォルトの名無しさん
2005/09/26(月) 03:21:14ごめんなさーい!!
0763デフォルトの名無しさん
2005/09/26(月) 03:37:15|_|ω・`)< 乙でつ。漏れも頑張ってまつ。
|柱|⊂ ノ
| ̄|-u'
0764デフォルトの名無しさん
2005/09/26(月) 04:18:270765デフォルトの名無しさん
2005/09/27(火) 21:44:07ID:0ゲーム作って終わりならゲ製逝けよ。
ここはム板なんだから。
0766デフォルトの名無しさん
2005/09/27(火) 22:12:28ID:0ゲ製の糞スレで十分だ。
0767デフォルトの名無しさん
2005/09/28(水) 01:29:410768デフォルトの名無しさん
2005/09/28(水) 02:07:270769デフォルトの名無しさん
2005/09/28(水) 04:20:470770デフォルトの名無しさん
2005/09/28(水) 10:04:570771デフォルトの名無しさん
2005/09/28(水) 10:10:34だな。
ほとんど初心者のC/C++、Win32API勉強会になってるし。
質問スレだけで全然事足りる内容。
(たまにちゃんとしたのが出てくるが)
それで作るときのノウハウもためられないようじゃ全然意味なし。
得意げに汚いコードだけ晒し続けてる奴の心理がよく分からん。
0772デフォルトの名無しさん
2005/09/28(水) 10:14:07ひょっとしておたくらが仕掛け人?
0773デフォルトの名無しさん
2005/09/28(水) 11:09:130774デフォルトの名無しさん
2005/09/28(水) 11:17:470775デフォルトの名無しさん
2005/09/28(水) 11:19:510776デフォルトの名無しさん
2005/09/28(水) 11:23:510777デフォルトの名無しさん
2005/09/28(水) 11:28:36マトモな奴は、来ない。
へタレで他人にえばりたい奴だけが来る。
∧_∧ / ̄ ̄ ̄ ̄ ̄
( ´∀`)< オレモナー
( ) \_____
| | |
(__)_)
0778デフォルトの名無しさん
2005/09/28(水) 11:31:17わからないなら放っておいてくれないか
民族浄化みたいな真似しなくても誰も君の居場所を奪ったりしないから
0779シープラ勉強中
2005/09/28(水) 18:35:29スレを活用するためには、ちょっと迷ったら
アドバイスを求めた方がいいんですかね?
動かし方とかいっぱいあるだろうし。
でもまだWin32ができないしなぁ。
>>751
Haskellっての見にいってみたら凄い呪文が!
なんじゃありゃ。
移動不可地形はすごい難しいっすよね。
マップエディタを待ってます・・。
>>760
三角の敵に殺られました。
店で買った皮の鎧が紙のようでしたよ。
あがいてもあがいても復活できないのは仕様ですかw
>得意げに汚いコードだけ晒し続けてる奴の心理がよく分からん。
こ、これはひょっとして私のことですか?(汗
えっとですね。私が晒しつづけているのは、
定期上げをすることで自分がダレないようにするためと、
誰かのツッコミを待っているってのがあるんですよ。
自分のコードがキレイだなんてハナから思っていないから、
とりあえず動かすだけのコードが書ければいいや、ってなると、
汚いままのコードしか書けないままになるかなって。
だからといって、「私のコードを添削してくれ!」なんて、
言える相手も場所もないから、ここに晒しておいたら、
奇特な人が見てくれないかなぁ、という希望的観測があるんです。
(自己中ですか? すみません)
それと、私が技術的な話に加わらないのは、
話が出来るだけの知識がないからです。
質問しようにも何が分からないのか分からないことが多いしね。
と、以上。自己心理分析、というか、言い訳でした。
>>779
いつもありがとう〜。
ごめん、今はプログラムを組むのに手一杯で、
ゲームバランスまでは手が回っていません。 orz
「あがく」だけでは復活できないので、薬とか使ってください。
瀕死状態では移動はできないけど[c]コマンドは使えるはずなので。
http://himatanuki.hp.infoseek.co.jp/cgi-bin/uploader/src/up0036.lzh
今後の予定:月末頃に忙しくなるので2週間ほど消えるかも?だけど気にしないでください。
0782デフォルトの名無しさん
2005/09/28(水) 20:55:240783デフォルトの名無しさん
2005/09/29(木) 00:30:160784デフォルトの名無しさん
2005/09/29(木) 03:09:10ここをどこだと思ってるの?
0785デフォルトの名無しさん
2005/09/29(木) 04:04:340786デフォルトの名無しさん
2005/09/29(木) 04:18:550787デフォルトの名無しさん
2005/09/29(木) 09:29:25人のプログラミング能力を見るのにはソースコードを見るのが一番
バイナリだと、いくらでも小細工できて真の実力が分からんからな
で、ソースコードを出せない香具師は口だけちゃんが多いね
0788デフォルトの名無しさん
2005/09/29(木) 09:41:100789デフォルトの名無しさん
2005/09/29(木) 09:49:030790デフォルトの名無しさん
2005/09/29(木) 09:51:230791デフォルトの名無しさん
2005/09/29(木) 10:17:520792デフォルトの名無しさん
2005/09/29(木) 10:22:21それで良いと思うがな。
0793デフォルトの名無しさん
2005/09/29(木) 10:36:490794デフォルトの名無しさん
2005/09/29(木) 16:10:10じゃあ今までに上がったソースの問題点とか指摘してみてくれよ
0795デフォルトの名無しさん
2005/09/30(金) 00:49:21好みの問題で済むようなどうでもいい書き方のお作法しか指摘できなかったら笑う
0796デフォルトの名無しさん
2005/09/30(金) 04:42:51ここでは、それがデフォですよ
0797デフォルトの名無しさん
2005/09/30(金) 04:57:440798デフォルトの名無しさん
2005/09/30(金) 22:29:550799デフォルトの名無しさん
2005/09/30(金) 22:41:070800デフォルトの名無しさん
2005/09/30(金) 22:48:56棒倒し法以外になんかある?
0801デフォルトの名無しさん
2005/09/30(金) 22:54:18tp://www5d.biglobe.ne.jp/~stssk/maze/make.html
0802デフォルトの名無しさん
2005/10/01(土) 06:20:26ぐぐると良さげなツールがあったよ。
MapEditor 'Platinum' (ttp://www.valley.ne.jp/~valencia/)
少し使ってみたけど、なかなかよくできてると思う。
自作するまえに使ってみる価値ありかと。
0803デフォルトの名無しさん
2005/10/01(土) 16:39:180804デフォルトの名無しさん
2005/10/01(土) 17:28:08http://www.vector.co.jp/games/soft/win95/game/se190983.html?site=n
でも、やはり本格的に一本ゲームを作ろうと思うなら、
マップエディタも自作した方がいいかな。
レイヤーの数、入出力データ形式、ツールバーの感じとか、
他人のだとどうしてもしっくり来ないし。
後、ツクール2000タイプの素材を使いたいときに、
境界線の自動処理の部分をどうするかだね。
普通に16X16で表示していては、ツクールと同じように表示できない。
展開したパターンを予め作っておくか、
ゲーム中に裏ビットマップに作って表示するか。
それとも、ツクール2000タイプ以外の素材を使うか。
しかし、その素材は殆ど無いんだよな。
0805デフォルトの名無しさん
2005/10/01(土) 17:47:180806デフォルトの名無しさん
2005/10/01(土) 18:05:560807デフォルトの名無しさん
2005/10/01(土) 18:13:500808デフォルトの名無しさん
2005/10/01(土) 18:18:410809デフォルトの名無しさん
2005/10/01(土) 18:24:090810デフォルトの名無しさん
2005/10/01(土) 20:58:390811デフォルトの名無しさん
2005/10/01(土) 21:15:250812デフォルトの名無しさん
2005/10/01(土) 22:13:500813デフォルトの名無しさん
2005/10/01(土) 22:25:370814デフォルトの名無しさん
2005/10/01(土) 23:56:53だが、自分で作ったゲームを楽しめる奴が作ったゲームが面白いとは限らない
0815デフォルトの名無しさん
2005/10/02(日) 00:07:45ついつい言及したくなっちゃうんだよスマソ
なんでも「つくれつくれ」でやんなっちゃう
0816デフォルトの名無しさん
2005/10/02(日) 00:41:52まぁ、まだ設計開発技術を云々いえるほどのものはできてこないわけだけど。
0817デフォルトの名無しさん
2005/10/02(日) 06:56:330818デフォルトの名無しさん
2005/10/02(日) 07:05:47スレタイを1000万回読んだらゲハ板に帰れ
0819デフォルトの名無しさん
2005/10/02(日) 07:13:36無責任な誘導やめろよマジで
0820デフォルトの名無しさん
2005/10/02(日) 10:31:250821デフォルトの名無しさん
2005/10/02(日) 21:41:02ま、今のレベルじゃゲ製でも相手にしてもらえないと思うけど。
0822デフォルトの名無しさん
2005/10/03(月) 06:14:390823デフォルトの名無しさん
2005/10/05(水) 10:56:150824デフォルトの名無しさん
2005/10/05(水) 12:22:22詳しく!
0825デフォルトの名無しさん
2005/10/05(水) 16:49:25たとえばマップエディタだと、ウインドウをクリックしてチップ置くなんてのは共通なんだから、そのクリックイベントを他の人が作ったプログラムでキャッチできるようにするの。
上の例が適切かどうかはわからないがそんなかんじ。
0826デフォルトの名無しさん
2005/10/05(水) 18:14:470827デフォルトの名無しさん
2005/10/05(水) 18:19:24いいこと言ってる気がするのでもっと詳しく頼む
0828デフォルトの名無しさん
2005/10/05(水) 18:36:29設計開発技術ってRPGだからといって特別なことある?
0829デフォルトの名無しさん
2005/10/05(水) 19:32:230830デフォルトの名無しさん
2005/10/05(水) 19:37:190831デフォルトの名無しさん
2005/10/05(水) 23:50:35気合入れてマップエディタ作ったのに
「フォトショップの方が使いやすい」
なんて言われた日にゃぁ orz...
0832デフォルトの名無しさん
2005/10/06(木) 01:11:540833デフォルトの名無しさん
2005/10/06(木) 11:00:28基本機能が段違い(UNDOやヒストリー、アクションだけでもフリーではありえないレベル)なので
マップエディタとしてはありがちな機能をその上に乗せただけでも今までにないものになる
(特にアクションがあれば派生機能が作れるし)
0834デフォルトの名無しさん
2005/10/06(木) 20:00:540835デフォルトの名無しさん
2005/10/07(金) 00:00:33そんな風に考えていた時期が私にもありました。
0836デフォルトの名無しさん
2005/10/07(金) 00:04:380837デフォルトの名無しさん
2005/10/07(金) 00:05:090838デフォルトの名無しさん
2005/10/07(金) 00:26:280839デフォルトの名無しさん
2005/10/07(金) 00:45:160840デフォルトの名無しさん
2005/10/07(金) 02:33:550841デフォルトの名無しさん
2005/10/07(金) 03:13:27フォトショプラグインはいちいち登録してsdkひろってこないとだめだから面倒じゃん
0842デフォルトの名無しさん
2005/10/07(金) 05:46:18出版でもするのかと
0843デフォルトの名無しさん
2005/10/07(金) 05:51:300844デフォルトの名無しさん
2005/10/07(金) 18:27:39ないからベースにする意味がない
0845デフォルトの名無しさん
2005/10/07(金) 18:41:270846デフォルトの名無しさん
2005/10/07(金) 18:47:18来週の試験終わったら作り始めるし今のうちに研究しておきたい
0847デフォルトの名無しさん
2005/10/07(金) 22:08:300848デフォルトの名無しさん
2005/10/07(金) 22:20:21詳しく教えてくれ!!!
0849デフォルトの名無しさん
2005/10/07(金) 22:45:070850デフォルトの名無しさん
2005/10/07(金) 22:46:12>>847はきっとスゲー技を持ってるに違いない!!
0851デフォルトの名無しさん
2005/10/08(土) 01:54:00スゲー技を教えてほしいワクワクテカテカ
0852デフォルトの名無しさん
2005/10/08(土) 02:01:480853デフォルトの名無しさん
2005/10/08(土) 02:03:38ドット絵勉強用に買った本がペイント使ってたもんだから・・・。
0854デフォルトの名無しさん
2005/10/08(土) 02:16:28それはマップエディタとしてではなく単なるペイントツールだろ。
マップエディタってのはチップに付随する情報なども設定できなきゃ意味がない。
0855デフォルトの名無しさん
2005/10/08(土) 02:31:340856デフォルトの名無しさん
2005/10/08(土) 03:50:130857デフォルトの名無しさん
2005/10/08(土) 09:14:08その場合「マップエディタ」と呼ばれるのはプログラム”A”であり、
ペイントは単なるお絵かきツールでしょ。
0858デフォルトの名無しさん
2005/10/08(土) 13:21:04こんなのが作りたいってないの?
0859デフォルトの名無しさん
2005/10/08(土) 17:38:530860デフォルトの名無しさん
2005/10/08(土) 17:41:33つか、ソース公開しとけば
ええんでないか?
0861デフォルトの名無しさん
2005/10/08(土) 17:51:350862デフォルトの名無しさん
2005/10/09(日) 03:45:000863デフォルトの名無しさん
2005/10/10(月) 19:43:540864デフォルトの名無しさん
2005/10/10(月) 20:08:310865デフォルトの名無しさん
2005/10/10(月) 20:21:380866デフォルトの名無しさん
2005/10/10(月) 21:27:560867デフォルトの名無しさん
2005/10/10(月) 21:29:220868デフォルトの名無しさん
2005/10/10(月) 21:37:31そんなことじゃ、コンパイラが吐くエラーメッセージの冷徹さに耐えられないんじゃないか?
0869デフォルトの名無しさん
2005/10/10(月) 21:39:400870デフォルトの名無しさん
2005/10/10(月) 21:47:350871デフォルトの名無しさん
2005/10/10(月) 21:48:350872デフォルトの名無しさん
2005/10/10(月) 22:04:470873デフォルトの名無しさん
2005/10/10(月) 22:08:340874デフォルトの名無しさん
2005/10/10(月) 22:22:100875デフォルトの名無しさん
2005/10/10(月) 22:27:42でも次からは書き込む前に少し考えてみてください
0876864
2005/10/10(月) 22:44:10あとは自分で探せw
0877デフォルトの名無しさん
2005/10/10(月) 23:06:32自分が要求したものは皆すぐにくれるとでも思ってやがるのか。
0878デフォルトの名無しさん
2005/10/10(月) 23:45:23おれのものはおれのもの。
0879デフォルトの名無しさん
2005/10/11(火) 16:00:00おれのものはきみのもの
0880デフォルトの名無しさん
2005/10/11(火) 16:03:34俺も終わるまで出来ないけど
0881デフォルトの名無しさん
2005/10/11(火) 16:45:33おれのしゃっきんもきみのもの
0882デフォルトの名無しさん
2005/10/12(水) 19:53:350883デフォルトの名無しさん
2005/10/12(水) 19:55:220884デフォルトの名無しさん
2005/10/12(水) 19:56:47switchでそのサブルーチンを呼んでる
変数にオブジェクト入れてそれを入れ替える方法とか関数ポインタでもいいらしいけど
0885デフォルトの名無しさん
2005/10/12(水) 21:09:51タスクシステムつこてる
>>882
C言語の標準関数しか知らない素人のやり方だけど…
タイトル画面、ゲーム画面、ゲームオーバー画面、それぞれの表示用関数を用意して、
それと別に画面を全部消去する関数も用意して、
タイトル画面の【スタート】ボタンにイベント仕込んで、
そこをクリックされたら、画面消去→ゲーム画面の順に関数呼び出せば、
何とかなるんじゃないかな?
ところで、マップエディタが流行っているみたいだけど、
マップチップに最低限必要な要素とか、規格みたいのを先に決めないで、
作れるものなのかな?
と、素朴な疑問が湧いたのですが…私だけでしょうか?
っつか、独り言うざいですね。おやすみなさい。
0887デフォルトの名無しさん
2005/10/13(木) 02:43:00作れるものなんですよ、奥さん。
0888デフォルトの名無しさん
2005/10/13(木) 07:08:050889デフォルトの名無しさん
2005/10/15(土) 17:06:12最初に規格を作らずぶっつけで作ると、形にはなるが拡張する時に泣く。
好きなほうを選べ。
0890デフォルトの名無しさん
2005/10/15(土) 17:27:260891デフォルトの名無しさん
2005/10/15(土) 17:42:02昔は後者で、今は前者かな。
規格を考えている時は楽しいからいいけど、
プログラムを組んでから時間が経つと飽きてくるから、
プログラムの方で時間が掛からないようにしている。
大正漢方が食べる前に飲むなら、プログラムは飽きる前に作るだね。
また、回数毎にどういうプログラムを作っていくかも大事だと思う。
作りたい作品である事は当然だが、
ちょうど自分の力量より少し難しいぐらいのにすると、
製作時間とレベルアップのバランスがちょうどいいから。
ってか。いまロード&セーブで悪戦苦闘してるんですけど、
覚えたことも一気に忘れてしまったようで、
いいかげんヤになってきました(涙
0893デフォルトの名無しさん
2005/10/16(日) 18:06:30必要なパラメーターをセーブ・ロード用の構造体にまとめて、単純にファイルに書き込む→セーブ
単純にセーブ・ロード用の構造体に読み出して、それを振り分けなおす→ロード
もしくはもっと単純にパラメータ用の構造体を用意しておき、それを単純に読み書きすれば良い。
複数データ保存ならベースのファイル名+番号を自動生成すれば良いだけ(sprintf()でできるはず)
>マップチップに最低限必要な要素とか、規格みたいのを先に決めないで、
>作れるものなのかな?
現在有るものを参考にする。(RPGツクールとか)
それで足りなければ拡張すれば良い。
一から自分で造るのはすごく面倒だろうし、コンバートすら面倒なものが出来る可能性がある。
>複数データ保存ならベースのファイル名+番号を自動生成すれば良いだけ(sprintf()でできるはず)
この辺と、どのデータを保存するかで、ワケワカメになっていました。(涙
んで、なんとかできたので、久々の定期上げです。
http://himatanuki.hp.infoseek.co.jp/cgi-bin/uploader/src/up0037.lzh
とりあえず、ゲームの最初にロードして、最後に保存するようにしました。
岩を動かしたりで地図を変えながら進めるようにしたので、
これだと明らかにハマリや不都合がおきるので、
セーブ場所を固定化するような形でシナリオを作らないとダメポですね。orz
その辺は、これから考えてみます。
マップエディタは、上のほうでカスタマイズの話が出ていたので、不思議だったんです。
完成したエディッタの拡張機能って、どの程度、作れるものなのかなぁと。
まぁ、私には作れそうにないので、素朴な疑問なんですけどね。(苦笑)
0895デフォルトの名無しさん
2005/10/17(月) 00:18:45$(CC) -o $@ -c $<
Game.obj: Game.c nullme.h
0896デフォルトの名無しさん
2005/10/18(火) 04:49:15とりあえず必要なマップ情報は、
・マップ自体の識別コード(名前)・構成量(縦×横×階層)・構成目(マップチップデータ〈階層分〉)
・四辺の外設定〈階層分〉 ・ループや自動移動の有無〈階層分〉 ・メモ用空き
・内容(チップNo)
ぐらい?
移動の可否・戦闘用データは、チップデータ依存とする。
セーブ&ロードのソースの整理をしただけで力尽きました。orz
http://himatanuki.hp.infoseek.co.jp/cgi-bin/uploader/src/up0038.lzh
>>895
こ、これはきっと正しいmakefileの書き方、なんだと思うんですけど。
ゴメン、なんか意味がわかりません。(涙
そのままmakefileにコピペしてやってみたんですけど、
Err makefile 3: Command syntax error
*** 1 errors during make ***
って出てしまうんです。(TT)
私のやり方が何かヘンなのでしょうか? orz
0898デフォルトの名無しさん
2005/10/20(木) 00:41:550899デフォルトの名無しさん
2005/10/20(木) 13:45:56BCCならこんな感じかなあ
#↓生成規則: .cファイルから.objファイルを生成するには
#↓このコマンドを実行しる
.c.obj:
$(CC) $(CFLAGS) -c $< # ←行頭の4文字の空白はタブ文字に置き換えてくれい
#↓依存関係を書く。コマンドは書いてないけど先に決めたルールがあるので生成される。
Game.obj: Game.c nullme.h
こういう書き方あるから・・・記憶の片隅にいれといても損はしないかもザマス。
ちなみに>>895のはGNUMake用の書きかた
0900デフォルトの名無しさん
2005/10/20(木) 13:49:07$(CC) $(CFLAGS) -c $< # ←行頭にタブ文字を入れてくれい
0901デフォルトの名無しさん
2005/10/21(金) 03:14:340902デフォルトの名無しさん
2005/10/21(金) 03:32:200903デフォルトの名無しさん
2005/10/21(金) 05:06:58>>898
バカにしないでください
まともなmakeが何か分かっていたら使っています! …だっけ?
>>899-900
ありがとう!
教えてくれた方法でできました!
っで。ついでに色々弄っていたら、↓の方法でも動いたのですが、
この方法でも問題ないのでしょうか?
nullme.h の指定をしていないのにできてしまっているのが、なんか不安なんですけど?
============================
CC = bcc32
OBJ = game.obj move.obj rest.obj goods.obj \
time.obj shop.obj save.obj
.c.obj :
$(CC) $(CFLAGS) -c $< #
Game.exe : $(OBJ)
$(CC) $(OBJ)
============================
0905デフォルトの名無しさん
2005/10/21(金) 22:24:59インクルードファイルは勝手にインクルードされるから指定はしなくてもいい。
但し、インクルードファイルに関する依存関係が指定されていないと言うことは、
当然インクルードファイルを修正してもmakeを実行してもコンパイルはされないと言うこと。
インクルードファイルの依存関係を正しくmakefileに反映させたいなら、mkmfを使うのも手だが、
#includeをgrepでリストアップして自分で書いても大した手間じゃない。
即ち、nullme.hの例で言えばgrep -l nullme.hで見つかったソースファイルが仮にgeme.cだとすると
gem.c: nullme.h
のように依存関係をmakefileに書いておけばいい。
0906デフォルトの名無しさん
2005/10/21(金) 22:32:15ど、どこに!? …見つけられませんでした(涙
>>905
ありがとう、インクルードファイルの修正が反映されないのは、困ります!
ってか。気付かなかった私って…お間抜け?
で、今度は下のように変更してみました。
最適化オプションとかあったので、足してみたりしたんですけど、
これで平気でしょうか?
===============
CC = bcc32
HEAD = nullme.h
OBJ = game.obj move.obj rest.obj goods.obj \
time.obj shop.obj save.obj
.c.obj :
$(CC) $(CFLAGS) -c -O1 -O2 -w4 $< #
Game.exe : $(OBJ)
$(CC) $(OBJ)
$(OBJ) : $(HEAD) *.c
================
ってか。なんかスレ違いっぽいかも?
0909デフォルトの名無しさん
2005/10/22(土) 09:09:42だったかな。
0910デフォルトの名無しさん
2005/10/22(土) 16:57:070911デフォルトの名無しさん
2005/10/22(土) 19:14:400912デフォルトの名無しさん
2005/10/22(土) 19:50:44半角スペースはそれでいいだろうが、
Makefile のTABはコピペしたときに
手で修正が必要だとわかるように全角空白がいい。
0913デフォルトの名無しさん
2005/10/22(土) 21:50:49それでうっかり、コピペした後に変換し忘れました。orz
>>909
ゴメン、調べたけどよく分からなかったので、
最初に教えてもらった>>899の方法に直してしまいました。
>>907だと.c を1つでも更新すると全部コンパイルしなおすようになるようですね。
っで。定期上げです。セーブの調整と、[p]でアイテムを置けるようにしてみました。
http://himatanuki.hp.infoseek.co.jp/cgi-bin/uploader/src/up0039.lzh
今後の予定:いいかげんにシナリオも考えないと、まずそうですね。
0915デフォルトの名無しさん
2005/10/25(火) 11:09:59c++質問板逝きな
0916デフォルトの名無しさん
2005/10/25(火) 17:22:07ローグやってるみたいな感じで面白い。
移動は、一回一回Enterを押すのがめんどくさいから、
aaaaとか入力すると一度に4歩移動できるとか、
kbhit、getchを使ってEnterを省略できるようにするといいかも。
後、鋼の鎧を買って装備すると、装備できないと出るが、
あれは、敏捷が負になるとダメという事?
0917デフォルトの名無しさん
2005/10/26(水) 00:17:570918デフォルトの名無しさん
2005/10/26(水) 15:58:42だよね、ゴメン。だけど、C++は私が分かりません(涙
なので、こんどbcc32のスレで聞いてみます。orz
>>916
ありがとう! 鎧はそうです、敏捷がマイナスだと着られません。
あと、レベルとスキルが足りない物も使えないようにする予定です。
っていっても今はプログラム組むのに精一杯なので、
シナリオやゲームバランスには手が回ってません。orz
>>917
ありがとう! いいかげんに仕様書も作っておかないとマズそうですね。orz
◆を「盗賊の〜」で開けられて、●▲をツルハシで消せます。
http://himatanuki.hp.infoseek.co.jp/cgi-bin/uploader/src/up0041.lzh
今後の予定:仕様書とかシナリオとか色々ありすぎて困っています orz
0921デフォルトの名無しさん
2005/10/27(木) 00:35:290922デフォルトの名無しさん
2005/10/27(木) 01:27:11だったらここでやる必要ねーべ
0923デフォルトの名無しさん
2005/10/28(金) 00:38:10Aの敵でも強いし、1E1Gだからな・・。
でも難易度が高い方が好き。FCのドラクエ1や2みたいな。
0924デフォルトの名無しさん
2005/10/29(土) 04:20:07・開発時のノウハウをまとめて、Webサイトなどで公開する
・ものを作るよりも設計・技術に重点をおく
↑これをきちんとやればム板でも盛り上がります。
0925デフォルトの名無しさん
2005/10/29(土) 06:35:56不満があるなら君がやろうよ。
言うだけじゃクレクレ君と変わらない。
0926デフォルトの名無しさん
2005/10/29(土) 07:10:14そういう奴らへの牽制のつもりなんだろ
他の人は休止中、かな? それとも移動しちゃいましたか?
>>922 一理ある。けど、どうせだから私は1000レス行くまでは、ここにいます。
>>923 あ〜。ごめん。よく考えないで価格設定していました。
って、今はテスト中なので、激安でもよかったんですよね。
>>924 一理ある。んじゃ、とりあえず仕様書かきをがんばってみます。
っていっても。月末からまた少し消えるかも?だけど…
>>925 いや、真っ当な忠告だし不満って訳でもないんじゃないかなとか思ったり。
>>926 消えたって… もう戻ってこないのでしょうか? サミシイヨゥ… orz
0928デフォルトの名無しさん
2005/10/30(日) 19:59:01・開発時のノウハウ
ってか、ごめん。
気になっていた所をあれこれやっていたら、
仕様書を書く前に力尽きましたorz
いちおう、定期上げだけしておきます。
http://himatanuki.hp.infoseek.co.jp/cgi-bin/uploader/src/up0042.lzh
0930デフォルトの名無しさん
2005/10/31(月) 01:44:010931デフォルトの名無しさん
2005/10/31(月) 07:44:070932USB ◆usbKuc0XkQ
2005/11/02(水) 21:10:020933デフォルトの名無しさん
2005/11/02(水) 21:23:150934デフォルトの名無しさん
2005/11/02(水) 21:25:340935デフォルトの名無しさん
2005/11/04(金) 22:19:22今はデータベース勉強中でMMORPG製作目指してる
0936デフォルトの名無しさん
2005/11/08(火) 08:03:07と言いつつ、既にこのスレは要らないのかな?ともおもいはじめていたり・・・・。
0937デフォルトの名無しさん
2005/11/08(火) 15:38:000938デフォルトの名無しさん
2005/11/08(火) 15:39:250939デフォルトの名無しさん
2005/11/08(火) 15:50:51ここでうpしてから思う存分ゲ製に池
0940デフォルトの名無しさん
2005/11/08(火) 15:52:500941デフォルトの名無しさん
2005/11/08(火) 22:29:190942デフォルトの名無しさん
2005/11/08(火) 22:45:510943デフォルトの名無しさん
2005/11/09(水) 01:15:29この状況でボケるオマイさんが好きだ!!
だが、スレタイを読めば、駄目だと思うよ。でも 【メール欄】
0944デフォルトの名無しさん
2005/11/09(水) 20:30:18今はちょっと忙しいけど、少ししたら時間が出来るから挑戦したいんだけど
その頃にはこのスレ埋まってそうだしなぁ。
0945デフォルトの名無しさん
2005/11/09(水) 21:00:30スクロール方向のチップ分大きな画面と、最終的に合成された画面の
二つの裏画面が必要だよね?
ページフリッピングとかできない場合、最終的に合成された画面って
表示される画面と一緒だから、メモリ勿体無いなと思うんだけど
裏画面一つで上手くやれる方法ってないの?
0946デフォルトの名無しさん
2005/11/09(水) 23:42:53ってか、ゴメン、仕様書が書けない。というか、ゲーム内容が決まらない orz
今まではプログラムの勉強として、一般的なゲームに使いそうな部品の組み方を試行錯誤していたので、
ゲームとしての形になるような仕様を、ほとんど決めていなかったんです。(TT)
ローグ系より魔法の塔みたいのが好きだけど、パズル考えるのが苦手だからどうしようとか。
基本的な部分さえ未だ決まっていないので、もしかしたら、
今まで書いたコードを全部書き直すことになるかもしれません。orz
ってか。いいかげん標準関数以外のものも勉強しようかと、迷っています。
あと、話に出てた次スレは、私的にはゲームを完成させることを目的にしていないので、
ゲ製よりここの方が居やすいのですけど、もしも移動した方がいいのなら、
■自主製作ゲーム:開発状況報告スレVer0.4■
http://pc8.2ch.net/test/read.cgi/gamedev/1125306375/
辺りに移動しようかと思っています。
0948デフォルトの名無しさん
2005/11/10(木) 01:03:10描き変えがあるたびに描画しなおすのはどっちがいい?
0949デフォルトの名無しさん
2005/11/10(木) 23:43:360950デフォルトの名無しさん
2005/11/11(金) 15:29:59おまいさんが、普通の奴ならSDKつか、どっかから持ってきたライブラリー。
変態趣味があるなら、.net。
.netは、使えない奴も多いし、なによりもへんなバグがちらほら見つかってるから今は待ちだと思う。
0951デフォルトの名無しさん
2005/11/14(月) 16:49:200952デフォルトの名無しさん
2005/11/23(水) 19:51:55パターン順に、0, 1, 2, 1, 0, 1, 2, 1 みたいな順番で繰り返すんだけど
0, 1, 2, 1っていう風に数が繰り返す式が思いつかないんだけど、どんな式書けば良いんでしょうか?
今は仕方なく配列に入れてやってます。
0953デフォルトの名無しさん
2005/11/23(水) 19:58:34struct anime_node
{
0954953
2005/11/23(水) 20:00:490955デフォルトの名無しさん
2005/11/23(水) 20:21:34d[1]
d[2]
d[3]
d[3]=d[1]
}
それか
0 1 2
ではなくて
-1 0 1
と考える
-1 0 1 0 -1 0 1 0 -1 0 1 0 -1
(t-1) t (t+1)
と見ると
(t+1)=-(t-1)
0956デフォルトの名無しさん
2005/11/23(水) 20:23:09内部的には1==3とする4パターンのアニメーションにすれば
スマートに扱えると思う
その場合はパターンの更新は
i = ++i&3
の一行で済む
0957956
2005/11/23(水) 20:26:03こう読み替えて
i=i+1&3
0958955
2005/11/23(水) 21:05:43(t+1) = -(t-1)+2
x = -(t-2)+2
「1つ前の変数」、の名前を入れておくところをx[1]
2つ前をx[2]、現在の式に使われるものをx[0]として
int x[3] = {0, 1, 2}; //初期化必須
x[0] = -(x[2])+2
ここでx[0]の絵を表示
x[2] = x[1];
x[1] = x[0];
0959デフォルトの名無しさん
2005/11/23(水) 21:33:31もしくはsin使うとかw
0960デフォルトの名無しさん
2005/11/23(水) 21:44:33その配列で現在やってるって書いてあると思うが・・・
0961デフォルトの名無しさん
2005/11/23(水) 22:37:39char pic[4] = {'A','B','C','B'};
test = (test + 1) % 4 ;
でやるのが一番効率が良さそうですね。
あと、大まかなシナリオが決まったのでメモを置かせてください。
http://himatanuki.hp.infoseek.co.jp/cgi-bin/uploader/src/up0043.lzh
久しぶりにコードを書こうとしたら、めちゃくちゃ忘れていて落ち込んでます。んじゃ。
0963デフォルトの名無しさん
2005/11/23(水) 22:53:28なんか恐ろしく面倒なシステムだね
せめてカーソルキーで移動できないと厳しいんでない?
サイト検索して説明を捜してみたけど、複雑で私の手におえそうになかったので、
もう少し基礎的なプログラムに慣れるまで、敬遠させてください。orz
0965デフォルトの名無しさん
2005/11/27(日) 15:16:24ついでにフォースフィードバックにも対応だ。
0966デフォルトの名無しさん
2005/11/27(日) 16:32:150967デフォルトの名無しさん
2005/11/27(日) 22:09:56程よいサンプルを見つけたので参考までに。
ttp://www.geocities.jp/monalipse/c/api/Console.html
>>967の所はソースに詳しいコメントがあって分かりやすそうですね。
っていっても、やっぱり難しそうだけど……
ってか。今ほんとにデータ整理だけでも手一杯なんで、ゴメンナサイ orz
あと。中途半端だけど定期上げしておきます。* で終了します。
http://himatanuki.hp.infoseek.co.jp/cgi-bin/uploader/src/up0044.lzh
0969デフォルトの名無しさん
2005/11/28(月) 05:00:25>>967のリンクみたいに自分でコンソールとやり取りするのは大変・・・
なのでよかったらこれドゾー
//MapVirtualKey用
#include <windows.h>
//getch or getche用
#include <conio.h>
int my_getch(void)
{
unsigned char c = _getch();
if(c != 0 && c != 0xe0) return -1;
c = _getch();
return (int)::MapVirtualKey((UINT)c,1);
}
getchがスキャンコードを返してきたときだけ仮想キーコードにして返す関数でつ。
普通の'a'とか'1'なんかだと-1が返ってきまつ。ちなみに矢印キーとかの仮想キーコードはこれ。
VK_PRIOR(PageUp) -> 0x21 VK_NEXT(PageDown) -> 0x22
VK_END -> 0x23 VK_HOME -> 0x24
VK_LEFT -> 0x25 VK_UP -> 0x26
VK_RIGHT -> 0x27 VK_DOWN -> 0x28
あと、MapVirtualKeyはuser32.dllに入ってるのでuser32.libのリンクをお忘れなく。
VC使ってるならこんな感じ。他はシラネ。
cl test.cpp -link user32.lib
これならWinAPIのMapVirtualKey一つ使うだけなんでAllocConsole系よりかはまだ使いやすいかと。
0970デフォルトの名無しさん
2005/11/28(月) 05:14:490971デフォルトの名無しさん
2005/11/28(月) 06:41:230972デフォルトの名無しさん
2005/11/28(月) 15:41:24HANDLE hStdIn = GetStdHandle(STD_INPUT_HANDLE);
INPUT_RECORD ir;
DWORD len;
ReadConsoleInput(hStdIn, &ir, 1, &len,);
ir.EventType == KEY_EVENT であれば、
ir.Event.KeyEvent.wVirtualKeyCode にキーコードが入ってくる。
キー押下時のみ処理する場合は ir.Event.KeyEvent.bKeyDown をチェックする。
0973デフォルトの名無しさん
2005/11/28(月) 15:54:200974デフォルトの名無しさん
2005/11/28(月) 19:04:28なんかうまく動作しない。
画面上にいくつか数値があって、画面下にテスト・データとあって、
Enterを押すと、かみつきとか特技やアイテム名が表示されていく。
0975デフォルトの名無しさん
2005/11/28(月) 19:20:390976デフォルトの名無しさん
2005/11/28(月) 22:14:39サンクス。
memo.txtの基本動作の所にA.移動 (←)+(歩数)
みたいに書いてあるが、今後の予定みたいなのかな。
>>968 memoより
>大事なデータは勝手に変更されないように、外部宣言を避けて、
>関数を通して弄るようにした方がいいと、
いいと思う。それかmain関数に宣言するか。
アレコレ見ていて、思いついたので、こんな物を作ってみました。
http://himatanuki.hp.infoseek.co.jp/cgi-bin/uploader/src/up0045.lzh
……なんか、教えてもらったのを生かせてない気もするけど…… ゴメン
>>976
よかった。関数のコピペ改変しまくったかいがありました。w;
0978969
2005/11/29(火) 01:09:38test.cの37〜40行目の判定はキーボ−ドによってはうまくいかないかも。
スキャンコードって確かキーボード依存だったので、人によっては返ってくる値が違うことが・・・(´・ω・`)ショボーン
でも、俺のキーボードと同じ値を返してるみたいなんで意外と大丈夫なのかも。。。
0979デフォルトの名無しさん
2005/11/29(火) 20:56:16どこに立てれば良い?
0980デフォルトの名無しさん
2005/11/29(火) 20:57:260981デフォルトの名無しさん
2005/11/29(火) 22:57:54ゲ製作技術板はゲーム作成のプロが集結する板だと勘違いしたゲーハー厨が
跳梁跋扈する板なんで、下手にゲーム作成するなんて言い出すと厨房がたかる。
0982デフォルトの名無しさん
2005/11/29(火) 23:10:02あー、通りであそこ荒れてたのか
0983デフォルトの名無しさん
2005/11/30(水) 01:06:250984デフォルトの名無しさん
2005/11/30(水) 01:32:05どのスレを見てるんだ?全然そんなことないぞ。
0985デフォルトの名無しさん
2005/11/30(水) 01:49:46>>42みたいな感じでプログラムの話ばかりだし、ここでいいと思うよ。
0986デフォルトの名無しさん
2005/11/30(水) 02:14:24スレタイ:C/C++言語でRPGを作ってみるスレ3
作りたい人がきてください。
基本はプログラムの方向で。
まとめサイト
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/
C/C++言語でRPGを作ってみるスレ2 http://pc8.2ch.net/test/read.cgi/tech/1120889562/
0987デフォルトの名無しさん
2005/11/30(水) 02:51:02C/C++言語でRPGを作ってみるスレ3
http://pc8.2ch.net/test/read.cgi/tech/1133286541/
0988デフォルトの名無しさん
2005/11/30(水) 11:30:49えらい!
0989デフォルトの名無しさん
2005/11/30(水) 15:18:17今積極的に作ってるのは382さんだけかな。
がむばってほすぃわぁ。
0990デフォルトの名無しさん
2005/12/01(木) 08:45:27スレ立て乙です! ム板にいられて嬉しいですw
んでもって、この前の >>977の件ですが、>>978さんありがとう!
どうやらgetchで出てきたintの値は、国別のコードで違うっぽいです。
で、その違うのを、共通の値に直してくれるのが、MapVirtualKeyらしいです。
(実はこの辺まだよく分かってなかったりするのですが…とにかくダメっぽいです)
なので、>>969さんが教えてくれた感じに、MapVirtualKeyに直してみました!
いろいろ中途半端ですが、いちおう訂正版です。
http://himatanuki.hp.infoseek.co.jp/cgi-bin/uploader/src/up0046.lzh
MapVirtualKeyは、Input.c 内の InputArea_getch で一括判定してみました。
>>989 ありがと〜がんばるよ〜! そっちもがんってね〜!
0992デフォルトの名無しさん
2005/12/02(金) 01:23:320993デフォルトの名無しさん
2005/12/02(金) 03:57:570994デフォルトの名無しさん
2005/12/02(金) 07:46:480995デフォルトの名無しさん
2005/12/02(金) 09:22:110996デフォルトの名無しさん
2005/12/02(金) 09:43:42/ ̄\ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
─( ゚ ∀ ゚ )< ぱいそんぱいそん!
\_/ \_________
/ │ \
∩ ∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\∩ ∧ ∧ \( ゚∀゚)< ぱいそんぱいそんぱいそん!
ぱいそん〜〜〜! >( ゚∀゚ )/ | / \__________
________/ | 〈 | |
/ /\_」 / /\」  ̄ / /
0997デフォルトの名無しさん
2005/12/02(金) 15:05:510998デフォルトの名無しさん
2005/12/02(金) 15:06:200999デフォルトの名無しさん
2005/12/02(金) 15:37:181000デフォルトの名無しさん
2005/12/02(金) 15:40:2910011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。