RPG等の会話をスムーズにするためにはどうすればよいか。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
nito
記事: 3
登録日時: 3年前

RPG等の会話をスムーズにするためにはどうすればよいか。

#1

投稿記事 by nito » 3年前

質問内容
主人公がとある地点でキーボードのAkeyを取得した時に、会話が始まるようなプログラムが組みたいのですが、
今の状態ですと、Akey1回で会話をスムーズに行うことが出来ません。
また、そのせいで会話が終了した直後に再度会話を取得してしまうことがあります。
Akey1回毎に、会話を次へと表示させて、一旦終了させ再びAkeyを押した時に会話をさせるにはどうすればよいでしょうか。

その他に、会話のテキストを1文字ずつ時間をあけて表示させる場合のプログラム、または関数について教えて下さると助かります。

VisualStudio 2013
DXライブラリ
を使用しております。

コード:

		if (CheckHitKey(KEY_INPUT_A) == 1 && control[4] == 1){
				brack = GetColor(0, 0, 0);//黒色
				red = GetColor(255, 0, 0);//黒色
				white = GetColor(255, 255, 255);//白色
				DrawBox(50, 330, 320, 444, white, TRUE);
				DrawFormatString(62, 350, brack, "今あなたは元気ですか?");
				ScreenFlip();
				WaitTimer(100);
				WaitKey();
				control[4] = 2;
			}
			if (control[4] == 2){
				DrawBox(50, 330, 320, 444, white, TRUE);
				while (a == 0){
					if (CheckHitKey(KEY_INPUT_UP) == 1)
						b = 0;
					if (CheckHitKey(KEY_INPUT_DOWN) == 1)
						b = 1;
					if (b == 0){
						DrawFormatString(62, 350, red, "はい");
						DrawFormatString(62, 382, brack, "いいえ");
						ScreenFlip();
						WaitTimer(75);
						if (CheckHitKey(KEY_INPUT_A) == 1)
							a = 1;
					}
					if (b == 1){
						DrawFormatString(62, 350, brack, "はい");
						DrawFormatString(62, 382, red, "いいえ");
						ScreenFlip();
						WaitTimer(75);
						if (CheckHitKey(KEY_INPUT_A) == 1)
							a = 2;
					}
					WaitTimer(200);
				}
				while (a != 0){
					DrawBox(50, 330, 320, 444, white, TRUE);
					if (a == 1){
						DrawFormatString(62, 350, brack, "そうですか!");
						DrawFormatString(62, 370, brack, "それはよかったです!");
						ScreenFlip();
						WaitTimer(100);
						if (CheckHitKey(KEY_INPUT_A) == 1)
							a = 0;
					}
					if (a == 2)
					{
						DrawFormatString(62, 350, brack, "元気ないのですか・・・。");
						DrawFormatString(62, 370, brack, "体調には気を付けてくださいね。");
						ScreenFlip();
						WaitTimer(100);
						if (CheckHitKey(KEY_INPUT_A) == 1)
							a = 0;
					}
				}

Aozora0630
記事: 85
登録日時: 4年前
住所: 日本
連絡を取る:

Re: RPG等の会話をスムーズにするためにはどうすればよいか。

#2

投稿記事 by Aozora0630 » 3年前

まず、関数やクラス、オブジェクト指向のことを勉強してからゲームを作った方がいいです。

BASICでもやっているのですか?と聞きたくなるようなコードです。
(いや、BASICにも関数機能あった気がする)

私のおすすめはここです。
まずはここでCの基本を学んでください。
どうやらVisualの様ですがプレーンなCを学べばほとんどの言語で役に立ちます。

そして、コンソールアプリケーション作りになれてからDxLibやらWin32APIを使ってください。

いいコードの規則
1, 同じコードを二度書かない。
(貴方のコードは同じ事を何回も何回もコピペして作った感満載です。この様な作り方をするとメンテナンスが大変になります。)
2, 英語はスペルを正しくかく。
(ブラックのスペルはBrackでは無くBlackです。変数名などの英語は正しく書いた方がいいです。)
他にもいっぱいありますが、貴方のソースで目立ったのはこの2つです。
オフトピック
まあ、私も言えたもんじゃないですけどねw
Podcastゆっくりボイス使用)
サイト

アバター
Tatu
記事: 440
登録日時: 8年前
住所: 北海道

Re: RPG等の会話をスムーズにするためにはどうすればよいか。

#3

投稿記事 by Tatu » 3年前

一度、このサイトのゲームプログラミングの館など
ゲームプログラミングについて解説しているWebサイトや書籍をいくつか見ることをおすすめします。

会話の制御については
DXライブラリ置場( http://homepage2.nifty.com/natupaji/DxLib/ )の
DXライブラリサンプルプログラムのページにあるサウンドノベル風文字列描画が参考になるかもしれません。

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

Re: RPG等の会話をスムーズにするためにはどうすればよいか。

#4

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

キーボードの押下状態を把握するためには、キーの押下直後、押下中、未押下の3つの状態を管理しなくてはいけません。
メッセージを次に送るのは押下直後だけです。

そういう仕組は、ここの「ゲームプログラミングの館」などで紹介されていますので、よく読んで・実行や改造して理解される良いと思います。
「ゲームプログラミングの館」を読めば、プログラム構造的にもまずい所がわかると思いますので、わからないことは質問してくださいね。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Aozora0630
記事: 85
登録日時: 4年前
住所: 日本
連絡を取る:

Re: RPG等の会話をスムーズにするためにはどうすればよいか。

#5

投稿記事 by Aozora0630 » 3年前

な、なんか皆このサイトを勧めるなぁ・・・。

確かに、ゲームプログラミングから始めるのならこのサイトの「ゲームプログラミングの館」がいいかもしれませんね。
Podcastゆっくりボイス使用)
サイト

nito
記事: 3
登録日時: 3年前

Re: RPG等の会話をスムーズにするためにはどうすればよいか。

#6

投稿記事 by nito » 3年前

もうすこし具体的なことについてお願いしたいです。
DXライブラリサンプルプログラムのページにあるサウンドノベル風文字列描画は、実行済みです。
関数機能は、後にリファクタリングしてから行いたいです。
作成自体初心者のため分かりやすい感じでお願いします。
ヒントとなるページ参考のプログラムについて教えて頂けたらと思います。

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

Re: RPG等の会話をスムーズにするためにはどうすればよいか。

#7

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

ゲームプログラミングの館(http://dixq.net/g/)を理解してほしいと書いたのは、

コード:

                ScreenFlip();
                WaitTimer(100);
                WaitKey();
これがプログラム構造的に非常にまずいからで、現状の行数程度が作成の限界です。
関数を使わずに書けないことはないけど、めちゃくちゃ面倒でバグが出たら絶対直したくないプログラムコードが出来上がります。
効率アップやらバグを避けるために関数は使うんですから。
あとでリファクタリングと書かれていますが、今から対応してないと根本的な作り直しに成ります。
なので、「ゲームプログラミングの館」のキー処理やメニューやプログラム構造などを学んだ上で作って欲しいのです。
一文字つづの表示となると更に知識が必要です。

・DXライブラリ入門編 
・DXライブラリの関数の使い方(基本)
・補足資料  h.11 書いてはいけない4つの処理
・ゲームプログラミング設計 
・メニュー画面の作り方

あたりは、理解して欲しい項目ですね。

【補足】
実のところRPG・ノベル的な処理は超初心者向きとは言えないのです。
会話もメニューも応用面の知識が必要で、避けて通れません。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

nito
記事: 3
登録日時: 3年前

Re: RPG等の会話をスムーズにするためにはどうすればよいか。

#8

投稿記事 by nito » 3年前

分かりました。
サイトの方を少し試してみて、再度分からないことがあれば、のち質問しに参ります。
構造上の問題点や理解すべき項目等のご指摘ありがとうございます。

閉鎖

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