用C語言實現(xiàn)簡單掃雷小游戲
前言
今天學習了制作簡易掃雷游戲,代碼如下
提示:以下是本篇文章正文內(nèi)容,下面案例可供參考
一、函數(shù)頭文件(函數(shù)聲明)
代碼如下(示例):
#pragma once #define ROW 9 #define COL 9 #define ROWS ROW+2 #define COLS COL+2 #define EASY_COUNT 10 #include<stdlib.h> #include<time.h> //初始化棋盤 void initboard(char board[ROWS][COLS], int rows, int cols,char s); //打印棋盤 void displayboard(char board[ROWS][COLS], int row, int col); //布置雷 void setmine(char board[ROWS][COLS], int row, int col); //排查雷 void findmine(char board[ROWS][COLS], char show[ROWS][COLS], int row, int col);
二、函數(shù)文件(函數(shù)定義)
1.引入庫
ps:game.h即前面的函數(shù)頭文件,引用自己創(chuàng)建的文件用“ ”
代碼如下(示例):
#define _CRT_SECURE_NO_WARNINGS #include"game.h" #include<stdio.h> void initboard(char board[ROWS][COLS], int rows, int cols,char s) { int i = 0; for (i = 0;i < rows;i++) { int j = 0; for (j = 0;j < cols;j++) { board[i][j] = s; } } } void displayboard(char board[ROWS][COLS], int row, int col) { int i = 0; printf("--------------------------------\n"); for (i = 0;i <= 9;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 board[ROWS][COLS], int row, int col) { int count = EASY_COUNT; while (count) { //1.生成隨機下標(1-9) int x = rand() % row + 1; int y = rand() % col + 1; if (board[x][y] != '1')//布置雷要考慮某塊地方是否已經(jīng)被安放過雷 { board[x][y] = '1'; count--;//判斷雷布置成功(沒有覆蓋其他雷),雷個數(shù)才減少 } } } int getminecount(char mine[ROWS][COLS],int x,int y) { return mine[x - 1][y] + mine[x - 1][y - 1] + mine[x - 1][y + 1] + mine[x][y - 1] + mine[x][y + 1] + mine[x + 1][y - 1] + mine[x + 1][y] + mine[x + 1][y + 1] - 8 * '0';//符號數(shù)字-‘0'=數(shù)字(十進制),詳情見ascll碼表 } 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("請輸入要排查的坐標:>"); 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 count = getminecount(mine, x, y); show[x][y] = count + '0'; displayboard(show, ROW, COL); win++; } } else { printf("坐標輸入錯誤,請重新輸入:\n"); } } if (win == row * col - EASY_COUNT) { printf("You win!\n"); displayboard(show, ROW, COL); } }
2.主體文件
代碼如下(示例):
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include"game.h" void menu() { printf("************************\n"); printf("******** 1.play ********\n"); printf("******** 0.exit ********\n"); printf("************************\n"); } void game() { char mine[ROWS][COLS] = {0};//存放雷的信息 char show[ROWS][COLS] = {0};//存放排查出雷的信息 //初始化棋盤 initboard(mine, ROWS, COLS,'0');//用‘0'覆蓋 initboard(show, ROWS, COLS,'*');//用‘*'覆蓋 /*displayboard(mine,ROW,COL); displayboard(show, ROW, COL);*/ //布置雷 setmine(mine, ROW, COL); displayboard(show, ROW, COL); //displayboard(mine, ROW, COL);//對檢查能否通關(guān)時,進行一次排查要完成一次掃雷游戲,時間太長,也不方便,可以將9*9的棋盤雷設(shè)置為80個,打印出雷所在位置,再進行排查1次即可 //排查雷 findmine(mine,show,ROW,COL); } int main() { int input = 0; srand((unsigned int)time(NULL)); do { menu(); printf("請輸入1進行游戲 或0退出游戲\n"); scanf("%d", &input); switch (input) { case 1: game(); break; case 0: printf("退出游戲\n"); break; default: printf("選擇錯誤\n"); break; } } while (input); }
總結(jié)
這里的制作的掃雷還有兩個地方需要酌情改進,一個是點擊一個空白處,可以擴散其他空白,減少游戲繁瑣性;另一個就是確定一個坐標為雷時,可以進行“插旗子”將雷區(qū)標記出來。其余的對雷進行隨機擺放、遍歷出雷的個數(shù),確定該坐標附近有多少雷、踩雷或掃雷成功等問題在本文中都已得到解決,希望對讀者有所幫助。
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
詳解C++調(diào)用Python腳本中的函數(shù)的實例代碼
這篇文章主要介紹了C++調(diào)用Python腳本中的函數(shù) ,需要的朋友可以參考下2018-11-11C語言靜態(tài)版通訊錄的設(shè)計與實現(xiàn)
靜態(tài)版通訊錄是一種簡單的通訊錄實現(xiàn)方式,通過定義固定的數(shù)組大小來存儲聯(lián)系人信息。該方法不支持動態(tài)增刪聯(lián)系人,但具有實現(xiàn)簡單、易于理解的優(yōu)點。在程序設(shè)計中,需注意數(shù)組邊界溢出等問題2023-04-04Qt圖形圖像開發(fā)曲線圖表模塊QChart庫基本用法、各個類之間的關(guān)系說明
這篇文章主要介紹了Qt圖形圖像開發(fā)曲線圖表模塊QChart庫基本用法、各個類之間的關(guān)系說明,需要的朋友可以參考下2020-03-03C++輕量級界面開發(fā)框架ImGUI介紹小結(jié)
如果從事過C++?Windows客戶端開發(fā),大家對MFC、Qt、DuiLib等各種DirectUI應(yīng)該有了解,本篇給大家介紹一個超級輕量級的C++開源跨平臺圖形界面框架ImGUI,感興趣的可以了解一下2021-11-11C++中priority_queue模擬實現(xiàn)的代碼示例
在c++語言中數(shù)據(jù)結(jié)構(gòu)中的堆結(jié)構(gòu)可以通過STL庫中的priority_queue 優(yōu)先隊列來實現(xiàn),這樣做極大地簡化了我們的工作量,這篇文章主要給大家介紹了關(guān)于C++中priority_queue模擬實現(xiàn)的相關(guān)資料,需要的朋友可以參考下2021-08-08