C++でRPGゲームを作成する
■ このスレッドは過去ログ倉庫に格納されています
少し前まではHSPで作ろうと思っていたのですが、HSPでRPGゲームを作るのは難しいらしいので、C++で作ろうと思います。
C++のプログラミングは初めてですので、みんなの力が必要です。
お願いします。
あと質問ですが、C++ってMMORPGつくれますか? >>654
便乗して質問だけど、アルファ付のA4R4B4G4のテクスチャを
作ろうと思ったら、どうやって作るか知らない?
フルカラーPNGから変換すると劣化して酷いことになってしまう。 てめぇら移動だ。
RPGを作ろうぜ!
http://pc8.2ch.net/test/read.cgi/gamedev/1140839113/
| \
| ('A`) ギシギシ
/ ̄ノ( ヘヘ ̄ ̄ アンアン/
>>656
まともなツールで減色しろ。
別のピクセルフォーマットのほうがいいと思うがな。 >>658
ありがとう。
でもツールで減色→別ツールでDDSに変換という手順にすると、
減色時にアルファが失われてしまう。
一気にアルファ付フルカラーPNGから、16bitDDSに変換してくれる
ツールがないかなぁ。 >>659
別のピクセルフォーマットにはできないのか?
減色時には、アルファと RGB を別々に減色しろ。
で、アルファは赤画像にして、DDS 変換するときに合成しろ。 くだらね
今更個人でショボイ二次元RPG作って飯が食えるわけでもないし 間違いなく662はくだらねー人間だって事は分かった
このスレと飯を食う事に何の関係があるんだ? 華麗に見切ってスルー。それが誇り高き武士の末裔である我等が使命。夢々忘れる事勿れ。 >>1があまりに叩かれすぎて、正義の使者に見えて来るという錯覚。 おにぃタンが、おにぃタンがきっとなんとかしてくれる・・ おにぃタソの「ちょっと」は、どれぐらいなのでしょうか・・・。 C++で、リスト構造とクラスを使ってキュー構造が作れたぜぇー
いや、かろうじてメンバ関数やコンストラクタを使ってる程度なので
きちんとオブジェクト指向ができる人からしてみれば突っ込みどころ満載なコードなんだろうけど・・・
キューの機能やコードが一つにまとまっていて
今後はこのクラス一つで簡単にキューが作れるかと思うと意味もなくワクワクする。
オブジェクト指向が有り難がられる訳がちょっぴり判った。
あまりの感動にチラシの裏にしてしまった
ゴメン >>678
STLは、出来の良いマニュアルがなかなか見つからないんだよ 682の前ではhello world!もおちおち作れやしない 車輪の再発明が楽しいんじゃないの!
プロだったらそんな暇ないだろーけどさ むちゃくちゃ凝った Hallo World !! を作れば良いんじゃね?
それこそメガデモみたいなヤツを作れば、あるいは・・・ 車輪の再発明云々言って何もしないより、
車輪の再発明をしたほうが100倍マシ。
車輪の再発明の利点は基礎PG力を養えると同時に、
車輪の再発明という比較的少ないコストで、
次の段階に進める点だ。
決して、いきなりターボ・ファン・ジェットエンジンを発明しようとしてはいけない。
ネタにマジレス格好良すぎ>>688
極小規模の車輪の再発明ならしたほうが実装が楽な場合が多い。
OOPで全て再利用できるなんてのは妄想。鼻で笑っちゃうね。
>>691
急にこんなさびれたスレでどうしたんだ。
なんか嫌な事でもあったのか。 CでSTLのlistとdequeを作った。
ちゃんとテンプレートになってて要素の型は何でもよい奴。
CでOOは楽しい。 C++ではなくCで、って所が味噌だな
C++の方が実装は楽だから
既存のものと同じものを作るのは無駄といえば無駄だが、
手を動かす無駄は身になる無駄だからなぁ。 車輪発明しないで、いきなりグレートなモノを作れると思ってる奴なんているの? >>696
>手を動かす無駄は身になる無駄だからなぁ。
それは無駄とは言わないのでは? class player
{
private:
char name[32];
public:
int inputName( char* );
char* outputName();
// 実装は省略
};
class gameInitialization
{
public:
char* setPlayerName();
};
char* gameInitialization::setPlayerName()
{
char buff[32];
printf( "名前を入力してください" );
gets( buff );
return &buff[0];
}
// ゲーム本体での処理
p_player->input( p_gameInitialization->setPlayerName );
C++の練習としてRPGを作ってみようと思っていまして
こんな感じのコードを書いてみました。
プレーヤークラスにはゲーム本編で色々処理を組み込むことになるだろうから、
一度しか使わない初期化処理はできるだけ外に追い出したいと思い
最低限、変数名の入出力をするメソッドだけを残しました。
そして、「名前を入力してください」の表示など一度しか行わない処理は
ゲーム初期化クラスを作ってそこに入れてみました。
自分としては、ポーカーの親のようなプレーヤーを超越した存在を想定して
ゲーム初期化クラスというのを作ってみたのですが、いざ書きあがってみると
本当にこのクラスが必要だったのだろうか、別に本当に親がいる訳じゃないのだから
main関数に直接
> printf( "名前を入力してください" );
> gets( buff );
なんかを転がしても良かったんじゃないかとも思えてきました。
要するにクラス化する方がよいのかどうかですが
どう思われますか? ゲーム製作のためのクラスか、
クラスのためのゲーム製作か、それが問題だ。 >>701
個人的な意見になるけど
ゲーム全体を管理する「親クラス」と初期化クラスは別物だと思う。
親クラスはゲーム中常に実体を持つけど、初期化クラスは初期化中にしか
実体を持たないような印象がある。
ところで
> return &buff[0];
これはまずいのでは?buffは関数内でしか保持されない確保のされ方を
してるから戻り値では返せない。 はじめまして。
個人的事情により、ネットにつながっている時間がほとんどと言っていいほど無いので、
ほとんど書き込めませんが、よろしくおねがい。
さて、
私が作った発展途上のRPG・SRPG総合制作ツールをうpしました。
つ http://gamdev.org/up/img/5482.zip
これを話のネタにしたり制作に使ったり参考にしたりしてください。
あと、特徴ですが、
・RPG・SRPG・ADV等制作可能。主にRPGの制作に特化している(と思う)。
・一つのソフトでスクリプトとマップエディタとプレビューが可能(になると思う)。
・特別必要なDLL無し。必要なライブラリは Boost のみ。
Boost は、ググるか、うpしたファイル内のReadMeの中にあるURLから手に入れられる。
では。
>>704
>現在、起動時ロゴ画面・メイン画面・新規作成画面しかありません。
これでいったい何を議論しろと?
>私が作った発展途上…
>…(と思う)。
>…(になると思う)。
お察しください。 質問です。
Item クラス
┣ Kougekiクラス
┗ Kaihuku クラス
┣ Yakuso クラス
┗ Poshon クラス
こんな感じで、アイテムクラスを基底に、効能別、名前別のクラスを作り
ゲーム内では Item* 型ポインタを使ってアイテムを一括管理しようと一度計画しました。
しかし、実際に拾えるアイテム( Yakusoオブジェクト等 )をランダムに生成しようとすると
クラスの外に switch( rand()%2 ){ case 0 : item = .... のようにずらずら書くしかなくなってしまいました。
最初は、 Item クラス自体に、ランダムでアイテムの種類を決定するメソッド(というかコンストラクタ)を
持たせたかったのですが、よく考えてみると子クラスを触らせることができないので手詰まりしました。
クラスの数をもっと減らして、アイテム名や効果(回復量など)を引数で渡すことで
オブジェクトの種類を稼いだ方がいいのだろうかとか(今は1クラス1アイテムだから)、
多少トリッキーなコードを書いてでも Item クラスにランダム生成メソッドを持たせられないかとか
色々考えているのですが、
ランダムに発生するアイテムを管理するクラスについて、何か定番みたいなものはないでしょうか static Item Item::CreateItem(int id)
{
case 0:...
}
みたいにやれば? アイテムを生成するクラスを使う。
その中で、switch〜caseの羅列になっても、外部からは
隠すことが出来るので、トリッキーなコードを書くより
ずっといい。
case分の羅列でもいいけど、それよりはメソッドへのポインタでテーブルを作成しる。 でも、あっちは板が違うしな。
さらに言えば、昔はあっちの方がこっちに行くように言われてたわけだし・・・。
>>711
ねぇねぇ、それってさ何か親クラスを作ってそのポインタに子クラスの参照先を入れて行くのと同じですか?
がんばれ俺!今日明日で戦闘を作るんだ!
ここが踏ん張りどころだ!完成するぞ!完成するぞ! C++でっていうけど、ウインドウズで動作させようと思ったら
APIの勉強もいるんだよね?orz >>716 がんばれ、超がんばれ、世界がおまえを待ってるぞ! 二日っていうと五時間ずつやったとしても10時間だよね。
10時間で完成可能なことだったの? で、まずは>>720-721よ。
この板に何しに来たのか説明してもらおうか。 (^^;
完成できなかったけど、だいぶ進んだ
摂のRPGはドラクエ3みたいな単純なシステムではなかったことが敗因 やっぱ沢山RPGやったほうがいい?
FFとDQの典型しかした事無いけど >>726
どうせ最後はDQに集約されるんだから気にするな。
ただ、新しい(と思える)システムを作って『俺SUGEEE』ってやると、
後で絶対泣くことになる。ゲーム業界はすでに20年歩んでるんだからな。 >>727
流石にもう出尽くしたのかな
あんまり新しいの作ろうとすると今度はRPGでなくなるかもね・・・
最初はDQみたいなの作るよ >>728
ああ、でもWizardryをやったことがないならやっておくのがいいよ。
和製RPGの原点だから。 wizって洋ゲーじゃなかったっけ
ワードナは逆読みすると開発者の名前になるとか聞いたことあるんだが >>730
トレボーもワードナも開発者の名前をひっくり返したやつだな。
WizardryとUltimaはどちらも洋ゲーだけど、それを組み合わせたのがDQ
特に戦闘関係はWizardryから引っ張ってきてる。 摂のはアクションRPGだった(^^;
グラフィックは8方向分用意(^^;
グラフィックだけで死にそう(^^;; >>732
とりあえず、ドラクエ(の簡易版)から始めた方がよさそう。
あの系統のゲームは、マップ処理やイベントシステムなんかの基礎を
実際に作ってみるのに好都合で、プログラムの難易度も低い。
ちょっとまてw
作り始めるまで戦闘がアクションなのかDQ風なのか判別できなかったのか?www いやそれは、アクションもDQ並に単純にできると思ったいたんじゃまいか。
DQを単純といえるほどの腕があるのかは知らないが。
ARPG作ってますが
当たり判定を人型にするにはどうしたらいいですか? 厳密にやりたいならキャラクタ同士のテクセルが重なっているかどうかを一ドットずつ調べる
大雑把にやりたいなら頭、胴体、足、手それぞれの当たり判定を矩形や円で作る
もっと大雑把にやるなら胴体だけ矩形で作ればいい 1ドットずつやろうとしたら泣きたくなるほど膨大になりそうでした・・・
>頭、胴体、足、手それぞれの当たり判定を矩形や円で作る
これ参考に組みます! まあ、厳密に当たり判定とる労力を他の調整に回した方が
最終的には面白いゲームができるからなぁ。
プレイヤーは見た目が不自然じゃなければ、そこまで
厳密な部分は見ない。見るのは解析マニアが弾幕シューターだ。 アクションRPGは単純な紙芝居RPGとは違うパフォーマンス上の配慮が必要で大変ですね(^^;
冗長なことやってるとパフォーマンスガタ落ちで手抜きができません(^^;;
普通のRPGでは通っていたことが通らなくなりました(^^;;;
たぶん>>736のARPGは8頭身モナーみたいのが入り乱れるんだろうな・・・ >>716
参考にドウゾ。ただコードの構造化が糞だから気をつけたほうがいい。
ttp://www.geocities.jp/amazonium011001/page1.htm ありがとうございます・・・ってどれが参考になりますか?
forループをウェイトに使っているのには思わず吹いてしまいました(><)
アクションRPGできてきました(><)
PDAと互換性保つため自前DIB描画の拡縮やアルファブレンドなので激重です(><)
誰か下のやつ最適化してください(><)
途中で宣言なしに出現する変数は事前に計算されていて、意味は以下のようになっております。
unsigned char alpha・・・アルファ値。
float mag_x、 mag_y・・・X、Y軸の拡大幅
unsinged char* dest_buffer 、 src_buffer・・・転送先,転送元イメージのバッファ。
int dest_offset・・・転送先データのオフセット。
int src_offset・・転送元データのオフセット。
int max_x ,max_y ・・・ 書き込みする範囲の最大バイト数
int bufW、srcW・・・転送先、転送元画像の幅。
unsigned char t = 255-alpha ;
for(int i=0;i<max_w;i+=3)
{
for(int j = 0;j<max_y;j+=3)
{
base_dest = dest_offset + i + j * bufW;
base_src = src_offset + ((int)((i / 3) / mag_x) + (srcW * (int)((j/3) /mag_y )))*3 ;
dest_buffer[base_dest] = (( t * dest_buffer[base_dest] ) >> 8) + (( alpha * src_buffer[base_src] ) >> 8 );
dest_buffer[base_dest+1] = (( t *dest_buffer[base_dest+1] ) >> 8) + (( aplhal * src_buffer[base_src+1] ) >> 8 );
dest_buffer[base_dest+2] = (( t * dest_buffer[base_dest+2] ) >> 8) + (( alpha * src_buffer[base_src+2] ) >> 8 );
}
}
誤字脱字があるかもしれません(><) >>716
ループの中心で割り算などは極力控えるべき
ブレゼンハム使おう。
というかなぜ自前? ブレセンハムが応用できるなんて知りませんでした(><)
改良してみます(^^) >>744
それダウンロードしたの?俺も同じところで吹いたw
参考になりそうなのはvisiRPGとNew CUIRPGってやつだけだよ。 おいおい、初心者をミスリードするな。
visiRPGとNew CUIRPGも参考にならないだろう。
反面教師ならまだしも、作者の良識を疑う。
ドラゴンクエストノスタルジア
とか創ったら略語がDQNにw ■ このスレッドは過去ログ倉庫に格納されています