日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

用c语言递归函数做扫雷,【C语言基础学习---扫雷游戏】(包含普通版+递归炼狱版)...

發(fā)布時(shí)間:2023/12/4 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用c语言递归函数做扫雷,【C语言基础学习---扫雷游戏】(包含普通版+递归炼狱版)... 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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

//以下是源文件game.c內(nèi)容

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

#include"game.h"

//初始化棋盤的實(shí)現(xiàn)

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;

}

}

}

//打印棋盤的實(shí)現(xiàn)

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

{

int i = 0;

int j = 0;

//為了方便區(qū)分,我們在打印的時(shí)候加上這么一行話

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");

}

//布置雷的實(shí)現(xiàn)

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

{

//假設(shè)我們要布置雷的個(gè)數(shù)是count

//int count = EASY_COUNT;

int count = HARD_COUNT;

while (count)

{

//我們布置雷的時(shí)候,雷的位置最好是隨機(jī)的

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

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

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

{

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

count--;

}

}

}

//統(tǒng)計(jì)周圍雷的信息

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;

}

//排查雷的實(shí)現(xiàn):遞歸展開版本

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

{

//思路:

//1.輸入排查雷的坐標(biāo)

//2.進(jìn)行排查

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

// (2) 如果該坐標(biāo)不是雷,統(tǒng)計(jì)該坐標(biāo)周圍雷的個(gè)數(shù)---排查雷的信息放到show數(shù)組中去

int x = 0;

int y = 0;

//判斷輸入坐標(biāo)的合法性

while (1)

{

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

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");

}

}

}

排查雷的實(shí)現(xiàn):普通版本

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

//{

// //思路:

// //1.輸入排查雷的坐標(biāo)

// //2.進(jìn)行排查

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

// // (2) 如果該坐標(biāo)不是雷,統(tǒng)計(jì)該坐標(biāo)周圍雷的個(gè)數(shù)---排查雷的信息放到show數(shù)組中去

//

// int x = 0;

// int y = 0;

// int win = 0;

// //判斷輸入坐標(biāo)的合法性

// 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

// {

// //不是雷的情況下,統(tǒng)計(jì)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);

// }

//}

總結(jié)

以上是生活随笔為你收集整理的用c语言递归函数做扫雷,【C语言基础学习---扫雷游戏】(包含普通版+递归炼狱版)...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。