您好,登錄后才能下訂單哦!
今天小編給大家分享的是使用c語言制作掃雷游戲的代碼,相信很多人都不太了解,為了讓大家更加了解c語言制作掃雷游戲的代碼,所以給大家總結(jié)了以下內(nèi)容,一起往下看吧。一定會(huì)有所收獲的哦。
c語言簡(jiǎn)單小游戲-掃雷
本文實(shí)例為大家分享了C語言實(shí)現(xiàn)掃雷小游戲的具體代碼,供大家參考,具體內(nèi)容如下
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <windows.h> #include <time.h> /* 用 C 語言寫一個(gè)簡(jiǎn)單的掃雷游戲 */ // 1.寫一個(gè)游戲菜單 Menu() // 2.開始游戲 // 1.初始化二維數(shù)組 Init_Interface() // 2.打印游戲界面 Print_Interface() // 3.玩家掀起指定位置 Play() --> 指定輸入坐標(biāo)(判斷合法性) // 1.判斷該位置是否是雷 // 2.判斷是否掀掉所有空地 // 3.如果掀開的是空地,則判斷該空地周圍是否有雷 // 1.如果周圍有雷,則統(tǒng)計(jì)周圍雷的個(gè)數(shù) // 2.如果周圍沒有雷,則掀開周圍除了雷的所有空地,并且統(tǒng)計(jì)所掀開空地周圍雷的個(gè)數(shù) // 4.更新地圖 // 5.繼續(xù) 3 的循環(huán) //定義全局變量: //定義掃雷地圖的長(zhǎng)和寬 #define MAX_ROW 9 #define MAX_COL 9 //定義默認(rèn)的雷數(shù) #define DEFAULT_MINE 9 //定義兩個(gè)二維數(shù)組,分別存放初始地圖和雷陣 char show_map[MAX_ROW + 2][MAX_COL + 2]; char mine_map[MAX_ROW + 2][MAX_COL + 2]; //寫一個(gè)游戲菜單 int Menu() { printf("=========\n"); printf("1.開始游戲\n"); printf("0.結(jié)束游戲\n"); printf("=========\n"); printf("請(qǐng)選擇游戲菜單選項(xiàng):"); int choice = 0; while (1) { scanf("%d", &choice); if (choice != 0 && choice != 1) { printf("您的輸入有誤, 請(qǐng)重新輸入\n"); continue; } break; } return choice; } //開始游戲 //初始化數(shù)組 void Init_Interface() { for (int row = 0; row < MAX_ROW + 2; row++) { for (int col = 0; col < MAX_COL + 2; col++) { show_map[row][col] = '*'; } } for (int row = 0; row < MAX_ROW + 2; row++) { for (int col = 0; col < MAX_COL + 2; col++) { mine_map[row][col] = '0'; } } int mine_count = DEFAULT_MINE; while (mine_count > 0) { int row = rand() % MAX_ROW + 1; int col = rand() % MAX_COL + 1; if (mine_map[row][col] == '1') { //將雷設(shè)置為 1 //此處已經(jīng)有雷 continue; } mine_count--; mine_map[row][col] = '1'; } } //打印初始界面 void Print_Interface(char map[MAX_ROW + 2][MAX_COL + 2]) { printf(" "); for (int col = 1; col <= MAX_COL; col++) { printf("%d ", col); } printf("\n "); for (int col = 1; col <= MAX_COL; col++) { printf("--"); } printf("\n"); for (int row = 1; row <= MAX_ROW ; row++) { printf("%02d |", row); for (int col = 1; col <= MAX_COL; col++) { printf("%c ", map[row][col]); } printf("\n"); } } //寫一個(gè)統(tǒng)計(jì)周圍雷數(shù)個(gè)數(shù)的函數(shù) int Around_Mine_count(int row, int col) { return (mine_map[row - 1][col - 1] - '0' + mine_map[row - 1][col] - '0' + mine_map[row - 1][col + 1] - '0' + mine_map[row][col - 1] - '0' + mine_map[row][col + 1] - '0' + mine_map[row + 1][col - 1] - '0' + mine_map[row + 1][col] - '0' + mine_map[row + 1][col + 1] - '0'); } //寫一個(gè)判斷該位置周圍是否有雷的函數(shù) int No_Mine(int row, int col) { if (Around_Mine_count(row, col) == 0) { return 1; } return 0; } //寫一個(gè)掀開該位置周圍空地的函數(shù) void Open_Blank(int row, int col) { show_map[row - 1][col - 1] = '0' + Around_Mine_count(row - 1, col - 1); show_map[row - 1][col] = '0' + Around_Mine_count(row - 1, col); show_map[row - 1][col + 1] = '0' + Around_Mine_count(row - 1, col + 1); show_map[row][col - 1] = '0' + Around_Mine_count(row, col - 1); show_map[row][col + 1] = '0' + Around_Mine_count(row, col + 1); show_map[row + 1][col - 1] = '0' + Around_Mine_count(row + 1, col - 1); show_map[row + 1][col] = '0' + Around_Mine_count(row + 1, col); show_map[row + 1][col + 1] = '0' + Around_Mine_count(row + 1, col + 1); } //寫一個(gè)判斷游戲結(jié)束的函數(shù) int Success_Sweep(char show_map[MAX_ROW + 2][MAX_COL + 2]) { int count = 0; for (int row = 1; row <= MAX_ROW; row++) { for (int col = 1; col <= MAX_COL; col++) { if (show_map[row][col] == '*') { count++; } } } if (count == DEFAULT_MINE) { return 1; } return 0; } //開始游戲 void StartGame() { while (1) { printf("請(qǐng)輸入您要掀開的坐標(biāo):"); int row = 0; int col = 0; while (1) { scanf("%d %d", &row, &col); if (row < 1 || row > MAX_ROW || col < 1 || col > MAX_COL) { printf("您的輸入有誤,請(qǐng)重新輸入!\n"); continue; } if (show_map[row][col] != '*') { printf("該位置已被掀開,請(qǐng)重新選擇\n"); continue; } break; } //判斷該地方是否有雷 if (mine_map[row][col] == '1') { Print_Interface(mine_map); printf("該地方有雷,游戲結(jié)束!!!\n"); break; } if (No_Mine(row, col)) { show_map[row][col] = '0'; Open_Blank(row, col); } show_map[row][col] = '0' + Around_Mine_count(row, col); //判斷是否掀開所有空地 if (Success_Sweep(show_map) == 1) { Print_Interface(mine_map); printf("您已成功掃雷!!!\n"); break; } system("cls"); //更新地圖 Print_Interface(show_map); } } int main() { if (Menu() == 0) { exit(0); } srand((unsigned int)time(NULL)); Init_Interface(); Print_Interface(show_map); StartGame(); system("pause"); return 0; }
效果圖:
數(shù)字代表周圍雷的個(gè)數(shù)
關(guān)于使用c語言制作掃雷游戲的代碼就分享到這里了,當(dāng)然并不止以上和大家分析的辦法,不過小編可以保證其準(zhǔn)確性是絕對(duì)沒問題的。希望以上內(nèi)容可以對(duì)大家有一定的參考價(jià)值,可以學(xué)以致用。如果喜歡本篇文章,不妨把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。