C++:掃雷游戲

一.掃雷游戲項目設計

1.文件結構設計

首先我們要先定義三個文件

①test.c //文件中寫游戲的測試邏輯?
②game.c //文件中寫游戲中函數的實現等
③game.h //文件中寫游戲需要的數據類型和函數聲明等


2.掃雷游戲的主體結構

使?控制臺實現經典的掃雷游戲

?游戲可以通過菜單實現繼續玩或者退出游戲

?掃雷的棋盤是9*9的格子

?默認隨機布置10個雷

?可以排查雷

?如果位置不是雷,就顯?周圍有?個雷

?如果位置是雷,就炸死游戲結束

?把除10個雷之外的所有?雷都找出來,排雷成功,游戲結束

我們期待的游戲的界面應該是:

①初始界面


②排雷界面

?③排雷失敗界面

?

?3.面臨的問題

因為我們需要在9*9的棋盤上布置雷的信息和排查雷,我們首先想到的就是創建?個9*9的數組來存放信息。
①返回雷的個數的越界的問題

當我們選定一個坐標時,如(x,y)我們想要得到(x,y)坐標周圍8個坐標雷的總數


?

?所以,我們不得不考慮以下越界訪問的問題

?為了解決以上問題,我可以將9*9棟棋盤擴大為11*11,這樣就解決了棋盤越界的問題,如下圖

?但注意:初始化棋盤時,11*11的格子都要進行初始化。

②保存雷的信息與顯示雷的信息

繼續分析,我們在棋盤上布置了雷,棋盤上雷的信息(1)和?雷的信息(0),假設我們排查了某?個位置后,這個坐標處不是雷,這個坐標的周圍有1個雷,那我們需要將排查出的雷的數量信息記錄存儲,并打印出來,作為排雷的重要參考信息的。那這個雷的個數信息存放在哪?呢?如果存放在布置雷的數組中,這樣雷的信息和雷的個數信息就可能或產?混淆和打印上的困難

這里我們采用另外?種方案,我們專?給?個棋盤(對應?個數組mine)存放布置好的雷的信息,再給另外?個棋盤(對應另外?個數組show)存放排查出的雷的信息。這樣就互不?擾了,把雷布置到mine數組,在mine數組中排查雷,排查出的數據存放在show數組,并且打印show數組的信息給后期排查參考。

show數組開始時初始化為字符 '*',為了保持兩個數組的類型?致,可以使?同?套函數處理,mine數組最開始也初始化為字符'0',布置雷改成'1'。

?布置雷的mine棋盤

?

?顯示雷的show棋盤

?

二.掃雷游戲的簡單模擬實現

1.game.h

?以上代碼是掃雷游戲開發。代碼包含常用庫引入及標準命名空間使用聲明。通過宏定義設置棋盤行列及雷數等參數。還聲明了一系列函數,涵蓋棋盤初始化、打印、布雷、統計雷數以及掃雷等功能,為實現完整掃雷游戲邏輯搭建了基本框架。

?

2. game.cpp

?實現掃雷游戲中棋盤初始化和打印功能。?InitBoard? 函數通過雙重循環,將指定字符填充到棋盤二維數組對應位置,完成初始化。?PrintBoard? 函數先輸出游戲標題,再用循環按行列格式打印棋盤元素,同時打印行列索引,方便玩家查看,為游戲交互提供基礎展示。

?

? ? ? ? ? 實現掃雷游戲中布雷和統計雷數功能。?SetMine? 函數利用 ?rand? 函數生成隨機坐標,在棋盤數組上隨機放置地雷(用 ?'1'? 表示),直到達到設定雷數。(?EASY_COUNT?)。?GetMineCount? 函數通過計算目標坐標周圍八個格子的字符數值總和并做相應轉換,統計出周圍雷的數量,為玩家判斷提供依據。

?以上是雷游戲核心邏輯的代碼。?FindMine? 函數負責游戲流程:

?①玩家循環輸入坐標,程序先檢查坐標合法性及是否已排查。

?②若坐標對應格子有雷(?a[x][y] == '1'? ),游戲結束并顯示雷區。

?③無雷時,調用 ?GetMineCount? 統計周圍雷數并顯示在顯示棋盤 ?b? 上,成功排查一格 ?win? 計數加一。

?④當排查格子數達到總格子數減去雷數(?win == ROW * COL - EASY_COUNT? ),玩家勝利并顯示雷區。 代碼通過這些邏輯實現了掃雷游戲基本交互和勝負判定。

?

3.test.cpp

?測試掃雷游戲的代碼片段。?menu? 函數輸出游戲菜單,提供 “退出(0)” 和 “開始游戲(1)” 選項。?game? 函數則是游戲核心流程,先定義存放雷和顯示信息的二維字符數組,接著調用 ?InitBoard? 分別將其初始化為全 ?'0'? 和全 ?'*'? ,再通過 ?PrintBoard? 打印初始棋盤,然后調用 ?SetMine? 布置地雷,最后調用 ?FindMine? 讓玩家開始排查地雷,逐步推進游戲進程。

?構建掃雷游戲的主邏輯框架。 test ?函數中,先設置隨機數種子,隨后通過 do - while ?循環展示游戲菜單,獲取玩家輸入。利用 switch ?語句判斷輸入,0代表退出游戲,1則調用 game ?函數開啟游戲,輸入錯誤時給予提示并要求重新輸入。 main ?函數通過 clock ?函數記錄游戲開始和結束時間,計算并輸出游戲總耗時,為玩家提供完整的游戲交互和時間統計功能。

?

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

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

相關文章

[人機交互]識別需要和建立需求

*一.需要選擇的產品特征(或屬性)可概括為兩類 1.1外部特征(屬性) 對用戶而言,可見及可度量的屬性 1.2內部特征(屬性) 對用戶而言是不可見或不可度量的 二.什么是需求 需求是有關目標的陳述…

Lua學習筆記

文章目錄 前言1. Lua的數據類型2. Lua的控制結構2.1 循環2.1.1 for2.1.1.1 數值循環2.1.1.2 迭代循環2.1.2 while2.1.3 repeat-until 2.2 條件語句2.3 函數 3. Lua中的變量作用域 前言 Lua是一種輕量級的、高效的、可擴展的腳本語言,由巴西里約熱內盧天主教大學&am…

學習c語言的鏈表的概念、操作(另一篇鏈表的筆記在其他的欄目先看這個)

在學習Linux之間我們先插入一下鏈表的知識 學習鏈表(一種數據結構思想) 鏈表和數組的區別和實現: 鏈表(鏈表是個好東西) 鏈表概念(什么是鏈表)? 鏈表就是數據結構->數據的存儲…

NVM完全指南:安裝、配置與最佳實踐

發布于 2025年5月7日 ? 閱讀時間:10分鐘 💡 TL;DR: 本文詳細介紹了如何完整卸載舊版Node.js,安裝NVM,配置阿里云鏡像源,以及設置node_global與node_cache目錄,打造高效Node.js開發環境。 📋 目…

轉換算子和行動算子的區別

轉換算子和行動算子主要是在分布式計算框架(如 Apache Spark)里常用的概念,它們在功能、執行機制、返回結果等方面存在明顯區別,以下為你詳細介紹: 定義與功能 返回結果 如何在使用轉換算子和行動算子時避免出現內存溢…

Windows命令行軟件管理器:Chocolatey

文章目錄 Windows命令行軟件管理器:Chocolatey1.Chocolatey使用1.1 安裝1.2 常用命令1.3 使用流程 2.常用shell命令匯總 Windows命令行軟件管理器:Chocolatey Chocolatey 是一款強大的 Windows 命令行軟件管理器,目前在 GitHub 上已斬獲 10.…

MySQL 8.0 OCP(1Z0-908)英文題庫(11-20)

目錄 第11題題目分析正確答案 第12題題目分析正確答案 第13題題目分析正確答案 第14題題目分析正確答案 第15題題目分析正確答案 第16題題目分析正確答案 第17題題目分析正確答案: 第18題題目分析正確答案 第19題題目分析正確答案 第20題題目分析正確答案 第11題 W…

mac 使用 Docker 安裝向量數據庫Milvus獨立版的保姆級別教程

Milvus 特點:開源的云原生向量數據庫,支持多種索引類型和GPU加速,能夠在億級向量規模下實現低延遲高吞吐。具有靈活的部署選項和強大的社區支持。 適用場景:適合處理超大規模數據和高性能需求的應用,如圖像搜索、推薦…

一款獨立于游戲外的鍵盤源按鍵輔助工具他來了

一款獨立于游戲外的鍵盤源按鍵輔助工具 一!不需要安裝,下載即用 二!只要熟悉hekili體系 三!略懂wa定制 四!知道如何循環并且會自行模擬 五!會simc最好 直接就上手了! 我們的不是一鍵宏&…

python學生作業提交管理系統-在線作業提交系統

目錄 技術棧介紹具體實現截圖系統設計研究方法:設計步驟設計流程核心代碼部分展示研究方法詳細視頻演示試驗方案論文大綱源碼獲取/詳細視頻演示 技術棧介紹 Django-SpringBoot-php-Node.js-flask 本課題的研究方法和研究步驟基本合理,難度適中&#xf…

Spring Boot + Vue 實現在線視頻教育平臺

一、項目技術選型 前端技術: HTML CSS JavaScript Vue.js 前端框架 后端技術: Spring Boot 輕量級后端框架 MyBatis 持久層框架 數據庫: MySQL 5.x / 8.0 開發環境: IDE:Eclipse / IntelliJ IDEA JDK&…

引文索引數據庫在科研中的應用

如何利用引文索引數據庫高效檢索、分析研究論文,發現高水平論文,鎖定特定領域的經典文獻?如何跟蹤最新研究進展? 回放鏈接 image.png image.png image.png image.png image.png image.png image.png image.png image.png image.pn…

《供應鏈網絡攻擊的風險與防范》

中國古語有云:“千里之堤,潰于蟻穴。”供應鏈攻擊正是利用這種系統性弱點發起攻勢。近年來,隨著國內數字化轉型加速,供應鏈安全問題頻發。從某盟刪庫事件到某頭部物流企業數據泄露,從某國產工業軟件遭惡意代碼植入到某…

ETL介紹及kettle等工具學習

ETL介紹及kettle等工具學習 1. 什么是ETL? ETL(Extract, Transform, Load)是數據集成領域的核心流程,用于將數據從多個分散的源系統中抽取、清洗、轉換后加載到目標數據倉庫或數據湖中,以支持分析、報表和決策。其核…

圖形渲染+事件處理最終版

基于之前做的項目圖形移動處理-CSDN博客添加了相機,透視投影,鼠標控制圖形旋轉。雖然個人感覺這個項目用的是一個二維的三角形,給他加透視投影和相機意義不大,因為透視投影是近大遠小,我這個程序設置了放大縮小的限制&…

G口大帶寬服務器線路怎么選

G口大帶寬服務器線路選擇指南 ??一、線路類型與特點?? ??單線(電信/聯通/移動)?? ??優勢??:帶寬獨享、價格低、延遲穩定,適合單一運營商用戶集中場景。??劣勢??:跨運營商訪問延遲高(如電信…

HTML10:iframe內聯框架

iframe內部框架 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>內聯框架學習</title> </head> <body> <!--iframe內聯框架 src:地址 width-height:高度寬度 --> <iframe…

基于 Spring Boot 瑞吉外賣系統開發(十一)

基于 Spring Boot 瑞吉外賣系統開發&#xff08;十一&#xff09; 菜品啟售和停售 “批量啟售”、“批量停售”、操作列的售賣狀態綁定單擊事件&#xff0c;觸發單擊事件時&#xff0c;最終攜帶需要修改售賣狀態的菜品id以post請求方式向“/dish/status/{params.status}”發送…

springboot war包tomcat中運行報錯,啟動過濾器異常,一個或多個篩選器啟動失敗。

錯誤信息&#xff1a; "level": "ERROR", "thread": "localhost-startStop-1", "class": "o.a.c.c.C.[.[localhost].[/Crmeb-admin]", …

Cursor —— AI編輯器 使用詳解

Cursor - The AI Code Editor 一、Cursor 是什么&#xff1f; Cursor 是一款優秀的AI代碼編輯器&#xff0c;它內置了 Deepseek-R1、GPT-4、Claude等 AI 模型。 簡單說&#xff0c;就是&#xff1a;Cursor VS Code 編輯器 AI 大模型 Cursor 功能特性&#xff08;代碼補全、…