6.C语言迷宫程序界面版
生活随笔
收集整理的這篇文章主要介紹了
6.C语言迷宫程序界面版
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
寫迷宮程序首先需要安裝圖形庫easyX 安裝地址鏈接:https://pan.baidu.com/s/1qZwFn3m 密碼:ozge
項(xiàng)目截圖:
//左上角是七點(diǎn),右下角是終點(diǎn),藍(lán)色表示的是走過的路徑,紅色表示的是當(dāng)前位置,采用的是深度優(yōu)先遍歷
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 //每一個(gè)格子的像素 13 #define ELEM 20 14 //界面的寬和高 15 #define WINDOW_WIDTH 500 16 #define WINDOW_HEIGHT 500 17 18 //枚舉四個(gè)方向 19 typedef enum DIR{ up = 72, down = 80, left = 75, right = 77}DIR; 20 21 //當(dāng)前到的位置 22 int cur_x, cur_y; 23 //一共走的步數(shù) 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 //人工操作移動(dòng) 33 void move(); 34 //判斷能否成功走出來 35 bool judgeSuc(int,int);main.cpp
1 #include "mg.h" 2 3 //初始化地圖 4 //0表示沒走過的點(diǎn),1表示障礙,2表示當(dāng)前在的位置,3表示已經(jīng)走過的路徑 5 int map[WINDOW_HEIGHT / ELEM][WINDOW_WIDTH / ELEM] = { 0 }; 6 7 void main() 8 { 9 //初始化游戲 10 GameInit(); 11 //以下是實(shí)現(xiàn)人工操作 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 //設(shè)置窗口大小 29 initgraph(WINDOW_HEIGHT, WINDOW_WIDTH); 30 //設(shè)置窗口顏色 31 setbkcolor(LIGHTGRAY); 32 //強(qiáng)制繪圖,顯示界面 33 cleardevice(); 34 35 //初始化時(shí)間種子,隨機(jī)生成一個(gè)地圖,并且判斷地圖能不能走出來 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);//如果不能走出來則繼續(xù)生成迷宮 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 //設(shè)置畫筆顏色 70 setcolor(RED); 71 //設(shè)置填充顏色 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 //當(dāng)前位置 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 //已經(jīng)走過的路徑 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++;//走一次步數(shù)加一 148 map[cur_y][cur_x] = 3;//把走過的標(biāo)記 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 //下一個(gè)走到的位置設(shè)置為2 164 map[cur_y][cur_x + 1] = 2; 165 //繪制當(dāng)前狀態(tài),并且等待100ms 166 GamePaint(); 167 Sleep(100); 168 //從下一個(gè)位置開始走 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 //向各個(gè)方向移動(dòng) 211 void move() 212 { 213 //方向 214 char dir; 215 dir = _getch(); 216 217 //各個(gè)方向判斷 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 }?
轉(zhuǎn)載于:https://www.cnblogs.com/xiaochi/p/8297707.html
總結(jié)
以上是生活随笔為你收集整理的6.C语言迷宫程序界面版的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux学习笔记11——文件I/O之二
- 下一篇: 爱在心中