| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 690 人关注过本帖
标题:请教高手一道题目
只看楼主 加入收藏
wenyong
Rank: 1
等 级:新手上路
帖 子:251
专家分:0
注 册:2005-8-9
收藏
 问题点数:0 回复次数:8 
请教高手一道题目

怎么样才能绕过墙啊 为什么移动到边框不能继续移动呢? #include <stdio.h> #include <bios.h> #include <conio.h> #define UP 0x4800 #define DOWN 0x5000 #define LEFT 0x4b00 #define RIGHT 0x4d00 void drawMap() { int i,j; char a[21][21]; for(i=0;i<21;i++) { for(j=0;j<21;j++) { if(i==j) a[i][j]='#'; else a[i][j]=' '; printf("%c",a[i][j]); } printf("\n"); } } struct move_point { int x, y;/*该点的位置,包括x坐标和y坐标*/ }man; main() {

int key=0; man.x=12; man.y=24;

do { clrscr(); /*输出一个空格,把先前的字符擦去*/ drawMap(); gotoxy(man.x, man.y);

printf("%c\b", 2); /*输出ASCII码值为2的"笑脸”字符*/

while (bioskey(1) == 0);/*等待按键*/

key = bioskey(0);/*把接收的按键的键盘码赋给变量key*/ switch (key) /*对变量key的值进行判断*/ { case UP: /*如果按的是向上键*/ man.y=man.y-1; break; /*让物体向上运动,并退出switch*/

case DOWN: /*如果按的是向下键*/ man.y=man.y+1; break; /*让物体向下运动,并退出switch*/

case LEFT: /*向左键*/ man.x=man.x-1; break;/*向左运动*/

case RIGHT: /*向右键*/ man.x=man.x+1; break;/*向右运动*/ default: break;/*其他按键则忽略处理*/

} }while(man.x!=man.y); clrscr(); printf("you lost !"); getch(); }

搜索更多相关主题的帖子: define include 
2005-08-30 17:36
另糊葱
Rank: 1
等 级:新手上路
帖 子:69
专家分:0
注 册:2005-8-25
收藏
得分:0 
因为
while(man.x!=man.y);
clrscr();
printf("you lost !");

当你到墙的时候man.x==man.y
所以输出you lost !
你把man.x!=man.y这个条件改成别的就可以了

[此贴子已经被作者于2005-8-31 8:49:57编辑过]



我不丑,但是我也很温柔! QQ:79096247
2005-08-31 08:45
另糊葱
Rank: 1
等 级:新手上路
帖 子:69
专家分:0
注 册:2005-8-25
收藏
得分:0 
哦,是不我理解错了你的问题呀?

我不丑,但是我也很温柔! QQ:79096247
2005-08-31 08:52
wenyong
Rank: 1
等 级:新手上路
帖 子:251
专家分:0
注 册:2005-8-9
收藏
得分:0 
改成while (1)
为什么移动到边框不能继续移动呢?

2005-08-31 12:21
另糊葱
Rank: 1
等 级:新手上路
帖 子:69
专家分:0
注 册:2005-8-25
收藏
得分:0 
以下是引用wenyong在2005-8-31 12:21:46的发言: 改成while (1) 为什么移动到边框不能继续移动呢?
改成while (1)那不是一直都要执行printf("you lost !");呀? 至于移动到边框的问题我也不太明白

我不丑,但是我也很温柔! QQ:79096247
2005-08-31 15:49
wenyong
Rank: 1
等 级:新手上路
帖 子:251
专家分:0
注 册:2005-8-9
收藏
得分:0 
没有高手指点指点吗?

2005-09-01 12:32
yuki
Rank: 2
等 级:新手上路
威 望:5
帖 子:508
专家分:0
注 册:2005-2-4
收藏
得分:0 

帮你改了,自己看吧,有注释。 #include <stdio.h> #include <bios.h> #include <conio.h>

#define UP 0x4800 #define DOWN 0x5000 #define LEFT 0x4b00 #define RIGHT 0x4d00

void drawMap() { int i,j; char a[21][21]; for(i=0;i<21;i++) { for(j=0;j<21;j++) { if(i==j) a[i][j]='#'; else a[i][j]=' '; printf("%c",a[i][j]); } printf("\n"); } }

struct move_point { int x, y;/*该点的位置,包括x坐标和y坐标*/ } man;

int main() { int key=0; int oldx,oldy; // To record previous position man.x=12; man.y=24; clrscr(); /*输出一个空格,把先前的字符擦去*/ drawMap();

do { gotoxy(oldx,oldy); putch(0x00); // clean up the previous smile gotoxy(man.x, man.y); putch(0x02); // put smile /* printf("%c\b", 2); That's not the way */ /*输出ASCII码值为2的"笑脸”字符*/ /* while (bioskey(1) == 0) I think it is wasting time here */ ;/*等待按键*/ if(!bioskey(1)) continue; key = bioskey(0);/*把接收的按键的键盘码赋给变量key*/

oldx=man.x; oldy=man.y;

switch (key) { /*对变量key的值进行判断*/ case UP: /*如果按的是向上键*/ if(man.y > 1) // Top border check man.y=man.y-1; break; /*让物体向上运动,并退出switch*/ case DOWN: /*如果按的是向下键*/ if(man.y < 25) // Bottom border check man.y=man.y+1; break; /*让物体向下运动,并退出switch*/ case LEFT: /*向左键*/ if(man.x > 1) // Left border check man.x=man.x-1; break;/*向左运动*/ case RIGHT: /*向右键*/ if(man.x < 80) // right border check man.x=man.x+1; break;/*向右运动*/ case 0x11b: // To Exit the program clrscr(); printf("Bye! bye!\n"); getch(); return 0; default: ; /* break; It is no need to put 'break' here */ /*其他按键则忽略处理*/ } } while(man.x != man.y);

clrscr(); printf("you lost !"); getch(); return 0; }


我们都在命运湖上荡舟划桨,波浪起伏使我们无法逃离孤行;如果我们迷失方向,波浪将指引我们穿过另一天曙光
2005-09-01 17:18
wenyong
Rank: 1
等 级:新手上路
帖 子:251
专家分:0
注 册:2005-8-9
收藏
得分:0 
thanks very much .

2005-09-01 17:52
jjkl832
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2005-9-1
收藏
得分:0 
都不清楚这是什么?

2005-09-01 20:07
快速回复:请教高手一道题目
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.033713 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved