こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

音楽ゲームのソースプログラムが見つかりません。

学校の授業で音楽ゲームをC言語で作ろうと考たのですが、音楽ゲームといってもピンとこないですよね・・・どのようなゲームというと・・・音楽がかかり、判定バーに向けて落ちてくる物体を判定バーと重なった時に指定されたキーボードで打って得点を稼ぐというゲームです。
私の学校はゲーム専門の学校ではないので1からプログラムを組むのは難しいと思い、インターネット上で公開されているサンプルソースを少しずつ変えて作ろうと考えたのですが・・ソースプログラムを探しても全然見つかりません!
どなたかC言語で作られた音楽ゲームでソースプログラムが見られるサイトを教えていただきませんか?お願いします。

投稿日時 - 2008-06-05 10:32:38

QNo.4076702

困ってます

質問者が選んだベストアンサー

以前まさにそういうゲームを作ったことがあります。
ちょうどその時に使ったライブラリが1番の方が回答したDXライブラリで
す。

現在はDXライブラリ3Dで3Dのビーマニのようなものを作成していますが、
基本は2Dも3Dも同じですのでとりあえずその仕組みを話します。

仕組みが分かれば人のソースを読むより自分で考えた方がはるかに速いです。

まず
鍵盤のx, y座標および発生フラグをあらわす変数を配列などで数十個ほど用意しておきます。
この際構造体にして配列で扱うとより楽かもしれません。

typedef struct {
  int x, y;   //x,y座標
  int isEnable; //発生フラグ
} Object_t;
Object_t ob[ 100 ];

簡単な流れ:
1 背景の画像を描画
2 物体を周期的に各ラインごとにランダムに発生させる
(発生させる時は発生フラグをTRUEにして、y座標を0に戻します)
3 発生フラグが『有効な物体のみ』描画し、y座標を下に下げる
(これにより流れる物体が実現します)
4 一番下まで流れたら物体の発生フラグをFALSEに
(コレにより一番下まで流れた物体は描画されなくなります)

後はキー入力による判定です。
キー入力では複数のキーを同時に判定する必要があります。
DXライブラリではGetHitKeyStateAllがあるのでそれを使うのが一番楽でしょう。

各ラインごとに設定してあるキーが押されたらその押された瞬間から物体が近くに存在すれば
それがどの程度離れているかでGreat, Good, Bad, Too Badなどのランクを決めます。
また、この際にはDXライブラリではGetNowCountなどの時間関数を使ってタイミングを合わせる必要があるでしょう。

見栄えやエフェクトは後からいくらでも質を上げられるので、とりあえずこの点を
抑えておけば大丈夫です。
尚、音楽にあわせて物体が流れる・・というのがやりたければ、ランダムに
物体を発生させるのではなく、音楽にあわせたデータを作る必要があります。
指定のタイミングで指定のラインに発生!とかです。
データはテキストファイルで読み込ませるのが良いでしょう。仮に作るのであれば

Data.txt---------------------------------------------------
100 //全体の流れるスピード
100,2 //ゲーム開始から110ミリ秒後に2番のラインに物体発生
110,3,4 //110ミリ秒後に3,4番の位置に物体発生
300,4 //300ミリ秒後に4番の位置に発生

という感じでやるのが楽かなと思います。もちろん読み込み部分を自作するのは
面倒なので、まずはランダムな発生から挑戦されるのが良いかと思います。

以上ざっと説明しましたが、個人的には作れば分かるの一言に尽きると思います。
何はともあれ作り出すと見えてくるものが全然変わるのでとりあえず作り始めてはどうでしょうか?

投稿日時 - 2008-06-06 20:11:07

お礼

ありがとうございます。
参考にさせていただきます!

投稿日時 - 2008-06-09 11:15:49

このQ&Aは役に立ちましたか?

3人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

こんにちは。

 一から全部プログラムを組むのは結構大変な作業です。下記のようなライブラリ(関数の集合)を使ったらどうでしょう。
  http://homepage2.nifty.com/natupaji/DxLib/
  下のほうにある、DXライブラリサンプルプログラムにはソースが出ています。「10.落ちものゲーム基本」あたりが参考になると思います。

では。

投稿日時 - 2008-06-05 10:48:51

お礼

ご回答ありがとうございます
是非参考にさせていただきます。

投稿日時 - 2008-06-06 10:21:38

あなたにオススメの質問