| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3777 人关注过本帖
标题:迷宫游戏
取消只看楼主 加入收藏
farmerbee
Rank: 1
等 级:新手上路
帖 子:56
专家分:0
注 册:2006-2-27
收藏
 问题点数:0 回复次数:6 
迷宫游戏

小弟初学C语言,写了个寻找迷宫出口的“程序”,写完程序后自己感觉很乱,又无从下手,所以贴上来望高手指点一下。。(改成这样行吗斑竹?)

#include "stdio.h"
#include "stdlib.h"
#define col 10
#define row 10
#define nodes 100
int map[col][row]={1,1,1,1,1,1,1,1,1,1,
1,0,0,1,0,0,0,1,0,1,
1,0,0,1,0,0,0,1,0,1,
1,0,0,0,0,0,1,0,0,1,
1,0,1,1,1,0,0,0,0,1,
1,0,0,0,1,0,0,0,0,1,
1,0,1,0,0,0,1,0,0,1,
1,0,1,1,1,0,1,1,0,1,
1,1,0,0,0,0,0,0,0,1,
1,1,1,1,1,1,1,1,1,1,};
typedef struct
{
int x,y;
int dir;
}seater;
typedef struct
{
seater seat[nodes];
int top;
}stack;
seater strpos,endpos,curpos;
stack *router;

void init();
int pass();
void printfoot();
void push();
void nextstep();
void changedir();
void roadprint();
void pop();

void main()
{
init();
do
{
if(pass())
{
printfoot();
push();
nextstep();
}
else
{
curpos=router->seat[router->top];
if(curpos.dir<4)
changedir();
else
pop();
}
if((curpos.x==endpos.x)&&(curpos.y==endpos.y))
{
printf("you get!!\n");
break;
}


}while(router->top>=0);
roadprint();
}

void init ()
{
router=(stack *)malloc(sizeof(stack));
strpos.x=1;
strpos.y=1;
endpos.x=8;
endpos.y=8;
strpos.dir=1;
router->top=-1;
curpos=strpos;
}

int pass()
{
if(map[curpos.x][curpos.y]==0)
return 1;
else
return 0;
}
void printfoot()
{
map[curpos.x][curpos.y]=2;

}

void push()
{
router->top++;
router->seat[router->top]=curpos;

}
void nextstep()
{
curpos=router->seat[router->top];
curpos.y++;
curpos.dir=1;

}
void changedir()
{
router->seat[router->top].dir++;
switch(curpos.dir)
{
case 1:curpos.x++;break;
case 2:curpos.y--;break;
case 3:curpos.x--;break;
case 4:pop();break;
default :printf("error direction!\n");
}
curpos.dir=1;

}
void pop()
{
router->seat[router->top--];
curpos=router->seat[router->top];
changedir();
}
void roadprint()
{
for(int i=0;i<=router->top;i++)
{
printf("seat:%d,%d dir:%d top%d\n",router->seat[i].x,router->seat[i].y,router->seat[i].dir,router->top);
}
}

搜索更多相关主题的帖子: 迷宫 游戏 define include 
2006-03-15 13:05
farmerbee
Rank: 1
等 级:新手上路
帖 子:56
专家分:0
注 册:2006-2-27
收藏
得分:0 

还有一个计算表达式的,由于能力有限,暂时还没有支持负数跟小数点。。请大家批批
支持格式如:3*(9-6)+9/7


#include "stdio.h"
#include "stdlib.h"
#define max 50
typedef struct
{
float digtal[max];
int top;
}digst;
typedef struct
{
char operat[max];
int top;
}operst;
char *exps;
int cur;
float num;
char op;
int elemtype;
bool flag;

void init(digst *,operst *);
int getelem();
void pushdig(digst *,float);
void pushoper(operst *);
char compare(operst *);
void caculate(operst *,digst *);
char popoper(operst *);
double popdig(digst *);
int isdigtal();
int isoperator();
int len(char *);
double sqr(int);


void main()
{
while(1){
flag=1;
digst * dt;
operst * ot;
exps=(char *)malloc(sizeof(char));
dt=(digst *)malloc(sizeof(digst));
ot=(operst *)malloc(sizeof(operst));
dt->top=-1;
ot->top=-1;
cur=0;
scanf("%s",exps);
exps[len(exps)]='+';
do
{
elemtype=getelem();
if(elemtype==1)
pushdig(dt,num);
else if(elemtype==2)
{
if(ot->top==-1)
pushoper(ot);
else
{
switch(compare(ot))
{
case '>':pushoper(ot);break;
case '<':caculate(ot,dt);break;
case '=':popoper(ot);break;
}
}
}
else
printf("error operator\n");
}while(cur<(len(exps)+1)&&flag);
printf("result: %f\n ",dt->digtal[dt->top]);
getchar();
}
}

int getelem() //getlems
{
num=0;
char elem[10];
int i=0;
if(isdigtal())
{
while(isdigtal())
{
elem[i]=exps[cur];
i++;
cur++;
}
for(int j=0;j<i;j++)
{
num+=(elem[j]-48)*sqr(i-j);
}
return 1;
}
else if(isoperator())
{
op=exps[cur];
cur++;
return 2;
}
else
{
printf("error express\n");
flag=0;
}

}

void pushdig(digst *dt,float elem) //pushdig
{
dt->top++;
dt->digtal[dt->top]=elem;
}

void pushoper(operst * ot) //pushoper
{
ot->top++;
ot->operat[ot->top]=op;
}

void caculate (operst *ot,digst *dt) //caculate
{
double a,b,reslt;
b=popdig(dt);
a=popdig(dt);
switch(popoper(ot))
{
case '+':reslt=a+b;break;
case '-':reslt=a-b;break;
case '*':reslt=a*b;break;
case '/':reslt=a/b;break;
}
pushdig(dt,reslt);
cur--;
}

char popoper(operst * ot) //popoper
{
char oper;
oper=ot->operat[ot->top];
ot->top--;
return oper;
}

double popdig(digst * dt) //popdig
{
double dig;
dig=dt->digtal[dt->top];
dt->top--;
return dig;
}
//isdigtal
int isdigtal()
{

if(exps[cur]>=48&&exps[cur]<=57)
{
return 1;
}
else
return 0;
}

int isoperator() //isoperator
{
if(exps[cur]=='*'||exps[cur]=='/'||exps[cur]=='+'||exps[cur]=='-')
{
return 1;
}
}

char compare(operst *ot) //compare
{
char res;
switch(op)
{
case '+':
case '-':switch(ot->operat[ot->top])
{
case '+':
case '-':
case '*':
case '/':res='<';break;
case '(':res='>';break;
}break;
case '*':
case '/':switch(ot->operat[ot->top])
{
case '+':
case '-':
case '(':res='>';break;
case '*':
case '/':res='<';break;
}break;
case '(':res='>';break;
case ')':switch(ot->operat[ot->top])
{
case '+':
case '-':
case '*':
case '/':res='<';break;
case '(':res='=';break;
}break;
case '\n':res='<';break;
}
return res;
}

int len( char * exps) //len
{
int i=0;
while(exps[i]!=NULL)
{
i++;
}
return i;
}

double sqr(int s)
{
int res=1;
for (int i=1;i<s;i++)
res*=10;
return res;
}

[此贴子已经被作者于2006-3-15 13:11:01编辑过]

2006-03-15 13:10
farmerbee
Rank: 1
等 级:新手上路
帖 子:56
专家分:0
注 册:2006-2-27
收藏
得分:0 
以下是引用feng1256在2006-3-15 14:30:00的发言:

以后客气可以~卖乖的话就不要说了(你别生气),只是很多人看了会不舒服

没有卖乖啊,我是学C#起步的,现在发现学那个根本走不远 所以我想学C语言把基础打好,感觉自己用C语言写的程序很乱。所以想请大家指点一下的嘛

[此贴子已经被作者于2006-3-15 21:28:33编辑过]

2006-03-15 21:20
farmerbee
Rank: 1
等 级:新手上路
帖 子:56
专家分:0
注 册:2006-2-27
收藏
得分:0 
看着数据结构里面  有时书上的一条语句就把好多事情给做了,梦想着自己总能写那样的语句
2006-03-15 21:22
farmerbee
Rank: 1
等 级:新手上路
帖 子:56
专家分:0
注 册:2006-2-27
收藏
得分:0 

没有人指点我一下啊

2006-03-16 17:46
farmerbee
Rank: 1
等 级:新手上路
帖 子:56
专家分:0
注 册:2006-2-27
收藏
得分:0 

呵呵,我是一个大二的菜鸟了,还没有去研究那个塔啊,就我这个水平一种算法都实现不了也可能啊 哈哈

2006-03-18 12:56
farmerbee
Rank: 1
等 级:新手上路
帖 子:56
专家分:0
注 册:2006-2-27
收藏
得分:0 
斑竹好N啊,我什么时候才可以像你一样牛呢..

[此贴子已经被作者于2006-3-22 16:55:39编辑过]


2006-03-22 16:52
快速回复:迷宫游戏
数据加载中...
 
   



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

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