2種類のゲームの結合

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

2種類のゲームの結合

#1

投稿記事 by makkimaki » 13年前

失礼します。

今学校の課題研究でゲームを作っています。
ノベルゲームの中に音楽ゲーム(太鼓の〇人のようなもの)を組み込んでプレイするものを作っているのですが、
2人で分担してノベルゲームパートと音楽ゲームパートを作成したのはいいものの、肝心の結合作業を考えていなかった為に手を焼いております。

自分たちの配慮不足だったことは重々承知していますが、
よろしければ、どのように対処すればよいのか教えてくださいませんでしょうか。
よろしくお願いします。

beatle
記事: 1281
登録日時: 14年前
住所: 埼玉
連絡を取る:

Re: 2種類のゲームの結合

#2

投稿記事 by beatle » 13年前

一般的な結合の方法って果たして存在するのでしょうか。
ケースバイケースで変わると思うのですけど。
2つのゲームパートの具体的な構造などを示していただかないと、答えようがないかと。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 2種類のゲームの結合

#3

投稿記事 by softya(ソフト屋) » 13年前

メインが共通化出来るのなら、タイトル→本編の切り替えと同じ用に切り替えれると思います。
これだけの情報だと、そのぐらいしか言えません。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

makkimaki

Re: 2種類のゲームの結合

#4

投稿記事 by makkimaki » 13年前

構造ですか。
ノベルゲームの方は、とあるスクリプトプレーヤーを参考にさせて頂き作成しました。
音楽ゲームは、こちらのサイトのサンプルプログラミングに掲載されている『太鼓の鉄人』を参考にさせて頂きつくったものです。
双方ともexeファイルが存在しているので、出来るだけこの状態で何とか組み合わせられないかと・・・。

これでいいのでしょうか。
何を説明すべきかが分からなくて・・・、本当に申し訳ありません。

beatle
記事: 1281
登録日時: 14年前
住所: 埼玉
連絡を取る:

Re: 2種類のゲームの結合

#5

投稿記事 by beatle » 13年前

exeになっているゲームを、そのまま結合させたいということでしょうか。
別プログラムを1つのプログラムに見せかけるのは難しいと思いますよ。
シーンが遷移するみたいに、スムーズに切り替えることはできないだろうと思います。

一旦ノベルゲームが終了して、自動で音楽ゲームが起動する、みたいにはできると思います。
または、常に2つを起動させておいて、片方が動作しているときはもう片方を中断モードにしておく、という手もあるかもしれません。

いずれにせよ、1つのゲームの中でシーンが切り替わっているような感覚にはならないと思います。

ソースコードレベルで変更して結合し、1つのexeファイルにするという選択肢は取れないのでしょうか?

makkimaki

Re: 2種類のゲームの結合

#6

投稿記事 by makkimaki » 13年前

皆様、回答してくださり本当にありがとうございます。

beatle様のおっしゃるようにソースコードの変更は考えたのですが、この研究の発表が近づいてきており時間がどうしても足りないのです。
ですのでお恥ずかしい話ですがもう荒技でいくしかないかな、と。

教えて頂いた「常に2つを起動させておいて片方が動作しているときはもう片方を中断モードにしておく」という方法を参考にさせて頂こうと思うのですが、
出来ましたら、簡単でいいのでそのやり方(?)を教えていただけませんでしょうか。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 2種類のゲームの結合

#7

投稿記事 by softya(ソフト屋) » 13年前

2つのアプリを通信させるほうが難度が高い気がするんですよ。
パイプとかWindowsAPIをある程度使わないと出来ないです。
どちらにしても見た目には2つのアプリが動いているんで、バレバレですよ。

【補足】
フルスクリーンで動いている場合には更に面倒な事をする必要がありますし、切り替えに画面がチカチカして数秒かかります。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

nil
記事: 428
登録日時: 14年前

Re: 2種類のゲームの結合

#8

投稿記事 by nil » 13年前

ソースコードの変更はそんなに手間取るようなものではないはずです。
少なくとも二つを起動しておいて片方を中断しておく、
と比べればむしろこちらのほうが簡単かもしれません。

簡単な方法について書いておきます。

まず、WinMain関数を書きます。
中身はDXライブラリの初期化とそれぞれのゲームのリソースの読み込み処理を書きます。
次に現在のモードが音ゲーか、それともノベゲーか、という情報を格納する変数を定義します(ここでは仮にstateとでもしましょう)。
メインループを書きます。
これはサンプルのままで良いです。
メインループの中に以下の処理を書きます。

コード:

while(省略){
    switch(state){
    case 0: // 0のときはノベルゲームの初期化
        ノベルゲームの初期化処理();
        state = 1;
        break;
    case 1: // 1の時はノベルゲームを実行
        ここはノベルゲーム内のメインループの中身を書くだけで良いです。
        break;
    case 2: // 2の時は音ゲーの初期化
        音ゲーの初期化処理をここに
        state = 3;
        break;
    case 3: // 3は音ゲーのメイン処理
        音ゲーのメインループをここに貼り付け
        break;
    default: // それ以外の数字ではエラー
        エラー処理をお好みで
        break;
    }
}
音ゲー<=>ノベゲーの遷移はstateの書き換えで行います。
使用しているグローバル変数の名前や定数、関数名が被っていなければこれでいけるかもしれません。
かぶっていれば適宜書き換えて動くようにしましょう。
オフトピック
これはcaseにマジックナンバーを使っている良くない例です。
makkimakiさんがどれほどの知識を有しているのかわからなかったためこのように書きました。
列挙体についてご存知ならそれを使って書くべきです。
最後に編集したユーザー nil on 2012年11月28日(水) 22:59 [ 編集 1 回目 ]

beatle
記事: 1281
登録日時: 14年前
住所: 埼玉
連絡を取る:

Re: 2種類のゲームの結合

#9

投稿記事 by beatle » 13年前

僕の考えたやり方は、softyaさんの仰るように名前付きパイプを使って、

ノベルゲームと音楽ゲームを起動する。
音楽ゲームは、初期状態で中断しているようにする。
ノベルゲームから音楽ゲームへ切り替えたいときに、ノベルゲームから音楽ゲームへ、名前付きパイプを用いてメッセージを送信する。送信後、ノベルゲームを中断させる。
音楽ゲームはメッセージを受け取ったら処理を再開する。
音楽ゲームからノベルゲームへ切り替えたいときに、音楽ゲームからノベルゲームへ、名前付きパイプを用いてメッセージを送信する。送信後、音楽ゲームを中断させる。

とまあ、こんな感じです。
当たり前ですがソースコードの変更を伴いますし、softyaさん、涼雅さんの仰るとおり、2つのゲームをソースコードレベルで結合させるよりも難しい可能性があります。
今までプロセス間通信をやったことがないなら、結構難しいでしょうね。

ノベルゲームのプレイ中のシーンによって、音楽ゲームの音楽を切り替えるとか、ノベルゲームのプレイヤーの選択肢によって、音楽ゲームの譜面の難易度を変えるとか、
2つのゲーム間に何らかの関連性がある場合、どうにかして2つのexe間で情報をやり取りする必要性があります。
名前付きパイプを使う先ほどの方法ならば、再開メッセージと同時に、どのシーンから再開するか、みたいな情報も送れば良いと思います。

# もっと良いのは、もちろん涼雅さんが紹介しているような、ソースコードレベルでの結合です。

makkimaki

Re: 2種類のゲームの結合

#10

投稿記事 by makkimaki » 13年前

とても丁寧なご説明をありがとうございます!

やはり、ソースコードの変更がよろしいのでしょうか。
教えて頂いたwindows APIを利用してみようと考えてはみたのですが、そちらの方が難しいとなるとソースコード変更すべきですね。
涼雅さんに教えて頂いた方法を参考に、何とか変更してみたいと思います。

言いわけですが、私はまだ高校在学中で学校では表面的なプログラムしか教わっていません。
・・・正直なところバレバレでもなんとか繋がっていれば、
(こういう言い方をしては悪いかもしれませんが)これが私たちの限界だと納得してもらえると思っています。
ですが、やるからには上手く稼働させたいと考えていました。まぁ、上手くできる自信は微塵もありませんでしたが・・・。

とりあえず皆さんに教えて頂いた方法を研究しながら、少しずつ頑張ってみようと思います。
この度は相談に乗っていただき本当にありがとうございました。

閉鎖

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