RPGの会話の処理

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

RPGの会話の処理

#1

投稿記事 by codex » 11年前

RPG等でNPCと会話する処理をしたいのですが、どうすればいいのでしょうか?どなたかわかり易く教えていただけ無いでしょうか

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

Re: RPGの会話の処理

#2

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

ここのフォーラムルールにあるテンプレート使っていただくと良いかと思います。  http://dixq.net/board/board.html フォーラムルールもよくお読みください。
今回の質問の場合、ソースコードは不要ですがC言語やプログラミングの理解度、ゲームシステムの理解度の情報がないと答えられないのでお願いします。

こちらの完成しているレベルも教えて下さい。DQ風でもほぼ同じです。
「プログラミング/初心者向け/チュートリアル/段階的学習/FF風RPGを作れ - game-develop.com wiki」
http://wiki.game-develop.com/index.php? ... A%EE%A4%EC
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

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

Re: RPGの会話の処理

#3

投稿記事 by nil » 11年前

状態を保存する変数を作り、その値によって散策中、会話中、戦闘中、などの状態に遷移させます。
散策中はメッセージの表示はなく、キャラクタは自由に歩ける。
会話中はキャラクタは動けない、メッセージを表示。
戦闘中はマップを表示せず、戦闘グラフィックを表示。

などというふうにすればいいのでは?

codex

Re: RPGの会話の処理

#4

投稿記事 by codex » 11年前

すいませんでした、以後気をつけます。
c言語の知識については恥ずかしながら関数、ポインタなどなんとなく分かる程度です。
ゲームも完全初心者です、下記に紹介していただいたページでできることはグラフィックを表示する、効果音&BGMを鳴らす、位です。

codex

Re: RPGの会話の処理

#5

投稿記事 by codex » 11年前

涼雅さん、状態を保存する変数とはフラグのようなものでしょうか、もしそうならそれを沢山作ればできるのでしょうか。

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

Re: RPGの会話の処理

#6

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

それだと、一つ一つ実現していった方が良いと思います。
自キャラを表示、自キャラを歩かせる、簡単なマップを表示、マップをスクロール、マップエディタ(フリーソフトもあります)を使ったマップを表示、マップ上にNPCを表示、NPCを歩かせるなど段階を踏んでいく形になります。
NPCとの会話には、会話用のウィンドウ、会話文字の表示制御、NPCとシナリオを結びつける処理(俗にいうイベント)、シナリオ処理などが必要です。これだけもかなりのプログラミングとしての物量を伴います。

手前味噌ですが私の書いたRPG講座も参考にして下さい。
RPG自体が作るプログラムの規模の大きさから初心者向けじゃないので、初心者にはかなり難しい内容を含みます。
「マイ 日記 • C言語交流フォーラム ~ mixC++ ~」
http://dixq.net/forum/blog.php?u=114&sd=a&c=2

分からないことは、この掲示板で質問していただければと思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

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

Re: RPGの会話の処理

#7

投稿記事 by nil » 11年前

>フラグのようなもの
少し性格が違います。
フラグは基本的にon,offつまるところ1と0しか指しませんが、
この場合は数値で状態を指定します。

例えばその変数の名前をstateとするならば大体はこのように使います。

コード:

switch( state ){
case 0:
    何か;
    break;
case 1:
    何か;
    break;
}
この何かにあたる処理が先ほど説明したところの戦闘処理であったり、散策処理であったりするわけです。
状態が増えてもcaseが増えるだけですので、変数を大量に用意する必要はありません。
softyaさんの講座ですとstateと同じ働きをするのはMainData_t::gameStateというGameState_t型の変数です。
このように、ただの整数型ではなく、列挙体が用いられるのが一般的です。

閉鎖

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