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;
}
}
}
このプログラムは、十字キーで「⇒」を移動させ、エンターを押したらその座標を変数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が返されません…良い方法は無いでしょうか?