摘要:寫在前面我們已經寫過了三子棋小游戲肯定沒玩過癮,我們再寫個掃雷小游戲吧目錄寫在前面認識游戲游戲規則游戲框架游戲實現效果展示全部代碼文件文件文件認識游戲相信大家對掃雷都不陌生每臺電腦必備的小游戲游戲規則就是在規定的時間將
我們已經寫過了三子棋小游戲肯定沒玩過癮,我們再寫個掃雷小游戲吧!
相信大家對掃雷都不陌生!每臺電腦必備的小游戲!
就是在規定的時間將埋藏的地雷全部找到,即游戲勝利!
勝利條件:你需要在不點錯雷的情況下盡可能快的將所有的雷都標記出來,如果你點錯,就得重新開始,所以掃雷也有一定的運氣成分。
簡單說
就是將所有不是雷的地方全部標記出來,剩下地雷,游戲勝利,如果標記點到了地雷,游戲失敗!
如何找到不是地雷標記出來呢?
每點開一個小格子,如果是雷,就游戲結束,如果不是就會出現數字,出現的數字表示,周圍一圈雷的個數!
2
表示周圍一圈的地雷數為2
個。
根據這些數字即可將地雷全部排除走向勝利!
游戲框架和三子棋一樣!
//游戲框架 int input = 0; do { menu();//菜單 scanf("%d", &input); //選擇 switch (input) { case 1:game(); break; case 0:printf("退出游戲/n"); break; default:printf("輸入錯誤,請重新輸入/n"); break; } } while (input);
我們寫小游戲的框架基本上都是這樣!
游戲的實現是我們這個游戲的重點內容!
我們如何才能將游戲實現呢?
先從原理入手!
埋雷
如何買雷呢?
我們所玩的掃雷都是由許多小格子組成的矩陣!
所以我們可以利用二維數組埋地雷!
顯示該點周圍雷的個數
周圍雷數的計算,就是判斷改點周圍是非為雷,并且計算個數顯示給玩家!
判斷游戲狀態
點到地雷說明游戲結束,將所有地雷找到,游戲勝利。
實現思想
用一個二維數組埋雷
另一個二維數組顯示給玩家
當我們將雷弄成AxA
的雷陣藏雷,會發現如果我們進行周圍雷數的查找是會發生數組越界,所以我們可以創建(A+2)x(A+2)
的雷陣,然后埋雷在AxA
中!
void game(){ //初始化布雷數組—— > 初始化棋盤數組—— > //設置地雷—— > 顯示棋盤—— > 玩家掃雷 //埋雷 char mine[ROWS][COLS] = { 0 }; //雷區圖 char show[ROWS][COLS] = { 0 }; //玩家圖 //初始化棋盤 InitBoard(mine, ROWS, COLS,"0"); InitBoard(show, ROWS, COLS, "*"); //設置地雷 SetMine(mine, ROW, COL,MineCount); PrintBoard(show, ROW, COL); //玩家掃雷 int count = ROW*COL-MineCount; while (CheckMine(mine,show, ROW, COL)) { count--; PrintBoard(show, ROW, COL); if (count == 0) { printf("恭喜你,游戲勝利/n"); PrintBoard(mine, ROW, COL); break; } }}
//初始化棋盤void InitBoard(char board[ROW][COL], int row, int col, char x){ int i = 0; for (i = 0; i < row; i++) { int j = 0; for (j = 0; j < col; j++) { board[i][j] = x; } } return ;}
//打印棋盤void PrintBoard(char board[ROW][COL], int row, int col){ int i = 0; //打印列號 for (i = 0; i <= col; i++) printf(" %d ", i); printf("/n"); for (i = 0; i < row; i++) { printf(" %d ", i+1); int j = 0; for (j = 0; j <col; j++) { printf(" %c ", board[i][j]); } printf("/n"); } return;}
//埋雷void SetMine(char board[ROW][COL], int row, int col, int count){ while (count) { int i = rand() % row; int j = rand() % col; if (board[i][j] == "0") { board[i][j] = "1"; count--; } }}
核心代碼
//查雷int CheckMine(char mine[ROW][COL],char show[ROW][COL], int row, int col){ printf("請輸入你要掃雷的坐標:>"); while (1) { int i = 0, j = 0; scanf("%d%d", &i, &j); if (i >=1 && i <= row && j >=1 && j <= col) { if (mine[i-1][j-1] != "1") { int count=IsMineCount(mine,i-1,j-1); show[i-1][j-1] = count+"0"; return 1; } else { printf("很遺憾,你被炸死了/n"); PrintBoard(mine, ROW, COL); return 0; } } } }int IsMineCount(char mine[ROW][COL], int x, int y){ int count = 0; int i= 0; for (i = x - 1; i <= x + 1; i++) { int j = 0; for (j = y - 1; j <=y + 1; j++) { if (mine[i][j] == "1") { count++; } } } return count;}
test.c
文件#define _CRT_SECURE_NO_WARNINGS 1 #include"game.h"void menu(){ printf("******************************/n"); printf("********** 1.play ******/n"); printf("********** 0.exit ******/n"); printf("******************************/n"); printf("Input(1/0):>");}void game(){ //初始化布雷數組—— > 初始化棋盤數組—— > 設置地雷 //—— > 顯示棋盤—— > 玩家掃雷 //埋雷 char mine[ROWS][COLS] = { 0 }; //雷區圖 char show[ROWS][COLS] = { 0 }; //玩家圖 //初始化棋盤 InitBoard(mine, ROWS, COLS,"0"); InitBoard(show, ROWS, COLS, "*"); //設置地雷 SetMine(mine, ROW, COL,MineCount); PrintBoard(show, ROW, COL); //玩家掃雷 int count = ROW*COL-MineCount; while (CheckMine(mine,show, ROW, COL)) { count--; PrintBoard(show, ROW, COL); if (count == 0) { printf("恭喜你,游戲勝利/n"); break; } }}
game.h
文件#pragma once#include #include #include #define ROW 9 #define COL 9#define ROWS ROW+2#define COLS COL+2#define MineCount 6void InitBoard(char board[ROWS][COLS],int row,int col,char x);void SetMine(char board[ROWS][COLS], int row, int col,int count);void PrintBoard(char board[ROW][COL], int row, int col);int CheckMine (char mine[ROWS][COLS], char show[ROW][COL], int row, int col);int IsMineCount(char mine[ROWS][COLS],int i, int j);
game.c
文件#include"game.h"void InitBoard(char board[ROW][COL], int row, int col, char x){ int i = 0; for (i = 0; i < row; i++) { int j = 0; for (j = 0; j < col; j++) { board[i][j] = x; } } return ;}void SetMine(char board[ROW][COL], int row, int col, int count){ while (count) { int i = rand() % row; int j = rand() % col; if (board[i][j] == "0") { board[i][j] = "1"; count--; } }}void PrintBoard(char board[ROW][COL], int row, int col){ int i = 0; //打印列號 for (i = 0; i <= col; i++) printf(" %d ", i); printf("/n"); for (i = 0; i < row; i++) { printf(" %d ", i+1); int j = 0; for (j = 0; j <col; j++) { printf(" %c ", board[i][j]); } printf("/n"); } return;}int CheckMine(char mine[ROW][COL],char show[ROW][COL], int row, int col){ printf("請輸入你要掃雷的坐標:>"); while (1) { int i = 0, j = 0; scanf("%d%d", &i, &j); if (i >=1 && i <= row && j >=1 && j <= col) { if (mine[i-1][j-1] != "1") { int count=IsMineCount(mine,i-1,j-1); show[i-1][j-1] = count+"0"; return 1; } else { printf("很遺憾,你被炸死了/n"); return 0; } } } }int IsMineCount(char mine[ROW][COL], int x, int y){ int count = 0; int i= 0; for (i = x - 1; i <= x + 1; i++) { int j = 0; for (j = y - 1; j <=y + 1; j++) { if (mine[i][j] == "1") { count++; } } } return count;}
持續更新..... 文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/119105.html
摘要:函數游戲菜單請選擇掃雷游戲退出游戲選擇錯誤解析函數內部利用時間戳,形成隨機數,主要目的是實現游戲中地雷的隨機埋放。 前言 本篇文章使用C語言實現簡單小游戲---掃雷。(文章最后有完整代碼鏈接) 想必大多數人都玩過或者了解過掃雷的游戲規則,但是在這里,我們在一起重溫一下掃雷的游戲規則,也更好...
摘要:上一期咱們用語言實現了三子棋的小游戲語言實現三子棋今天我們再來寫個掃雷的游戲,說起掃雷,相信大家都不陌生,可能許多朋友還是玩掃雷的高手。 ? ? ?上一期咱們用C語言實現了三子棋的小游戲? C語言實現三子棋? ? ? ?今天我們再來寫個掃雷的游戲,說起掃雷,相信大家都不陌生,可能許多朋友還是...
摘要:玩家選擇開始游戲后,出現雷盤,并且隨機布置雷。雷盤的數組大小為,方便計算掃雷時周圍雷的數量,并防止數組越界。放置布置的雷的信息放置排查出雷的信息初始化雷盤初始化展示界面打印展示界面效果如下布置雷隨機在數組中讓十個變成作為雷。 目錄 前言 一、游戲思路 二、游戲框架 1.菜單界面 1.菜單:...
摘要:目錄前言前言前期的準備前期的準備游戲代碼的具體實現游戲代碼的具體實現完整版的掃雷小游戲代碼完整版的掃雷小游戲代碼總結總結前言掃雷是一款大眾類的益智小游戲,于年發行。 目錄 前言 前期的準備 游戲代碼的具體實現 1、text.c 2、game.h 3、game.c 完整版的掃雷小游戲代碼: 1...
摘要:展示雷盤和初始化雷盤不一樣,展示雷盤只需要用即可,并不需要將都展示出來,只是為了我們更好的計算掃雷的位置周圍的雷的數量。 目錄 1、需求分析 2、程序架構 3、代碼實現(分函數呈現) (1)主函數代碼實現 分析: 異常處理: (2)游戲主函數實現 分析: (3)初始化函數的實現 分析: (4...
閱讀 3484·2021-11-12 10:36
閱讀 2857·2021-09-22 15:35
閱讀 2807·2021-09-04 16:41
閱讀 1162·2019-08-30 15:55
閱讀 3573·2019-08-29 18:43
閱讀 2069·2019-08-23 18:24
閱讀 1411·2019-08-23 18:10
閱讀 1920·2019-08-23 11:31