使用gotoxy()时遇到一个小问题。 我想拒绝制作可行的场景,其中gotoxy()围绕控制台或(-x,-y)。
void gotoxy(int x, int y) {
if (x >= 0 && y >= 0) {
getch();
COORD kursor;
kursor.X = x;
kursor.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), kursor);
}
}
AND:
void chodzenie(){
koniec = false;
while( koniec == false ){
unsigned char znak = getch();
switch( znak )
{
case 0:
case 224: //klawisze specjalne
znak = getch();
switch( znak )
{
case 72: //strzałka w górę
y--;
gotoxy(x,y);
break;
case 80: //strzałka w dół
y++;
gotoxy(x,y);
break;
case 75: //strzałka w lewo
x--;
gotoxy(x,y);
break;
case 77: //strzałka w prawo
x++;
gotoxy(x,y);
break;
}
znak = 0;
break;
case 13: //ENTER
break;
case 27: //ESC
koniec = true;
break;
}
}
}
不过,即使我有,如果检查y和x是否大于0,我的游标可能实际上是 - 让我们说(-1,-6)。
答案 0 :(得分:1)
如何防止无效索引
您使用以下代码:
y--; or x++;
计算新的光标位置。
您可以回避int运算符并实现一个小函数来将值与您想要的方向相冲突,并限制结果。 (到边缘或者你可能会选择包裹}
考虑边缘约束的这个例子:(使用TOP,BOTTOM作为屏幕限制)
void bmpY (int& y, int direction)
{
y += direction;
// check bottom limit (increasing Y moves down)
if (direction > 0) { if (y > BOTTOM) y = BOTTOM; return; }
if (direction < 0) { if (y < TOP) y = TOP; return; }
// else direction == 0, do nothing
}
并为bmpX,LEFT,RIGHT
实现类似的功能类似的简单算术可以处理换行选择。