我用c语言编一个箭头运动的程序,我想用键盘控制箭头运动的方向,该怎么办,向各位高手求救

 我来答
867773467
2012-05-12 · TA获得超过180个赞
知道小有建树答主
回答量:243
采纳率:0%
帮助的人:148万
展开全部
通过使用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;
}
百度网友912bde2
2012-05-12 · TA获得超过507个赞
知道小有建树答主
回答量:452
采纳率:0%
帮助的人:321万
展开全部
最常用的一个捕获按键的函数: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(640, 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();
}
追问
vc中没有graphics.h呀,graphics.h是在tc中的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Bk0X
2012-05-12 · TA获得超过9413个赞
知道小有建树答主
回答量:1217
采纳率:60%
帮助的人:669万
展开全部
代码很长....
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式