摘要:上一篇講了三子棋,今天我們來講掃雷原理都是一樣的通常我們寫代碼的時候,寫之前都要整理分析好邏輯,要做到分段分塊來寫,以便于代碼閱讀和后期維護這里我將代碼分為三個文件頭文件通常用來完成函數聲明頭文件的引用宏定義變量用于游戲功能函數的實現作為
上一篇講了三子棋,今天我們來講掃雷原理都是一樣的;
通常我們寫代碼的時候,寫之前都要整理分析好邏輯,要做到分段分塊來寫,以便于代碼閱讀和后期維護
我們玩游戲有兩個選擇,要么玩游戲,要么不想玩了,退出游戲,那么主界面就可以這樣設計
1.開始游戲
0.退出游戲
如果玩家輸入了其他的數字,則提示選擇錯誤,請重新選擇
這里需要用循環實現多次玩游戲
這里需要兩個11*11的二維數組
一個存放布置好雷的信息,
并全部初始化為字符"0"
一個存放排查出雷的信息,
并全部初始化為字符"*"
打印的時候可以邊框打印為x,y坐標,便于玩游戲時坐標輸入
同樣我們可以用時間戳獲取隨機值來布置隨機雷
判斷玩家輸入的坐標是否合法,不合法提示重新輸入,合法再進行下一判斷
判斷玩家有沒有踩雷,踩雷提示游戲結束退出循環,沒有再進行下一步
計算坐標周圍雷數,并打印到該坐標(先把字符減"字符零轉換為數據類型計算完成后再加字符零轉換為字符類型)
并用一個變量記錄除雷以外的數據,如果數據為0,則排雷成功
好了,是不是很簡單
#pragma once#define _CRT_SECURE_NO_WARNINGS 1//頭文件#include#include#include//符號的聲明#define ROW 9#define COL 9#define ROWS ROW+2#define COLS COL+2#define EASY_COUNT 10//函數的聲明//初始化棋盤void initboard(char board[ROWS][COLS],int rows,int cols,char set);//打印棋盤void displayboard(char board[ROWS][COLS], int row, int col);//布置雷void setmine(char mine[ROWS][COLS], int row, int col);//排查雷void findmine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);
#include"game.h"http://主界面void menu(){ printf("******************************************/n"); printf("******************************************/n"); printf("************ ************/n"); printf("************ 1.開始游戲 ************/n"); printf("************ ************/n"); printf("************ 2.退出游戲 ************/n"); printf("************ ************/n"); printf("******************************************/n"); printf("******************************************/n");}//掃雷游戲void game(){ char mine[ROWS][COLS] = { 0 };//存放布置好雷的信息 char show[ROWS][COLS] = { 0 };//存放排查出雷的信息 //初始化mine數組為全"0" initboard(mine, ROWS, COLS, "0"); //初始化show數組為全"*" initboard(show, ROWS, COLS, "*"); //打印棋盤 displayboard(mine, ROW, COL); //布置雷 setmine(mine, ROW, COL); //displayboard(show, ROW, COL);//取消注釋可查看雷的坐標 //displayboard(mine, ROW, COL); //排雷 findmine(mine, show, ROW, COL);}void test(){ int input = 0; srand((unsigned int)time(NULL));//用時間函數初始化隨機值 do { menu();//游戲主界面 printf("請選擇:>/n"); scanf("%d", &input); switch (input) { case 1: //掃雷 game(); break; case 2: printf("退出游戲/n"); break; default: printf("選擇錯誤/n"); break; } } while (input);}int main(){ test();//測試入口 return 0;}
#include"game.h"http://初始化棋盤void initboard(char board[ROWS][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; } }}//打印棋盤void displayboard(char board[ROWS][COLS], int row, int col){ //1~9 int i = 0; int j = 0; //打印列號 for (i = 0; i <= col; i++) { printf("%d ", i); } printf("/n"); for (i = 1; i <= row; i++) { //打印行號 printf("%d ", i); for (j = 1; j <= col; j++) { printf("%c ",board[i][j]); } printf("/n"); }}//布置隨機雷void setmine(char mine[ROWS][COLS], int row, int col){ int count = EASY_COUNT; while (count) { int x = rand() % row + 1;//隨機生成1~9的數字 int y = rand() % col + 1; if (mine[x][y] == "0")//該坐標沒被占用則 { mine[x][y] = "1";//布置雷 count--; } }}//計算x,y坐標周圍有幾個雷static int get_mine_count(char mine[ROWS][COLS], int x, int y){ return 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] + mine[x - 1][y - 1] - 8 * "0";}//排查雷void findmine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col){ int x = 0; int y = 0; int win = 0;//除雷以外的 while (win < row * col - EASY_COUNT) { printf("請輸入要排查的坐標:>/n"); scanf("%d %d", &x, &y); if (x >= 1 && x <= row && y >= 1 && y <= col) { if (mine[x][y] == "1") { printf("peng!!!/n游戲結束/n"); displayboard(mine, row, col); break; } else { //計算x,y坐標周圍有幾個雷 int n = get_mine_count(mine, x, y); show[x][y] = n + "0";//把數字變成字符類型 displayboard(show, row, col); win++; } } else { printf("輸入坐標不合法,請重新輸入/n"); } } if (win == row * col - EASY_COUNT) { printf("恭喜你,排雷成功/n"); displayboard(mine, row, col); }}
?
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/123191.html
摘要:函數游戲菜單請選擇掃雷游戲退出游戲選擇錯誤解析函數內部利用時間戳,形成隨機數,主要目的是實現游戲中地雷的隨機埋放。 前言 本篇文章使用C語言實現簡單小游戲---掃雷。(文章最后有完整代碼鏈接) 想必大多數人都玩過或者了解過掃雷的游戲規則,但是在這里,我們在一起重溫一下掃雷的游戲規則,也更好...
摘要:上一期咱們用語言實現了三子棋的小游戲語言實現三子棋今天我們再來寫個掃雷的游戲,說起掃雷,相信大家都不陌生,可能許多朋友還是玩掃雷的高手。 ? ? ?上一期咱們用C語言實現了三子棋的小游戲? C語言實現三子棋? ? ? ?今天我們再來寫個掃雷的游戲,說起掃雷,相信大家都不陌生,可能許多朋友還是...
摘要:展示雷盤和初始化雷盤不一樣,展示雷盤只需要用即可,并不需要將都展示出來,只是為了我們更好的計算掃雷的位置周圍的雷的數量。 目錄 1、需求分析 2、程序架構 3、代碼實現(分函數呈現) (1)主函數代碼實現 分析: 異常處理: (2)游戲主函數實現 分析: (3)初始化函數的實現 分析: (4...
摘要:玩家選擇開始游戲后,出現雷盤,并且隨機布置雷。雷盤的數組大小為,方便計算掃雷時周圍雷的數量,并防止數組越界。放置布置的雷的信息放置排查出雷的信息初始化雷盤初始化展示界面打印展示界面效果如下布置雷隨機在數組中讓十個變成作為雷。 目錄 前言 一、游戲思路 二、游戲框架 1.菜單界面 1.菜單:...
摘要:寫在前面我們已經寫過了三子棋小游戲肯定沒玩過癮,我們再寫個掃雷小游戲吧目錄寫在前面認識游戲游戲規則游戲框架游戲實現效果展示全部代碼文件文件文件認識游戲相信大家對掃雷都不陌生每臺電腦必備的小游戲游戲規則就是在規定的時間將 ...
摘要:目錄前言前言前期的準備前期的準備游戲代碼的具體實現游戲代碼的具體實現完整版的掃雷小游戲代碼完整版的掃雷小游戲代碼總結總結前言掃雷是一款大眾類的益智小游戲,于年發行。 目錄 前言 前期的準備 游戲代碼的具體實現 1、text.c 2、game.h 3、game.c 完整版的掃雷小游戲代碼: 1...
閱讀 4152·2023-04-26 02:40
閱讀 2655·2023-04-26 02:31
閱讀 2746·2021-11-15 18:08
閱讀 568·2021-11-12 10:36
閱讀 1425·2021-09-30 09:57
閱讀 5192·2021-09-22 15:31
閱讀 2626·2019-08-30 14:17
閱讀 1269·2019-08-30 12:58