C語言第十課----------------掃雷----------數組的經典練手題

作者前言

🎂? ? ? ? ??????🍧🍧🍧🍧🍧🍧🍧🎂

? ?🎂 ? ? ?作者介紹:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 🎂🎂

? ? ? ?🎂 🎉🎉🎉🎉🎉🎉🎉? ? ? ? ? ? ? 🎂

? ? ? ? ? 🎂作者id:老秦包你會,? ? ? ? ?🎂

簡單介紹:🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂

? ? ? ? ? ? ?喜歡學習C語言和python等編程語言,是一位愛分享的博主,有興趣的小可愛可以來互討? ? ? ? ?🎂🎂🎂🎂🎂🎂🎂🎂

? ? ? ? ? ? ? ? ?🎂個人主頁::小小頁面🎂

? ? ? ? ? ? ? ? ? 🎂gitee頁面:秦大大🎂

???????????????????🎂🎂🎂🎂🎂🎂🎂🎂
? ? ? ? 🎂? 一個愛分享的小博主 歡迎小可愛們前來借鑒🎂

_______________________________________________________

______________________________________________________________________

目錄

掃雷

????????分析

????????代碼

——————————————————————————————————————

掃雷

?如上圖,玩掃雷的原理就是避開雷找出所有的雷就勝利,廢話不多說,我們直接開始掃雷分析

分析

俗話說的好,玩游戲第一步進入游戲,我們就寫出一個游戲菜單出來,讓玩家選擇

void meun()
{printf("*********        掃雷       ********\n");printf("************************************\n");printf("*********       0.exit      ********\n");printf("*********       1.paly      ********\n");printf("************************************\n");}

下面我們要寫一個框架,選擇玩或者不玩,

int input;srand((unsigned)time(NULL));do{meun();printf("進入掃雷界面,請選擇>");scanf("%d", &input);switch (input){case 0:printf("退出游戲\n");break;case 1:printf("開始游戲\n");game();break;default :printf("輸入不符合規定,請重新輸入\n");break;}

下面我們就要開始寫掃雷的內容了,首先掃雷我們要給出掃雷的游戲畫面,在這個過程中我們可以創建兩個數組,一個用于計算,一個用于顯示

?左邊是計算,右邊是顯示 然后我們就要設計一下輸出的界面,要玩家有好的體驗

void initialization(char mine[ROWS][COLS], int rows, int cols, char str)
{int i = 0;for (i = 0; i < rows; i++){int j = 0;for (j = 0; j < cols; j++){mine[i][j] = str;}}}
void Carving(char mine[ROWS][COLS], int row, int col)
{int i = 0;for (i = 0; i <= row; i++){printf("%d ", i);}printf("\n");printf("--------------------\n");for (i = 1; i <= row; i++){printf("%d|", i);int j = 0;for (j = 1; j <= col; j++){printf("%c ", mine[i][j]);}printf("\n");}
}

然后我們就要布置雷了,雷的設計要隨機可以使用rand(),記得設計出源點srand((unsigned)time(NULL))

代碼如下:

void Production(char mine[ROWS][COLS], int row, int col)
{int count = Count;while (count){int x = ((rand() % (row)) + 1);int y = ((rand() % (col)) + 1);if (mine[x][y] == '0'){mine[x][y] = '1';count--;}}
}

下面我們就要模擬玩家掃雷了,玩家掃雷要輸入坐標, 然后判斷是否踩到雷或者已經排查過了,如果沒有就要統計周邊雷的個數,然后反饋給顯示數組,最后判斷是否排除完全部雷了,

void paly_mine(char mine[ROWS][COLS], char show_mine[ROWS][COLS], int row, int col)
{int count = 0;int x = 0;int y = 0;while (1){printf("請玩家輸入坐標:>");scanf("%d %d", &x, &y);if (x >= 1 && x <= 9 && y >= 1 && y <= 9){if (mine[x][y] == '0'){mine[x][y] = ' ';count++;//統計周邊的雷數int sum = 0;int i = x - 1;for (i = x - 1; i <= x + 1; i++){int j = y - 1;for (j = y - 1; j <= y + 1; j++){if (i != x && j != y)sum = sum + (mine[i][j] - '0');}}show_mine[x][y] = '0' + sum;printf("掃雷情況:\n");Carving(show_mine, ROW, COL);printf("\n");if (count == (row * col) - Count){printf("你勝利了\n");goto  aa;}}else if (mine[x][y] == '1'){printf("你被炸死了,游戲結束\n");break;}}else{printf("請重新輸入,你輸入的不符合規定\n");}}
aa:;}

?下面是全部代碼:

掃雷.c

#include"掃雷.h"
void meun()
{printf("*********        掃雷       ********\n");printf("************************************\n");printf("*********       0.exit      ********\n");printf("*********       1.paly      ********\n");printf("************************************\n");}
int main()
{int input;srand((unsigned)time(NULL));do{meun();printf("進入掃雷界面,請選擇>");scanf("%d", &input);switch (input){case 0:printf("退出游戲\n");break;case 1:printf("開始游戲\n");game();break;default :printf("輸入不符合規定,請重新輸入\n");break;}} while (input);return 0;
}

掃雷函數.c

#include"掃雷.h"
void game()
{char mine[ROWS][COLS];char show_mine[ROWS][COLS];//數組初始化initialization(mine, ROWS, COLS, '0');initialization(show_mine, ROWS, COLS, '*');//布置雷Production(mine, ROW, COL);//雕刻掃雷棋盤Carving(mine, ROW, COL);printf("\n");Carving(show_mine, ROW, COL);//玩家掃雷paly_mine(mine, show_mine, ROW, COL);/*printf("%p", &mine);printf("%p", &show_mine);*/}void initialization(char mine[ROWS][COLS], int rows, int cols, char str)
{int i = 0;for (i = 0; i < rows; i++){int j = 0;for (j = 0; j < cols; j++){mine[i][j] = str;}}}void Carving(char mine[ROWS][COLS], int row, int col)
{int i = 0;for (i = 0; i <= row; i++){printf("%d ", i);}printf("\n");printf("--------------------\n");for (i = 1; i <= row; i++){printf("%d|", i);int j = 0;for (j = 1; j <= col; j++){printf("%c ", mine[i][j]);}printf("\n");}
}
//布置雷
void Production(char mine[ROWS][COLS], int row, int col)
{int count = Count;while (count){int x = ((rand() % (row)) + 1);int y = ((rand() % (col)) + 1);if (mine[x][y] == '0'){mine[x][y] = '1';count--;}}
}//玩家掃雷
void paly_mine(char mine[ROWS][COLS], char show_mine[ROWS][COLS], int row, int col)
{int count = 0;int x = 0;int y = 0;while (1){printf("請玩家輸入坐標:>");scanf("%d %d", &x, &y);if (x >= 1 && x <= 9 && y >= 1 && y <= 9){if (mine[x][y] == '0'){mine[x][y] = ' ';count++;//統計周邊的雷數int sum = 0;int i = x - 1;for (i = x - 1; i <= x + 1; i++){int j = y - 1;for (j = y - 1; j <= y + 1; j++){if (i != x && j != y)sum = sum + (mine[i][j] - '0');}}show_mine[x][y] = '0' + sum;printf("掃雷情況:\n");Carving(show_mine, ROW, COL);printf("\n");if (count == (row * col) - Count){printf("你勝利了\n");goto  aa;}}else if (mine[x][y] == '1'){printf("你被炸死了,游戲結束\n");break;}}else{printf("請重新輸入,你輸入的不符合規定\n");}}
aa:;}

掃雷.h

#include<stdio.h>
#include<stdlib.h>
#include<time.h>#define ROW 9
#define COL 9
#define ROWS ROW + 2
#define COLS COL + 2
#define Count 10
//
void game(void);
//初始化
void initialization(char mine[ROWS][COLS], int row, int col, char str);
//打印棋盤
void Carving(char mine[ROWS][COLS], int row, int col);
//布置雷
void Production(char mine[ROWS][COLS], int row, int col);
//玩家掃雷
vo

總結:

掃雷代碼就在這里了,這個代碼還可以進一步改進,但是由于時間原因,其他功能沒寫,有不懂的小可啊可以私聊我

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

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

相關文章

React構建的JS優化思路

背景 之前個人博客搭建時&#xff0c;發現頁面加載要5s才能完成并顯示 問題 React生成的JS有1.4M&#xff0c;對于個人博客服務器的帶寬來說&#xff0c;壓力較大&#xff0c;因此耗費了5S的時間 優化思路 解決React生成的JS大小&#xff0c;因為我用的是react-router-dom…

ORA-01034: ORACLE not available、ORA-27101: shared memory realm does not exist

發生緣由 學習 Oracle 的使用&#xff0c;結果關機之后重新使用 SQLPlus 發現無法登錄 -- windows server 2003 使用 sqlplus連接oracle報錯 C:\Documents and Settings\Adminstrator> sqlplus system/linxuan ORA-01034:ORACLE not available ORA-27101:shared memory r…

SAP FIORI Launchpad 403 forbidden error

問題&#xff1a; 在前臺輸入/N/UI2/FLP 瀏覽器顯示 403 forbidden 查閱資料得知 相關sicf 的服務未激活 note:3011106 檢查以下所有服務是否已在事務代碼 SICF 中激活&#xff1a; /default_host/sap/bc/ui2/nwbc/ /default_host/sap/bc/ui2/start_up /default_host/sap…

prometheus告警發送組件部署

一、前言 要實現Prometheus的告警發送需要通過alertmanager組件&#xff0c;當prometheus觸發告警策略時&#xff0c;會將告警信息發送給alertmanager&#xff0c;然后alertmanager根據配置的策略發送到郵件或者釘釘中&#xff0c;發送到釘釘需要安裝額外的prometheus-webhook…

模擬實現消息隊列(以 RabbitMQ 為藍本)

目錄 1. 需求分析1.1 介紹一些核心概念核心概念1核心概念2 1.2 消息隊列服務器&#xff08;Broker Server&#xff09;要提供的核心 API1.3 交換機類型1.3.1 類型介紹1.3.2 轉發規則&#xff1a; 1.4 持久化1.5 關于網絡通信1.5.1 客戶端與服務器提供的對應方法1.5.2 客戶端額外…

一站式FlinkSpark平臺解決方案——StreamX

隨著Flink&Spark生態的不斷完善&#xff0c;越來越多的企業選擇這兩款組件&#xff0c;或者其中之一作為離線&實時的大數據開發工具&#xff0c;但是在使用他們進行大數據的開發中我們會遇到一些問題&#xff0c;比如&#xff1a; 任務運行監控怎么處理&#xff1f;使…

【LangChain概念】了解語言鏈?:第2部分

一、說明 在LangChain的幫助下創建LLM應用程序可以幫助我們輕松地鏈接所有內容。LangChain 是一個創新的框架&#xff0c;它正在徹底改變我們開發由語言模型驅動的應用程序的方式。通過結合先進的原則&#xff0c;LangChain正在重新定義通過傳統API可以實現的極限。 在上一篇博…

一文讀懂!一年耗能堪比2個三峽電站的大數據中心,背后竟隱藏著這些秘密......

全國大數據中心1年的能耗規模相當于2個三峽電站一整年的發電量&#xff0c;這是為什么&#xff1f; 大數據中心每耗費1度電&#xff0c;只有一半用在了“計算”上面&#xff0c;其他的都應用在散熱、照明等方面到底是怎么回事&#xff1f; 為什么說在算力上每投入1元&#xff0…

【二】數據庫系統

數據庫系統的分層抽象DBMS 數據的三個層次從 數據 到 數據的結構----模式數據庫系統的三級模式&#xff08;三級視圖&#xff09;數據庫系統的兩層映像數據庫系統的兩個獨立性數據庫系統的標準結構 數據模型從 模式 到 模式的結構----數據模型三大經典數據模型 數據庫的演變與發…

【系統軟件03】centos7安裝和使用node-v18.16.0(centos7升級glibc 2.28)

【系統軟件03】centos7安裝和使用node-v18.16.0&#xff08;centos7升級glibc 2.28&#xff09; 前言&#xff1a;本文是解決node 18.16.0的依賴問題&#xff0c;具體的node安裝流程&#xff0c;可以參考我的另外一篇文章。一、下載node v18.16.0二、下載glibc2.28&#xff08;…

uniapp使用阿里矢量庫

然后解壓復制全部到你的項目文件 最后只要這幾個 然后引入 最后在你需要的頁面使用

LeetCode 2813. Maximum Elegance of a K-Length Subsequence【反悔貪心】2582

本文屬于「征服LeetCode」系列文章之一&#xff0c;這一系列正式開始于2021/08/12。由于LeetCode上部分題目有鎖&#xff0c;本系列將至少持續到刷完所有無鎖題之日為止&#xff1b;由于LeetCode還在不斷地創建新題&#xff0c;本系列的終止日期可能是永遠。在這一系列刷題文章…

JavaWeb中Json傳參的條件

JavaWeb中我們常用json進行參數傳遞 對應的注釋為RequestBody 但是json傳參是有條件的 最主要是你指定的實體類和對應的json參數能否匹配 1.屬性和對應的json參數名稱對應 2.對應實體類實現了Serializable接口&#xff0c;可以進行序列化和反序列化&#xff0c;這個才是實體類轉…

黑馬項目一階段面試58題 Web14題(二)

八、內連接和外連接查詢有什么區別 內連接 獲取兩表的交集部分 外連接 獲取某表的所有數據&#xff0c;以及兩表的交集數據 九、事務管理的作用&#xff0c;四大特性 作用 保證多個增刪改的操作&#xff0c;要么同時成功&#xff0c;要么同時失敗 四大特性 1.原子性 事…

Ajax同源策略及跨域問題

Ajax同源策略及跨域問題 同源策略ajax跨域問題什么是跨域&#xff1f;為什么不允許跨域&#xff1f;跨域解決方案1、CORS2、express自帶的中間件cors3、JSONP原生JSONPjQuery發送JSONP 4、使用vscode的Live Server插件 同源策略 同源策略&#xff08;Same-Origin Policy&#…

Kotlin入門:程序的邏輯控制——03

一、程序的邏輯控制 程序的執行語句主要分為3種&#xff1a;順序語句、條件語句和循環語句。 二、if條件語句 if表達式在Kotlin中用于根據條件執行不同的代碼塊。它有兩種形式&#xff1a;普通if和帶返回值的if。 普通if語句&#xff1a; 普通的if語句由關鍵字if、一個布爾表達…

電腦合上蓋子無線網絡不會斷開

控制面板\硬件和聲音\電源選項\系統設置 最終選擇不會采取任何操作 選擇不會采取任何操作

前端性能優化之性能優化的指標和工具(chrome devtools、lighthouse、webpagetest)

文章目錄 引言一、為什么要進行web性能優化二、RAIL測量模型1. 什么是RAIL2. 性能測量工具 三、性能測量工具的使用和性能指標以及優化目標1. Chrome DevTools1. 打開調試工具方式和配置2. network下的幾個性能指標1. requests 請求總數2. transferred實際從服務器下載的數據量…

【數據結構與算法】十大經典排序算法-希爾排序

&#x1f31f;個人博客&#xff1a;www.hellocode.top &#x1f3f0;Java知識導航&#xff1a;Java-Navigate &#x1f525;CSDN&#xff1a;HelloCode. &#x1f31e;知乎&#xff1a;HelloCode &#x1f334;掘金&#xff1a;HelloCode ?如有問題&#xff0c;歡迎指正&#…

手撕數據結構之棧+例題

目錄 一、棧的概念及結構 二、棧的頭文件及基本框架 三、接口實現 1、對棧的初始化 2、棧的銷毀 3、入棧操作 4、出棧操作 5、判斷棧是否為空 6、返回棧頂元素 7、遍歷棧 四、有效的括號 - 力扣&#xff08;LeetCode&#xff09; 題目描述&#xff1a; 思路&#xff…