C語言實(shí)現(xiàn)簡單的掃雷游戲操作
掃雷小游戲的代碼實(shí)現(xiàn),供大家參考,具體內(nèi)容如下
編譯器使用的為VS2013
代碼分為三個(gè)部分
1、頭文件 game.h
2、源文件 game.c 用來存放游戲中所有的函數(shù)
3、源文件 test.c 用來存放游戲的主題部分
代碼如下:
game.h部分
#include<stdio.h> #include<time.h> #include<stdlib.h> #define EASY_COUNT 5 //存放雷的個(gè)數(shù),此處為5,可任意改變 #define ROW 5 //行 #define COL 5 //列 #define ROWS ROW+2 #define COLS COL+2 //初始化棋盤,將雷設(shè)計(jì)成字符‘1' ,注意不是數(shù)字1,沒有雷設(shè)計(jì)成字符‘0',此處設(shè)計(jì)是為后續(xù)統(tǒng)計(jì)雷的個(gè)數(shù)做鋪墊 void InitBoard(char board[ROWS][COLS], int rows, int cols, char set); //打印棋盤 void DisplayBoard(char board[ROWS][COLS], int row, int col); //對(duì)雷進(jìn)行布置 void SetMine(char mine[ROWS][COLS], int row, int col, int count); //排雷 void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);
game.c部分
#include "game.h" void InitBoard(char board[ROWS][COLS], int rows, int cols, char set) { int i = 0; for (i = 1; i <= rows - 2; i++) { int j = 0; for (j = 1; j <= cols - 2; j++) { board[i][j] = set; } } } void DisplayBoard(char board[ROWS][COLS], int row, int col) { int i = 0; printf("----------掃雷游戲----------\n"); for (i = 0; i <= col; i++) { printf("%d ", i); } printf("\n"); for (i = 1; i <= row; i++) { int j = 0; printf("%d ", i); for (j = 1; j <= col; j++) { printf("%c ", board[i][j]); } printf("\n"); } printf("----------掃雷游戲----------\n"); } void SetMine(char mine[ROW][COL], int row, int col, int count) { while (count) { int x = rand() % row + 1; int y = rand() % col + 1; if (mine[x][y] == '0') { //x,y坐標(biāo)出沒有雷 mine[x][y] = '1'; count--; } } } int GetMineCount(char mine[ROWS][COLS], int x, int y)//統(tǒng)計(jì)雷時(shí),只需將該坐標(biāo)周圍的8個(gè)位置坐標(biāo)是否有雷計(jì)算一下即可,有就加字符‘1',沒有加字符‘0'等同于不加 { int i = 0; int count = 0; for (i = x - 1; i <= x + 1; i++) { int j = 0; for (j = y - 1; j <= y + 1; j++) { if (mine[i][j] == '1') { count++; } } } return count; } //對(duì)雷的情況進(jìn)行排查 void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col) { int win = 0; while (win < row * col - EASY_COUNT) { int x; int y; printf("請(qǐng)輸入要排查的坐標(biāo):"); scanf("%d%d", &x, &y); // 1.先判斷坐標(biāo)是否非法,即可能出現(xiàn)的越界行為 // 2.坐標(biāo)合法,判斷該處坐標(biāo)是不是雷,如果是,則游戲結(jié)束 if (x >= 1 && x <= row &&y >= 1 && y <= col) { if (mine[x][y] == '1') { printf("很遺憾,你被炸死了?。。n"); DisplayBoard(mine, row, col); break; } else //坐標(biāo)合法時(shí),且該坐標(biāo)不是雷時(shí),統(tǒng)計(jì)該坐標(biāo)處雷的個(gè)數(shù) { int count = GetMineCount(mine, x, y);//設(shè)計(jì)GetMineCount函數(shù),統(tǒng)計(jì)該坐標(biāo)處雷的個(gè)數(shù) show[x][y] = count + '0'; //將該坐標(biāo)周圍雷的信息打印在棋盤上 DisplayBoard(show, row, col); win++; } } else { printf("坐標(biāo)非法,請(qǐng)重新輸入!!!\n"); } } if (row*col - EASY_COUNT == win) { printf("恭喜你,你贏了,掃雷成功!!!\n"); printf("雷的布局為:\n"); DisplayBoard(show, row, col); } }
test.c部分
#include "game.h" void menu() { printf("***************************\n"); printf("******* 1.PLAY ********\n"); printf("******* 2.EXIT ********\n"); printf("***************************\n"); } void game() { //創(chuàng)建棋盤對(duì)應(yīng)的數(shù)組 char mine[ROWS][COLS]; char show[ROWS][COLS]; InitBoard(mine, ROWS, COLS, '0');//存放布置雷的信息 InitBoard(show, ROWS, COLS, '*');//存放排查出雷的信息 //DisplayBoard(mine, ROW, COL); DisplayBoard(show, ROW, COL); //布置雷 SetMine(mine, ROW, COL, EASY_COUNT); //DisplayBoard(mine, ROW, COL); FindMine(mine, show, ROW, COL); } int main() { int input; srand((unsigned int)time(NULL)); do { menu(); printf("請(qǐng)輸入 1 開始游戲 輸入 0 退出游戲> \n"); scanf("%d", &input); switch (input) { case 1: game();//掃雷游戲的實(shí)現(xiàn) break; case 0: printf("退出游戲\n"); break; default: printf("選擇錯(cuò)誤,請(qǐng)重新選擇\n"); } } while (input); return 0; }
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
解析C++中的虛擬函數(shù)及其靜態(tài)類型和動(dòng)態(tài)類型
虛擬函數(shù)(Visual Function)亦常被成為虛函數(shù),是C++中的一個(gè)重要特性,本文我們就來解析C++中的虛擬函數(shù)及其靜態(tài)類型和動(dòng)態(tài)類型2016-06-06C語言計(jì)算代碼執(zhí)行所耗CPU時(shí)鐘周期
本文給大家介紹的是使用C語言來計(jì)算代碼執(zhí)行所耗CPU時(shí)鐘周期的代碼,非常的簡單實(shí)用,不過要依托于sync,有需要的小伙伴自己參考下吧。2015-03-03C++??STL?_?Vector使用及模擬實(shí)現(xiàn)
這篇文章主要介紹了C++ STL_Vector使用及模擬實(shí)現(xiàn),文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-08-08C++實(shí)現(xiàn)圖片轉(zhuǎn)base64的示例代碼
Base64就是一種 基于64個(gè)可打印字符來表示二進(jìn)制數(shù)據(jù)的表示方法,本文主要為大家詳細(xì)介紹了如何使用C++實(shí)現(xiàn)圖片轉(zhuǎn)base64,需要的可以參考下2024-04-04