【趣味小游戲】--掃雷游戲

目錄

一.test.c部分

?二.game.h部分

?三.game.c部分


前言:前面學習了數組和函數等c語言相關知識,這篇文章我們將通過這些知識分為三個文件來完成掃雷游戲;

1.test.c //文件中寫游戲的測試邏輯

2.game.c //文件中寫游戲中函數的實現等

3.game.h. //文件中寫游戲需要的數據類型和函數聲明等


一.test.c部分

#define _CRT_SECURE_NO_WARNINGS
#include"game.h"void menu()
{printf("***********************\n");printf("***** 1. play *****\n");printf("***** 2. exit *****\n");printf("***********************\n");
}void game()
{char mine[ROWS][COLS] = { 0 };//用來存放布置好的雷的信息char show[ROWS][COLS] = { 0 };//用來存放排查出的雷的個數信息//棋盤初始化//mine全部初始化為0,表示還沒布置好雷;//show全部初始化為*,表示還沒被排查;initboard(mine, ROWS, COLS, '0');initboard(show, ROWS, COLS, '*');//打印棋盤9*9printboard(show, ROW, COL);//布置雷setmine(mine, ROW, COL);//排查雷findmine(mine, show, ROW, COL);}int main()
{int num = 0;srand((unsigned int)time(NULL));do{menu();printf("請選擇:>");scanf("%d", &num);switch (num){case 1:game();break;case 2:printf("你已退出游戲\n");break;default:printf("選擇錯誤,請重新選擇\n");break;}} while (num != 2);return 0;
}

?二.game.h部分

#pragma once#include<stdio.h>
#include<stdlib.h>
#include<time.h>//定義常量的符號
#define ROW 9
#define COL 9#define ROWS ROW+2
#define COLS COL+2#define EASY_COUNT 10//函數的聲明//棋盤初始化
void initboard(char board[ROWS][COLS], int rows, int cols, int set);//打印棋盤
void printboard(char mine[ROWS][COLS], int row, int col);//布置雷
void setmine(char mine[ROWS][COLS], int row, int col);//獲取周圍雷的個數
int getmine(char mine[ROWS][COLS], int x, int y);//排查雷
void findmine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);

?三.game.c部分

#define _CRT_SECURE_NO_WARNINGS
#include"game.h"void initboard(char board[ROWS][COLS], int rows, int cols, int set)
{int i = 0;for (i = 0;i < rows;i++){int j = 0;for (j = 0;j < cols;j++){board[i][j] = set;}}
}void printboard(char mine[ROWS][COLS], int row, int col)
{int i = 0;printf("-----掃雷游戲-----\n");for (i = 0;i <= row;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 ", mine[i][j]);}printf("\n");}
}void setmine(char mine[ROWS][COLS], int row, int col)
{//隨機布置10個雷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--;}}
}int getmine(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] + mine[x + 1][y - 1] + mine[x + 1][y] + 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 w =0;while (w< 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");printboard(mine, ROW, COL);break;}else if(show[x][y]=='*'){//統計坐標周圍雷的個數int c = getmine(mine, x, y);show[x][y] = c + '0';//數字+‘0’變為數字字符printboard(show, ROW, COL);w++;}else{printf("該坐標已被查找,請重新輸入\n");}}else{printf("非法輸入,請重新輸入\n");}if (w == row * col - EASY_COUNT){printf("恭喜你,排雷成功\n");printboard(mine, ROW, COL);}}}

結語;本篇文章就到此結束了,掃雷游戲的實現三個文件都必不可少,當然這只是最基礎版本的,更多進階功能還需要后續的學習。大家可以通過注釋來理解一下所寫的代碼,感謝大家的支持。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/77724.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/77724.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/77724.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【微服務】SpringBoot制作Docker鏡像接入SkyWalking詳解

目錄 一、前言 二、SkyWalking介紹 2.1 SkyWalking是什么 2.2 SkyWalking核心功能 2.3 SkyWalking整體架構 2.4 SkyWalking主要工作流程 三、前置準備 3.1 搭建SkyWalking服務 3.1.1 下載安裝包 3.1.2 上傳服務器目錄 2.1.3 數據庫持久化配置說明 3.1.4 啟動skywalk…

從零開始構建微博爬蟲與數據分析系統

從零開始構建微博爬蟲與數據分析系統 引言 社交媒體平臺蘊含著海量的信息和數據&#xff0c;通過對這些數據的收集和分析&#xff0c;我們可以挖掘出有價值的見解。本文將詳細介紹如何構建一個完整的微博爬蟲和數據分析系統&#xff0c;從數據爬取、清洗、到多維度分析與可視…

深入探索RAG:用LlamaIndex為大語言模型擴展知識,實現智能檢索增強生成

大型語言模型&#xff08;LLM&#xff09;&#xff0c;如ChatGPT和Llama&#xff0c;在回答問題方面表現出色&#xff0c;但它們的知識僅限于訓練時所獲取的信息。它們無法訪問私有數據&#xff0c;也無法在訓練截止日期之后學習新知識。那么&#xff0c;核心問題就是……我們如…

【延遲雙刪】簡單解析

使用場景&#xff1a;【高并發】情況下的做【更新操作】 什么是延遲雙刪 首次刪除&#xff1a;當需要更新某個數據項時&#xff0c;首先刪除緩存中的該項。 更新數據庫&#xff1a;接著&#xff0c;更新數據庫中的該項。 短暫延遲&#xff1a;然后等待一段很短的時間&#xff…

解決Windows安全中心顯示空白頁面

1、電腦重裝系統后&#xff0c;發現原本一些軟件打不開了&#xff0c;電腦莫名認為有病毒&#xff0c;自動刪除插件。附圖。 2、第一反應是電腦防火墻的原因&#xff0c;默認威脅防護識別到了病毒軟件&#xff0c;自動刪除。在開始屏幕搜Windows安全中心&#xff0c;打開之后發…

【回眸】error: failed to compile `xxxxxx`重裝rust環境

在ubuntu上安裝軟件報錯 error: failed to compile cxx2flow v0.6.2 Caused by: package cargo-platform v0.1.9 cannot be built because it requires rustc 1.78 or newer, while the currently active rustc version is 1.75.0 Try re-running cargo install with --lo…

算法—冒泡排序—js(教學示例、小數據)

冒泡排序原理 冒泡排序是一種簡單的排序算法&#xff0c;通過重復遍歷數組&#xff0c;比較相鄰元素并交換位置&#xff0c;使較大的元素逐漸“浮”到數組末尾。 特點 時間復雜度&#xff1a;平均 O(n)&#xff0c;最優&#xff08;已有序時&#xff09;O(n) 空間復雜度&#…

linux sysfs的使用

在Linux內核驅動開發中&#xff0c;device_create_file 和 device_remove_file 用于動態創建/刪除設備的 sysfs 屬性文件&#xff0c;常用于暴露設備信息或控制參數。以下是完整示例及詳細說明&#xff1a; 1. 頭文件引入 #include <linux/module.h> #include <linux/…

利用 Deepseek 和 Mermaid 畫流程圖

提示詞 你是一個產品經理&#xff0c;請繪制一個報名比賽的流程圖&#xff0c;要求生成符合Mermaid語法的代碼&#xff0c;具體要求如下&#xff1a; 1.注冊賬號 2.填寫報名信息 3.參加比賽 4.查看比賽結果 生成的結果 flowchart TDA([開始]) --> B[注冊賬號]B --> C{賬…

【圖像標注技巧】目標檢測圖像標注技巧

介紹一些圖像標注技巧。之前引用過別人的文章 yolo目標檢測 技巧 trick 提升模型性能&#xff0c;deep research檢測調研報告也可以進行參考。 拉框類的標注&#xff0c;如果你不確定哪種方法好&#xff0c;你可以把所標注區域的都剪切出來&#xff0c;然后站在屏幕一米之外瞇…

數字信號處理技術架構與功能演進

數字信號處理&#xff08;DSP&#xff09;是通過數字運算實現信號分析、變換、濾波及調制解調的技術領域&#xff0c;其發展過程與技術應用如下&#xff1a; 一、定義與核心功能 技術定義&#xff1a;通過算法將模擬信號轉換為數字形式進行處理&#xff0c;具有高精度、可編程…

瀏覽器上下文通信

文章目錄 瀏覽器上下文通信同源通信同源通信流程同一瀏覽器上下文通信不同瀏覽器上下文通信 跨域通信前端和前端跨域前端和后端跨域 瀏覽器上下文通信 瀏覽器上下文通信分為兩種&#xff1a;同源和跨源。同樣的同源通信也分為同一瀏覽器上下文和不同的瀏覽器上下文。 同源通信…

Linux 離線部署 Docker 18.06.3 終極指南(附一鍵安裝卸載腳本)

Linux 離線部署 Docker 18.06.3 終極指南&#xff08;附一鍵安裝/卸載腳本&#xff09; 摘要&#xff1a;本文針對無外網環境的 Linux 服務器&#xff0c;提供基于二進制包的 Docker 18.06.3 離線安裝全流程指南。包含自動化腳本設計、服務配置優化及安全卸載方案&#xff0c;…

【前端】跟著maxkb學習logicflow流程圖畫法

文章目錄 背景1. 選定學習對象-maxkb應用邏輯編排2. 確定實現框架3. 關鍵邏輯&#xff1a;查看app-node.js4. 學習開始節點繪制流程數據形式 5. 給節點增加表單輸入框遇到過的問題 背景 看看前端如何繪制流程圖&#xff0c;界面好看點。 "logicflow/core": "1.…

Android 12系統靜態壁紙深度定制指南

1. 需求背景與實現原理 在Android 12系統ROM定制開發中&#xff0c;擴展靜態壁紙功能需要深入理解WallpaperManagerService的架構體系。系統壁紙管理通過雙端協作實現&#xff1a; WallpaperManagerService&#xff08;frameworks層&#xff09;&#xff1a;負責壁紙狀態管理、…

相得益彰 — 基于 GraphRAG 事理圖譜驅動的實時金融行情新聞資訊洞察

*本文為亞馬遜云科技博客文章&#xff0c;僅用于技術分享&#xff0c;不構成投資建議或金融決策支持。文中涉及的公司名稱僅用于技術示例&#xff0c;不代表亞馬遜云科技觀點或與這些公司的商業合作關系。 背景介紹 在當今這個信息爆炸的時代&#xff0c;金融市場每天都在產生…

OpenCV---圖像預處理(四)

OpenCV—圖像預處理&#xff08;四&#xff09; 文章目錄 OpenCV---圖像預處理&#xff08;四&#xff09;九&#xff0c;圖像掩膜9.1 制作掩膜9.2 與運算9.3 顏色替換9.3.19.3.2 顏色替換 十&#xff0c;ROI切割十 一&#xff0c;圖像添加水印11.1模板輸入11.2 與運算11.3 圖像…

【MySQL】:數據庫事務管理

一&#xff1a;學習路徑 &#xff08;1&#xff09;下載安裝mysql &#xff08;2&#xff09;學習語言&#xff1a;SQL(操作數據庫&#xff09; &#xff08;3&#xff09;mysql集群&#xff08;提升數據庫存儲效率&#xff09; &#xff08;4&#xff09;SQL使用&#xff0c;M…

內存函數和動態內存管理

目錄 一、memcpy庫函數介紹 1. memcpy的使用 2. memcpy的模擬 二、memmove庫函數介紹 1. memmove的使用 2. memmove的模擬 三、memset庫函數介紹 四、memcmp庫函數介紹 五、動態內存中malloc和free 1. malloc 2. free 六、動態內存中calloc和realloc 1. calloc 2. realloc 七、…

yarn的基本介紹

1.Hadoop的三大結構及各自的作用&#xff1a; Hadoop是一個開源的分布式計算框架&#xff0c;它主要包括三大核心組件&#xff1a;HDFS&#xff08;Hadoop Distributed File System&#xff09;、YARN&#xff08;Yet Another Resource Negotiator&#xff09;和MapReduce。以…