windows经典地雷小游戏(C语言实现)
地雷小游戲
- 實(shí)現(xiàn)游戲的流程
- 1.如何使用C語(yǔ)言表示雙重身份的地雷圖
- 2.打印一下showMap
- 3.讓玩家輸入坐標(biāo)(row,col)
- 4.判斷玩家是否踩雷
- 5.更新地圖
- 6.如何判斷玩家獲勝
- 代碼區(qū)域
實(shí)現(xiàn)游戲的流程
1.如何使用C語(yǔ)言表示雙重身份的地雷圖
我們可以使用一個(gè)showMap 并將它全部初始化為 * 并且每打印9個(gè)就換行
來(lái)表示對(duì)外顯示的效果
再使用一個(gè)mineMap表示地雷地圖
2.打印一下showMap
使用memset函數(shù)來(lái)直接賦初值 memset包含在string.h頭文件中
memset(showMap, ‘*’, MAX_ROW * MAX_COL);
memset(mineMap, ‘0’, MAX_ROW * MAX_COL);
并且隨機(jī)在mineMap中隨機(jī)生成10個(gè)’1’表示地雷
使用rand 函數(shù)隨機(jī)生成 row和col
int row = rand() % 9
int col = rand() % 9
3.讓玩家輸入坐標(biāo)(row,col)
判斷玩家輸入的是否合法
如果row>MAX_ROW或者row<0
col>MAX_COL或者col<0
代表用戶輸入的不合法讓用戶重新輸入
如果用戶輸入的位置已經(jīng)被翻開了 也提示用戶重新輸入
4.判斷玩家是否踩雷
5.更新地圖
用戶輸入的坐標(biāo)為(row,col)那么在他周圍的坐標(biāo)為:
那么我們只需要兩重循環(huán)就可以判斷出在(row,col)坐標(biāo)周圍有多少個(gè)地雷了并且將他表上’0’~‘8’
當(dāng)然最重要的是如何將表更新
定義一個(gè)count 當(dāng)旁邊有雷就加1
那么就可以更新為:
showMap[row][col] = ‘0’ + count;
6.如何判斷玩家獲勝
其實(shí)這種方法很笨,是將不是雷的格子要全部翻開.
但是很可惜目前還沒有學(xué)到使用第三方庫(kù),來(lái)顯示掃雷中那種翻開是0的話旁邊是0的格子全部自動(dòng)翻開的樣子
代碼區(qū)域
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<string.h> #include<time.h> #define MAX_ROW 9 #define MAX_COL 9 #define MINE_COUNT 10 void init(char showMap[MAX_ROW][MAX_COL], char mineMap[MAX_ROW][MAX_COL]) {memset(showMap, '*', MAX_ROW * MAX_COL);memset(mineMap, '0', MAX_ROW * MAX_COL);srand( (unsigned int) time(0));int count = 0;while (count < MINE_COUNT){int row = rand() % MAX_ROW;int col = rand() % MAX_COL;if (mineMap[row][col] == '1') {continue;}mineMap[row][col] = '1';count++;} } void printMap(char map[MAX_ROW][MAX_COL]) {for (int row = 0; row < MAX_ROW; row++) {for (int col = 0; col < MAX_ROW; col++) {printf("%c ", map[row][col]);}printf("\n");} }void updateMap(char showMap[MAX_ROW][MAX_COL],char mineMap[MAX_ROW][MAX_COL],int row, int col) {// count 表示翻開的位置的周圍的地雷個(gè)數(shù)int count = 0;for (int r = row - 1; r <= row + 1; r++) {for (int c = col - 1; c <= col + 1; c++) {if (r<0 || r>MAX_ROW || c<0 || c>MAX_COL) {// 坐標(biāo)不合法 直接跳過(guò)continue;}if (r == row && c == col) {// 中間的位置不需要判斷continue;}if (mineMap[r][c] == '1') {count++;}}}showMap[row][col] = '0' + count; } int main() {char showMap[MAX_ROW][MAX_COL] = { 0 };char mineMap[MAX_ROW][MAX_COL] = { 0 };init(showMap, mineMap);int openedCount = 0;while (1) {system("cls");printMap(showMap);// 打印地圖int row = 0;int col = 0;// 讓玩家輸入地址來(lái)翻開printf("請(qǐng)輸入一個(gè)坐標(biāo): (row col) \n");scanf("%d %d", &row, &col);// 判斷玩家輸入的坐標(biāo)是否合法if (row<0 || row>MAX_ROW || col<0 || col>MAX_COL) {printf("您輸入的坐標(biāo)不合法,請(qǐng)重新輸入!\n");continue;}if (showMap[row][col] != '*') {printf("您輸入的位置已經(jīng)翻開了! 請(qǐng)重新輸入!\n");continue;}// 判斷玩家是否踩雷if (mineMap[row][col] == '1') {printf("您踩雷了 game over\n");break;}// 更新地圖updateMap(showMap, mineMap, row, col);openedCount++;if (openedCount == MAX_ROW * MAX_COL - MINE_COUNT) {printf("恭喜您終于獲勝了!\n");}}system("pause");return 0; }總結(jié)
以上是生活随笔為你收集整理的windows经典地雷小游戏(C语言实现)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: C语言三字棋小游戏
- 下一篇: 超详细C语言的字符串函数讲解