本文目录一览:
- 1、C语言问题怎么给运行窗口弄个像墙一样的东西
- 2、数据结构编程C语言版
- 3、c语言的数据类型包括哪些
- 4、数据结构算法(c语言) 迷宫求解
- 5、wall 2在c语言中是什么意思
- 6、C语言数据结构 老鼠走迷宫问题
C语言问题怎么给运行窗口弄个像墙一样的东西
你好!!
有两个办法解决这个问题:
1、检测你外框的边界,来确定是不是能移动方块
2、设定你方块能移动的步数,超过步数,就不能移动方块
给你一个推箱子的游戏,你玩玩,参考一下吧
数据结构编程C语言版
void PrintMaze(MazeType maze)
{//将标记路径信息的迷宫输出到终端(包括外墙)
int i,j,n,k;
n = (34 - maze.c)/2;
for(k=0; kn; k++)//让迷宫居中
printf(" ");
printf(" ");
for(i=0;i=maze.c+1;i++)//打印列数名
{
printf("%2d",i);
if(i==9) //对齐
printf(" ");
}
printf("\n");
for(i=0;i=maze.r+1;i++)
{
for(k=0; kn; k++)//让迷宫居中
printf(" ");
printf("%2d",i); //打印行名
for(j=0;j=maze.c+1;j++)
{
switch(maze.adr[i][j])
{
case ' ':
printf(" ");//路
break;
case '#':
printf("■"); //墙
break;
case '*':
printf(". ");//路径
break;
case '@':
printf("◇");//走过两次的地方
break;
case 'e':
printf("E ");//结束位置
break;
case 's':
printf("S ");//开始位置
break;
case '!':
printf("♀");//人
break;
default:
printf("? "); //出错
}
}
printf("\n");
}
}
Status NextPosPlay(MazeType maze, PostType curpos)
{
//指示并返回下一位置的坐标
char c; //接收用户输入的方向
printf("\n请输入'w'(上)、's'(下)、'a'(左)、'd'(右)回到出发点和输入'H/h'可以寻求电脑帮助");
do{
c = getch();
}while(c!='w'c!='s'c!='a'c!='d'c!='h'c!='W'c!='S'c!='A'c!='D'c!='H');
switch(c)
{
case 'd': //右
case 'D':
curpos.c += 1;
break;
case 's': //下
case 'S':
curpos.r += 1;
break;
case 'a': //左
case 'A':
curpos.c -= 1;
break;
case 'w': //上
case 'W':
curpos.r -= 1;
break;
case 'h': //推出,让电脑帮助
case 'H':
return FALSE;
}
return OK;
}
Status PlayMazePath(MazeType maze, PostType start, PostType end)
{
PostType curpos, w; //curpos为当前步,w为上一步;
SElemType e; //堆栈存储类型
curpos = start; //设置"当前位置"为"入口位置"
Stack S; //存储走过的最简路径
InitStack(S);
do
{
if(Pass(maze, curpos)) //如果可以通过
{
maze.adr[curpos.r][curpos.c] = '!'; //'!'表示人,设置当前步为人,方便动态显示
system("cls"); //清屏
PrintMaze(maze); //动态输出迷宫路径
maze.adr[curpos.r][curpos.c] = ' '; //还原
w = curpos;
e.seat = curpos;
Push(S, e);
DeleteSameElem(S); //删除重复的步子
if(!NextPosPlay(maze, curpos)) //接收下一步
{
return FALSE; //退出 让电脑帮助
}
}
else
{
curpos = w; //退回到上一步
if(!NextPosPlay(maze, curpos)) //接收下一步
{
return FALSE; //退出 让电脑帮助
}
}
if(curpos.r == start.r curpos.c == start.c) //若当前为出口则让电脑帮助
{
return FALSE; //退出
}
}while(curpos.r != end.r || curpos.c != end.c);//当前位置为结束位置时推出循环
maze.adr[curpos.r][curpos.c] = '!'; //设置当前步为人,方便动态显示
system("cls");
while(!StackEmpty(S)) //把存储的步子放入数组
{
Pop(S,e);
maze.adr[e.seat.r][e.seat.c] = '*'; //设置路径, ‘*’表示路径
}
PrintMaze(maze); //输出带有路径的迷宫
printf("\n\t\t这是你走过的最短路径");
return OK;
}
void PlayMaze()
{
MazeType maze;
char c; //接收用户输入的选择
PostType start, end; //开始和结束点
int n, flag=1,m; //n表示系统迷宫和随机迷宫 m表示难度
system("cls");
printf("\n\n\n ┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴\n");
printf(" ┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬\n");
printf(" ┬┴┬ 1:使用系统默认迷宫 ┬┴┬\n");
printf(" ┴┬┴ 2:使用随机产生迷宫 ┴┬┴\n");
printf(" ┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬\n");
printf(" ┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴\n\n");
printf("请选择:");
do{
scanf("%d", n);
}while(n!=1 n!=2); //选择系统迷宫或随机迷宫
if(n == 2) //选择随机迷宫
{
RandomInitMaze(maze); //调用随机产生迷宫的函数
system("cls");
PrintMaze(maze);
InputBeginEnd(maze, start, end); //输入开始和结束点
}
else //选择自带的迷宫
{
m = SetMaze(maze); //调用设置自带迷宫的函数
if(m == 1) //初级
{
start.r = 1; start.c = 1;
end.r = 9; end.c = 10;
}
else if(m == 2) //中级
{
start.r = 1; start.c = 1;
end.r = 15; end.c = 15;
}
else if(m == 3) //高级
{
start.r = 1; start.c = 1;
end.r = 20; end.c = 26;
}
maze.adr[start.r][start.c] = 's';
maze.adr[end.r][end.c] = 'e'; //把开始结束点显示给用户
PrintMaze(maze);
printf("\n\t'S'表示出发点,'E'表示终止点");
printf("\n\t请按任意键");
getch();
}
while(flag){
if(!PlayMazePath(maze, start, end))//迷宫求解
{
printf("\n请问你需要电脑帮你吗?(y/n):\n");
do{
c = getchar();
}while(c != 'y' c != 'Y' c != 'n' c != 'N'); //接收用户是否需要电脑帮助
if(c == 'y' || c == 'Y') //需要帮助
{
if(!MazePath(maze, start, end)) //电脑计算
printf("\n\t\t没有路径!\n");
flag = 0;
}
else //不需要帮助 自己继续找路径
{
flag = 1;
}
}
else //找到路径
{
printf("\n\t\t\tGood!你找到了路径!\n");
flag = 0;
}
}
}
c语言的数据类型包括哪些
C语言的数据类型包括:基本类型、构造类型、指针类型、空类型。
其中构造类型中包括共用体、数组、结构体三种类型。基本类型中还包括整型、浮点型、字符型和枚举型四种类型。
1、基本类型,也就是C语言中的基础类型,其中包括整数类型、字符型、浮点型、枚举类型。
2、构造类型,就是使用基本类型的数据,或者使用已经构造好的数据类型,进行添加、设计构造出新的数据类型,使其设计的新构造类型满足待解决问题所需要的数据类型。它并不像基本类型那样简单,而是由多种类型组合而成的新类型,其中每一组成部分称为构造类型的成员。
构造类型也包括三种形式:数组类型、结构体类型和共用体类型。
3、指针类型,C语言的精华是指针,指针类型不同于其他类型的特殊性在于:指针的值表示的是某个内存地址。
4、空类型,关键字是void,其主要作用在于:对函数返回的限定;对函数参数的限定。也就是说,一般一个函数都具有一个返回值,将其值返回调用者,这个返回值是具有特定的类型,但是当函数不必返回一个值时,就可以使用空类型设定返回值的类型。
c语言
C语言是一门面向过程、抽象化的通用程序设计语言,主要用于底层开发。以简易的方式编译,并处理低级存储器。C语言支持跨平台操作,一个标准的C语言程序可以在许多计算机平台上进行编译。
数据结构算法(c语言) 迷宫求解
注释非常详细,希望对你有所帮助。
#includestdio.h
#includestdlib.h
#define M 15
#define N 15
struct mark //定义迷宫内点的坐标类型
{
int x;
int y;
};
struct Element //"恋"栈元素,嘿嘿。。
{
int x,y; //x行,y列
int d; //d下一步的方向
};
typedef struct LStack //链栈
{
Element elem;
struct LStack *next;
}*PLStack;
/*************栈函数****************/
int InitStack(PLStack S)//构造空栈
{
S=NULL;
return 1;
}
int StackEmpty(PLStack S)//判断栈是否为空
{
if(S==NULL)
return 1;
else
return 0;
}
int Push(PLStack S, Element e)//压入新数据元素
{
PLStack p;
p=(PLStack)malloc(sizeof(LStack));
p-elem=e;
p-next=S;
S=p;
return 1;
}
int Pop(PLStack S,Element e) //栈顶元素出栈
{
PLStack p;
if(!StackEmpty(S))
{
e=S-elem;
p=S;
S=S-next;
free(p);
return 1;
}
else
return 0;
}
/***************求迷宫路径函数***********************/
void MazePath(struct mark start,struct mark end,int maze[M][N],int diradd[4][2])
{
int i,j,d;int a,b;
Element elem,e;
PLStack S1, S2;
InitStack(S1);
InitStack(S2);
maze[start.x][start.y]=2; //入口点作上标记
elem.x=start.x;
elem.y=start.y;
elem.d=-1; //开始为-1
Push(S1,elem);
while(!StackEmpty(S1)) //栈不为空 有路径可走
{
Pop(S1,elem);
i=elem.x;
j=elem.y;
d=elem.d+1; //下一个方向
while(d4) //试探东南西北各个方向
{
a=i+diradd[d][0];
b=j+diradd[d][1];
if(a==end.x b==end.y maze[a][b]==0) //如果到了出口
{
elem.x=i;
elem.y=j;
elem.d=d;
Push(S1,elem);
elem.x=a;
elem.y=b;
elem.d=886; //方向输出为-1 判断是否到了出口
Push(S1,elem);
printf("\n0=东 1=南 2=西 3=北 886为则走出迷宫\n\n通路为:(行坐标,列坐标,方向)\n");
while(S1) //逆置序列 并输出迷宫路径序列
{
Pop(S1,e);
Push(S2,e);
}
while(S2)
{
Pop(S2,e);
printf("--(%d,%d,%d)",e.x,e.y,e.d);
}
return; //跳出两层循环,本来用break,但发现出错,exit又会结束程序,选用return还是不错滴
}
if(maze[a][b]==0) //找到可以前进的非出口的点
{
maze[a][b]=2; //标记走过此点
elem.x=i;
elem.y=j;
elem.d=d;
Push(S1,elem); //当前位置入栈
i=a; //下一点转化为当前点
j=b;
d=-1;
}
d++;
}
}
printf("没有找到可以走出此迷宫的路径\n");
}
/*************建立迷宫*******************/
void initmaze(int maze[M][N])
{
int i,j;
int m,n; //迷宫行,列 [/M]
printf("请输入迷宫的行数 m=");
scanf("%d",m);
printf("请输入迷宫的列数 n=");
scanf("%d",n);
printf("\n请输入迷宫的各行各列:\n用空格隔开,0代表路,1代表墙\n",m,n);
for(i=1;i=m;i++)
for(j=1;j=n;j++)
scanf("%d",maze[i][j]);
printf("你建立的迷宫为(最外圈为墙)...\n");
for(i=0;i=m+1;i++) //加一圈围墙
{
maze[i][0]=1;
maze[i][n+1]=1;
}
for(j=0;j=n+1;j++)
{
maze[0][j]=1;
maze[m+1][j]=1;
}
for(i=0;i=m+1;i++) //输出迷宫
{
for(j=0;j=n+1;j++)
printf("%d ",maze[i][j]);
printf("\n");
}
}
void main()
{
int sto[M][N];
struct mark start,end; //start,end入口和出口的坐标
int add[4][2]={{0,1},{1,0},{0,-1},{-1,0}};//行增量和列增量 方向依次为东西南北 [/M]
initmaze(sto);//建立迷宫
printf("输入入口的横坐标,纵坐标[逗号隔开]\n");
scanf("%d,%d",start.x,start.y);
printf("输入出口的横坐标,纵坐标[逗号隔开]\n");
scanf("%d,%d",end.x,end.y);
MazePath(start,end,sto,add); //find path
system("PAUSE");
}
测试数据,算法复杂度你就自己来写吧,如果你连这都不自己做,那你一定是在应付作业。劝你还是自己运行测试一下吧,免得答辩时老师问你,什么都不知道,那你就悲剧了。祝你好运!!
wall 2在c语言中是什么意思
wall2在c语言中是墙2的意思。
w的意思是关闭编译时的警告,也就是编译后不显示任何warning,因为有时在编译之后编译器会显示一些例如数据转换之类的警告,这些警告是我们平时可以忽略的。W选项类似-Wall,会显示警告,但是只显示编译器认为会出现错误的警告。在编译一些项目的时候可以-W和-Wall选项一起使用。
C语言数据结构 老鼠走迷宫问题
/* 迷宫矩阵
1 1 1 1 1 1 1 1 1 1
1 0 0 0 0 1 0 0 0 1
1 1 1 0 0 1 0 1 0 1
1 0 0 0 1 0 0 0 0 1
1 0 0 0 0 1 0 1 0 1
1 1 0 1 0 0 0 0 0 1
1 0 0 1 1 1 0 1 1 1
1 1 0 0 0 1 0 0 0 1
1 1 1 1 1 1 1 1 1 1
*/
#includestdio.h
#define m 7
#define n 8
void path()
{
int maze[m+2][n+2] ;
int move[4][2]={ {0,-1},{-1,0},{0,1},{1,0} };
int s[54][3];
int top=0;
int i,j,k,f=0;
int g,h,p;
for(i=0;im+2;++i)
for(j=0;jn+2;++j)
scanf("%d",maze[i][j]);
maze[1][1]=2;
s[top][0]=1;
s[top][1]=1;
s[top][2]=0;
++top;
while(top!=0f==0)
{
--top;
i=s[top][0];
j=s[top][1];
k=s[top][2];
while(k4)
{
g=i+move[k][0];
h=j+move[k][1];
if(g==mh==nmaze[g][h]==0)
{
for(p=0;ptop;++p)
printf("%3d,%d\n",s[p][0],s[p][1]);
printf("%3d,%d\n",i,j);
printf("%3d,%d\n",m,n);
f=1;
}//if
if(maze[g][h]==0)
{
maze[g][h]=2;
s[top][0]=i;
s[top][1]=j;
s[top][2]=k;
++top;
i=g;
j=h;
k=0;
}//if
k=k+1;
}//while
}//while
if(f==0)
printf("no path\n");
}//pathvoid main()
{
path();
}