選択肢のプログラムについて

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

選択肢のプログラムについて

#1

投稿記事 by 満天の天照 » 12年前

カーソル移動のプログラムについて質問です。

コード:

int Cursor(int def_x, int def_y, int menu_x, int menu_y, int indent_x, int indent_y)
//     初期x軸   初期y軸 x軸選択肢数 y軸選択肢数   x軸間隔      y軸感覚
{
	int ans=0;
//	int y_ans=0;
	int x_ans=1;
	int Max = menu_x * menu_y;
	int before_x=def_x;
	int before_y=def_y;
	int after_x=def_x;
	int after_y=def_y;
	int returnKey=0;
	bool PrintFlg = true;
	
	LOCATE(def_x,def_y);
	printf("⇒");
	while(true)
	{
		returnKey=keypush();
		
		if(returnKey==KY_UP)
		{
			ans = (ans + (Max-1))%(menu_y*x_ans);
//			y_ans=(y_ans+(menu_y-1))%menu_y;
			after_y=((after_y - def_y + menu_y - 1) % menu_y) + def_y;
			PrintFlg = true;
		}
		if(returnKey==KY_DOWN)
		{
			ans = (ans + 1)%(menu_y*x_ans);
//			y_ans=(y_ans+1)%menu_y;
			PrintFlg = true;
			after_y=((after_y - def_y+1) % menu_y) + def_y;
		}
		if(returnKey==KY_RIGHT)
		{
			ans = (ans + menu_y)%Max;
			x_ans=(x_ans+1)%(menu_x+1);
			if(x_ans==0)
			{
				x_ans=1;
			}
			PrintFlg = true;
			after_x=((after_x - def_x+1) % menu_x) + def_x;
		}
		if(returnKey==KY_LEFT)
		{
			ans = (ans + (Max - menu_x - 1))%Max;
			x_ans=(x_ans+(menu_x-1))%menu_x;
			if(x_ans==0)
			{
				x_ans=menu_x;
			}
			PrintFlg = true;
			after_x=((after_x - def_x + menu_x - 1) % menu_x) + def_x;
		}
		
		if(returnKey==KY_RETURN)
		{
			return ans;
		}
		if(PrintFlg)
		{
			LOCATE(before_x*indent_x-indent_x+1,before_y*indent_y-indent_y+1);
			printf("  ");
			LOCATE(after_x*indent_x-indent_x+1,after_y*indent_y-indent_y+1);
			printf("⇒");

			before_x = after_x;
			before_y = after_y;
			
			PrintFlg = false;
		}
	}
}
※LOCATE(x,y);は次のprintf();の表示場所を指定できます。

このプログラムは、十字キーで「⇒」を移動させ、エンターを押したらその座標を変数ansでmainに返すプログラムです。
この、ansの制御が上手く行かず困っております。。。

例えば、main関数で
Cursor(1,1,3,4,1,1);
と呼び出した場合、
選択肢はx軸に3つまで⇒が移動し、
y軸は4つまで⇒が移動する。
って感じです。

今、そのプログラムで、右右上と入力すると、本来11を返す予定が7が返されてしまいます。
-------
本来想定しているansの返される値
  123x軸
1 0 4 8
2 1 5 9
3 2 610
4 3 711
y軸
--------

一週間くらい試行錯誤しても全然思ったansが返されません…良い方法は無いでしょうか?

アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

Re: 選択肢のプログラムについて

#2

投稿記事 by みけCAT » 12年前

ansを直接変化させようとせず、カーソルのx座標とy座標からansを求めるのがいいと思います。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

満天の天照
記事: 3
登録日時: 12年前

Re: 選択肢のプログラムについて

#3

投稿記事 by 満天の天照 » 12年前

出来ました!
有難うございます!><

アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

Re: 選択肢のプログラムについて

#4

投稿記事 by みけCAT » 12年前

解決したコードの提示と、解決チェックをお願いします。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

閉鎖

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