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