c++實(shí)現(xiàn)掃雷小游戲代碼分享
分成兩個(gè)源文件和一個(gè)頭文件
注意:這串代碼并不完整,不能夠?qū)崿F(xiàn)當(dāng)所查坐標(biāo)周?chē)椎臄?shù)量為0時(shí),直接展開(kāi)周?chē)鴺?biāo);
頭文件:game.h
#include <stdio.h> #define count 10 //雷的數(shù)量 //定義 行-ROW,列-COL #define ROW 9 #define COL 9 #define ROWS ROW+2 //多加一些,方便代碼 #define COLS COL+2 //初始化棋盤(pán),聲明的函數(shù)均在game.c中實(shí)現(xiàn) void InitBoard(char board[ROWS][COLS],int rows,int cols); //打印棋盤(pán) void DisplayBoard(char board[ROW][COL],int row.int col); //布置雷 void SetMine(char board[ROW][COLS],int row,int col); //找雷 void FindMine(char mine[][COLS],char show[][COLS],int row,int col);
第一個(gè)源文件:saolei.c
#include "game.h" ?//需要包含和聲明的東西在game.h中完成 void menu() {? ? printf(" ? ? ? ? ? ? ? ? ?\n"); ? printf(" ? ? ? 1.play ? ? \n"); ? printf(" ? ? ? 0.exit ? ? \n"); ? printf(" ? ? ? ? ? ? ? ? ?\n"); } void game() {? ? // ROW and COL 在game.h中定義 ? char mine[ROWS][COLS]; ?// 地雷埋藏的棋盤(pán) ? char show[ROWS][COLS]; ?// 展示出的棋盤(pán) ? //初始化棋盤(pán) ? //game()中的函數(shù)在game.h中聲明,在game.c中實(shí)現(xiàn) ? InitBoard(mine,ROWS,COLS,'0'); ? //0代表無(wú)雷,1代表有雷 ? InitBOard(show,ROWS,COLS,'*'); ? //打印棋盤(pán) ? DisplayBoard(show,ROW,COL); ? //布置雷 ? SetMine(mine,ROW,COL); ? //找雷 ? FindMine(mine,show,ROW,COL); ?? } int main() { ? srand((unsigned int) time(NULL));//生成隨機(jī)數(shù) ? int input = 0; ? do ? ? ? ? ? ? ?//do-while循環(huán) ? { ? ? menu(); ? ?//(1--play ? 0--exit)也是do-while循環(huán)的條件 ? ? printf("請(qǐng)選擇:"); ? ? scanf("%d",&input); ? ? switch(input) ? ? {? ? ? case 1: ? ? ? ? printf("開(kāi)始游戲\n"); ? ? ? ? game(); ? ? ? ? break; ? ? ?case 0: ? ? ? ? printf("退出游戲"); ? ? ? ? break; ? ? ?default: ?? ? ? ? ? printf("選擇錯(cuò)誤,請(qǐng)重新輸入"); ? ? ? ? break; ? ? } ? }while(input) ?? ? return 0; }
第二個(gè)源文件:game.c
#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) { ? int i = 0; ? int j = 0; ? for(i = 0;i <= row;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[ROW][COL],int row,int col) { ? int x = 0; ? int y = 0; ? while(count) //count-雷的數(shù)量 ? { ? ? x = rand()%row + 1;//因?yàn)樵?-row中布置雷,邊緣一排不用,最后為了記錄 ? ? y = rand()%col + 1;//周?chē)椎臄?shù)量方便,同時(shí)代碼方便 ? ? if( board[x][y] == '0') ? ? { ? ? ? board[x][y] = '1'; ? ? ? count--; ? ? } ? } } //算出周?chē)椎膫€(gè)數(shù) int get_mine_count(mine[ROWS][COLS],int row,int col) { ? int i = 0; ? int j = 0; ? int mine_count = 0; ? for( i = -1;i <= 1; i++ ) ? { ? ? for( j = -1;j <= 1; j++ ) ? ? { ? ? ? if( mine[i][j] == '1') ? ? ? { ? ? ? ? mine_count++; ? ? ? } ? ? } ? } ? return mine_count; } void FindMine(char mine[][COLS],char show[][COLS],int row,int col) { ? int x = 0; ? int y = 0; ? int ret = 0;//已經(jīng)查找過(guò)的位置的數(shù)量 ? while(ret < row * col - count)//當(dāng)還剩下count的數(shù)量時(shí),贏得游戲 ? {? ? ? printf("請(qǐng)輸入查找位置下標(biāo):"); ? ? scanf("%d%d",&x,&y); ? ? if(x >= 1 && x <= row && y >= 1 && y <= col) ? ? { ? ? ? if(mine[x][y] == '0') ? ? ? { ? ? ? ? //當(dāng)所查坐標(biāo)的位置不是雷時(shí),將該坐標(biāo)展示成周?chē)椎膫€(gè)數(shù) ? ? ? ? int c = get_mine_count(mine,ROW,COL); ? ? ? ? mine[x][y] = c + '0';//返回值為int型,數(shù)組為char型,因此+'0' ? ? ? ? ret++; ? ? ? ? DisplayBoard(show,ROW,COL); ? ? ? } ? ? ? else ? ? ? { ? ? ? ? printf("YOU LOSE\n"); ? ? ? ? break; ? ? ? } ? ? } ? ? else ? ? { ? ? ? printf("輸入非法,請(qǐng)重新輸入\n"); ? ? } ? } ? printf("VICTORY\n"); ?//獲得勝利 }
到此這篇關(guān)于c++實(shí)現(xiàn)掃雷小游戲代碼分享的文章就介紹到這了,更多相關(guān)c++實(shí)現(xiàn)掃雷小游戲內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解設(shè)計(jì)模式中的Command命令模式及相關(guān)C++實(shí)現(xiàn)
這篇文章主要介紹了詳解設(shè)計(jì)模式中的Command命令模式及相關(guān)C++實(shí)現(xiàn),命令模式強(qiáng)調(diào)調(diào)用操作的對(duì)象和操作的具體實(shí)現(xiàn)者之間的解耦,需要的朋友可以參考下2016-03-03深度解析三個(gè)常見(jiàn)的C語(yǔ)言內(nèi)存函數(shù)
這篇文章主要深度解析了三個(gè)常見(jiàn)的C語(yǔ)言內(nèi)存函數(shù)memcpy,memmove,memcmp,所以本文將對(duì)memcpy,memmove,memcmp 三個(gè)函數(shù)進(jìn)行詳解和模擬實(shí)現(xiàn),需要的朋友可以參考下2023-07-07C語(yǔ)言將數(shù)組中元素的數(shù)排序輸出的相關(guān)問(wèn)題解決
這篇文章主要介紹了C語(yǔ)言將數(shù)組中元素的數(shù)排序輸出的相關(guān)問(wèn)題解決,文中的題目是將元素連接起來(lái)排成一個(gè)數(shù)并要求出這類(lèi)結(jié)果中數(shù)最小的一個(gè),需要的朋友可以參考下2016-03-03C語(yǔ)言實(shí)現(xiàn)搶紅包程序代碼精簡(jiǎn)版
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)搶紅包程序代碼的精簡(jiǎn)版,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-07-07C++實(shí)現(xiàn)圖像目標(biāo)區(qū)裁剪ImageCropping
本文主要介紹了C++實(shí)現(xiàn)圖像目標(biāo)區(qū)裁剪ImageCropping,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06