用c語言遞歸函數做掃雷,【C語言基礎學習---掃雷游戲】(包含普通版+遞歸煉獄版)...

/*******************/

//以下是源文件game.c內容

/*******************/

#include"game.h"

//初始化棋盤的實現

void InitBoard(char board[ROWS][COLS], int rows, int cols, char set)

{

int i = 0;

int j = 0;

for (i = 0; i < rows; i++)

{

for (j = 0; j < cols; j++)

{

board[i][j] = set;

}

}

}

//打印棋盤的實現

void DisplayBoard(char board[ROWS][COLS], int row, int col)

{

int i = 0;

int j = 0;

//為了方便區分,我們在打印的時候加上這么一行話

printf("-----------Mine_clearing game-------------\n");

//打印列號

for (i = 0; i <= col; i++)

{

//printf("%d ", i);

printf("%2d ", i);

}

printf("\n");

for (i = 1; i <= row; i++)

{

//打印行號

//printf("%d ", i);

printf("%2d ", i);

for (j = 1; j <= col; j++)

{

//printf("%c ", board[i][j]);

printf("%2c ", board[i][j]);

}

printf("\n");

}

printf("-----------Mine_clearing game-------------\n");

}

//布置雷的實現

void SetMine(char mine[ROWS][COLS], int row, int col)

{

//假設我們要布置雷的個數是count

//int count = EASY_COUNT;

int count = HARD_COUNT;

while (count)

{

//我們布置雷的時候,雷的位置最好是隨機的

int x = rand() % row + 1;//雷出現的坐標位置:行號只能在 1至row

int y = rand() % col + 1;//雷出現的坐標位置:列號也只能在 1至col

if (mine[x][y]=='0')

{

mine[x][y] = '1';

count--;

}

}

}

//統計周圍雷的信息

int get_mine_count(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';

//方法二

int i = 0;

int j = 0;

int sum = 0;

for (i = -1; i <= 1; i++)

{

for (j = -1; j <= 1; j++)

{

sum += mine[x + i][y + j] - '0';

}

}

return sum;

}

void SetBlank(char show[ROWS][COLS], char mine[ROWS][COLS], int x, int y)

{

int count = get_mine_count(mine, x, y);

if (count == 0)

{

show[x][y] = ' ';

if (x - 1 >= 0 && x <= ROW && y >= 0 && y <= COL && show[x - 1][y] == '*')

{

SetBlank(show, mine, x - 1, y);

}

if (x + 1 >= 0 && x <= ROW && y >= 0 && y <= COL && show[x + 1][y] == '*')

{

SetBlank(show, mine, x + 1, y);

}

if (x >= 0 && x <= ROW && y - 1 >= 0 && y <= COL && show[x][y-1] == '*')

{

SetBlank(show, mine, x, y - 1);

}

if (x >= 0 && x <= ROW && y + 1 >= 0 && y <= COL && show[x][y + 1] == '*')

{

SetBlank(show, mine, x, y + 1);

}

}

else

{

show[x][y] = count + '0';

}

}

int Is_win(char show[ROWS][COLS], int row, int col)

{

int i = 0;

int j = 0;

int count = 0;

for (i = 1; i <= row; i++)

{

for (j = 1; j <= col; j++)

{

if (show[i][j] == '*')

{

count++;

}

}

}

return count;

}

//排查雷的實現:遞歸展開版本

void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)

{

//思路:

//1.輸入排查雷的坐標

//2.進行排查

//(1)如果該坐標是雷,就提示 You lose!you get a mine.

// (2) 如果該坐標不是雷,統計該坐標周圍雷的個數---排查雷的信息放到show數組中去

int x = 0;

int y = 0;

//判斷輸入坐標的合法性

while (1)

{

printf("please input two number between %d to %d:>>",1,ROW);//ROW設置成與COL相等,任意使用其中一個

scanf("%d%d", &x, &y);

if ((x >= 1 && x <= ROW) && (y >= 1 && y <= COL))

{

if (mine[x][y] == '1')

{

printf("You lose!you get a mine!\n");

DisplayBoard(mine, ROW, COL);

break;

}

else

{

SetBlank(show, mine, x, y);

int count = Is_win(show, ROW, COL);

if (count == EASY_COUNT)

{

printf("Congratulations,you win!\n");

DisplayBoard(show, ROW, COL);

break;

}

DisplayBoard(show, ROW, COL);

}

}

else

{

printf("Wrong coordinate,please try again!\n");

}

}

}

排查雷的實現:普通版本

//void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)

//{

// //思路:

// //1.輸入排查雷的坐標

// //2.進行排查

// //(1)如果該坐標是雷,就提示 You lose!you get a mine.

// // (2) 如果該坐標不是雷,統計該坐標周圍雷的個數---排查雷的信息放到show數組中去

//

// int x = 0;

// int y = 0;

// int win = 0;

// //判斷輸入坐標的合法性

// while (win

// {

// printf("please input two number between %d to %d:>>",1,ROW);

// scanf("%d%d", &x, &y);

// if ((x >= 1 && x <= ROW) && (y >= 1 && y <= COL))

// {

// if (mine[x][y] == '1')

// {

// printf("You lose!you get a mine!\n");

// DisplayBoard(mine, ROW, COL);

// break;

// }

// else

// {

// //不是雷的情況下,統計x,y周圍雷的信息

// int count = get_mine_count(mine, x, y);

// show[x][y] = count + '0';

// DisplayBoard(show, ROW, COL);

// win++;

// }

// }

// else

// {

// printf("Wrong coordinate,please try again!\n");

// }

// }

// if (win == row * col - EASY_COUNT)

// {

// printf("Congratulations,you win!\n");

// DisplayBoard(mine, ROW, COL);

// }

//}

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

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

相關文章

記一次 .NET 某醫療器械 程序崩潰分析

一&#xff1a;背景 1.講故事前段時間有位朋友在微信上找到我&#xff0c;說他的程序偶發性崩潰&#xff0c;讓我幫忙看下怎么回事&#xff0c;上面給的壓力比較大&#xff0c;對于這種偶發性崩潰&#xff0c;比較好的辦法就是利用 AEDebug 在程序崩潰的時候自動抽一管血出來&a…

1251: 字母圖形 [水題]

1251: 字母圖形 [水題] 時間限制: 1 Sec 內存限制: 128 MB提交: 140 解決: 61 統計題目描述 利用字母可以組成一些美麗的圖形&#xff0c;下面給出了一個例子&#xff1a; ABCDEFG BABCDEF CBABCDE DCBABCD EDCBABC 這是一個5行7列的圖形&#xff0c;請找出這個圖形的規律&…

c語言 三角形三邊abc,C語言代碼輸入abc三個數,求一這3個數為邊長的三角形面積...

2011-01-04 回答#include #include #include #include #include int main(){float a 0.0;float b 0.0;float c 0.0;float s 0.0;double area 0.0;while(true){printf("input your date(a,b,c):");scanf("%f%f%f",&a,&b,&c);if(!isdigit((…

shell腳本中向hive動態分區插入數據

在hive上建表與普通分區表創建方法一樣&#xff1b; 1 CREATE TABLE dwa_m_user_association_circle(2 device_number string, 3 oppo_number string, 4 prov_id_oppo string, 5 area_id_oppo string, 6 dealer_oppo string, 7 short_call_nums bigint, 8 long3…

WPF效果第二百零二篇之TreeView帶連接線

前面文章中分享了TreeView支持多選;然而在項目上使用時,領導覺得不滿意:體現不了真正的從屬關系;既然領導都發話了;那就開整就行了;今天就再來個帶有連接線的TreeView效果:1、來看看TreeViewItem的Template:2、展開和收縮動畫:3、參考資料https://www.codeproject.com/tips/673…

ObjectTive C語言語法,[譯]理解 Objective-C 運行時(下篇)

本文來自網易云社區作者&#xff1a;宋申易所以到底 objc_msgSend 發生了什么&#xff1f;很多事情。看一下這段代碼&#xff1a;[self printMessageWithString:"Hello World!"];這實際上被編譯器翻譯成&#xff1a;objc_msgSend(self, selector(printMessageWithStr…

菜鳥學習MVC實錄:弄清項目各類庫的作用和用法

MVC模式即&#xff1a;模型&#xff08;Model&#xff09;-視圖&#xff08;View&#xff09;-控制器&#xff08;Controller&#xff09; Model &#xff08;模型&#xff09;&#xff1a;是應用程序中用于處理應用程序數據邏輯的部分。通常模型對象負責數據庫中存取數據View…

SSL服務器

2019獨角獸企業重金招聘Python工程師標準>>> SSL 是一個安全協議&#xff0c;它提供使用 TCP/IP 的通信應用程序間的隱私與完整性。因特網的 超文本傳輸協議&#xff08;HTTP&#xff09;使用 SSL 來實現安全的通信。 在客戶端與服務器間傳輸的數據是通過使用對稱算…

微軟Skype Translator將支持阿拉伯語即時語音翻譯

據美國科技時代網(Tech Times)3月9日報道&#xff0c;日前&#xff0c;微軟旗下即時翻譯軟件Skype Translator再添新語種&#xff0c;微軟宣布Skype Translator已經支持阿拉伯語。Skype用戶可通過使用阿拉伯語即時翻譯與朋友、家人以及海外商業伙伴進行交流。 據報道&#xff0…

是什么讓.NET7的Min和Max方法性能暴增了45倍?

簡介在之前的一篇文章.NET性能系列文章一&#xff1a;.NET7的性能改進中我們聊到Linq中的Min()和Max()方法.NET7比.NET6有高達45倍的性能提升&#xff0c;當時Benchmark代碼和結果如下所示&#xff1a;[Params(1000)] public int Length { get; set; }private int[] arr;[Globa…

html標記語言 --框架

html標記語言 --框架六、框架1、什么是框架 框架將瀏覽器劃分成不同的部分&#xff0c;每一部分加載不同的網頁 實現同一瀏覽器窗口中加載多個頁面的效果。 語法格式<frameset>.......</frameset>2. 屬性2.1 cols使用“像素數”和%分割左右窗口&#xff0c;“*” 表…

c語言兔子洞,數據結構水題選講 - osc_y08db3kb的個人空間 - OSCHINA - 中文開源技術交流社區...

[Ynoi2011]ODT\(O(nlog^2n)\) 的做法非常顯然直接把樹重鏈剖分一下&#xff0c;每個點維護輕兒子的平衡樹就行但是這題 \(1e6\) 的數據范圍使得 \(O(nlog^2n)\) 沒那么容易卡過去(當然很多人卡過去了考慮給一個點很多重兒子那么若一個點有 \(k\) 個重兒子&#xff0c;修改復雜度…

centos 7.x systemd service 配置方法整理

一、存放路徑/etc/systemd/system二、service配置整理2.1 zookeeper.service[Unit]DescriptionZooKeeper ServiceAftersyslog.targetAfternetwork.target[Service]#使用shell腳本啟動的要用forking模式TypeforkingUserzookeeperGroupzookeeper#腳本啟動ExecStart/usr/local/zoo…

MAVEN集成測試環境搭建

1. MAVEN SVN HUDSON SONAR集成測試環境搭建、1.1 軟件準備 Hudson、Jenkins、Sonar1.2 軟件安裝 說明&#xff1a;本例均使用將應用程序部署至web容器下&#xff0c;Hudson和Sonar有其他部署啟動方式&#xff0c;如有需要請自行使用&#xff0c;本文不做贅述。1.2.1 安裝hu…

ubus c語言例子,openwrt之ubus例子

好一個icrootLEDE:/# ubus call test_ubus helloworld {"id":1,"msg":"hi","array":["a","b"]}{"id": 1,"msg": "hi","shuzu": ["a","b"]}文件目…

使用Spring訪問Mongodb的方法大全——Spring Data MongoDB查詢指南

1.概述 Spring Data MongoDB 是Spring框架訪問mongodb的神器&#xff0c;借助它可以非常方便的讀寫mongo庫。本文介紹使用Spring Data MongoDB來訪問mongodb數據庫的幾種方法&#xff1a; 使用Query和Criteria類JPA自動生成的查詢方法使用Query 注解基于JSON查詢在開始前&#…

mysqldump導出備份數據庫報Table ‘performance_schema.session_variables‘ doesn‘t exist

今天在bash進行本地數據庫往云端數據庫導數據的時候&#xff0c;在本地導出.sql文件這第一步就出現了錯誤問題&#xff0c;導出sql文件的命令&#xff1a; 1 mysqldump -u 用戶名 -p 數據庫名 > xxx.sql 在做這一步將數據導出的時候報了這么一個錯誤&#xff0c; 1 mysqldu…

在Identity框架中使用RoleBasedAuthorization

本文將介紹在 Identity 框架中如何使用 Sang.AspNetCore.RoleBasedAuthorization[1] 庫。核心介紹Identity 和 jwt 的基本配置我們在這里不再贅述&#xff0c;可以參考最后的項目樣例。核心的代碼主要為 IRolePermission 的實現。internal class MyRolePermission : IRolePermi…

2016年印度公有云服務市場將達13億美元

根據IT咨詢公司Gartner最新調查數據顯示&#xff0c;2016年印度公有云服務市場預計將增長35.9%&#xff0c;達到13億美元。 增長最快的是云系統基礎設施即服務&#xff08;IaaS&#xff09;&#xff0c;2016年預計將增長45.5%&#xff1b;其次是平臺即服務&#xff08;PaaS&…

PAT 1042. 字符統計

1042. 字符統計 請編寫程序&#xff0c;找出一段給定文字中出現最頻繁的那個英文字母。 輸入格式&#xff1a; 輸入在一行中給出一個長度不超過1000的字符串。字符串由ASCII碼表中任意可見字符及空格組成&#xff0c;至少包含1個英文字母&#xff0c;以回車結束&#xff08;回車…