トップページgamedev
229コメント109KB

【入門書クリア前提】初心者用段階的ゲーム製作スレ

■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。2008/12/21(日) 10:01:44ID:XeH+Z5e9
入門書一冊終わったけどこれでどうやってゲーム作んだゴラー
って人のためのスレ

入門書おわた
    ↓
コンソールでゲーム製作
    ↓
DXライブラリでも使ってゲーム製作

こういう順番で段階的にやって行きたい

基本は
1.詳しい人がコンソールのゲームでお題を出す
2.初心者が作る
3.できるまで自分で調べて頑張る
4.どうしても無理ならソース晒して教えてもらう
5.完成したらソース晒して、他の製作者のものと比べてウマー

とりあえず、入門書から先に進めなくて涙目になってる人(俺含め)のためのスレです
0179名前は開発中のものです。2009/01/04(日) 17:10:00ID:vNJyTbKi
> 横槍を入れてる人はいったい何のためにこのスレをみてるのですか?
ついでに答えておこう。
ただ煽りたいだけですから^^

書かれた通りにやってここまで出来ましたが
ここからは本に書いてないので出来ません^^;
自分で考えるのも面倒です><
0180名前は開発中のものです。2009/01/04(日) 17:11:38ID:zQBmDULY
だから書かれたとおりにできなかったので別のやり方でやったらつまったということなんですが・・
0181名前は開発中のものです。2009/01/04(日) 17:11:41ID:phKiW/kW
ここは下の上ぐらいのやつが初心者を馬鹿にして自尊心を満たすスレだから気にするな
0182名前は開発中のものです。2009/01/04(日) 17:14:35ID:vNJyTbKi
自己紹介乙っす
0183名前は開発中のものです。2009/01/04(日) 17:18:38ID:vNJyTbKi
つーか、場所ってどこでもいいんですか?
なんて聞いちゃうレベルの奴はDXライブラリ使う前に
コンソールでジャンケンゲームでも作ってろよ

質問したいだけなら他のスレがあんだろw
0184名前は開発中のものです。2009/01/04(日) 18:17:54ID:f8v2HP5/
>>169
どこでもいいです。
私は「マイドキュメント」以下に保存しておくのが望ましいと思います。

画像ファイルが表示できないとのことですが、何かエラーメッセージは表示されていませんか?
画像ファイルのファイル名の指定を変更する必要があるかもしれません。
相対パスではなく、絶対パスで指定してみてはいかがでしょうか。
0185名前は開発中のものです。2009/01/04(日) 18:39:20ID:c/UGKimf
「DxLib .sln」でググったらまったく同じ質問が引っかかるんだが
ちゃんと調べて試した上で質問しているのかな?
0186名前は開発中のものです。2009/01/04(日) 21:47:04ID:y/OXv3G4
その程度自分で解決できないようじゃこの先絶対詰まると思うな
0187名前は開発中のものです。2009/01/05(月) 03:39:55ID:+gOec/oi
初心者こそ2chじゃなくて、ぐぐる方に粘着力を発揮するべきなんだけどな
ぐぐって出て来ないのが続くと不安になっちまうのかしらねw
0188名前は開発中のものです。2009/01/05(月) 18:17:32ID:bFiw377J
ゲームのループのところまで整えたけど何作ればいいかわからない
とりあえず画面に文字表示した
0189名前は開発中のものです。2009/01/05(月) 18:49:22ID:8qPbFVnr
>>188
これなんてどう?
ゲーム名:ナベアツゲーム
ルール:
マウスをクリックするたびに数字が増える
3の倍数と3のつく数字の時には右クリック、それ以外は左クリックを正解とする
不正解の時には何らかのペナルティ(方法は自由)
制限時間内にできるだけ数字を増やす
課題の目的:マウス入力や時間処理の基礎を学ぶ
0190名前は開発中のものです。2009/01/05(月) 21:44:02ID:TTfreMdG
なかなか面白そうw
0191名前は開発中のものです。2009/01/05(月) 22:28:31ID:bFiw377J
そういうのってポトペタ出来るやつで作った方が明らかに効率的だよね
何か疑問抱き始めたんだけどwww
0192名前は開発中のものです。2009/01/05(月) 22:47:23ID:TTfreMdG
ポトペタってなに?
0193名前は開発中のものです。2009/01/05(月) 23:07:11ID:07Sg+bJ8
>>191
作るのが目的じゃなくて作り方を勉強するのが目的だからな
他の言語でやったほうが効率がいいとかの議論は無意味、
というかそれ以前に言語は指定していない(>>188の環境とか知らんし)
どんな言語でも画面に文字を表示できたら次の段階は入力で表示を変えることだ
0194名前は開発中のものです。2009/01/07(水) 15:57:35ID:wOTyk9Ws
>>192
ポットペッター
色んなお店のクーポンがいっぱい付いてるやつ
0195名前は開発中のものです。2009/01/16(金) 11:49:40ID:yiTw/vGB
http://dixq.net/g/#29
↑の跳ね返りの考え方1っていうところのソースを解説できる人いる??
主に
if(flag==1){
time2 = GetNowCount() ; // 現在経過時間を得る
t = (double)(time2 - time1) / 1000.000;
v0= sqrt ( 2.000 * g * y_max); //初速度を計算
for(i=0;i<j;i++) //j回跳ね返った時の初速度
v0*=e; //eは反発係数
y = (int)((v0 * t - 0.500 * g * t * t ) * 480.000 / y_max);
if(y>=0)
DrawGraph( 320 , 480-32-y , image[8] , TRUE );
else{
DrawGraph( 320 , 480-32 , image[8] , TRUE );
time1=GetNowCount();
j++;
}
}

このあたりとか意味不明すぎ
0196名前は開発中のものです。2009/01/16(金) 13:44:50ID:eKNbfSz5
>>195
基本的には物理でよくある問題
「初速度v0, 加速度-g, の物体のt秒後の位置を求めなさい」
を地で解いてる

if ( flag==1 ){
   // 今は何秒後?
    time2 = GetNowCount();
    t = (double)(time2 - time1) / 1000.000;

   // 初速度v0 の計算
    v0= sqrt ( 2.000 * g * y_max); //(ジャンプの考え方1を参照 http://dixq.net/g/#27 )
    for ( i=0; i<j; i++ ) { v0*=e; }

   // 現在の高さy を計算
    y = (int)((v0 * t - 0.500 * g * t * t ) * 480.000 / y_max);

    if ( y>=0 ) {
      // 着地してなければ、順調に落ちる
       DrawGraph( 320 , 480-32-y , image[8] , TRUE );
    }
    else{
      // 着地したなら……
       DrawGraph( 320 , 480-32 , image[8] , TRUE );  // 画面下端にキャラクタを表示
       time1=GetNowCount();                // 時間をリセット
       j++;                            // 跳ね返った回数を1増やす
   }
}
0197名前は開発中のものです。2009/01/16(金) 15:05:07ID:yiTw/vGB
なるほど!
v0*=e;の部分に{}がなかったからそこ以下が全部forの繰り返し処理にふくまれてるのかと思ってめちゃくちゃ複雑に考え込んでた
0198名前は開発中のものです。2009/01/18(日) 12:09:23ID:CHnPFsm9
質問ですが、RPGの戦闘はif文を使っているんですか?
それだと多人数vs多人数の場合は処理を書くのがかなり大変だと思うのですが・・・
教えていただけたら幸いです。
0199名前は開発中のものです。2009/01/18(日) 14:32:01ID:nMkjmCv8
>>195
参考にするにはちょっと…なソースだな
マジックナンバーだらけ
コメントで察しろというのは乱暴で嫌いだ
0200名前は開発中のものです。2009/01/18(日) 15:22:57ID:0Ylj0E2s
>>198

ターン制の戦闘を想定する場合、
敵、プレイヤのデータをカードに書いて置いて、

「プレイヤのコマンド入力」→「敵のコマンド入力」→「攻撃順にカードを並べる」→
「カードの順番にカードに対応する各キャラクタが行動する」→「最初にもどる」

みたいな感じでどうよ。
敵が100人だろうと1000人だろうと問題ないね。

C++だと、カードっていうスーパークラスがあって、
プレイヤや敵はそのクラスを継承して、ポリモーフィズムを形成してうんたらかんたら
0201名前は開発中のものです。2009/01/18(日) 16:19:05ID:p3BsxAdP
>>198
if文を使っているか使っていないかといわれれば使っているが
当然それだけで制御しているわけじゃない
あと、人数が増えてもキャラにIDをつけてforで回せばいいので大変さは変わらない

参考(javaのRPG戦闘ソース)
ttp://www.geocities.co.jp/SiliconValley-Cupertino/9261/source/index.html
C++でもアルゴリズムは同じ
0202名前は開発中のものです。2009/01/29(木) 07:20:21ID:ETfSP+cE
http://dixq.net/g/#33
↑のs2. サウンドノベル風文字列表示法1にあるプログラムの

for(j=0;j<256;j++){
if(oldKey[j]==0 && Key[j]==1)
Key[j]=2;
oldKey[j]=Key[j];
}

って何を意味してるの?
0203名前は開発中のものです。2009/01/29(木) 10:03:40ID:xirprjZ5
>>202
キー入力状態に変化があったかどうかを調べてる。
特に、「押してない状態(0)」→「押してる状態(1)」に変化しているなら、
「今押された(2)」ってことにしてる。

てかリンク先間違ってるだろそれ。
0204名前は開発中のものです。2009/02/19(木) 00:05:49ID:YuEFv8kY
2Dのアクションゲームを作ってるんですが、斜め方向のマップの当たり判定はどうやったらいいんでしょうか
今までマップチップ単位でキャラとマップの当たり判定をやってたんですがこれだと傾斜のあるマップに対応できないです。
マップチップとは独立してドット単位で当たり判定のデータを用意するくらいしかないでしょうか
0205名前は開発中のものです。2009/02/19(木) 09:04:49ID:CC1OIocp
>>204
難しいこと考えてるなあと。
マップチップでは管理しきれないと思う。ドット単位というのも無茶な話。
キャラ(オブジェクト)単位での当たり判定になるね。

「14歳からはじめるC言語ゲームプログラミング」
http://www.rutles.net/books/217.html
この本のサンプルが、そのものずばりで解決してくれると思う。
ソース無しのサンプルゲームはDLできるので、これ見て役に立ちそうならどうぞ。
0206名前は開発中のものです。2009/06/22(月) 23:33:49ID:PR8N99oV
段階スレのまとめって今はどこなの?
0207名前は開発中のものです。2009/06/23(火) 01:02:00ID:dkvBYAOU
gamedevは新しくなってる
ttp://wiki.game-develop.com/
0208名前は開発中のものです。2009/09/08(火) 11:21:57ID:yapzJvXF
初学者にやさしいゲームってどういう順番で作るのがいい?

○1.○×ゲーム
○2.15パズル

敵が無い、思考ルーチン考えないでいいぶん2のほうが楽かな。

○3.マインスイーパー
  4.ブロック崩し
  5.倉庫番
  6.テトリス
    :
    :

○は作った。次は倉庫番かと思ってたけど、DXライブラリがバージョンアップして
描画改善に伴いマウスの反応が良くなったからブロック崩しに行こうかと。

7以降とか2.5相当とか、追加あったら応援おねがいしたい。
0209名前は開発中のものです。2009/09/08(火) 11:29:49ID:6MhMNrx0
自分が作りたいゲームで作れそうなの作れば
0210名前は開発中のものです。2009/09/09(水) 12:09:38ID:eLuVrXen
>>200
>C++だと、カードっていうスーパークラスがあって、
ここの所もうちょい詳しく
そういうクラスが標準で用意されてるのかと思ってググってみたんだけど、全然ヒットしないです
これは基底クラスを自前で作ってそこから派生させろという話?
0211名前は開発中のものです。2009/09/09(水) 14:17:10ID:vKyxO6xF
>>210
自分で作るんだよ。

たとえば「戦士は敵Aを攻撃」「魔法使いは呪文で全体攻撃」とか、行動の記録を構造体の配列なんかで持たせて
全部出揃ってから素早さ順なんかでソートする。

200のやり方はこのカードからプレイヤーや敵のクラスを継承させるみたいだけど
俺はキャラデータからカードを完全に分離させて、カードの仕事は行動解釈だけに絞るほうが好み。
0212名前は開発中のものです。2009/09/09(水) 21:51:16ID:UMpltBwW
>>211
ありがとうございます
>>200は「カードっていうスーパークラスを作って」の意味でしたか
0213名前は開発中のものです。2009/09/29(火) 05:17:35ID:kGLDkUja
C言語でちょっと数値計算できる程度の実力ですがC++でゲーム制作に挑戦することにしました。
とりあえず数当てゲーム作ったけど、数字じゃなくて文字が入力された場合の例外処理がよくわからなくて棚上げ
ひとまず次頑張ってみます
0214名前は開発中のものです。2009/09/29(火) 05:56:42ID:tenDfojw
標準関数のisdigit使えば何とかならん?
0215名前は開発中のものです。2009/09/29(火) 08:18:06ID:kGLDkUja
aとかaaaとかは抜けれるようにできましたが1aとかがまだでした
一回寝てからもう少し頑張ります
0216名前は開発中のものです。2009/09/29(火) 13:45:22ID:/Wz8dUNK
atoiの存在に今気付いた
isdigitなんか使う必要ねーじゃん
0217名前は開発中のものです。2009/09/29(火) 13:59:20ID:yWA5tZHN
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9961.zip

けっこう連続入力とか嵌るんだよな
0218名前は開発中のものです。2009/09/29(火) 16:08:36ID:ryAGnP+G
ご丁寧にありがとうございます
とても参考になりました
0219名前は開発中のものです。2009/10/12(月) 09:30:46ID:fQgZRfDp
C言語暦約一ヵ月半、winapi暦2週間の初心者ですが、練習のために>>7に挑戦してみました。
http://www1.axfc.net/uploader/Sc/so/44791.zip
ソースはあまりにもぐちゃぐちゃなので恥ずかしいので載せてません。
載せたほうがいいですか?

いちおうそれっぽいのはできたんですが、一点うまくいってないところがあって、敵の動きがうまくいきません。

敵位置を配列にしてるんですけど、for文で、敵[i]をまず消して、敵[i]の位置情報を変えて、敵[i]を再描画する、という順序なんですが、
敵[i-n]が移動した先が敵[i]の移動前の位置だとするじゃないですか。
すると、敵[i]の移動に伴って、敵[i-n]が消えちゃうんですよね。
かといって、まず全部敵を消してから位置情報を変えて、改めて全部の敵を表示するようにすると、こんどは敵が消えている時間帯が多く発生するので、画面がなんかちかちかするんですよ。

どうやって解決したらいいんだろう?

0220名前は開発中のものです。2009/10/12(月) 10:41:42ID:PNg7pEvy
>>219
後者のやりかたの発展になるけど、裏画面に画像を用意してWM_PAINTのタイミングで入れ替える。
ホワイトボードの裏側に回って絵を描いて、合図がきたら裏返すイメージ。

ダブルバッファリングとかオフスクリーン描画とかで調べるといい。
C系のWindowsでゲーム作るなら必須の知識になる。
しかし1ヵ月半でここまでできるのはすごいな。
0221名前は開発中のものです。2009/10/15(木) 06:26:55ID:5kHMShZk
>>220
ありがとうございます。
http://www1.axfc.net/uploader/Sc/so/45746
こうなりました。
どうでしょうかね?
もとがぐちゃぐちゃなので直すのに結構苦労しました。
ついでに、敵に当たっても移動できてしまうのを直しました。

0222名前は開発中のものです。2009/10/23(金) 09:54:20ID:r4hfvq6d
カソル
0223名前は開発中のものです。2009/12/07(月) 01:50:47ID:cfqCdEHC
あのさ、ActionScript3で質問なんだが、
FLASHってゲームループの概念なし?
それともEnterFrameとかタイマーイベント使ってやるのか?
イマイチピンとくる説明が検索でけんかった。
0224名前は開発中のものです。2009/12/08(火) 17:07:56ID:cuTUnnQj
空気を読まずにお題を出してみる。
下記のデータ(ソース)がある。

const int max_choice_num = 3;
/* シーン */
struct Scene {
const char* const message; /* メッセージ文 */
int choice_num; /* 選択肢の数(0= 終了, 1= 強制移動, 2> 選択) */
int next[max_choice_num]; /* 次のシーンID */
};
/* シーンデータ(添え字がID) */
const Scene scene_data[] = {
{ "よくきた、勇者よ\n", 1, 1, },
{ "魔物を退治してくれんか?\n0: 任せてください\n1: いやです\n", 2, 2, 3, },
{ "では、行ってまいれ!勇者よ!\n", 0, },
{ "そんなこと言わずに・・・\n", 1, 1, },
};
02252242009/12/08(火) 17:09:39ID:cuTUnnQj
実行すると

よくきた、勇者よ
魔物を退治してくれんか?
0: 任せてください
1: いやです
> 1 <- 入力待ち
そんなこと言わずに・・・
よくきた、勇者よ
魔物を退治してくれんか?
0: 任せてください
1: いやです
> 0 <- 入力待ち
では、行ってまいれ!勇者よ!

となるようなプログラムを書け。
0226名前は開発中のものです。2009/12/08(火) 21:47:41ID:dR/37Ta8
プログラムつうより普通スクリプトでやる処理だわな
02272242009/12/08(火) 23:54:51ID:LCrDR7+W
>226
これができたら、データを外部ファイルに出して処理してみるとか
ステップアップしていくと勉強になるかなと思ったんだけどね。

少しがんばればコンソールで簡単なテキストADVが作れるってのが
分かればモチベーションも上がるかなと思ったんだ…

つか過疎ってるから模範解答を出すタイミングが難しいな。
02282242009/12/12(土) 16:11:25ID:W7i0pvEF
模範解答。エラー処理とか一切してません。

int main() {
const Scene* active = NULL;
const Scene* next = &scene_data[0];
do {
active = next;
printf("%s", active->message);
if(active->choice_num == 1) {
next = &scene_data[active->next[0]];
}
else if(active->choice_num >= 2) {
int index;
printf("> ");
scanf("%d", &index);
next = &scene_data[active->next[index]];
}
} while(active->choice_num != 0);
return 0;
}
0229名前は開発中のものです。2010/05/27(木) 17:19:08ID:cXVnDiqT
保守age
■ このスレッドは過去ログ倉庫に格納されています