您好,登錄后才能下訂單哦!
這篇文章主要講解了“如何利用C語言實現簡單掃雷小游戲”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“如何利用C語言實現簡單掃雷小游戲”吧!
掃雷是一款大眾類的益智小游戲。游戲目標是在最短的時間內根據點擊格子出現的數字找出所有非雷格子,同時避免踩雷,踩到一個雷即全盤皆輸。
首先帶大家簡單來了解一下掃雷的游戲機制:
隨便點一個格子,會有一塊,上面的數字就代表數字周圍八個格子會有幾個雷,是1他周圍就只有1個雷,2就有兩個雷,以此類推,直到找出全部沒有雷的格子就算玩家贏。只要點到一個有雷的格子就判定玩家輸。
了解了 機制之后就來編寫程序。將程序分為test.c、game.c和game.h三個部分。其中test.c中編寫主函數,game.c中實現游戲的功能,game.h中存放頭文件以及對于函數的聲明。
在test.c模塊中,首先定義一個menu來存放一個游戲開始的菜單
int menu(){ printf("********************\n"); printf("********************\n"); printf("****1、開始游戲*****\n"); printf("****0、退出游戲*****\n"); printf("********************\n"); printf("********************\n");}
編寫game函數用來存放游戲實現模塊
void game(){}
編寫主函數來調用game。通過do–while循環來實現menu,并用switch語句來選擇游戲開始和結束
int main(){ int input = 0; do { menu(); printf("請選擇:\n"); scanf("%d", &input); switch (input) { case 1: printf("游戲開始:\n"); game(); break; case 0: printf("游戲退出\n"); break; default: printf("請輸入正確的數字:\n"); break; } } while (input); return 0;}
現在進入game模塊的代碼實現
首先需要編寫一個函數來實現掃雷的界面這里我們用InitBoard函數來實現9x9的掃雷界面。用*代表沒有被點開的格子,用1表示雷,0表示空格子。
void InitBoard(char board[][COLS], int rows, int cols, char set){ int i = 0; int j = 0; for (i = 0;i < rows;i++) { for (j = 0;j < cols;j++) { board[i][j] = set; } }}
在test.c中的game函數中調用函數
//存放雷 char mine[ROWS][COLS] = { 0 }; //排查雷 char mineInfo[ROWS][COLS] = { 0 }; InitBoard(mine, ROWS, COLS, '0'); InitBoard(mineInfo, ROWS, COLS, '*');
在game.c模塊中編寫ShowBoard函數將之前編寫的掃雷界面打印出來
void ShowBoard(char board[][COLS],int row,int col){ int i = 0; int j = 0; printf("===================================\n"); for (i = 0;i <= row;i++) { printf("%d ", i); //打印 橫坐標 } printf("\n"); for (i = 1;i <=col;i++) { printf("%d ",i); //打印縱坐標 for (j = 1;j <= col;j++) { printf("%c ", board[i][j]); } printf("\n"); } printf("===================================\n");}
此時運行結果為;
再來編寫SetMine函數設置雷用rand函數隨機設置雷的坐標,雷的數量為MINE_NUM這里我們設置10個雷。
void SetMine(char mine[][COLS], int row, int col){ int x = 0; int y = 0; int count = 0; while (count < MINE_NUM) { x = rand() % row + 1; y = rand() % col + 1; if (mine[x][y] == '0') { mine[x][y] = '1'; count++; } }}
用函數來計算當前格子周圍雷的個數。注意由于我們定義的雷為char類型,在計算數量的時候需要將其轉化為int類型。將加起來的數據-8 * ‘0'。
static int GetMineCount(char mine[][COLS], int x, int y){ return mine[x - 1][y - 1] + mine[x - 1][y] + mine[x - 1][y + 1] + mine[x][y + 1] + mine[x + 1][y + 1] + mine[x + 1][y] + + mine[x + 1][y - 1] + mine[x][y - 1] - 8 * '0';}
最后我們用FindMine函數來實現玩家掃雷的操作
void FindMine(char mine[][COLS], char mineInfo[][COLS], int row, int col){ int count = 0; int x = 0; int y = 0; while (count < row*col - MINE_NUM) { printf("請輸入坐標:"); scanf("%d%d", &x, &y); if (x >= 1 && y <= 9 && y >= 1 && x <= 9) { if (mine[x][y] == '1') { printf("你被炸死了\n"); ShowBoard(mine, row, col); break; } else { int ret = GetMineCount(mine, x, y); mineInfo[x][y] = ret + '0'; ShowBoard(mineInfo, row, col); count++; } } else { printf("輸入的坐標不合法\n"); } }}
記得在test.c中的game函數中調用game.c中實現游戲功能的函數。
void game(){ char mine[ROWS][COLS] = { 0 }; char mineInfo[ROWS][COLS] = { 0 }; InitBoard(mine, ROWS, COLS, '0'); InitBoard(mineInfo, ROWS, COLS, '*'); ShowBoard(mineInfo, ROW, COL); SetMine(mine, ROW, COL); FindMine(mine, mineInfo, ROW, COL);}
頭文件的編寫:
#ifndef _GAME_H_#define _GAME_H_#include<stdio.h>#include<stdlib.h>#include<time.h>#define MINE_NUM 10#define ROW 9#define COL 9#define ROWS ROW+2#define COLS COL+2void InitBoard(char board[][COLS], int rows, int cols, char set);void ShowBoard(char board[][COLS], int row, int col);void SetMine(char mine[][COLS], int row, int col);void FindMine(char mine[][COLS], char mineInfo[][COLS], int row, int col);#endif // !_GAME_H
至此一個簡單的掃雷程序編寫完畢
感謝各位的閱讀,以上就是“如何利用C語言實現簡單掃雷小游戲”的內容了,經過本文的學習后,相信大家對如何利用C語言實現簡單掃雷小游戲這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。