日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

windows经典地雷小游戏(C语言实现)

發布時間:2025/3/21 windows 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 windows经典地雷小游戏(C语言实现) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

地雷小游戲

    • 實現游戲的流程
      • 1.如何使用C語言表示雙重身份的地雷圖
      • 2.打印一下showMap
      • 3.讓玩家輸入坐標(row,col)
      • 4.判斷玩家是否踩雷
      • 5.更新地圖
      • 6.如何判斷玩家獲勝
      • 代碼區域

實現游戲的流程

1.如何使用C語言表示雙重身份的地雷圖

我們可以使用一個showMap 并將它全部初始化為 * 并且每打印9個就換行
來表示對外顯示的效果
再使用一個mineMap表示地雷地圖

2.打印一下showMap

使用memset函數來直接賦初值 memset包含在string.h頭文件中
memset(showMap, ‘*’, MAX_ROW * MAX_COL);
memset(mineMap, ‘0’, MAX_ROW * MAX_COL);
并且隨機在mineMap中隨機生成10個’1’表示地雷
使用rand 函數隨機生成 row和col
int row = rand() % 9
int col = rand() % 9

3.讓玩家輸入坐標(row,col)

判斷玩家輸入的是否合法
如果row>MAX_ROW或者row<0
col>MAX_COL或者col<0
代表用戶輸入的不合法讓用戶重新輸入
如果用戶輸入的位置已經被翻開了 也提示用戶重新輸入

4.判斷玩家是否踩雷

5.更新地圖

用戶輸入的坐標為(row,col)那么在他周圍的坐標為:

那么我們只需要兩重循環就可以判斷出在(row,col)坐標周圍有多少個地雷了并且將他表上’0’~‘8’
當然最重要的是如何將表更新
定義一個count 當旁邊有雷就加1
那么就可以更新為:
showMap[row][col] = ‘0’ + count;

6.如何判斷玩家獲勝

其實這種方法很笨,是將不是雷的格子要全部翻開.
但是很可惜目前還沒有學到使用第三方庫,來顯示掃雷中那種翻開是0的話旁邊是0的格子全部自動翻開的樣子

代碼區域

#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 表示翻開的位置的周圍的地雷個數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) {// 坐標不合法 直接跳過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;// 讓玩家輸入地址來翻開printf("請輸入一個坐標: (row col) \n");scanf("%d %d", &row, &col);// 判斷玩家輸入的坐標是否合法if (row<0 || row>MAX_ROW || col<0 || col>MAX_COL) {printf("您輸入的坐標不合法,請重新輸入!\n");continue;}if (showMap[row][col] != '*') {printf("您輸入的位置已經翻開了! 請重新輸入!\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; }

總結

以上是生活随笔為你收集整理的windows经典地雷小游戏(C语言实现)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。