• ベストアンサー

ノベルゲームを作成中なのですが、

コンパイラはVisual C++で、ライブラリ→DXライブラリを使っています。 まさか、処理は一々 このとき文字列出して、キー待ち、画像フェードインして、キー待ち、文字列出して、キー待ち、背景フェードバックして、キー待ち、文字列出して、キー待ち、文字列出して、キー待ち、選択させて.... というのを全てソースに書くんじゃないですよね? 実際にはどうなっているんでしょうか。 ついでですが、ツールを使った参考サイトが多く、中々参考サイトが見つかりませんのでお奨めの参考サイト等あれば紹介していただけると幸いです。

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

  • ベストアンサー
  • zwi
  • ベストアンサー率56% (730/1282)
回答No.4

経験者として言うなら、シナリオの制御とWindowsの制御のC++の部分は分離したほうが作りやすいです。 まず、簡単なスクリプト言語を作成します。 別にCSV形式でも良くて、 コマンド,[テキストとかラベルとか画像ファイル名とか] コマンドで動作を記述します。テキストを画面に出すとか、ここで入力待ちとか、条件フラグを知らべて分岐とか、指定された画像を表示とか。 で、C++ではこのコマンドに基づいた動作を制御するプログラムを記述します。 rinmaneさんの言われるとおり、Windows周りの制御はC++とDirectXで記述するしか無いですね。 >やはりC++はゲームのようなものには向いていないのですか・・・ >クラスを扱ったことがないのですが、自分なりに頑張ってます! C++のクラスは、ゲームを作るのに向いていると思いますよ。

interface3
質問者

お礼

スクリプト言語ですか。 丁度Perlの本を持っているので勉強してみたいと思います! ご回答有難う御座いました。

その他の回答 (6)

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.7

回答No.4とNo.6のzwiですが。 とりあえず落ち着いてください。 何でも言葉の表面で受け取らないで、じっくり考えたり調べたりしてから返事してもらって良いですから。 >スクリプト言語ですか。 >丁度Perlの本を持っているので勉強してみたいと思います! いや、スクリプト言語と言っても言語仕様を自分で決めて自分でエンジンを作るスクリプト言語なので、Perlを勉強しても意味はありませんよ。Perlの仕様に似せようとしたならスクリプトの作成難易度が高くなりますし。 それこそ、下記サイトの様な高度な世界に。 http://kmaebashi.com/programmer/devlang/index.html こんなスクリプトまでは必要ないと思うんで簡易型で良いんでよ。No.6で紹介したスクリプトプレーヤー程度で十分です。rinmaneさんが紹介しているExcelを使うのは入力ツールとして便利だからです。別にテキストでも問題は有りませんよ。

interface3
質問者

お礼

はい、落ち着きました。 何しろOKWaveを利用するのは始めてだった為何故か焦っていました。 プログラミング言語...サイトを拝見してきました。 折角ですし、これにも挑戦してみたいと思います。 態々何度もご回答有難う御座いました。

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.6

DXライブラリのサンプルの中にシナリオのスクリプトエンジンのサンプルがありますよ。 http://homepage2.nifty.com/natupaji/DxLib/dxsample.html 「スクリプトプレーヤー」ってのがそれです。ソースコードが含まれてますので参考になると思いますよ。 まったくC++のクラス化されていないのでC言語記述ですが。

  • rinmane
  • ベストアンサー率56% (64/113)
回答No.5

No.3です。 他の方のご回答を拝見していて、 ご質問を勘違いしていたことに気付きました(汗 キーイベントや文字列表示等はもちろん1カ所書くだけですよ。 他の方も書かれている通りに、まずはデータをどう持たせるか… その部分の設計からです。 私の場合なら… 1.エクセルで画面ページ単位のテキストを作る。 この時にキーワード(用語説明画面に飛びたいワード等)は 太字等にしておきます。 2.1を元にExcel VBAでキーワードを独自のタグで囲み、 テキストを出力。 3.上記のテキストをVC++で必要に応じて随時読み込む。 というような感じです。 テキストをバイナリにしたり、暗号化したり… というのは必要に応じてご自由に。 こうしておけば、 キーイベント処理、読み込み処理、表示処理、フェード処理、等々… 1つの関数で済みますよ。 No.4の方が仰る通り、 ある程度複雑なことをしたい場合はC++のが断然良い… というか、それ以外の選択肢はほぼないと思います。 まあ、Flash等でもできますが^^; 以上、少しでもご参考になりましたら幸いです。

interface3
質問者

お礼

やはり一つの関数ですむものでしたか! ではデータの設計の方から頑張りたいと思います(正直Excelは苦手ですw ご回答有難う御座いました。

  • rinmane
  • ベストアンサー率56% (64/113)
回答No.3

VC++ & DirectXで商用ゲームを何本か開発したことがあるプログラマです。 実際そのまさかですよ(笑) 全て手作業で、ユーザのあらゆる動作を想定してコーディングします。 ウィンドウモード、フルスクリーンモード両方とか、 ユーザが最小化してから、元に戻した場合だとか…全てです(笑) だからゲーム開発には金と時間がかかるんですよ。 徹夜当たり前の業界だというのがお解り頂けたでしょうか(笑) ちょっとだけ余談で愚痴(?)を書きます。 しかもゲーム会社の場合だとディレクター等が企画したものを 実現させていきます。 「それはないでしょ」ってな仕様も力関係によっては、 実現させなきゃいけません。 こういう実情を知らないユーザが 「クソゲー」だの「プログラマが悪い」だの言うのを聞くと ちょっとだけイラッとします(笑) まあ、そんな実情知らなくて当然なんだから仕方ないんですけどね(笑) 参考にするのはDirectX関連の書籍ですね。(高いですが) 膨大なソースになるので、参考になるサイトは無いと思います。 もちろん、処理の一部ならあると思いますが。 簡単なノベルゲームなら1人月といったところでしょうか。 ある程度、自作のライブラリを作られているなら もっと早いと思います。 ノベルゲームならデバッグ期間もそんなにかからないと思います。 以上、少しでもご参考になりましたら幸いです。

回答No.2

ノベルゲームを作成したことはないのであくまで推測ですが、 システムとデータは分離するのが一般的だと思われます。 すなわち、シーンごとの文字列と呼び出す画像番号、次のシーン番号などをデータとして置いておく。 システム側ではシーン番号に応じて、 ・対応する画像を読み込みフェードイン表示させる ・文字列を読み込み表示する(必要なら1文字ずつ) ・キー入力を待つ(このときに特殊なキーが押されたら保存等のルーチンへ飛ぶ) ・次のシーン番号を読み込み、次の処理へ回す などの機能を実装するのでは。

interface3
質問者

お礼

システムとデータは分離するものなのですか! 危うく一緒にするところでした。 ご回答有難う御座いました。

  • mizutaki
  • ベストアンサー率33% (111/333)
回答No.1

ノベルゲームを作るというのが目的なのでしたら、やっぱりNScripterみたいな、そういうゲームを作るためのスクリプトを使った方が良いですよ。 C++は関数とかもかなり細かいレベルで扱う事が出来るから、単調なソースを書こうとしたら、無駄に長くなってしまう。 それでもC++で作るのでしたら、基本的なパターンの処理をすべてクラスとして作っておいて、外部のデータファイルを読み込み、クラスで解析をして、ゲームとして動かす、とか。 そんでもって、実際にノベルゲームの内容そのものは テキストファイルに書いたりするとか、データファイルを作成するための簡単なプログラムでも作っておくとか、 そんなところじゃないですかねぇ

interface3
質問者

お礼

やはりC++はゲームのようなものには向いていないのですか・・・ クラスを扱ったことがないのですが、自分なりに頑張ってます! ご回答有難う御座いました。

関連するQ&A

  • 同人ゲームのスタート画面作成について

    閲覧ありがとうございます。_ 私は、今、DXライブラリとMicrosoft Visual C++ でゲームをつくっているんですが、スタート画面の アイコンや選択の作成方法がわかりません。 あれです。ゲーム起動したら出てくるNEWGAMEとかLOADGAMEみたいな。 背景は,intDrawGraphで出せばいいんですが、アイコンとか、それを選択する スクリプトはどうすればいいかわかりません....。(-_-;) だれか、スタート画面のスクリプトを貼っていただけないでしょうか? お願いします。

  • 縦スクロールのゲームの参考本

    DXライブラリとCを使ってシューティングゲームを作成したいと思っています。 14歳から始めるC言語ゲームプログラミングでDXライブラリと横スクロールゲームについて勉強し http://l.huu.cc/s/ このサイトで縦スクロールのゲームを作成しています。今このサイトはしばらく更新していないようなのですが・・・敵と自弾までの判定はできたものの、敵と自機、敵の弾と自機との判定ができず現在勉強中です・・・。 現在東方のような縦スクロールシューティングゲームをDXライブラリとC言語を作成しようと思っているのですがそのようなゲームの参考本はないでしょうか? 理想としてはサンプルゲームプログラムがあり、プレイヤーの移動→弾の発射→・・・といった具合に作成していく参考書が望ましいです。 開発環境は C言語 DXライブラリ ビジュアルスタジオ2003.net です。よろしくお願いします。

  • 現在C言語を勉強しています、以前はHSPでゲームをいくつか作りました。

    現在C言語を勉強しています、以前はHSPでゲームをいくつか作りました。 最近DXライブラリの存在を知ったのですがC言語の知識だけ使えるという事で興味がわきリファレンスページを見て簡単な物を作りましたが気になる事ができました。 今までは「printf」で文字を表示していたのですがDXライブラリだと「DrawString」で文字が表示できます。 今C言語で学んでいる事で「ライブラリ関数」で「rand」がありますがDXライブラリでも同じような「GetRand」があります。 条件やループなどは結構使用していますがそれ以外はC言語のサイトで学ぶのは無意味でしょうか?、DXライブラリを使用するのに「この部分を学べば(知っていれば)大丈夫」というのはあるのでしょうか?。

  • dllの作成方法について

    現在 http://www.kumei.ne.jp/c_lang/sdk2/sdk_119.htm のサイトを参考に、 dllの作り方について勉強しています。 dll01.cpp, dll01.hまでを書いて、コンパイルしようとしたのですが、 c:\users\kei\documents\visual studio 2005\projects\dll01\dll01.h(5) : error C2059: 構文エラー : '文字列' c:\users\kei\documents\visual studio 2005\projects\dll01\dll01.cpp(11) : error C2059: 構文エラー : '文字列' とでてきてコンパイルできません。 解決方法が全く分からず困っています。 どなたかご教授願います。 <環境>   Windows Vista Home Premium Visual C++ 2005 Express Edition

  • 背景色、文字色の変更

    IEでサイトを見るとき、背景色と文字の色を変えたいのですが。ツール→インターネットオプション→全般タブの「色」で、背景色と文字列の色を設定しても、変わりません。どこか別のところでブロックされている感じですが、どうすれば変えることができるでしょうか。

  • フェードインかフェードアウトどちらかしかできません><

    はじめまして。 FLASH勉強中の初心者なんですがカンタンなFLASHムービーを作ろうと思っています。 そこでモーショントゥィーンで作成しているのですが、タイトルあるとおり、ステージに読み込んだ画像をフェードインかフェードアウトどちらかしかできません・・・ できれば一つの画像がフェードインしてフェードアウトするようなムービーをつなぎ合わせて一つの作品を作りたいのですが、どうすればいいのでしょうか? 参考書を読んでもわからずコチラで質問させていただきました。 併せてこのようなことを説明されているサイトなどご存じでしたらどうか教えていただけないでしょうか?

  • 下から上へ流れる文字

    現在HPを作成しているのですが、フラッシュなどを使わずにある特定の文字列を画面の下から上にフェードインしながら動かすことはできるのでしょうか? やはりフラッシュを使ったほうがいいのでしょうか?

  • C言語のコンパイラ

    C言語の勉強がしたいと思っているのですが、コンパイラっていうんですかね、それについて少し調べてみたら 無料なら"Borland C++ Compiler"で、有料ならなんかかなり高いっぽいけど"Visual C++"っていうのがあることが解りました。 よくプログラミング系のサイトの人で"Borland C++"のコンパイラを利用してとてもプログラミングがしやすくなったということが書いてあるのですが、"Visual C++"と比べたらどっちの方がいいんですか?(やっぱり有料の方?) もし人それぞれなら、みなさんは両方あったらどっちを使いますか? 初心者なら無料ので十分すぎるのだとは思いますが、プログラマーみたいな人から見るとどうなのかな~と思ったので教えていただけますか。 お願いします。 ついでに"Visual C++"って言語があるんですかね?何かそんな風に書いてあるところもあったもんで。 かさねがさねお願いします。

  • アルファをかけた外部画像の読み込みについて

    初心者ですが、flash8にてフルフラッシュのサイトを作っています。 base.swfというファイルに、各ページへ遷移するボタンを配置し、それをクリックするとbase.swfに配置したムービークリップ(back_image)に他のswfが読み込まれるようになっています。なお、base.swfをひらくとtop.swf(トップページ)が自動的に読み込まれるようにしてあります。 top.swfに外部画像を読み込み、アルファをかけてフェードイン→フェードアウトするように表示させているのですが、フェードイン→フェードアウトの途中でtopページ以外のボタンを押すと、強制的にback_imgにtop.swfが何度も読み込まれて、その後の操作が何もできなくなってしまいます。 フェードイン→フェードアウトが終わった後なら何も問題はありません。 アルファをかけたフェードインについてはこちらのページhttp://okwave.jp/qa1915003.htmlを参考にさせていただきました。ここに書かれている両方のやり方を試してみたのですが、結果は同じでした。 自分なりにスクリプトを変えた部分もあるので、それが間違っているのでしょうか。 それともタイミング的に無理なものなのでしょうか。 top.swfのスクリプトを記載しておきます。 ●2フレーム目に back_image.loadMovie( "img1.jpg" ); this.stop(); ●back_imageに(もともとback_imageのアルファは1%にしてあります。) onClipEvent (data) { total = this.getBytesTotal(); loaded = this.getBytesLoaded(); //読み込み完了後、フェードイン開始 if (loaded>=total) { //フェードスピードを設定 this.fed_spd = 2; //フェード処理を定義 this.onEnterFrame = function() { //フェードの処理 this._alpha += fed_spd; //アルファが100%になったらフェードアウト if (this._alpha>100 || this._alpha<0) { fed_spd = -fed_spd; } //アルファが0%になったら終了 else if (this._alpha <= 0) { this._alpha = 0; delete this.onEnterFrame; //top.swfのメインのタイムラインを動かす _parent.play(); } }; } } 仮に、一度トップページを見た人はそれ以降はスルーしてしまうと思うので、このままだとサイトとして成り立たなくなってしまいます。 どうしたらよいか悩んでいます。 わかりにくい質問で申し訳ありませんが、お力を貸していただけますでしょうか。 よろしくお願いします。

    • ベストアンサー
    • Flash
  • 動的な変数名のつけ方について

    ■環境 OS:XP 言語:C++ コンパイラ:Visual C++ 2008 char*やstd::string等で格納された文字列を使用して 変数を宣言することは可能でしょうか。 用途として、テキストファイル等から文字列を取得し その文字列を変数名としてプログラミング内で使用するという方法を考えています。 よろしくお願い致します。