搜索

...键盘控制箭头运动的方向,该怎么办,向各位高手求救

发布网友 发布时间:2024-10-23 09:35

我来回答

3个回答

热心网友 时间:2024-11-06 19:18

通过使用getch()函数接受键盘输入的字符控制移动,然后再刷屏,就这么简单
下面给一个参考程序
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#define N 6
int x=1, y=1;
int current_value=0;
int map[N][N]={ {1,1,1,1,1,1},{1,0,0,0,0,1},{1,0,0,0,0,1},{1,0,0,0,0,1},{1,0,0,0,0,2},{1,1,1,1,1,1} };

void print()
{
int i, j;

for(i=0; i<N; i++)
{ for(j=0; j<N; j++)
{
if(i==y && j==x)
{printf("#");
continue;
}
if(map[i][j]==1)
printf("*");
if(map[i][j]==0)
printf("-");
if(map[i][j]==2)
printf("$");
}
printf("\n");
}

}

int control(char ch)
{
switch(ch)
{
case 'a':
{ if(map[y][x-1]==0 || map[y][x-1]==2)
{
x--;
current_value=map[y][x];
return 1;
}
else
return 0;

}

case 'd':
{ if(map[y][x+1]==0 || map[y][x+1]==2)
{
x++;
current_value=map[y][x];
return 1;
}
else
return 0;

}

case 's':
{ if(map[y+1][x]==0 || map[y+1][x]==2)
{
y++;
current_value=map[y][x];
return 1;
}
else
return 0;

}
case 'w':
{ if(map[y-1][x]==0 || map[y-1][x]==2)
{
y--;
current_value=map[y][x];
return 1;
}
else
return 0;

}
default :return 0;
}
}

int main()
{
int i, j;
int done=0;
int success=0;
char ch;

print();
while (!success)
{

ch=getch();
if(ch=='0')
break;
done=control(ch);
if(done)
{
system("cls");
print();
}
if(map[y][x]==2)
{success=1;
break;
}

}
if(success)
printf("恭喜你闯关成功!!、\n");
else
printf("再接再厉~~\n");

return 0;
}

热心网友 时间:2024-11-06 19:19

最常用的一个捕获按键的函数:getch()
前几课,都把这个函数当做“按任意键继续”来用,现在我们用变量保存这个按键:
char c = getch();
然后再做判断即可。
不过程序执行到 getch() 是会阻塞的,直到用户有按键才能继续执行。可游戏中总不能因为等待按键而停止游戏执行吧?所以,要有一个函数,判断是否有用户按键:kbhit()
这个函数返回当前是否有用户按键,如果有,再用 getch() 获取即可,这样是不会阻塞的。
即:
char c;
if (kbhit())
c = getch();
举一个简单的例子,如果有按键,就输出相关按键。否则,输出“.”。每隔 100 毫秒输出一次。按 ESC 退出。
注:ESC 的 ASCII 码是 27。
完整代码如下:
#include <graphics.h>
#include <stdio.h>
#include <conio.h>

void main()
{
char c = 0;
while(c != 27)
{
if (kbhit())
c = getch();
else
c = '.';

printf("%c", c);
Sleep(100);
}
}
结合上一课的简单动画,就可以做出来靠按键移动的图形了吧,看以下代码,实现 a s 控制圆的左右移动:
#include <graphics.h>
#include <conio.h>

void main()
{
initgraph(0, 480);

int x = 320;

// 画初始图形
setcolor(YELLOW);
setfillstyle(GREEN);
fillcircle(x, 240, 20);

char c;
while(c != 27)
{
// 获取按键
c = getch();

// 先擦掉上次显示的旧图形
setcolor(BLACK);
setfillstyle(BLACK);
fillcircle(x, 240, 20);

// 根据输入,计算新的坐标
switch(c)
{
case 'a': x-=2; break;
case 'd': x+=2; break;
case 27: break;
}

// 绘制新的图形
setcolor(YELLOW);
setfillstyle(GREEN);
fillcircle(x, 240, 20);

// 延时
Sleep(10);
}

closegraph();
}

热心网友 时间:2024-11-06 19:17

代码很长....
声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
Top