摘要:目錄一菜單模塊一菜單模塊二函數(shù)二函數(shù)函數(shù)聲明及行數(shù)列數(shù)雷數(shù)函數(shù)聲明及行數(shù)列數(shù)雷數(shù)初始化雷陣初始化雷陣打印雷陣打印雷陣布置雷陣布置雷陣計(jì)算雷數(shù)計(jì)算雷數(shù)排雷排雷函數(shù)函數(shù)三全部代碼三全部代碼
目錄
1、函數(shù)聲明及行數(shù)列數(shù)雷數(shù)
菜單與井字棋類似都是先打印菜單然后用一個(gè)do……while循環(huán)嵌套switch選擇玩游戲或著退出游戲,如果選擇錯(cuò)誤則提示輸入錯(cuò)誤,讓用戶重新選擇
#include"game.h"void menu(){ printf("**************************************/n"); printf("************** 1. play ************/n"); printf("**************************************/n"); printf("************** 0. exit ************/n"); printf("**************************************/n");}void test(){ int input = 0; do { menu(); scanf("%d", &input); switch (input) { case 1 : game(); break; case 0 : exit(0); break; default: printf("選擇錯(cuò)誤,重新選擇/n"); break; } } while (input);}int main(){ test(); return 0;}
#include#define ROW 9#define COL 9#define ROWS ROW+2#define COLS COL+2#define EASY_COUNT 10void InitBoard(char board[ROWS][COLS], int rows, int cols, char set);//初始化數(shù)組void DisplayBoard(char board[ROWS][COLS], int rows, int cols);//打印棋盤void SetMine(char board[ROWS][COLS], int row, int col);//布置雷void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);//排查雷
為后期方便修改游戲行列數(shù)直接在宏定義出行列數(shù)
void InitBoard(char board[ROWS][COLS], int rows, int cols, char set){ for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { board[i][j] = set; } }}
void DisplayBoard(char board[ROWS][COLS], int row, int col){ int i = 0, j = 0; for (i = 0; i <= col; i++)//打印列數(shù) { printf("%d ", i); } printf("/n"); for (i = 1; i <= row; i++) { printf("%d ", i);//打印行數(shù) for (j = 1; j <= col; j++) { printf("%c ", board[i][j]); } printf("/n"); }}
?為方便輸入要排雷的坐標(biāo)在第一行打印列數(shù),第一列打印行數(shù)
void SetMine(char board[ROWS][COLS], int row, int col){ int count = EASY_COUNT; while (count) { int x = rand() % row + 1; int y = rand() % col + 1; if (board[x][y] == "0") { board[x][y] = "1"; count--; } } }
用count記錄雷數(shù)當(dāng)布置夠則跳出循環(huán),結(jié)束函數(shù)
x,y在行列數(shù)以內(nèi)隨機(jī)取值,如果沒有雷就布置雷
為正確生成隨機(jī)數(shù)在test函數(shù)中加入
srand((unsigned int)time(NULL));
int get_mine_count(char mine[ROWS][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][y + 1] - 8 * "0" + mine[x + 1][y - 1] + mine[x + 1][y] + mine[x + 1][y + 1];}
如果輸入的坐標(biāo)正確,計(jì)算周圍八個(gè)坐標(biāo)中有幾個(gè)雷
因?yàn)槌跏蓟瘯r(shí)在有雷的地方,寫為字符一,沒雷的地方為字符零,所以加起來減去八個(gè)字符零,就是雷的個(gè)數(shù)
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)"); scanf("%d%d", &x, &y); if (x >= 1 && x <= row && y >= 1 && y <= col) { if (mine[x][y] == "1") { printf("很遺憾,你被炸死了/n"); DisplayBoard(mine, row, col); break; } else { int n = get_mine_count(mine, x, y); show[x][y] = n + "0"; DisplayBoard(show, row, col); win++; } } else { printf("輸入錯(cuò)誤,請(qǐng)重新輸入/n"); } } if (win == row * col - EASY_COUNT) { printf("你贏了,排雷成功!/n"); } }
若輸入的坐標(biāo)x,y超出行與列的范圍則輸入錯(cuò)誤,讓玩家重新輸入
若輸入的坐標(biāo)x,y位置處為字符一,則踩雷輸?shù)粲螒?,再打印出雷陣讓玩家“瞑目?/p>
若輸入的坐標(biāo)x,y位置處為字符零,預(yù)先準(zhǔn)備一個(gè)計(jì)數(shù)器,計(jì)算排雷的數(shù)量,當(dāng)數(shù)量等于所有的格子減雷的數(shù)量則排雷完成
void game(){ char mine[ROWS][COLS] = { 0 };//存放布雷位置 char show[ROWS][COLS] = { 0 };//存放排雷信息 InitBoard(mine, ROWS, COLS, "0");//初始化mine為0 InitBoard(show, ROWS, COLS, "*");//初始化show為0 SetMine(mine, ROW, COL); DisplayBoard(show, ROW, COL); FindMine(mine, show, ROW, COL);}
首先準(zhǔn)備兩個(gè)數(shù)組,一個(gè)存放雷的位置,一個(gè)存放排雷的信息
將mine數(shù)組全部初始化為零,show全部初始化為*
先將棋盤打印一下,然后開始排雷
#define _CRT_SECURE_NO_WARNINGS 1#include"game.h"void menu(){ printf("**************************************/n"); printf("************** 1. play ************/n"); printf("**************************************/n"); printf("************** 0. exit ************/n"); printf("**************************************/n");}void game(){ char mine[ROWS][COLS] = { 0 };//存放布雷位置 char show[ROWS][COLS] = { 0 };//存放排雷信息 InitBoard(mine, ROWS, COLS, "0");//初始化mine為0 InitBoard(show, ROWS, COLS, "*");//初始化show為0 SetMine(mine, ROW, COL); DisplayBoard(show, ROW, COL); FindMine(mine, show, ROW, COL);}void test(){ srand((unsigned int)time(NULL)); int input = 0; do { menu(); scanf("%d", &input); switch (input) { case 1 : game(); break; case 0 : exit(0); break; default: printf("選擇錯(cuò)誤,重新選擇/n"); break; } } while (input);}int main(){ test(); return 0;}
#pragma once#include#define ROW 9#define COL 9#define ROWS ROW+2#define COLS COL+2#define EASY_COUNT 10void InitBoard(char board[ROWS][COLS], int rows, int cols, char set);//初始化數(shù)組void DisplayBoard(char board[ROWS][COLS], int rows, int cols);//打印棋盤void SetMine(char board[ROWS][COLS], int row, int col);//布置雷void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);//排查雷
#define _CRT_SECURE_NO_WARNINGS 1#include "game.h"void InitBoard(char board[ROWS][COLS], int rows, int cols, char set){ for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { board[i][j] = set; } }}void DisplayBoard(char board[ROWS][COLS], int row, int col){ int i = 0, 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 board[ROWS][COLS], int row, int col){ int count = EASY_COUNT; while (count) { int x = rand() % row + 1; int y = rand() % col + 1; if (board[x][y] == "0") { board[x][y] = "1"; count--; } } }int get_mine_count(char mine[ROWS][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][y + 1] - 8 * "0" + mine[x + 1][y - 1] + mine[x + 1][y] + mine[x + 1][y + 1];}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)"); scanf("%d%d", &x, &y); if (x >= 1 && x <= row && y >= 1 && y <= col) { if (mine[x][y] == "1") { printf("很遺憾,你被炸死了/n"); DisplayBoard(mine, row, col); break; } else { int n = get_mine_count(mine, x, y); show[x][y] = n + "0"; DisplayBoard(show, row, col); win++; } } else { printf("輸入錯(cuò)誤,請(qǐng)重新輸入/n"); } } if (win == row * col - EASY_COUNT) { printf("你贏了,排雷成功!/n"); } }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/123358.html
摘要:上一期咱們用語言實(shí)現(xiàn)了三子棋的小游戲語言實(shí)現(xiàn)三子棋今天我們?cè)賮韺憘€(gè)掃雷的游戲,說起掃雷,相信大家都不陌生,可能許多朋友還是玩掃雷的高手。 ? ? ?上一期咱們用C語言實(shí)現(xiàn)了三子棋的小游戲? C語言實(shí)現(xiàn)三子棋? ? ? ?今天我們?cè)賮韺憘€(gè)掃雷的游戲,說起掃雷,相信大家都不陌生,可能許多朋友還是...
摘要:如果整個(gè)游戲的數(shù)據(jù)設(shè)計(jì)都基于一個(gè)二維數(shù)組的話相對(duì)來說容易混淆,比如只有一個(gè)數(shù)組的話,除了要對(duì)區(qū)分雷區(qū)與非雷區(qū)加以處理,還有后續(xù)排雷的信息要處理。 今天要分享給大家的是掃雷的代碼實(shí)現(xiàn),和前幾天寫的那個(gè)三子棋差不多,大體思想就是以二維數(shù)組為載體,編寫設(shè)計(jì)函數(shù)來實(shí)現(xiàn)它的各種功能。我們先來看看最后的...
目錄 ?前言:●由于作者水平有限,文章難免存在謬誤之處,敬請(qǐng)讀者斧正,俚語成篇,懇望指教! ???????? ? ? ?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ——By 作者:新曉·故知 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ...
摘要:新人小白的第一篇博客,有什么不好之處望多提意見。這個(gè)掃雷小游戲主要是基于二維數(shù)組,循環(huán)與基本的函數(shù)知識(shí)等。請(qǐng)輸入坐標(biāo)提示玩家輸入坐標(biāo)。換行是為了看著好看,要不然打印出來的數(shù)組會(huì)變形的。用來接收判斷輸贏的函數(shù)的返回值。 ???????新人小白的第一篇博客,有什么不好之處望多提意見。 ? ? ?...
摘要:函數(shù)游戲菜單請(qǐng)選擇掃雷游戲退出游戲選擇錯(cuò)誤解析函數(shù)內(nèi)部利用時(shí)間戳,形成隨機(jī)數(shù),主要目的是實(shí)現(xiàn)游戲中地雷的隨機(jī)埋放。 前言 本篇文章使用C語言實(shí)現(xiàn)簡(jiǎn)單小游戲---掃雷。(文章最后有完整代碼鏈接) 想必大多數(shù)人都玩過或者了解過掃雷的游戲規(guī)則,但是在這里,我們?cè)谝黄鹬販匾幌聮呃椎挠螒蛞?guī)則,也更好...
閱讀 2573·2021-11-15 11:38
閱讀 2016·2021-11-05 09:37
閱讀 2426·2021-10-08 10:12
閱讀 2868·2019-08-30 15:55
閱讀 2196·2019-08-30 15:52
閱讀 1288·2019-08-29 13:24
閱讀 509·2019-08-26 18:27
閱讀 1534·2019-08-26 18:27