龍神録9章の移動制御について

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

龍神録9章の移動制御について

#1

投稿記事 by ぺは » 11年前

はじめまして。プログラミング初心者です。
初めて質問します。
龍神録9章の移動制御でわからないところがあるので教えてください。

char.cppで最後の
[coad]
x+=mx/naname , y+=my/naname;//今の座標と移動分を足す
if(!(x<10 || x>FIELD_MAX_X-10 || y<5 || y>FIELD_MAX_Y-5)){//計算結果移動可能範囲内なら
ch.x=x , ch.y=y;//実際に移動させる
}
[/coad]
の部分でなぜ移動範囲を制限できるのかよくわかりません。

例えば、キャラクターが一番下にいる状態で右+下、もしくは左+下にキー入力します。
自分は、このとき、計算結果の座標が移動可能範囲外になるので、
ch.x=x , ch.y=y;
の部分は実行されず、キャラクターは動かないのでは?、と考えています。

しかし、実行結果ではこのとき、キャラクターのy座標は変わらず、x座標だけ動くことができます。
なぜこのように動けるのでしょうか?

わかりにくい質問文で申し訳ありません。
よろしくお願いします。

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

Re: 龍神録9章の移動制御について

#2

投稿記事 by nil » 11年前

直前をよく見てください。
forは何のために使われていますか?
それを理解できれば何故移動できるかもわかるはずです。
オフトピック
個人的にはあの移動方法は少々効率が悪いような気がしますのでご自身で少し改変なさったほうが良いかと思います。

ぺは

Re: 龍神録9章の移動制御について

#3

投稿記事 by ぺは » 11年前

涼雅さん
すぐに返信して頂き、ありがとうございます。

直前のfor文

コード:

        for(int i=0;i<4;i++){//4方向分ループ
                if(inputpad[i]>0){//i方向のキーボード、パッドどちらかの入力があれば
                        x=ch.x , y=ch.y;//今の座標をとりあえずx,yに格納
                        mx=move_x[i];   my=move_y[i];//移動分をmx,myに代入
                        if(CheckStatePad(configpad.slow)>0){//低速移動なら
                                mx=move_x[i]/3; my=move_y[i]/3;//移動スピードを1/3に
                        }
4方向についてそれぞれひとつずつ処理を行うため、
実行結果ではキャラクターのx座標を動かした後、y座標を動かす。
ということで合ってますか?

アバター
Dixq (管理人)
管理人
記事: 1661
登録日時: 13年前
住所: 北海道札幌市
連絡を取る:

Re: 龍神録9章の移動制御について

#4

投稿記事 by Dixq (管理人) » 11年前

非常に分かりにくいコードですよね・・。
分かりやすさも含めるとこんな感じがいいのかなと思います。

コード:

void ch_move(){
	int x=0, y=0;
	if(CheckStatePad(configpad.left)>0){
		x -= MOVE_SPEED;
	}
	if(CheckStatePad(configpad.right)>0){
		x += MOVE_SPEED;
	}
	if(CheckStatePad(configpad.up)>0){
		y -= MOVE_SPEED;
	}
	if(CheckStatePad(configpad.down)>0){
		y += MOVE_SPEED;
	}
	if(x!=0&&y!=0){//斜めなら
		x /= ROOT2;//ルート2で割る
		y /= ROOT2;
	}
	if(CheckStatePad(configpad.slow)>0){//低速移動なら
		x /= 3;//低速に
		y /= 3;
	}
	ch.x += x;
	ch.y += y;
	if(ch.x<0){
		ch.x=0;
	}
	if(ch.x>W){
		ch.x=W;
	}
	if(ch.y<0){
		ch.y=0;
	}
	if(ch.y>H){
		ch.y=H;
	}
}
※画像のセットは入っていません。

ぺは

Re: 龍神録9章の移動制御について

#5

投稿記事 by ぺは » 11年前

Dixqさん
コードありがとうございます。
if文が多くてわかりやすいです。

移動範囲の制限方法が理解できました。
皆さんありがとうございます。

閉鎖

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