音ゲーの作り方

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ジュンヤ

音ゲーの作り方

#1

投稿記事 by ジュンヤ » 15年前

専門学校の卒業制作で、音ゲーを作ろうと思いまして、
太鼓の鉄人を参考にさせてもらってるのですが、
わからないところがあったので質問させてもらいます。
//弾の登録計算
void input_bullet(){
    int k;
    // stage.cntはフレームカウンター
    double sc0=stage.cnt*16.6666666666, sc1=(stage.cnt+1)*16.6666666666;
    // 弾を登録するタイミング(固定値)
    double cnt=music.term*humen[stage.humen_cnt].cnt;
    if(sc0<=cnt && cnt<sc1){
        if((k=serch_bullet())!=-1){
            enter_bullet(k,humen[stage.humen_cnt].knd-1,stage.spd);
        }
        stage.humen_cnt++;
    }
}
この関数で、music.termという変数が使われていて、
ini関数で初期値が363.5625/8と代入されているのですが、これは一体何を意味するのでしょうか?
どの様に値を設定したらいいか、教えていただければ幸いです。

色々調べてみたのですが、アクションゲームやシューティングゲームの作り方の解説なら沢山あるのに、
音ゲーの作り方の参考になるサイトや書籍ってなかなかないんですね><

Justy

Re:音ゲーの作り方

#2

投稿記事 by Justy » 15年前

>どの様に値を設定したらいいか
 多分ですけど。

 0.txtのデータは1拍を更に8個に分解してデータが作られています。

 その1個あたりのデータの時間が music.termであり 363.5625/8となるわけですが、
じゃあその363.5625がどこからきたかというと……。

 この曲のテンポは推定 165bpmです。つまり1秒あたりだと 165/60で 2.75bpsで、
1拍辺りにミリ秒で換算すると 1000ミリ秒 / 2.75bpsで1拍 363.636363ミリ秒となります。
 その1拍を8つに分解しているのですから 363.636363ミリ秒/8となるわけです。

 ちょっと細かい数値が異なりますが、その辺りは曲のデータの正確な bpmが微妙にことなるのと、
実際に動かしてみた調整の結果によるものじゃないかと思います。


>音ゲーの作り方の参考になるサイトや書籍ってなかなかない
 どうしてなんでしょうね……。

 まぁ意外と必要無いからなのかもしれませんね。
 普通にアクションゲームやシューティングゲームが作れるくらいのプログラミングスキルが
あるなら、音ゲーを作るのは難しくないですから。

めるぽん

Re:音ゲーの作り方

#3

投稿記事 by めるぽん » 15年前

音ゲーの特殊なところは、音楽との同期や、キー入力の細かさでしょうね。ちょっとでもずれるとまともに遊べなくなります。
特にキー入力は、音ゲーの得意な人は60FPSよりももっと細かいレベルで入力できるので「フレーム毎にキーが押されているかどうかを判定する」という作り方だと、そういう人には簡単なゲームになってしまうでしょうね。そこは少し工夫が必要そうな気がします。

ISLe

Re:音ゲーの作り方

#4

投稿記事 by ISLe » 15年前

> 音ゲーの作り方の参考になるサイトや書籍ってなかなかないんですね><

特許に触れて訴えられる可能性が高いというのがあるかもしれません。
メジャーな音ゲーは意匠で固められているので。

Dixq (管理人)

Re:音ゲーの作り方

#5

投稿記事 by Dixq (管理人) » 15年前

サンプルプログラミングの館に書いてあるものは、こんなのも作れますよという雰囲気を味わっていただきたくて公開しているものなので、
設計の仕方などについては参考にしないでください。
特に、あのような譜面の作り方では必ず行き詰まると思います。
もし本格的に作るならダンスマニアやBM98など有名なフリーの音ゲーのデータを参考にすべきかと思います。
(思いっきり特許を侵害しているフリーソフトの名前をここで上げるのは良くないかもしれませんが・・)

ISLeさんが仰るように音ゲーは特許に抵触する可能性が高いです。
例えばDDRやビートマニアのようなゲームシステムには特許があります。
ですから、それと同じようなゲームシステムのフリーゲームはいくつかありますが、あれらは特許を侵害しています。

後、音ゲーの作り方は需要が無いから無いのではないでしょうか?
世の中に公開されているフリーのオリジナル音ゲーがいくつあるかと思うと・・。

音ゲーはなんちゃってであれば割と簡単に出来ると思いますが、
音楽と正確に同期する処理が意外に難しいです。
また、譜面生成ツールを作らなければならないので、ゲームを2つ作るくらいの手間が必要だと思います。

まず思うように作ってみて、行き詰まりそうになったら質問するという感じで制作を続けてみてはいかがでしょう?
私も音ゲーなんて作ったことなかったですし、何も参考にした本やサイトはありませんでしたが、
以前試行錯誤で作りました。
まぁだから酷い仕様な部分があるのですが^^;

ジュンヤ

Re:音ゲーの作り方

#6

投稿記事 by ジュンヤ » 15年前

>Justyさん

丁寧に解説をしていただきまして、ありがとうございました。
1拍あたりのミリ秒をもとめてから、それを分解する数で割った数がmusic.termだったんですね。
ということは、この割る数を調整することで、
32分音譜1つ分でなく、16分音符1つ分や64分音符1つ分という風に調整できるということですね。
bpmのこともよくわかってなかったので、
ググりながらJustyさんの説明を拝見してようやく理解できました。(たぶん)


>めるぽんさん

やはり音楽との同期が問題になってきますよね。
音ゲー作るのは初めてなので、その辺りや譜面の作り方が気になるところです。

>音ゲーの特殊なところは、音楽との同期や、キー入力の細かさでしょうね。ちょっとでもずれるとまともに遊べなくなります。

作り始める前は、少しくらいのズレなら大した事ないだろうと思っても、
ミリ秒単位のズレでもすごく気になりますよね。勉強させてもらいました。


>ISLeさん

>特許に触れて訴えられる可能性が高いというのがあるかもしれません。

やはりその様な事情があったのですか。
将来的には作ったゲームを配布したりしてみたいと思うので、
その辺りも少し勉強した方がよさそうですね。


>Dixgさん

いつもお世話になってます。
わかりやすい説明やサンプルプログラムの数々、本当にありがとうございます。

>特に、あのような譜面の作り方では必ず行き詰まると思います。

やはり譜面の作り方が、問題になってきますよね。
できれば、本格的に作りたいと思っているので、ダンスマニアやBM98などのデータを参考にしてみようと思います。
ただ音ゲー作るのは初めてなので、太鼓の鉄人でも十分楽しいです。
後何曲か作ってみてから、本格的な物の制作を考えてみようと思います。

>後、音ゲーの作り方は需要が無いから無いのではないでしょうか?

たしかに手軽に使えるフリーのオリジナル音ゲー多いですよね。
ただここまでまったく参考にできる物が何もないと思いませんでした。

>また、譜面生成ツールを作らなければならないので、ゲームを2つ作るくらいの手間が必要だと思います。

やはり譜面生成ツールを作らなければ、本格的な音ゲーはできませんよね。
しかしC/C++以外の言語はあまりやったことがないし、ツールも作ったことないので、
できるか少し不安ですが・・

>まず思うように作ってみて、行き詰まりそうになったら質問するという感じで制作を続けてみてはいかがでしょう?

はい!まずは後何曲かこのまま作ってみてから、また最初から自分で設計してみようと思います。

>私も音ゲーなんて作ったことなかったですし、何も参考にした本やサイトはありませんでしたが

何も参考にしないで、そこまで作れるなんて本当にすごいと思います。
自分はそこまでできないと思うので、また質問させていただくと思いますが、
その時はよろしくお願いします。、

Dixq (管理人)

Re:音ゲーの作り方

#7

投稿記事 by Dixq (管理人) » 15年前

>しかしC/C++以外の言語はあまりやったことがないし、ツールも作ったことないので

ツールもC/C++で作ればいいのではないでしょうか?
どのような仕組みが適切かはやってみないとわからないかもしれませんが、私ならゲーム本体に作成支援ツール部分を組み込むと思います。

DDRにもprojectDIVAにもありますよね、ゲーム内に自分で好きな譜面を作れるコンテンツが。
そんな風にDXライブラリでもし今作っているなら譜面作成部もDXライブラリで作ればよいのではないでしょうか?

私は譜面作成ツールを超手抜きにしましたが・・
音楽からフーリエ変換を通して何とか譜面自動生成ツールが作れないかトライしたりもしました。
ただ結局思うようにいかずに諦めました・・。
余力があればそちらを研究しても面白いかもしれませんね。

ジュンヤ

Re:音ゲーの作り方

#8

投稿記事 by ジュンヤ » 15年前

>ツールもC/C++で作ればいいのではないでしょうか?

規模が大きいツールはC#で作るものだとばかり思ってました。
ゲーム本体にツールを組み込む方法ならC/C++でいけそうですね。
実は、DDRもprojectDIVAもやったことないので、
その様な仕組みになっていると知りませんでした。

>私ならゲーム本体に作成支援ツール部分を組み込むと思います。

ゲーム内のコンテンツで、好きな譜面を作れれば、
プレイするだけでなく、譜面を作ってくれる人も増えそうですしね。
自分もDXライブラリで作っているので、その様な感じでやってみようと思います。

>音楽からフーリエ変換を通して何とか譜面自動生成ツールが作れないかトライしたりもしました。

譜面自動作成ツールなんて見たことないですね。(自分が知らないだけかもしれませんが)
あればとても便利だし、需要がありそうな気もするんですけどね。
けどDixgさんが諦めたとなると、今の自分のレベルでできるとは・・


そういえば、DXライブラリのリファレンスを見たら、
音楽だけでなく動画の再生時間を調べたり、セットしたりする関数がありました。
それを使って、youtubeやニコニコ動画からダウンロードして、
その動画でプレイできる音ゲーなんてあったら面白そうですよね。

またMMDで作った3Dモデルを読み込んで、簡単にプログラム側でアニメーションを
再生できるようになっていたので、3Dアクションゲーム+音ゲーなんかも作れそうですね。
夢が膨らむばかりで、技術が追いつきませんが^^;

通りすがり

Re:音ゲーの作り方

#9

投稿記事 by 通りすがり » 15年前

>youtubeやニコニコ動画からダウンロードして、その動画でプレイできる音ゲーなんてあったら面白そうですよね。

既にありますよ。身近なところに。

Dixq (管理人)

Re:音ゲーの作り方

#10

投稿記事 by Dixq (管理人) » 15年前

> 規模が大きいツールはC#で作るものだとばかり思ってました。

そんなことは無いでしょう。
むしろ逆で、C/C++の方が大規模なプロジェクトに使われる可能性が非常に高いと思います。
C#は基本的にマイクロソフト用のプログラム言語ですから、C#を全く使わない企業も多いと思いますし。

ただし、windowsプログラムが作りやすいというメリットはあります。
プログラムの規模に応じて使い分けるのではなく、用途に応じて使い分けるべきでしょう。

> youtubeやニコニコ動画からダウンロードして、その動画でプレイできる音ゲーなんてあったら面白そうですよね。

上で、Aerobeatの話をされていたように思いましたが、それはAerobeatの事を仰っているのではなくて・・ですか?
もしよろしければご覧ください。以下紹介サイトと動画です。

http://dixq.net/Aerobeat/

[nico]http://www.nicovideo.jp/watch/sm8808750[/nico]

音楽データフォルダに好きな曲のフォルダを追加すれば曲選択画面に新たな項目が表示されてその曲で遊べるようになります。
音楽は動画の物を利用できるので、ニコニコやYoutubeから動画をDLしてフォルダに入れてやればすぐ遊べます。
譜面はあらかじめいくつか入っていて、無いものでも追加すれば遊べます。

Aerobeatの譜面を作って投稿して下さっているサイトがあります。
http://www26.atwiki.jp/aerobeat/pages/13.html

全部追加するのはちょっと大変ですが、この譜面を導入すれば200曲以上の曲で遊べます。
(しかしそんなに数が増えると思っていなかったのでカテゴリ機能が無い為200曲もあると曲を選ぶのが大変です(汗))

足らない動画データは動画サイトから自動で取ってくるような仕組みを作ればいいのですが、
著作権法が改定され、DLが違法となった現在この仕組みを実装するのはいかがなものかと思い、実装していません・・。
一応DL出来る方法はあるので、せっかく実装出来るのに勿体ない気はするのですが。

> MMDで作った3Dモデルを読み込んで、簡単にプログラム側でアニメーションを再生できるようになっていたので

そうですね、DXライブラリが3D対応になってから、自分のゲームにも組み込みたいと思いつつもなかなか時間が無くて実装出来ていません。
私も実装してみたいなと思っています。

閉鎖

“C言語何でも質問掲示板” へ戻る