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