C语言实现的小迷宫

数据结构课程写的迷宫

以前把代码上传过,通过上传资源,后来才发现上传的资源CSDN收费下载……
现在放到文章里
去年,2020年写的代码
记忆中,accessMazePrime和move函数是在网上搜的代码

生成随机迷宫,设置迷宫难度,Prim算法查找迷宫出口,用户自己走迷宫这几个功能。

/**
 * LF 迷宫 
*/
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>	// 用来定位,刷新指定位置 局部刷新 

#define random(x) (rand()%x)                                        // 生成不重复的随机数 

int ** initMaze(int row, int column);	//优雅                      // 分配地址,初始化迷宫 
void accessMazePrime(int row, int column, int **maze);              // 生成随机迷宫 
void printMaze(int row, int column, int **maze);                    // 打印整个迷宫,局部刷新前调用用来初始化 
void freeMaze(int **maze, int row);                                 // 释放二维迷宫数组空间 
void move(int row, int column, int **maze);	//迷宫移动              // 用户控制迷宫移动 wasd 
void showMain();                                                    // 显示主函数界面 
int ** initVisited(int **visited, int row, int column);             // 初始化一个二维数组,元素值为0或1,标记是否访问过该结点 
void pathFind(int **visited, int **maze, int x, int y, int *DA_x, int *SW_y, int row, int column, int *pFindExitFlag); // 查找迷宫路径,寻找出口 
int selectOption(int smaller, int bigger);                          // 两个参数表示范围,要求:smaller < 返回值 < bigger
void mazeGameDescription();                                         // 游戏说明 
void mazeGame();                                                    // 系统创建迷宫,集成了初始化迷宫,生成迷宫,寻找迷宫出口等功能,在主函数中调用 
int selectSize();                                                   // 选择迷宫尺寸 -- 难度 
void showSelectSizeMenu();                                          // 显示难度菜单 
void showUserOrSystemPathFindMenu();                                // 显示开始游戏的方式,计算机进行游戏,用户进行游戏,在选定难度之后调用 
void systemFindMazeExit(int row, int column, int **maze);           // 计算机查找迷宫出口 
void setMazeBeginAndEnd(int row, int column, int **maze);           // 设置迷宫的起点和终点 
void gotoxy(int x, int y);                                          // 定位指定位置,坐标从(0,0)开始 
void putcharMaze (int mazeNum);                                     // 根据二位数组元素的值打印指定的字符 
void gotoxyAndPutchar (int x, int y, int **maze);                   // 定位指定的坐标(x,y),并根据maze[y][x]的值打印指定的字符,用于局部刷新,gotoxy()和putcharMaze()的集成 
// 猜测不malloc,地址不变   
// malloc 本质上是重新分配了地址空间,所以指针变量指向的地址空间会改变,所以要return 地址给指针变量
// 而其他情况,例如对分配好地址空间的变量,用指针在函数之间传递,改变指针指向的变量的值,其地址不变,不需要return返回变量地址,因为地址并没有改变
// 对指针在函数间传递有了更深的理解,不再是简单的 传递指针,修改变量的值,指针指向的变量不变,有了更深层次的理解,又回归了概念。收获满满。 
int main(void)
{
   
	int option;                                 // 选项 
	while (1) {
   
		showMain();                             // 调用主函数菜单 
		option = selectOption(0,2);             // 获取用户选择 
		switch (option) {
   
			case 1:mazeGame();break;    // 迷宫游戏 
			case 2:mazeGameDescription();break; // 游戏说明 
			case 0:return 0;                    // 退出程序 
			default:; 
		}
		printf("按任意键继续");
		getch();
	}
}

void gotoxyAndPutchar (int x, int y, int **maze)
{
      // 局部刷新 
	gotoxy(x,y);               // 调用函数定位,坐标为(x,y),(0,0)开始 
	putcharMaze(maze[y][x]);   // 根据(x,y)位置对应的maze[y][x]值,输出对应的字符 
}

void gotoxy(int x, int y)
{
   
    //COORD是Windows API中定义的一种结构,表示一个字符在控制台屏幕上的坐标
    COORD cor;
    //句柄 
    HANDLE hout;

    //设定我们要定位到的坐标 
    cor.X = x;
    cor.Y = y;
    //GetStdHandle函数获取一个指向特定标准设备的句柄,包括标准输入,标准输出和标准错误。
    //STD_OUTPUT_HANDLE正是代表标准输出(也就是显示屏)的宏 
    hout = GetStdHandle(STD_OUTPUT_HANDLE);
    //SetConsoleCursorPosition函数用于设置控制台光标的位置
    SetConsoleCursorPosition(hout, cor);
}

void mazeGame()
{
   
	int size;                                                       // 迷宫尺寸 迷宫难度 
	int endFlag = 0;
	while (1) {
   
		showSelectSizeMenu();
		size = selectSize();
		if (size != 0) {
                                               // 判断是否进行游戏,是,选择难度;否,返回主菜单 
			int row, column;
			int **maze;</
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值