C語言實現(xiàn)簡單掃雷小游戲
本文實例為大家分享了C語言實現(xiàn)掃雷小游戲的具體代碼,供大家參考,具體內(nèi)容如下
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <windows.h>
#include <time.h>
/*
用 C 語言寫一個簡單的掃雷游戲
*/
// 1.寫一個游戲菜單 Menu()
// 2.開始游戲
// 1.初始化二維數(shù)組 Init_Interface()
// 2.打印游戲界面 Print_Interface()
// 3.玩家掀起指定位置 Play() --> 指定輸入坐標(biāo)(判斷合法性)
// 1.判斷該位置是否是雷
// 2.判斷是否掀掉所有空地
// 3.如果掀開的是空地,則判斷該空地周圍是否有雷
// 1.如果周圍有雷,則統(tǒng)計周圍雷的個數(shù)
// 2.如果周圍沒有雷,則掀開周圍除了雷的所有空地,并且統(tǒng)計所掀開空地周圍雷的個數(shù)
// 4.更新地圖
// 5.繼續(xù) 3 的循環(huán)
//定義全局變量:
//定義掃雷地圖的長和寬
#define MAX_ROW 9
#define MAX_COL 9
//定義默認(rèn)的雷數(shù)
#define DEFAULT_MINE 9
//定義兩個二維數(shù)組,分別存放初始地圖和雷陣
char show_map[MAX_ROW + 2][MAX_COL + 2];
char mine_map[MAX_ROW + 2][MAX_COL + 2];
//寫一個游戲菜單
int Menu() {
printf("=========\n");
printf("1.開始游戲\n");
printf("0.結(jié)束游戲\n");
printf("=========\n");
printf("請選擇游戲菜單選項:");
int choice = 0;
while (1) {
scanf("%d", &choice);
if (choice != 0 && choice != 1) {
printf("您的輸入有誤, 請重新輸入\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");
}
}
//寫一個統(tǒng)計周圍雷數(shù)個數(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');
}
//寫一個判斷該位置周圍是否有雷的函數(shù)
int No_Mine(int row, int col) {
if (Around_Mine_count(row, col) == 0) {
return 1;
}
return 0;
}
//寫一個掀開該位置周圍空地的函數(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);
}
//寫一個判斷游戲結(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("請輸入您要掀開的坐標(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("您的輸入有誤,請重新輸入!\n");
continue;
}
if (show_map[row][col] != '*') {
printf("該位置已被掀開,請重新選擇\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ù)字代表周圍雷的個數(shù)
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持我們。
上一篇:C語言實現(xiàn)紙牌計算24點(diǎn)小游戲
欄 目:C語言
本文標(biāo)題:C語言實現(xiàn)簡單掃雷小游戲
本文地址:http://m.jygsgssxh.com/a1/Cyuyan/173.html
您可能感興趣的文章
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用函數(shù)刪除字符
- 04-02c語言的正則匹配函數(shù) c語言正則表達(dá)式函數(shù)庫
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言中對數(shù)函數(shù)的表達(dá)式 c語言中對數(shù)怎么表達(dá)
- 04-02c語言用函數(shù)寫分段 用c語言表示分段函數(shù)
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排序法函數(shù)
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段函數(shù)
- 04-02C語言中怎么打出三角函數(shù) c語言中怎么打出三角函數(shù)的值
- 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求階乘


閱讀排行
本欄相關(guān)
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言的正則匹配函數(shù) c語言正則表達(dá)
- 04-02c語言用函數(shù)寫分段 用c語言表示分段
- 04-02c語言中對數(shù)函數(shù)的表達(dá)式 c語言中對
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段
- 04-02C語言中怎么打出三角函數(shù) c語言中怎
- 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求
隨機(jī)閱讀
- 01-10使用C語言求解撲克牌的順子及n個骰子
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 01-10C#中split用法實例總結(jié)
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 01-10delphi制作wav文件的方法
- 08-05織夢dedecms什么時候用欄目交叉功能?
- 04-02jquery與jsp,用jquery
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 01-11ajax實現(xiàn)頁面的局部加載


