...键盘控制箭头运动的方向,该怎么办,向各位高手求救
发布网友
发布时间: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
代码很长....