摘要:文章目錄一游戲簡(jiǎn)介二代碼實(shí)現(xiàn)調(diào)用函數(shù)打印菜單函數(shù)函數(shù)初始化函數(shù)布置雷函數(shù)排雷函數(shù)三總代碼一游戲簡(jiǎn)介一款小游戲,一張棋盤可以自己設(shè)計(jì),,,都可以,或是添加一些自己喜歡的元素布滿許多未知是雷或是安全的格子,輸入坐標(biāo),若觸雷,游戲結(jié)束,反之,顯
文章目錄
一、游戲簡(jiǎn)介
二、代碼實(shí)現(xiàn)
1.調(diào)用test函數(shù)
2.打印菜單(menu函數(shù))
3.game函數(shù)
4.初始化(Initmine函數(shù))
5.布置雷(SetMine函數(shù))
6.排雷(FindMime函數(shù))?
?三、總代碼
1.game.h
2.game.c
3.test.c
一、游戲簡(jiǎn)介
一款小游戲,一張棋盤(可以自己設(shè)計(jì),9*9 , 12*12 , 15*15? 都可以 ,?或是添加一些自己喜歡的元素)布滿許多未知是雷或是安全的格子,輸入坐標(biāo),若觸雷,游戲結(jié)束,反之,顯示周圍8個(gè)格子的雷的個(gè)數(shù)
二、代碼實(shí)現(xiàn)
1.首先調(diào)用test?函數(shù)
void test(){ int input = 0; srand((unsigned int)time(NULL)); do { menu(); printf("請(qǐng)選擇:>"); scanf("%d", &input); switch (input) { case 1: //掃雷 game(); break; case 0: printf("退出游戲/n"); break; default: printf("選擇錯(cuò)誤/n"); break; } } while (input);}
2.打印菜單,進(jìn)行選擇
void menu(){ printf("***********************/n"); printf("***** 1. play ****/n"); printf("***** 0. exit ****/n"); printf("***********************/n");}
3.實(shí)現(xiàn)game函數(shù)
void game(){ //創(chuàng)建數(shù)組 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); //DisplayBoard(mine, ROW, COL); //排雷 FindMine(mine, show, ROW, COL);}
4.初始化棋盤及打?。梢园凑兆约旱呐d趣自己設(shè)計(jì))
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++) { printf("%d ", i);//打印行號(hào) for (j = 1; j <= col; j++) { printf("%c ", board[i][j]); } printf("/n"); }}
5.布置雷
void SetMine(char mine[ROWS][COLS], int row, int col){ int count = EASY_COUNT; while (count) { int x = rand() % row + 1; int y = rand() % col + 1; if (mine[x][y] == "0") { mine[x][y] = "1"; count--; } }}
6.排雷
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 { //計(jì)算x,y坐標(biāo)周圍有幾個(gè)雷 int n = get_mine_count(mine, x, y); show[x][y] = n + "0"; DisplayBoard(show, row, col); win++; } } else { printf("輸入坐標(biāo)非法,無(wú)法排雷,請(qǐng)重新輸入/n"); } } if (win == row * col - EASY_COUNT) { printf("恭喜你,排雷成功/n"); DisplayBoard(mine, row, col); }}
排雷內(nèi)部的函數(shù),用來(lái)在show棋盤上顯示雷的個(gè)數(shù)?
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";}
三、總代碼
1.game.h
#pragma once//頭文件的包含#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);
2.game.c
#define _CRT_SECURE_NO_WARNINGS 1#include "game.h"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++) { printf("%d ", i);//打印行號(hào) 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; int y = rand() % col + 1; if (mine[x][y] == "0") { mine[x][y] = "1"; count--; } }}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):>"); 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 { //計(jì)算x,y坐標(biāo)周圍有幾個(gè)雷 int n = get_mine_count(mine, x, y); show[x][y] = n + "0"; DisplayBoard(show, row, col); win++; } } else { printf("輸入坐標(biāo)非法,無(wú)法排雷,請(qǐng)重新輸入/n"); } } if (win == row * col - EASY_COUNT) { printf("恭喜你,排雷成功/n"); DisplayBoard(mine, row, col); }}
3.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");}void game(){ //創(chuàng)建數(shù)組 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); //DisplayBoard(mine, ROW, COL); //排雷 FindMine(mine, show, ROW, COL);}void test(){ int input = 0; srand((unsigned int)time(NULL)); do { menu(); printf("請(qǐng)選擇:>"); scanf("%d", &input); switch (input) { case 1: //掃雷 game(); break; case 0: printf("退出游戲/n"); break; default: printf("選擇錯(cuò)誤/n"); break; } } while (input);}int main(){ test(); return 0;}
這只是掃雷的基礎(chǔ)版,還有很多功能沒(méi)有實(shí)現(xiàn),我將會(huì)繼續(xù)改進(jìn),感謝觀看
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/123360.html
目錄 ?前言:●由于作者水平有限,文章難免存在謬誤之處,敬請(qǐng)讀者斧正,俚語(yǔ)成篇,懇望指教! ???????? ? ? ?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ——By 作者:新曉·故知 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ...
摘要:上一期咱們用語(yǔ)言實(shí)現(xiàn)了三子棋的小游戲語(yǔ)言實(shí)現(xiàn)三子棋今天我們?cè)賮?lái)寫個(gè)掃雷的游戲,說(shuō)起掃雷,相信大家都不陌生,可能許多朋友還是玩掃雷的高手。 ? ? ?上一期咱們用C語(yǔ)言實(shí)現(xiàn)了三子棋的小游戲? C語(yǔ)言實(shí)現(xiàn)三子棋? ? ? ?今天我們?cè)賮?lái)寫個(gè)掃雷的游戲,說(shuō)起掃雷,相信大家都不陌生,可能許多朋友還是...
摘要:掃雷最原始的版本可以追溯到年一款名為方塊的游戲。兩年后,湯姆安德森在的基礎(chǔ)上又編寫出了游戲地雷,由此奠定了現(xiàn)代掃雷游戲的雛形。年,微軟公司的羅伯特杜爾和卡特約翰遜兩位工程師在系統(tǒng)上加載了該游戲,掃雷游戲才正式在全世界推廣開來(lái)。 掃雷最原始的版本可以追溯到1973年一款名為方塊的游戲。 不久,...
摘要:函數(shù)游戲菜單請(qǐng)選擇掃雷游戲退出游戲選擇錯(cuò)誤解析函數(shù)內(nèi)部利用時(shí)間戳,形成隨機(jī)數(shù),主要目的是實(shí)現(xiàn)游戲中地雷的隨機(jī)埋放。 前言 本篇文章使用C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單小游戲---掃雷。(文章最后有完整代碼鏈接) 想必大多數(shù)人都玩過(guò)或者了解過(guò)掃雷的游戲規(guī)則,但是在這里,我們?cè)谝黄鹬販匾幌聮呃椎挠螒蛞?guī)則,也更好...
閱讀 1686·2021-11-15 11:38
閱讀 4542·2021-09-22 15:33
閱讀 2345·2021-08-30 09:46
閱讀 2192·2019-08-30 15:43
閱讀 837·2019-08-30 14:16
閱讀 2085·2019-08-30 13:09
閱讀 1263·2019-08-30 11:25
閱讀 713·2019-08-29 16:42