偶然翻到了自己大一时候写的一些代码,代码冗余,但还是想保存下来,以作纪念。

文章目录

  • 1.运行效果
  • 2.运行环境
  • 3.完整代码

1.运行效果


2.运行环境

源码(Dev5.4.0版本下可直接(.cpp文件)运行 gcc 4.7.2)

注意:由于部分代码为C11标准,后缀名应改为cpp运行

编译器下载链接:https://pan.baidu.com/s/1Hywq6hxzxMzX1-22ig2HdA
提取码:kd65
下载后解压即可使用

3.完整代码

#include<bits/stdc++.h>
#include<windows.h>
#include<conio.h>
using namespace std;#define MAXN 50//迷宫大小
typedef struct//BFS寻路用
{int x,y;int step;
}Pos;Pos start,finish,path[2500];//起点,终点,路径
int k;//BFS路径标记
int Rank=10;//控制难度,Rank越小难度越大int maze[MAXN][MAXN];
int bookBFS[MAXN][MAXN];//用于BFS是否访问标记
int visit[MAXN][MAXN];//标记BFS的过程void BFS();//BFS最短路径寻路
void Gamer();//用户操作界面
void DrawMaze();//绘制迷宫
void DrawPath();//绘制路径
void choice_level();//选择关卡
void CreateMaze(int,int,int);//创建迷宫
void gotoxy(int,int);//坐标函数
void InitMaze();//初始化迷宫
void load_cartoon();//加载动画
void HideCursor();//隐藏光标
void ShowCursor();//显示光标//加载动画
char cartoon1[20][150] = {{"                                                                    /~/~/                                      "},{"                                                                   /~/~/                                       "},{"                                             Microsotf@             ~ ~     __ XP                              "},{"                                             \\  /\\  / -  _   _|  _  _   _  /_                                "},{"                                              \\/  \\/  | | | |_| |_| \\/\\/  __/                              "},{"                                                                                                               "},{"                                                    _____________________                                      "},{"                                                   │                    │                                      "},{"                                                   └────────────────────┘                                      "},{"                                                                                                               "},{"                                                                                                               "},{"                                                                                                               "},{"                                                                                                               "},{"                                                                                                               "},{"                                                                                                               "},{"                  Copyright ΘMicrosoft Corporation                                            Microsoft*       "},
};char cartoon2[40][150]={{"                                                     健   康   游   戏   忠   告                               "},{"                                                                                                               "},{"                                                                                                               "},{"                                                                                                               "},{"                                                                                                               "},{"                                     抵   制   不   良   游   戏  , 拒   绝   盗   版   游   戏。             "},{"                                                                                                               "},{"                                                                                                               "},{"                                                                                                               "},{"                                                                                                               "},{"                                     注   意   自   我   保   护  , 谨   防   受   骗   上   当。             "},{"                                                                                                               "},{"                                                                                                               "},{"                                                                                                               "},{"                                                                                                               "},{"                                     适   度   游   戏   益   脑  , 沉   迷   游   戏   伤   身。             "},{"                                                                                                               "},{"                                                                                                               "},{"                                                                                                               "},{"                                                                                                               "},{"                                     合   理   安   排   时   间  , 享   受   健   康   生   活。             "},};//Logo
char logo[30][100]={{"      BBBBB                 BBBBBP                              BBBBBBB                   "},{"      SBBBM                 BQBBBQ                              BBBBBBB                   "},{"      BBBBBBB.   iEBBBI     BBBBQE     gBBQP:    BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB "},{"       uBBBBBBv  1BBBBBB    BBBBBb    BQBBBBJ    BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB "},{"        :BBBBBBQ  .BBBBBB.  BBQBBd  iBBBBBB      BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB "},{"         .BQBB5.    BQBQBB  BBBBBq IBBBBBZ       BBBBBB                            BBBBBB "},{"           d.        BBBr   BBBBBq  :RBBi        BBBBBB                            BBBBBB "},{"                            BBBBB2               BBBBBDBBQBBBBBBBBBBBQBBBBBBBBBQBQBBBBBBB "},{"     Ivv7vr77j. 1BBBBBMBBBBBBBBBBBBBQBRQBBBBBR         BQBBBBBBBQBBBBBQBBBBBBBBBQBB       "},{"    :BBBBBBBBB7 KBBQBBBBBBBBBQBQBQBQBBBQBQBBBB         BBBBBB                BBBBBB       "},{"    :BBBBBBBBB: 2BQBBBBBQBBBBBBBBBBBBBBBBBBBBQ         BBBBBB                BBBQBE       "},{"    .BQbQBBBBBi          QBBBBBBB1                     BBBBBB                BBBBBB       "},{"        .BBBBBi        7QBBBQBQBBL BB:                 BBBBBBBBBQBBBBBBBBBBBBBQBBBQ       "},{"        iBBBBBi      :BBBBBBBBBBBBBBBBBs               BBBBBBBBBBBBQBBBBBBBBBBBQBBM       "},{"        iBBBBB:    :BBBBQBg MBQBBMEBBBBBQd                                                "},{"        rBBBBB:  iBBBQBBBU  BBBBBj .BQBBBBBM:       BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB    "},{"        iBBBBB. BBBBBBBB.   BBQBBb   :QBBBBBBK      BBBBQBBBBBBBBBQBQBBBBBBBBBBBBBQBBB    "},{"        :QBBBQ. .QBBBBY     BBBBBd     iBBBBr       BBBBBBBBBBBQBBBBBBBQBBBQBBBBBBBBBB    "},{"        LBBBBB7   :B2       QBBBBg       sZ         BBBBBB                      BBBBQB    "},{"      rBBBBBBBBM.           BBBQB1                  BQBBBB                      BBBBBB    "},{"    iBBBBBBBQBBBBBE                                 BBBBQB                      BBBBBB    "},{"    .BBBBQBSBBBBBBBQBQBBBBBBBBBBBBBBBBBBBBBBBB.     BBBBBQBBBBBQBBBQBBBBBBBBBBBBBBBBBB    "},{"     vBBQB.  rBBQBQBQBBBQBBBQBBBBBQBBBBBBBBBBv      BBQBBBBBQBBBBBQBQBBBBBBBBBBBQBBBBB    "},{"      BBr        sPDQMQBBBBBBBBBBBBBBQBBBBBBB       BQBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB    "},{"                                                    BBBBBB                      BBBBBB    "},{"                                                                                          "},{"                                           制       作                                    "},{"                                                                                          "},{"                                           山       河                                    "}
};//坐标函数
void gotoxy(int x, int y)
{HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);COORD pos;pos.X = x;pos.Y = y;SetConsoleCursorPosition(handle, pos);
}//隐藏光标
void HideCursor()
{CONSOLE_CURSOR_INFO cursor_info={1,0};SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);
}//显示光标
void ShowCursor()
{CONSOLE_CURSOR_INFO cursor_info={1,1};SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);
}//初始化迷宫
void InitMaze()
{for(int i=0;i<MAXN;i++)for(int j=0;j<MAXN;j++)maze[i][j]=1;for(int i=0;i<MAXN;i++){maze[i][0]=0;maze[0][i]=0;maze[MAXN-1][i]=0;maze[i][MAXN-1]=0;}k=0;memset(bookBFS,0,sizeof(bookBFS));memset(path,0,sizeof(path));memset(visit,0,sizeof(visit));
}//创建仅有一条路径的迷宫
void CreateMaze(int x, int y,int Rank) {maze[x][y] = 0;//确保四个方向随机//每一次挖的顺序不同,如前左右,右前左int dir[4][2] = { { 1,0 },{ -1,0 },{ 0,1 },{ 0,-1 } };for (int i = 0; i < 4; i++) {int r = rand() % 4;//随机交换int temp = dir[0][0];dir[0][0] = dir[r][0];dir[r][0] = temp;temp = dir[0][1];dir[0][1] = dir[r][1];dir[r][1] = temp;}//向四周开挖for (int i = 0; i < 4; i++) {int dx = x;int dy = y;//控制挖的距离,由Rank来调整大小int range = 1 + (Rank == 0 ? 0 : rand() % Rank);while (range>0) {dx+=dir[i][0];dy+=dir[i][1];//排除掉回头路if (maze[dx][dy] == 0) break;//判断是否挖穿路径int count = 0;for (int j = dx - 1; j < dx + 2; j++)for (int k = dy - 1; k < dy + 2; k++)if (abs(j - dx) + abs(k - dy) == 1 && maze[j][k] == 0) count++;if (count > 1)break;//确保不会挖穿时,前进range--;maze[dx][dy] = 0;}if (range <= 0)CreateMaze(dx,dy,Rank);}
}void DrawMaze()
{//入口maze[2][1]=0;start.x=2;start.y=1;start.step=0;//出口for(int i=MAXN-3;i>=0;i--)if(maze[i][MAXN-3]==0){maze[i][MAXN-2]=0;finish.x=i;finish.y=MAXN-2;finish.step=0;break;}for(int i=0;i<MAXN;i++){for(int j=0;j<MAXN;j++){if(maze[i][j]==1)cout<<"■";else cout<<"  ";}cout<<endl;}
}//迷宫寻路BFS,当迷宫只有一条路径,用BFS更省时
void BFS()
{queue<Pos>q;q.push(start);int dx[4]={0,1,0,-1},dy[4]={1,0,-1,0};bookBFS[start.x][start.y]=1;int flag=0;while(q.size()!=0){Pos t=q.front();q.pop();if(t.x==finish.x&&t.y==finish.y)//找到终点{flag=1;finish.step=t.step;Pos t=finish;//倒推路径while(!(t.x==start.x&&t.y==start.y))//不在起点的时候{path[k].x=t.x;path[k++].y=t.y;int dx[4]={0,1,0,-1},dy[4]={1,0,-1,0};for(int i=0;i<4;i++){Pos s=t;s.x+=dx[i];s.y+=dy[i];if(s.x<=0||s.x>MAXN-2||s.y<=0||s.y>MAXN-2||maze[s.x][s.y]==1)continue;//超出范围if(visit[s.x][s.y]==visit[t.x][t.y]-1){t.x=s.x;t.y=s.y;break;}//倒退回去}}path[k]=start;//放入起点}if(flag==1)break;//向四个方向扩展for(int i=0;i<4;i++){Pos p=t;p.x+=dx[i];p.y+=dy[i];p.step++;if(p.x<=0||p.x>MAXN-2||p.y<=0||p.y>MAXN-2||maze[p.x][p.y]==1||bookBFS[p.x][p.y]==1)continue;bookBFS[p.x][p.y]=1;visit[p.x][p.y]=p.step;q.push(p);}}
}//绘制最短路径BFS
void DrawPath()
{//路径坐标int flag=0;int dx[4]={-1,1,0,0},dy[4]={0,0,-1,1};string road;for(int i=k;i>=0;i--){if(flag==0){flag=1;road="──";}//第一次进入Pos t=path[i];//当前打印位置if(flag==1&&i!=0){Pos s=path[i+1];//存储上一个位置Pos p=path[i-1];//存储下一个位置int tx1,tx2,ty1,ty2;tx1=t.x-s.x;ty1=t.y-s.y;tx2=t.x-p.x;ty2=t.y-p.y;//"┘""┐""└""┌""──""│"if((tx1==-1&&tx2== 1&&ty1== 0&&ty2== 0)||(tx1== 1&&tx2==-1&&ty1== 0&&ty2== 0))road="│";if((tx1== 0&&tx2== 0&&ty1== 1&&ty2==-1)||(tx1== 0&&tx2== 0&&ty1==-1&&ty2== 1))road="──";if((tx1== 0&&tx2==-1&&ty1== 1&&ty2== 0)||(tx1==-1&&tx2== 0&&ty1== 0&&ty2== 1))road="┐";if((tx1== 1&&tx2== 0&&ty1== 0&&ty2==-1)||(tx1== 0&&tx2== 1&&ty1==-1&&ty2== 0))road="└";if((tx1==-1&&tx2== 0&&ty1== 0&&ty2==-1)||(tx1== 0&&tx2==-1&&ty1==-1&&ty2== 0))road="┌";if((tx1== 1&&tx2== 0&&ty1== 0&&ty2== 1)||(tx1== 0&&tx2== 1&&ty1== 1&&ty2== 0))road="┘";}if(i==0)road="─";//出口位置gotoxy(2*t.y,t.x);//每个方格占两个单位cout<<road;}
}//玩家控制界面
void Gamer()
{int x=2;int y=1;//maze行,列int posx=2;int posy=2;//横着每次变化2,竖着每次移动变化1,这个是坐标int stepx=2*MAXN+19,stepy=26;//步数刷新的位置char ch1,ch2;int gamerstep=0;//玩家走的步数//隐藏光标HideCursor();//绘制gotoxy(posx,posy);cout<<"●";//绘制起点gotoxy(2*MAXN+5,2);cout<<"当前关卡:"<<10-Rank;gotoxy(2*MAXN+5,5);cout<<"方 向 控 制";gotoxy(2*MAXN+10,9);cout<<"W";gotoxy(2*MAXN+7,11);cout<<"A  S  D";gotoxy(2*MAXN+10,15);cout<<"或";gotoxy(2*MAXN+10,19);cout<<"↑";gotoxy(2*MAXN+6,22);cout<<"←  ↓  →";gotoxy(2*MAXN+3,26);cout<<"您 走 的 步 数:";gotoxy(2*MAXN+3,30);cout<<"按下列选项序号即可呼出选择";gotoxy(2*MAXN+3,34);cout<<"1 .查看最短路径";gotoxy(2*MAXN+3,38);cout<<"2 .重新选择关卡";gotoxy(2*MAXN+3,42);cout<<"3 .退出游戏";while(!(x==finish.x&&y==finish.y)){//同时启用wasd和方向键ch1=getch();if(ch1==-32)//方向键为双键值{ch2=getch();switch(ch2){case 72:ch1='w';break;//上case 80:ch1='s';break;//下case 75:ch1='a';break;//左case 77:ch1='d';break;//右default: break;}}switch(ch1){case 'w':case 'W':if(maze[x-1][y]==0){gotoxy(posx,posy);cout<<"  ";x--;posy--;gamerstep++;gotoxy(posx,posy);cout<<"●";gotoxy(stepx,stepy);cout<<gamerstep;//实时刷新走的步数}break;case 's':case 'S':if(maze[x+1][y]==0){gotoxy(posx,posy);cout<<"  ";x++;posy++;gamerstep++;gotoxy(posx,posy);cout<<"●";gotoxy(stepx,stepy);cout<<gamerstep;}break;case 'a':case 'A':if(maze[x][y-1]==0&&y-1>=1){gotoxy(posx,posy);cout<<"  ";y--;posx-=2;gamerstep++;gotoxy(posx,posy);cout<<"●";gotoxy(stepx,stepy);cout<<gamerstep;}break;case 'd':case 'D':if(maze[x][y+1]==0){gotoxy(posx,posy);cout<<"  ";y++;posx+=2;gamerstep++;gotoxy(posx,posy);cout<<"●";gotoxy(stepx,stepy);cout<<gamerstep;}break;case  '1':BFS();DrawPath();gotoxy(2*MAXN+3,46);cout<<"最少要走:"<<finish.step<<"步";break;case  '2':choice_level();return ;case  '3':system("cls");return ;}}system("cls");int grade=100-(gamerstep-finish.step),choice=0;if(grade<=0)grade=0;gotoxy(79,12);cout<<"恭喜你通过了本关";gotoxy(80,16);cout<<"您的得分为:"<<grade;gotoxy(70,20);cout<<"温馨提示:用的步数越少,得分越高哦^.^!"<<endl;gotoxy(79,24);cout<<"是否继续下一关";gotoxy(79,28);cout<<"1. 是     2.否";gotoxy(82,32);cin>>choice;if(choice==1){InitMaze();CreateMaze(2,1,--Rank);system("cls");DrawMaze();Gamer();}else{system("cls");return;}}void load_cartoon()
{//动态加载页面int i,l, j;gotoxy(25, 15);for (i = 0; i <= 16; i++){cout<<cartoon1[i];gotoxy(25,16+i);Sleep(100);}for (l = 0; l < 3; l++){ //动态加载开机页面for (i = 53; i <= 71; i = i + 2){for (j = i - 4; j <= i; j = j + 2){if (j >= 53 && j <= 70){gotoxy(j+25, 22);printf("[]");}Sleep(100);}for (j = i - 4; j <= i; j = j + 2){if (j >= 53 && j <= 70){gotoxy(j+25, 22);printf("  ");}}}}//隐藏光标HideCursor();//游戏忠告system("cls");for (i = 0; i <= 20; i++){gotoxy(25, 10+i);cout<<cartoon2[i];}Sleep(4000);//展示logosystem("cls");for (i = 0; i <30; i++){   gotoxy(40,10+i);cout<<logo[i];}Sleep(3000);
}//关卡选择界面
void choice_level()
{ShowCursor();system("cls");int level;gotoxy(75,20);cout<<"请输入你要选择的关卡(1-10):";cin>>level;Rank=10-level;InitMaze();CreateMaze(2,1,Rank);//重新初始化system("cls");DrawMaze();Gamer();
}int main()
{srand((unsigned)time(NULL));//用时间做随机数种子system("mode con cols=200 lines=100");system("color 00");load_cartoon();system("color 70");choice_level();gotoxy(75,20);system("pause");return 0;
}

【C语言小游戏】走迷宫相关推荐

  1. C语言小项目——走迷宫

    C语言小项目--走迷宫 设计方向: 1.定义二维字符数组作为迷宫 2.定义变量记录老鼠的位置 3.判定移动后位置的变化 4.记录游戏时长 5.判定到达终点的条件 总体设计: 1.用不同字符代表墙.老鼠 ...

  2. C语言学习:简单的小游戏 走迷宫、推箱子

    目录 一.走迷宫分析: 走迷宫代码展示 二.推箱子分析: 推箱子代码展示 一.走迷宫分析: 数据分析:         1.定义二维字符数组作为迷宫地图         2.定义变量记录角色的位置 x ...

  3. 简单的小游戏 ——走迷宫 哈哈。

    // 121223 走迷宫ah.cpp : 定义控制台应用程序的入口点. // /* * Copyright (c) 2012, 烟台大学计算机学院 * All rights reserved. * ...

  4. C++小游戏——走迷宫

    大家想不想成名,那就一步步来吧,先写一些小游戏热热身. 下载地址 主程序代码: #include<conio.h> #include<stdlib.h> #include< ...

  5. python小游戏 走迷宫小游戏设计与实现

    文章目录 0 项目简介 1 课题背景 2 实现效果 3 Pygame介绍 4 具体实现 4.1 创建迷宫 4.2 定义角色类 4.3 界面切换 5 最后 0 项目简介

  6. java小游戏——走迷宫

    main类 public class Main {public static void main(String[] args){new PreviousSynopsis();} } PreviousS ...

  7. c语言大作业走迷宫,C语言笔记07_小游戏设计——“走迷宫”

    C语言07 小游戏设计--走迷宫 目标: 我们要设计一个完整的小游戏"走迷宫".你将可以通过控制键盘上的"W"."S"."A&qu ...

  8. c语言自动按键脚本,C语言键盘控制走迷宫小游戏

    本文实例为大家分享了C语言键盘控制走迷宫小游戏的具体代码,供大家参考,具体内容如下 在看了<啊哈C语言>之后想写一个游戏demo 游戏的截图 首先是启动界面 然后是初始化 接下来是键盘操控 ...

  9. 手动搜索迷宫游戏 c语言,C语言实现一个走迷宫小游戏(深度优先算法)

    接上一篇万年历博文,还是那位朋友的练习题.这次是使用C语言做一个小游戏程序,三选一(2048.8皇后和迷宫游戏),我选择的是迷宫(文章末尾有程序截图).个人认为这个程序的难点在于迷宫地图的绘制,也就是 ...

  10. C语言小游戏-五子棋

    C语言小游戏-五子棋 全部代码如下: #include <easyx.h> #include <graphics.h> #include <conio.h> #in ...

最新文章

  1. 《科学》杂志展望2020年十大科学头条
  2. java 持续集成工具_Jenkins集成式项目控件下载
  3. 如何将IDEA文件提交至Gitee仓库
  4. 华为3Com Quidway 2116-SI
  5. 手机知识:NFC是什么,有什么用?看完你就明白了!
  6. C++ 构建最小堆、最大堆
  7. tableau三轴该怎么做_如何用tableau绘制城市地铁线路图?
  8. linux 修改网卡报错xe,centos修改端口出现Failed to start OpenSSH server daemon 启动报错和-xe报错的解决方法...
  9. Java中使用JNA实现全局监听Windows键盘事件
  10. radiobutton 设置为不能点击_谷歌要求:安卓 11 相机默认不能设置为“美颜”模式...
  11. 韩顺平 java笔记 第8讲 this 类变量 第9讲 类方法
  12. 射频放大电路的优化及ADS仿真
  13. 【软件工程基础】数独生成器以及解答器
  14. 【C语言】斐波那契数列
  15. linux进阶-PHP加速器
  16. 计算机30秒自动更换的桌面软件,无需任何软件即可在计算机上的多个桌面墙纸之间自动切换...
  17. mac制作u盘启动盘
  18. android手机短信诈骗原理,安卓系统均存短信欺诈漏洞 专家:系统先天不足
  19. 第六章第九题(英尺和米之间的转换)(Conversions between feet and meters)
  20. 古月居 ROS 入门21讲--PA18 tf坐标系广播与监听的编程实现笔记

热门文章

  1. 面试官问现在工资是多少,该怎么回答?
  2. netstat 查看网络状态
  3. 2017年7月19日晚作业
  4. 编写高质量代码改善C#程序的157个建议——建议38:小心闭包中的陷阱
  5. CORS(跨域资源共享) 的配置
  6. C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V110\Microsoft.CppCommon.targets(611,5): error MSB
  7. linux监控程序-程序自动重启方法(转)
  8. GTK真不容易,资料少,学得人也少!
  9. 还怕没女朋友吗?用python做个表白吧
  10. 如何测网络稳定性_功率计如何测准极限低功率小信号