首先要實現掃雷原理上同三子棋,都是通過乙個二維陣列來實現遊戲主題功能那麼這裡有幾個值得注意的點
1、初級掃雷我們知道是九乘九陣列實現,那麼在這裡我們建立的是11乘11的陣列,目的是方便後續判斷周圍九個格仔的雷的數量!
2、而且我們需要建立兩個陣列,乙個用來存放字元1和0(1表示有雷,隨機數生成;0表示沒雷,初始化時自動全放0);
另乙個用來根據上邊的陣列輸出顯示玩家是否被炸死,以及玩家選擇的座標周圍雷的數量
3、需要注意排雷時候如果附近沒有雷需要遞迴展開!!!
4、我們這裡需要兩個原始檔test.c game.c和標頭檔案game.h
這個遊戲介面小夥伴自己設計就可老生常談我直接上**
void menu()
void test()
} while (input);
}int main()
那麼在這裡為了方便使用行數列數依然採用巨集定義給出行數列數和雷的個數easycout
#define row 9
#define col 9
#define rows 11
#define cols 11
#define easycout 10
陣列的建立
char mine[rows][cols];
char show[rows][cols];
陣列初始化和列印
init(mine, rows, cols, '0');
init(show, rows, cols, '*');
display(mine, row, col);
display(show,row,col);
void init(char board[rows][cols], int rows, int cols, char ch) }}
void display(char board[rows][cols], int rows, int cols)
printf("\n");
}}setmine(mine,rows,cols);
display(mine, row, col);
1.設定雷
這裡主要應用隨機數的生成,之前的文章已經介紹過。其次就是需要判斷隨機數的生成是否重複,重複需要去重:
void setmine(char board[rows][cols], int rows, int cols)
}2.掃雷
在這個遊戲主體部分我們需要用迴圈解決,迴圈次數則需要用
行數*列數-雷數量
同時需要注意輸入座標x y的範圍以及周圍的判斷!!
void findmine(char mine[rows][cols], char show[rows][cols], int row, int col)
display(mine, row, col);
printf("很遺憾你被炸死了!\n");
break;
}else
}else
} if (!count)
}3.周圍雷的數量的判斷
這裡採用數值相減的方法字元1和字元0的值差1.
int getnum(char mine[rows][cols],int x,int y)
這裡注意兩個條件:
1、遞迴截止條件是該座標周圍的雷的數量非0
2、讓周圍8個座標依次遞迴
3、注意判斷過周圍8個格仔沒有雷的座標需要標記置空格!!!來避免重複操作否則棧溢位
void diguishow(char mine[rows][cols],char show[rows][cols],int x,int y,int row,int col)
else if (getnum(mine, x, y) != 0)
else
}}game.h
#pragma once
#include
#include
#include
#include
#define row 9
#define col 9
#define rows 11
#define cols 11
#define easycout 10
void init(char board[rows][cols],int rows,int cols,char ch);
void display(char board[rows][cols],int rows,int cols);
void setmine(char board[rows][cols],int rows,int cols);
void findmine(char mine[rows][cols],char show[rows][cols],int row,int col);
int getnum(char mine[rows][cols], int x, int y);
void diguishow(char mine[rows][cols], char show[rows][cols], int x, int y, int row, int col);
test.c
#define _crt_secure_no_warnings 1
#include"game.h"
void game()
void menu()
void test()
} while (input);
}int main()
game.c
#define _crt_secure_no_warnings 1
#include"game.h"
void diguishow(char mine[rows][cols],char show[rows][cols],int x,int y,int row,int col)
else if (getnum(mine, x, y) != 0)
else }}
int getnum(char mine[rows][cols],int x,int y)
void findmine(char mine[rows][cols], char show[rows][cols], int row, int col)
display(mine, row, col);
printf("很遺憾你被炸死了!\n");
break;
}else
}else
} if (!count) }
void init(char board[rows][cols], int rows, int cols, char ch) }}
void display(cha board[rows][cols], int rows, int cols)
printf("\n"); }}
void setmine程式設計客棧(char board[rows][cols], int rows, int cols)
}本文標題: c語言遞迴實現掃雷遊戲
本文位址:
C語言遞迴實現掃雷小遊戲
為了複習c語言的語法嘛,就簡單的寫了一下掃雷這樣乙個小遊戲,完全在命令列視窗執行。思路也比較簡單,採用陣列來模擬棋盤。乙個用來模擬地雷的分布的陣列。乙個用來列印玩家開始看到的陣列。在選擇座標後展開周圍的地方。判斷未展開的格仔數與地雷數是否相等。結束遊戲。簡單的乙個初始介面,用來選擇開始遊戲和退出。也...
C語言實現掃雷遊戲
game.h define crt secure no warnings 1 include include include include define sum 10 define row 11 define col 11 void print void init char mine row co...
C語言實現掃雷遊戲
今天我們來用c語言實現另乙個眾所周知的小遊戲 掃雷 首先,與五子棋不同的是,為了不讓雷被玩家直接看到,我們需要建立兩個棋盤。乙個用於儲存雷,我們將其命名為mine盤,乙個能直觀的展現給玩家,我們將其命名為show盤 其次,為了算清玩家選擇的座標周圍有多少雷,我們無可避免的要訪問mine盤對應座標周圍...