您好,登錄后才能下訂單哦!
這篇文章主要介紹C語言版掃雷游戲怎么實現,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
用c語言做一個掃雷功能的簡單實現,首先創建一個test.c來用于在寫代碼的途中測試掃雷代碼,game.h來存放實現掃雷函數需要用到的頭文件,game.c來存放最終的成品。
首先用函數打印一個菜單,讓玩家選擇進行游玩掃雷游戲或者退出,考慮到玩家會輸入1和2以外的數字,我們加上一個fefault,將菜單放入do-while循環中,while的結束條件為choose為0,玩家在結束一場游戲后可以重新走一邊循環,保證用戶在結束一把掃雷之后可以選擇繼續進行下一局或是退出游戲。
void menu() { printf("**********\n"); printf("**1.play**\n"); printf("**0.quit**\n"); printf("**********\n"); } void test() { int choose; do { menu(); printf("請進行你的選擇"); scanf("%d", &choose); switch (choose) { case 1: printf("游戲開始\n"); break; case 2: printf("游戲退出\n"); default: printf("選擇錯誤,請重新選擇\n"); } } while (choose); }
在case1中加入game()函數來進行掃雷游戲的實現。掃雷有雷的布置和雷的掃,首先來實現雷的布置,用二維數組實現一個9x9的棋盤,通過建立兩個棋盤來實現信息的交互,一個棋盤hid放雷的布置情況,還有一個棋盤show來將信息呈現給玩家。因為show棋盤需要將用戶掃過區域周圍八個格子雷的數量寫出來,如果定義一個【9】【9】的數組就會發生越界,因此兩個數組都定位為11x11,為了方便寫,宏定義col=9 row=9 COL=col+2 ROW=row+2。初始化show數組全為*,hid數組全為0
void SetBoard(char board[ROW][COL], int r, int c, char set) { for (int i = 0; i < r; i++) { for (int j = 0; j < c; j++) { board[i][j] = set; } } } void ShowBoard(char board[ROW][COL],int r,int c) { for (int a = 0; a <= r; a++) { printf("%d ", a); } printf("\n"); for (int i = 1; i <= r; i++) { printf("%d ", i); for (int j = 1; j <= c; j++) { printf("%c ", board[i][j]); } printf("\n"); } }
接下來實現雷的隨機插入,隨機生成兩個一到九的整數下x,y,添加一個count計數器,如果當前hid[x][y]為字符0 則hid[x][y]為字符0,count計數器加一
srand((unsigned int)time(NULL)); void SetBoob(char hid[ROW][COL],int rw,int c) { int count = 0; for (int i = 0; count <= 9; i++) { int x = rand() % row + 1; int y = rand() % col + 1; if (hid[x][y] == '0') { hid[x][y] = '1'; count = count + 1; } } }
這樣雷就布置好了,接下來是玩家排雷的過程。
用while(1)做一個一直重復的循環,玩家輸入行和列x,y,程序將hid[x][y]與字符‘1'對比,若踩雷則跳出循環顯示游戲結束并打印hid棋盤讓玩家看到雷的位置,若沒踩雷show[x][y]變成周圍八個格子的地雷個數并打印show棋盤。因為玩家可能輸入1~9之外的數,因此要用if函數限制x,y的大小。
統計hid【x】【y】周圍的雷的個數可以通過將周圍的字符全部相加再減去八個字符0來實現
void CountBoob(char hid[ROW][COL], int x, int y) { int count; count = hid[x - 1][y - 1] + hid[x][y - 1] + hid[x + 1][y - 1] + hid[x - 1][y] + hid[x + 1][y] + hid[x - 1][y + 1] + hid[x][y + 1] + hid[x + 1][y + 1] - 8 * '0'; return count; } void FindBoob(char hid[ROW][COL], char show[ROW][COL], int r, int c) { int x, y; while (1) { printf("請輸入行和列"); scanf("%d %d", &x, &y); if (x >= 1 && x <= row && y >= 1 && y <= col) { if (hid[x][y] == '1') { printf("游戲結束\n"); ShowBoard(hid, row, col); break; } else { int n = CountBoob(hid, x, y); show[x][y] = n+'0'; ShowBoard(show, row, col); } } else { printf("輸入錯誤坐標請重新輸入"); } } }
后期我在掃雷過程中加入了一個計數器count,每掃一個無雷區域則count加一當count等于71時打印游戲勝利并展示hid棋盤跳出循環。
將所有的函數放入頭文件,.c程序如下
#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <time.h> #include <stdlib.h> #include "game.h" int main() { int choose; srand((unsigned int)time(NULL)); do { menu(); printf("請進行你的選擇"); scanf("%d", &choose); switch (choose) { case 1: printf("游戲開始\n"); game(); break; case 0: printf("游戲退出\n"); break; default: printf("選擇錯誤,請重新選擇\n"); } } while (choose); }
掃雷是如若周圍沒有雷,可以實現棋盤的展開,這個因為時間問題只能進行后期補充。
以上是“C語言版掃雷游戲怎么實現”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。