6.C语言迷宫程序界面版

写迷宫程序首先需要安装图形库easyX 安装地址链接:https://pan.baidu.com/s/1qZwFn3m 密码:ozge

项目截图:

//左上角是七点,右下角是终点,蓝色表示的是走过的路径,红色表示的是当前位置,采用的是深度优先遍历

mg.h

 1 #pragma once
 2 #define _CRT_SECURE_NO_WARNINGS
 3 #include <stdio.h>
 4 #include <graphics.h>
 5 #include <mmsystem.h>
 6 #include <stdlib.h>
 7 #include <time.h>
 8 #include <string.h>
 9 #include "conio.h"
10 #pragma comment(lib,"winmm.lib")
11
12 //每一个格子的像素
13 #define ELEM  20
14 //界面的宽和高
15 #define WINDOW_WIDTH 500
16 #define WINDOW_HEIGHT 500
17
18 //枚举四个方向
19 typedef enum DIR{ up = 72, down = 80, left = 75, right = 77}DIR;
20
21 //当前到的位置
22 int cur_x, cur_y;
23 //一共走的步数
24 int total_count = 0;
25
26 //初始化游戏
27 void GameInit();
28 //绘制游戏
29 void GamePaint();
30 //判断能不能走
31 bool judge(int cur_x, int cur_y, char dir);
32 //人工操作移动
33 void move();
34 //判断能否成功走出来
35 bool judgeSuc(int,int);

main.cpp

  1 #include "mg.h"
  2
  3 //初始化地图
  4 //0表示没走过的点,1表示障碍,2表示当前在的位置,3表示已经走过的路径
  5 int map[WINDOW_HEIGHT / ELEM][WINDOW_WIDTH / ELEM] = { 0 };
  6
  7 void main()
  8 {
  9     //初始化游戏
 10     GameInit();
 11     //以下是实现人工操作
 12     //while (1)
 13     //{
 14     //    //如果没有键盘按下
 15     //    while (!_kbhit())
 16     //    {
 17     //        GamePaint();
 18     //        run(cur_x, cur_y);
 19     //    }
 20     //    move();
 21     //}
 22     system("pause");
 23 }
 24
 25 //初始化游戏界面,并初始化地图
 26 void GameInit()
 27 {
 28     //设置窗口大小
 29     initgraph(WINDOW_HEIGHT, WINDOW_WIDTH);
 30     //设置窗口颜色
 31     setbkcolor(LIGHTGRAY);
 32     //强制绘图,显示界面
 33     cleardevice();
 34
 35     //初始化时间种子,随机生成一个地图,并且判断地图能不能走出来
 36     srand(time(0));
 37     do
 38     {
 39         for (int i = 0; i < WINDOW_HEIGHT / ELEM; i++)
 40         {
 41             for (int j = 0; j < WINDOW_WIDTH / ELEM; j++)
 42             {
 43                 int num = rand() % 10;
 44                 if (num < 7)
 45                     map[i][j] = 0;
 46                 else
 47                     map[i][j] = 1;
 48             }
 49         }
 50         //左上角位置是人的初始位置
 51         map[0][0] = 2;
 52         //右下角
 53         map[WINDOW_HEIGHT / ELEM - 1][WINDOW_WIDTH / ELEM - 1] = 0;
 54         GamePaint();
 55     } while (judgeSuc(0,0) == false);//如果不能走出来则继续生成迷宫
 56 }
 57
 58 //绘制
 59 void GamePaint()
 60 {
 61     //按行绘制
 62     for (int y = 0; y < WINDOW_HEIGHT / ELEM; y++)
 63     {
 64         for (int x = 0; x < WINDOW_WIDTH / ELEM; x++)
 65         {
 66             //没有走过
 67             if (map[y][x] == 0 )
 68             {
 69                 //设置画笔颜色
 70                 setcolor(RED);
 71                 //设置填充颜色
 72                 setfillcolor(DARKGRAY);
 73                 //填充矩形
 74                 fillrectangle(x*ELEM, y*ELEM, (x + 1)*ELEM, (y + 1)*ELEM);
 75                 //画矩形
 76                 rectangle(x*ELEM, y*ELEM, (x + 1)*ELEM, (y + 1)*ELEM);
 77             }
 78
 79             //障碍物
 80             if (map[y][x] == 1)
 81             {
 82                 setcolor(RED);
 83                 setfillcolor(BLACK);
 84                 fillrectangle(x*ELEM, y*ELEM, (x + 1)*ELEM, (y + 1)*ELEM);
 85                 rectangle(x*ELEM, y*ELEM, (x + 1)*ELEM, (y + 1)*ELEM);
 86             }
 87
 88             //当前位置
 89             if (map[y][x] == 2)
 90             {
 91                 setcolor(RED);
 92                 setfillcolor(RED);
 93                 fillrectangle(x*ELEM, y*ELEM, (x + 1)*ELEM, (y + 1)*ELEM);
 94                 rectangle(x*ELEM, y*ELEM, (x + 1)*ELEM, (y + 1)*ELEM);
 95             }
 96
 97             //已经走过的路径
 98             if (map[y][x] == 3)
 99             {
100                 setcolor(RED);
101                 setfillcolor(GREEN);
102                 fillrectangle(x*ELEM, y*ELEM, (x + 1)*ELEM, (y + 1)*ELEM);
103                 rectangle(x*ELEM, y*ELEM, (x + 1)*ELEM, (y + 1)*ELEM);
104             }
105         }
106     }
107 }
108
109 //判断能不能走
110 bool judge(int cur_x,int cur_y,char dir)
111 {
112     switch (dir)
113     {
114     case up:
115         if (cur_y - 1 < 0 || map[cur_y - 1][cur_x] == 1 || map[cur_y - 1][cur_x] == 3)
116         {
117             return false;
118         }
119         break;
120     case down:
121         if (cur_y + 1 > WINDOW_HEIGHT / ELEM - 1 || map[cur_y + 1][cur_x] == 1 || map[cur_y + 1][cur_x] == 3)
122         {
123             return false;
124         }
125         break;
126     case left:
127         if (cur_x - 1 < 0 || map[cur_y][cur_x - 1] == 1 || map[cur_y][cur_x - 1] == 3)
128         {
129             return false;
130         }
131         break;
132     case right:
133         if (cur_x + 1 >  WINDOW_HEIGHT / ELEM - 1 || map[cur_y][cur_x + 1] == 1 || map[cur_y][cur_x + 1] == 3)
134         {
135             return false;
136         }
137         break;
138     }
139
140     return true;
141 }
142
143
144 //判断地图能否走出去
145 bool judgeSuc(int cur_x, int cur_y)
146 {
147     total_count++;//走一次步数加一
148     map[cur_y][cur_x] = 3;//把走过的标记
149
150     if (cur_x == WINDOW_WIDTH / ELEM - 1 && cur_y == WINDOW_HEIGHT / ELEM - 1)
151     {
152         char res[100];
153         sprintf(res, "成功走出迷宫,一共走了%d步", total_count);
154         MessageBoxA(0,res, "提示",0);
155         //return true;
156         return false;
157     }
158     else
159     {
160         //右下左上
161         if (judge(cur_x, cur_y, right))
162         {
163             //下一个走到的位置设置为2
164             map[cur_y][cur_x + 1] = 2;
165             //绘制当前状态,并且等待100ms
166             GamePaint();
167             Sleep(100);
168             //从下一个位置开始走
169             judgeSuc(cur_x+1, cur_y);
170             //递归还原
171             total_count--;
172         }
173
174         if (judge(cur_x, cur_y, down))
175         {
176             map[cur_y + 1][cur_x] = 2;
177             GamePaint();
178             Sleep(100);
179             judgeSuc(cur_x, cur_y+1);
180             total_count--;
181         }
182
183         if (judge(cur_x, cur_y, left))
184         {
185             map[cur_y][cur_x - 1] = 2;
186             map[cur_y][cur_x] = 0;
187             GamePaint();
188             Sleep(100);
189             judgeSuc(cur_x-1, cur_y);
190             total_count--;
191         }
192
193         if (judge(cur_x, cur_y, up))
194         {
195             map[cur_y - 1][cur_x] = 2;
196             map[cur_y][cur_x] = 0;
197             GamePaint();
198             Sleep(100);
199             judgeSuc(cur_x, cur_y-1);
200             total_count--;
201         }
202
203         if (total_count == 1)
204         {
205             return false;
206         }
207     }
208 }
209
210 //向各个方向移动
211 void move()
212 {
213     //方向
214     char dir;
215     dir = _getch();
216
217     //各个方向判断
218     switch (dir)
219     {
220     case up:
221         if (judge(cur_x, cur_y, up))
222         {
223             map[cur_y - 1][cur_x] = 2;
224             map[cur_y][cur_x] = 0;
225             cur_y -= 1;
226         }
227         break;
228     case down:
229         if (judge(cur_x, cur_y, down))
230         {
231             map[cur_y + 1][cur_x] = 2;
232             map[cur_y][cur_x] = 0;
233             cur_y += 1;
234         }
235         break;
236     case left:
237         if (judge(cur_x, cur_y, left))
238         {
239             map[cur_y][cur_x - 1] = 2;
240             map[cur_y][cur_x] = 0;
241             cur_x -= 1;
242         }
243         break;
244     case right:
245         if (judge(cur_x, cur_y, right))
246         {
247             map[cur_y][cur_x + 1] = 2;
248             map[cur_y][cur_x] = 0;
249             cur_x += 1;
250         }
251         break;
252     }
253 }

原文地址:https://www.cnblogs.com/xiaochi/p/8297707.html

时间: 2024-11-03 01:35:52

6.C语言迷宫程序界面版的相关文章

游戏2048源代码 - C语言控制台界面版

完整源代码如下,敬请读者批评指正: 1 /* 2 * Copyright (C) Judge Young 3 * E-mail: [email protected] 4 * Version: 1.0 5 */ 6 7 #include <stdio.h> 8 #include <time.h> /* 包含设定随机数种子所需要的time()函数 */ 9 #include <conio.h> /* 包含Windows平台上完成输入字符不带回显和回车确认的getch()函数

Javascript基础练习之实现C语言经典程序题

前言: 最近在学习Javascript语言,看到网上很多都是在介绍Javascript如何解决网页上问题的代码,所以想另辟蹊径,用Javascript代码来实现C语言经典程序题.当然,这些C语言程序题也是比较简单,主要想通过Javascript语言实现,起到语法练习作用,也想来对比一下C语言和Javascript语言实现的相同点和不同点,从而巩固记忆,加强学习效果!!! 一.C语言经典程序题1 1. 题目描述: 马克思的手稿中有这样一道有趣的数学题:有30个人,其中有男人,女人,小孩.他们在一家

《Go语言入门》第一个Go语言Web程序——简单的Web服务器

概述 上一篇讲了 <Go语言入门>第一个Go语言程序--HelloWorld,接下来讲一下Go语言Web开发入门必修课:第一个Go语言Web程序--简单的Web服务器. 与其它Web后端语言不同,Go语言需要自己编写Web服务器. 有关本地环境的搭建与基础学习,请参考: <Go语言入门>如何在Windows下安装Go语言编程环境 Go语言Web应用:IBM的云平台Bluemix使用初体验--创建Go语言 Web 应用程序,添加并使用语言翻译服务 Web服务器代码 Google在ht

Linux下简单C语言小程序的反汇编分析

韩洋原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 写在开始,本文为因为参加MOOC相关课程而写的作业,如有疏漏,还请指出. 选了一门Linux内核分析课程,因为阅读内核代码中或多或少要涉及到At&T汇编代码的阅读,所以这里写下一个对一个简单C命令行程序的反汇编分析过程,一方面完成作业,另一方面当作练手.下面开始: 1.编写我们的C语言小程序 这里我们使用简单的例子,代码如下: 1

VS2012+C语言+设置程序开机自动启动+示例

#include <stdio.h> #include <windows.h> #include <stdlib.h> char* ReplaceString(const char *srcStr, const char *src, const char *dest) //替换字符串,获得文件路径 { char *ptr; int len = strlen(srcStr); ptr = (char*)malloc(sizeof(char)*len+1); strcpy(

windows系统下c语言暂停程序

原文:windows系统下c语言暂停程序 windows系统下,很多C语言初学者的调试时,往往没看到结果程序就退出了,据我所知的方法主要有以下几种 方法一: #include int main() { system("pause");//利用了DOS命令,按任意键继续 return 0; } 方法二: #include int main() { getchar();//须按回车键结束,不是任意键 return 0; }

R语言记录程序运行的时间

f <- function(start_time) { start_time <- as.POSIXct(start_time) dt <- difftime(Sys.time(), start_time, units="secs") # Since you only want the H:M:S, we can ignore the date... # but you have to be careful about time-zone issues format(

C语言应用程序的内存图

1.综述 c语言应用程序加载到内存,这时它所占据的内存分为四个区,分别为栈Stack,堆Heap,静态存储区Static Area,代码存储区Code Area,这四个区分别放置应用程序的不同部分,从而便于操作系统管理. 2.Windows应用程序内存图如下

C语言编程程序的内存如何布局

重点关注以下内容: C语言程序在内存中各个段的组成 C语言程序连接过程中的特性和常见错误 C语言程序的运行方式 一:C语言程序的存储区域 由C语言代码(文本文件)形成可执行程序(二进制文件),需要经过编译-汇编-连接三个阶段.编译过程把C语言文本文件生成汇编程序,汇编过程把汇编程序形成二进制机器代码,连接过程则将各个源文件生成的二进制机器代码文件组合成一个文件. C语言编写的程序经过编译-连接后,将形成一个统一文件,它由几个部分组成.在程序运行时又会产生其他几个部分,各个部分代表了不同的存储区域