当前位置: 首页 > news >正文

随机迷宫(简单)

//源代码转自:https://vijos.org/discuss/5d65f0b4f413620449abf6f2#1566961910
//新代码转自:https://www.luogu.com.cn/blog/369209/sui-ji-mi-gong
#include <stdio.h>
#include <conio.h>
#include <windows.h>
#include <time.h>
#define Height 25 //迷宫的高度,必须为奇数
#define Width 25 //迷宫的宽度,必须为奇数
#define Wall 1
#define Road 0
#define Start 2
#define End 3
#define Esc 5
#define Up 1
#define Down 2
#define Left 3
#define Right 4
int map[Height+2][Width+2];
void gotoxy(int x,int y) { //移动坐标COORD coord;coord.X=x;coord.Y=y;SetConsoleCursorPosition( GetStdHandle( STD_OUTPUT_HANDLE ), coord );
}
void hidden() { //隐藏光标HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);CONSOLE_CURSOR_INFO cci;GetConsoleCursorInfo(hOut,&cci);cci.bVisible=0;//赋1为显示,赋0为隐藏SetConsoleCursorInfo(hOut,&cci);
}
void create(int x,int y) { //随机生成迷int c[4][2]= {0,1,1,0,0,-1,-1,0}; //四个方向int i,j,t;
//将方向打乱for(i=0; i<4; i++) {j=rand()%4;t=c[i][0];c[i][0]=c[j][0];c[j][0]=t;t=c[i][1];c[i][1]=c[j][1];c[j][1]=t;}map[x][y]=Road;for(i=0; i<4; i++)if(map[x+2*c[i][0]][y+2*c[i][1]]==Wall) {map[x+c[i][0]][y+c[i][1]]=Road;create(x+2*c[i][0],y+2*c[i][1]);}
}
int get_key() { //接收按键char c;while(c=getch()) {if(c==27) return Esc; //Escif(c!=-32)continue;c=getch();if(c==72) return Up; //上if(c==80) return Down; //下if(c==75) return Left; //左if(c==77) return Right; //右}return 0;
}
void paint(int x,int y) { //画迷宫gotoxy(2*y-2,x-1);switch(map[x][y]) {case Start:printf("入");break; //画入口case End:printf("出");break; //画出口case Wall:printf("▇");break; //画墙case Road:printf("  ");break; //画路}
}
void game() {int x=2,y=1; //玩家当前位置,刚开始在入口处int c; //用来接收按键while(1) {gotoxy(2*y-2,x-1);SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);printf("▇▇"); //画出玩家当前位置SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_BLUE|FOREGROUND_RED|FOREGROUND_GREEN);if(map[x][y]==End) { //判断是否到达出口gotoxy(30,24);printf("到达终点,按任意键结束");getch();break;}c=get_key();if(c==Esc) {gotoxy(0,24);break;}switch(c) {case Up: //向上走if(map[x-1][y]!=Wall) {paint(x,y);x--;}break;case Down: //向下走if(map[x+1][y]!=Wall) {paint(x,y);x++;}break;case Left: //向左走if(map[x][y-1]!=Wall) {paint(x,y);y--;}break;case Right: //向右走if(map[x][y+1]!=Wall) {paint(x,y);y++;}break;}}
}
int main() {int i,j;srand((unsigned)time(NULL)); //初始化随即种子hidden(); //隐藏光标for(i=0; i<=Height+1; i++)for(j=0; j<=Width+1; j++)if(i==0||i==Height+1||j==0||j==Width+1) //初始化迷宫map[i][j]=Road;else map[i][j]=Wall;create(2*(rand()%(Height/2)+1),2*(rand()%(Width/2)+1)); //从随机一个点开始生成迷宫,该点行列都为偶数for(i=0; i<=Height+1; i++) { //边界处理map[i][0]=Wall;map[i][Width+1]=Wall;}for(j=0; j<=Width+1; j++) { //边界处理map[0][j]=Wall;map[Height+1][j]=Wall;}map[2][1]=Start; //给定入口map[Height-1][Width]=End; //给定出口for(i=1; i<=Height; i++)for(j=1; j<=Width; j++) //画出迷宫paint(i,j);game(); //开始游戏getch();return 0;
}

  

http://www.jsqmd.com/news/182714/

相关文章:

  • App Store审核指南:顺利通过苹果对Sonic应用的审查
  • 海光DCU应用尝试:Sonic在信创环境下的运行状况
  • 负载均衡配置:保障Sonic在高并发下稳定运行
  • 隐私保护政策:用户上传的图片音频不会被留存滥用
  • 大润发购物卡高效回收变现平台大揭秘 - 京顺回收
  • 行业解决方案:针对电商/教育/医疗定制Sonic专属版本
  • 京东云合作计划:联合推广Sonic电商数字人解决方案
  • 创业公司扶持计划:为初创团队提供Sonic算力赞助
  • 渠道分销体系:发展代理商销售Sonic生成服务
  • 容器化部署实践:使用Docker运行Sonic各个微服务
  • Token计费模式设计:为Sonic API调用制定合理定价
  • 洛谷P4343 [SHOI2015] 自动刷题机 「题解」 - CH
  • gdb笔记
  • 成本中心会计报表显示货币问题
  • Google Play发布流程:面向海外用户推出Sonic服务
  • CI/CD流水线搭建:自动化测试与发布Sonic新版本
  • 《科学》杂志历年十大科学突破概览(2000-2025)
  • Arduino IDE - ukyo-
  • 新华三解决方案:提供从硬件到Sonic软件的一体机
  • [ABC217G] Groups 题解
  • Qwen3-4B大模型完整指南:从零开始掌握思维模式切换
  • Sonic与其他数字人模型(如Wav2Lip)效果对比评测
  • 商业模式画布:重新定义Sonic的价值主张与客户关系
  • 市场调研问卷:了解用户期望的Sonic新功能
  • 火山引擎技术支持:借助字节跳动生态放大Sonic声量
  • KOL合作名单:寻找愿意体验并推荐Sonic的意见领袖
  • 监控告警系统:实时掌握Sonic各组件运行状态
  • HoneySelect2终极补丁安装与优化完整指南
  • phome_enewsbqtemp 数据表字段解释(标签模板表)
  • Nextflow 完整入门指南:从零掌握工作流管理