トップページ > 過去ログ > 記事閲覧
キャラクターに話しかけたときのメッセージ表示について
名前:uesyuu 日時: 2009/01/29 00:32

初めまして、uesyuuと申します。 今、学校でポケモン風RPGを作っているのですが、「主人公がキャラクターの前に立ってEnterキーを押すと、相手のいる座標から相手の言葉を割り出し表示する」というプログラムがいまいち動きません。 プログラムは重要なところだけを抜き出せば、こんな感じです。 int hantei[15][20] = { { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 }, { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 }, { 1,1,1,1,1,0,0,0,0,0,0,0,4,0,0,0,0,0,1,1 }, { 1,1,1,1,1,0,2,0,3,0,0,0,0,0,0,2,0,0,1,1 }, { 1,1,1,1,1,0,0,0,0,0,3,0,0,2,0,0,0,0,1,1 }, { 1,1,1,1,1,0,0,2,0,0,0,0,0,0,0,3,0,0,1,1 }, { 1,1,1,1,1,0,0,0,0,0,1,3,0,0,0,0,0,0,1,1 }, { 1,1,1,1,1,0,0,0,0,0,1,0,0,0,0,0,0,2,1,1 }, { 1,1,1,1,1,0,2,0,0,0,1,0,2,0,1,0,0,0,1,1 }, { 1,1,1,1,1,0,0,0,1,1,1,0,0,0,1,0,0,0,1,1 }, { 1,1,1,1,1,0,0,0,0,0,0,3,0,0,1,0,0,0,1,1 }, { 1,1,1,1,1,0,0,0,3,0,0,0,0,0,0,0,2,0,1,1 }, { 1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1 }, { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 }, { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 }, }; int talk[14][3] = { {0,3,6}, {0,3,8}, {0,3,15}, {0,4,10}, {0,4,13}, {0,5,7}, {0,5,15}, {0,6,11}, {0,7,17}, {0,8,6}, {0,8,12}, {0,10,11}, {0,11,8}, {0,11,16}, }; char* talk2[14] = { "敵1が現れた!", "味方1が現れた!", "敵2が現れた!", "味方2が現れた!", "敵3が現れた!", "敵4が現れた!", "味方3が現れた!", "味方4が現れた!", "敵5が現れた!", "敵6が現れた!", "敵7が現れた!", "味方5が現れた!", "味方6が現れた!", "敵8が現れた!", }; Talk(int map,int x,int y){ if(ch.muki==0){ x = x/24; y = y/24-1; } if(ch.muki==1){ x = x/24-1; y = y/24; } if(ch.muki==2){ x = x/24; y = y/24+1; } if(ch.muki==3){ x = x/24+1; y = y/24; } for(n=0;n<14;n++){ if(talk[n][0]==map && talk[n][1]==x && talk[n][2]==y){ break; } } if(EnemyFlag==0 && Key[ KEY_INPUT_RETURN ] == 1){ EnemyFlag = 1; } if(EnemyFlag == 1){ DrawBox(0,352,640,480,GetColor(255,255,255),TRUE); DrawBox(0,352,640,480,GetColor(0,0,0),FALSE); DrawFormatString(10,362,GetColor(255,0,0),"%s",&talk2[n]); } } あとは、前に障害物があって進めないときにTalk()を実行するだけです。 なぜかこのプログラムでは、どこの障害物の前でEnterキーを押してもtalk2の配列の1番最初である「敵1が現れた!」が表示されてしまうのです。 あと、文字列の配列にポインタを使っているのですが、それでいいのかもよくわかりません。 解決策を教えてください。

Page: 1 |

Re: キャラクターに話しかけたときのメッセージ表示について ( No.1 )
名前: 日時:2009/01/29 09:51

EnemyFlagやnはどこに定義しているのですか? グローバル変数なら別のところで書き換えている 可能性もあります。 >for(n=0;n<14;n++) このループ内で該当するものが見つからなかった時 >&talk2[n] ここのnの値は14となりアクセス違反です。 >文字列の配列にポインタを使っているのですが 配列の用意するのに問題はありませんが、 その使い方が間違っています。 talk2という変数の型は char*[14]型です。 今回であれば「&talk2」はchar*(*)[14]型 「&talk2[n]」とすると,その結果の型は char**となります。 つまり、 &talk2[0]なら「敵1が現れた!という 文字列へのポインタへのポインタ」となります。 「文字列へのポインタ」を使用する場合は、 talk2[0]で最初の文字列をあらわします。 上記から分かるのはこのくらいでしょうか。 常に1番最初しか表示されないというのは、 もっと別なところに原因がありそうですが。。。
Re: キャラクターに話しかけたときのメッセージ表示について ( No.2 )
名前:D 日時:2009/01/29 15:00

talk2の配列で文字列を囲むダブルコーテーション(")が全角になっている部分があるようです。 これを半角にすれば解決するかもしれません。

Page: 1 |