又是问题日,大佬帮一下
#include <stdio.h>#include <Windows.h>
static void gotoxy(int x, int y)
{
COORD position = { x, y };
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), position);
}
int main()
{
int x = 0, y = 0;
char z=0;
printf("请输入大写的WASD进行操作,了解操作请按回车");
getchar();
system("cls");
puts("■");
while (1)
{
z=getch();
if (z == 'W' || 'A' || 'S' || 'D')
{
if (z == 'W')
y = y - 1;
if (z == 'A')
x = x - 1;
if (z == 'S')
y = y + 1;
if (z == 'D')
x = x + 1;
gotoxy(x, y);
puts("■");
}
}
}
这个可以让‘■’东西运动起来,x轴没有问题,y轴每移动一次前一个■会保留在屏幕上,因为知识面狭窄自己无能为力,所以想问问大佬咋才能解决这个问题呢? #include <stdio.h>
#include <Windows.h>
static void GotoXY(int x, int y)
{
COORD position = {x * 2, y}; // unicode
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), position);
}
static void HideCursor()
{
CONSOLE_CURSOR_INFO cci;
cci.bVisible = FALSE;
cci.dwSize = sizeof(cci);
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorInfo(handle, &cci);
}
int main(void)
{
HideCursor();
printf("请输入大写的WASD进行操作,了解操作请按回车");
getchar();
system("cls");
COORD pos = {0, 0};
while(1)
{
int ch = getch();
system("cls");
switch(ch)
{
case 'W':
case 'w':
--pos.Y;
break;
case 'S':
case 's':
++pos.Y;
break;
case 'A':
case 'a':
--pos.X;
break;
case 'D':
case 'd':
++pos.X;
break;
}
if(pos.X < 0)
pos.X = 0;
if(pos.Y < 0)
pos.Y = 0;
GotoXY(pos.X, pos.Y);
puts("■");
}
return 0;
}
只用改动两行代码就行
早while中的z = getch()下一行加上system("cls");
由于控制台中上下一格 等于2个字符 所以移动光标函数哪里需要 x*2
COORD position = { 2*x, y };
while (1)
{
z = getch();
system("cls");
………………
} 紫霞圣人 发表于 2018-9-24 07:41
只用改动两行代码就行
早while中的z = getch()下一行加上system("cls");
明白了,谢谢。 人造人 发表于 2018-9-23 17:39
这个问题问的有点傻了,自己没想多久就来问了{:10_269:}。不过每一次大佬的代码都有新知识,感谢 三千芳华 发表于 2018-9-24 10:21
这个问题问的有点傻了,自己没想多久就来问了。不过每一次大佬的代码都有新知识,感谢
^_^
页:
[1]