控制台外的 C++ gotoxy
C++ gotoxy out of console
我在使用 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);
}
}
并且:
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,我的 coursor 实际上可能会去 - 比方说 (-1,-6)。
How prevent invalid index
您使用的代码如下:
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 实现类似的东西
类似的简单算法可以处理换行选择。
我在使用 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);
}
}
并且:
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,我的 coursor 实际上可能会去 - 比方说 (-1,-6)。
How prevent invalid index
您使用的代码如下:
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 实现类似的东西
类似的简单算法可以处理换行选择。