IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C语言制作的迷宫游戏 -> 正文阅读

[C++知识库]C语言制作的迷宫游戏

之前有许多人来问我C语言能不能写个迷宫类的游戏,我也是思来想去,觉得必须安排上
还可以加上一些图形库的运用,由于博主还没学会,期待大佬来完善。
#include<stdio.h>
#include<string.h>
#include<malloc.h>
#define row 1024
#define col 1024

//定义
typedef struct Maze{
	int map[row][col];
	int information[row][col];
}Maze;
typedef struct Point{
	int x,y;
}Point;
//输入
void into_Maze(Maze *q,Maze *Q,Point *origin,Point *exit)
{
	int i,j,n,h,w=1;
    char str[1000000];
	do
	{
		gets(str);
		j=strlen(str);
		if(j == 0)
			break;
		for(i=1;i<j+1;i++)
		{
			q->map[w][i]=str[i-1]-'0';
		}
		w++;
	}while(1);
  //用1将迷宫包围
	for(h=0;h<i;h++)
	{
		q->map[0][h]=1;
		q->map[w][h]=1;
	}
	for(n=0;n<w;n++)
	{
		q->map[n][0]=1;
		q->map[n][i]=1;
	}

  //地图信息,即到达某点次数
		for(h=1;h<w;h++)
	{
		for(n=1;n<i;n++)
		{
			Q->information[h][n]=0;
		}
	}
	//
   //用0这个数字将迷宫包围,方便接下来的操作

	for(h=0;h<i;h++)
	{
		Q->information[0][h]=0;
		Q->information[w][h]=0;
	}
	for(n=0;n<w;n++)
	{
		Q->information[n][0]=0;
		Q->information[n][i]=0;
	}
	for(h=0;h<w+1;h++)
	{
		for(n=0;n<=i;n++)
			;
	}
	for(h=0;h<w+1;h++)
	{
		for(n=0;n<i+1;n++)
			;
	}
	origin->x=0,origin->y=0;

	exit->x=h-3,exit->y=i-2;
	
}


int number(Maze *Q,Maze *q,Point *present)
{
	int min=999;
	int num[999],j=0,i;
	if(q->map[present->x][present->y+1]==1)
	{
		num[0]=999;
	}else
		num[0]=Q->information[present->x][present->y+1];

	if(q->map[present->x+1][present->y]==1)
	{
		num[1]=999;
	}else
		num[1]=Q->information[present->x+1][present->y];
			
		
	 if(q->map[present->x][present->y-1]==1)
	{
		num[2]=999;
	}else
		num[2]=Q->information[present->x][present->y-1];
			
	if(q->map[present->x-1][present->y]==1)
	{
		num[3]=999;
	}else
		num[3]=Q->information[present->x-1][present->y];
	min=num[0];		
	for(i=0;i<4;i++)
	{
		if(min>num[i])
		{
			min=num[i];
			j=i;
		}
	}
	return j;
	
}	
//在迷宫中移动
int move(Maze *q,Maze*Q,Point *origin,Point *exit,Point *present)
{	
	int num=0,m=0,n=0,k=0,i=0;
	char Direction[999]={0};

	present->x=origin->x+1;
	present->y=origin->y+1;

	Q->information[present->x][present->y]=Q->information[origin->x][origin->y]+1;

	while(!(present->x == exit->x+1 && present->y == exit->y+1))
	{   
			num=number(Q,q,present);
			//定义num
			if(Q->information[origin->x+1][origin->y+1]>27)
			{
				k=2;
				break;
			}
			//ruturn ;
			else if(i>1000){
				k=2;
				break;
			}
			//向右移动	
			else if(q->map[present->x][present->y+1]==0 && num==0)
			{
			 	
				
				present->y=present->y+1;

				Q->information[present->x][present->y] = Q->information[present->x][present->y]+1;
				 if( Direction[m-1] =='L')
				{	m=m-1;
				continue;
				}
				Direction[m] = 'R';
				m++;
				continue;
			}
		    //向下移动
				else if(q->map[present->x+1][present->y]==0 && num==1)
				{
			  		
				
					present->x=present->x+1;
					Q->information[present->x][present->y] = Q->information[present->x][present->y]+1;
					if(Direction[m-1]=='U')
				{	m=m-1;
				continue;
				}
				Direction[m]='D';
				m++;
				continue;
				}
				//向左移动
	
			else if(q->map[present->x][present->y-1]==0 && num==2)
				{	
			 		
					
					present->y=present->y-1;
					/*
					Q->information[present->x][present->y]=Q->information[present->x][present->y]+1;
					if(Direction[m-1]=='R')
					*/
					Q->information[present->x][present->y]=Q->information[present->x][present->y]+1;
					if(Direction[m-1]=='R')
					{	m=m-1;
					continue;
					}
					Direction[m]='L';
					m++;
					continue;
					}
			
	        	//向上移动
			else if(q->map[present->x-1][present->y]==0  && num==3)
				{
					
					present->x=present->x-1;
					Q->information[present->x][present->y]=Q->information[present->x][present->y]+1;
					if(Direction[m-1]=='D')
					{	m=m-1;
					continue;
					}
					Direction[m]='U';
					m++;
					continue;
				}	
			i++;
//循环判断
	}
	if(k==2)


		printf("NO PASS!\n");
		else puts(Direction);


	return k;
}

int main()
{
	int k=0;
	Maze *q = (Maze*)malloc(sizeof(Maze));

	Maze *Q = (Maze*)malloc(sizeof(Maze));

	Point *origin = (Point*)malloc(sizeof(Point));

	Point *exit = (Point*)malloc(sizeof(Point));

	Point *present = (Point*)malloc(sizeof(Point));
	into_Maze(q,Q,origin,exit);
	//k=move(q,Q)
	k=move(q,Q,origin,exit,present);

	return 0;
}


  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-07-15 23:42:02  更:2021-07-15 23:42:52 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/5 10:26:18-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码