欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報(bào)激活碼778899分享:C語言——掃雷游戲

柚子快報(bào)激活碼778899分享:C語言——掃雷游戲

http://yzkb.51969.com/

? ? ? ?掃雷游戲通常是一個(gè)由方格組成的區(qū)域內(nèi)進(jìn)行的,其中隨機(jī)分布著一定數(shù)量的地雷?。玩家的目標(biāo)是通過點(diǎn)擊方格來標(biāo)記出所有地雷的位置,同時(shí)避免自己點(diǎn)到地雷而導(dǎo)致游戲失敗。游戲開始時(shí),玩家通常只能看到一部分方格,而其余的方格則需要通過點(diǎn)擊來逐漸揭示其內(nèi)容(目前學(xué)的比較低級(jí)請(qǐng)見諒)。

?下面這個(gè)圖是網(wǎng)頁版掃雷的界面:

現(xiàn)在開始講解代碼:

? ? ? ?寫一個(gè)完整代碼首先都是從主函數(shù)開始(前面寫的游戲可以發(fā)現(xiàn)主函數(shù)的流程幾乎不變),do……while(一上來就先進(jìn)行菜單選擇),主函數(shù)包含菜單還有對(duì)菜單的輸入與選擇(這個(gè)沒什么難度,略寫),而且一般游戲都需要菜單,玩家才可以清楚了解和選擇。

void menu()

{

printf("**************************************\n");

printf("*********** 1.play ************\n");

printf("*********** 0.exit ************\n");

printf("**************************************\n");

}

int main()

{

int input = 0;

do

{

menu();

printf("請(qǐng)輸入你的選擇:");

scanf("%d", &input);

switch (input)

{

case 1:game();

break;

case 0:printf("退出游戲?。?!\n");

break;

default:printf("選擇錯(cuò)誤,請(qǐng)重新選擇!??!\n");

break;

}

} while (input);

return 0;

}

? ? ? ?進(jìn)行選擇:這里為了后續(xù)的寫作當(dāng)然是要選1的,接著跳到game函數(shù)。?

void game()

{

char mine[ROWS][COLS] = { 0 };

char show[ROWS][COLS] = { 0 };

InitBoard(mine, ROWS, COLS, '0');

InitBoard(show, ROWS, COLS, '*');

//PrintBoard(mine, ROW, COL);//這個(gè)不需要打印,不然就看著答案排雷了

PrintBoard(show, ROW, COL);

SetMine(mine, ROW, COL);

PrintBoard(mine, ROW, COL);

FindMine(show, mine, ROW, COL);

}

? ? ? ?掃雷游戲內(nèi)部需要兩個(gè)數(shù)組一個(gè)是屏幕顯現(xiàn)出來(show);另一個(gè)則是藏在我們背后(mine),這就是這個(gè)游戲的巧妙之處。而且這個(gè)數(shù)組顯現(xiàn)出來的是9X9的數(shù)組,但是玩游戲需要計(jì)算坐標(biāo)周圍一圈,假設(shè)想要檢驗(yàn)數(shù)組四條靠邊的坐標(biāo),計(jì)算坐標(biāo)一圈數(shù)組會(huì)越界這時(shí)需要數(shù)組都加二(即四條邊都加一)

#define ROW 9 #define COL 9

#define ROWS ROW+2 #define COLS COL+2

? ? ? ?一開始要對(duì)這兩個(gè)數(shù)組初始化,而且初始化時(shí)需要整個(gè)數(shù)組都初始化而不是只對(duì)顯現(xiàn)出來的數(shù)組初始化,不然后面會(huì)影響。show數(shù)組初始化沒什么要求,然而為了后面計(jì)算【至于為什么后面會(huì)提到】mine數(shù)組初始化為‘0’(即字符0)。這里有一個(gè)簡便的操作,就是數(shù)組設(shè)置為board,這樣不管是show還是mine只需要改變數(shù)組就可以調(diào)用初始化的這個(gè)函數(shù)。

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ù)組,單純只打印數(shù)組的話數(shù)坐標(biāo)有些困難,所以需要在數(shù)組前標(biāo)數(shù)字方便數(shù)數(shù),還需要分界線。

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

{

printf("--------掃雷-------\n");

int i = 0;

int j = 0;

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

{

if (i != 0)

{

printf(" %d", i);

}

else

{

printf(" ");

}

}

printf("\n");

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

{

printf("--");

}

printf("\n");

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

{

printf("%d|", i);

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

{

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

}

printf("\n");

}

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

{

printf("--");

}

printf("\n\n");

}

? ? ? ?下面就到布置地雷,游戲分初級(jí),中級(jí),高級(jí)。我們就先簡單一點(diǎn)的設(shè)置10個(gè)地雷,然后就是隨機(jī)挑選坐標(biāo)(當(dāng)然是沒有地雷的坐標(biāo)中挑選啦),選中一個(gè)那對(duì)應(yīng)的地雷數(shù)要減少一個(gè),這樣才知道地雷是否符合標(biāo)準(zhǔn)。

#define EASY 10

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

{

srand((unsigned int)time(NULL));

int count = EASY;

while (count)

{

int a = rand() % row + 1;

int b = rand() % col + 1;

if (mine[a][b] == '0')

{

mine[a][b] = '1';

count--;

}

}

}

? ? ? ?最后就是重難點(diǎn)排查地雷,先要輸入你要排查的坐標(biāo),討論輸入的坐標(biāo)是否符合數(shù)組范圍,然后再看這個(gè)坐標(biāo)是否有地雷,如若有雷游戲結(jié)束且需要打印mine數(shù)組的地雷位置供玩家參考;相反沒有地雷的話需要打印周圍一圈地雷的數(shù)量,這個(gè)就是mine數(shù)組初始化為字符0的原因,數(shù)字0和字符0之間相差一個(gè)字符0,所以計(jì)算地雷數(shù)量只需將坐標(biāo)周圍的字符分別都減一個(gè)字符0再相加起來就是坐標(biāo)周圍一圈的地雷數(shù)量,show數(shù)組中是字符,所以地雷數(shù)量還需加一個(gè)字符0,在打印show數(shù)組就會(huì)出現(xiàn)地雷數(shù)。

? ? ? ?游戲的勝利是需要把所有的不是地雷的坐標(biāo)找出來才算勝利,所以需要累計(jì)排查的坐標(biāo)是否滿足總的坐標(biāo)減去地雷數(shù),當(dāng)然過程中不能有重復(fù)排查的坐標(biāo),不然滿足但還有坐標(biāo)沒有排查,這就不符合游戲規(guī)則。

int get_round_mine(char mine[ROWS][COLS], int x, int y)

{

int i = 0;

int j = 0;

int ch = 0;

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

{

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

{

ch = ch + (mine[i][j] - '0');

}

}

return ch;

}

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

{

int x = 0;

int y = 0;

int win = 0;

while (win < ROW * COL - EASY)

{

printf("請(qǐng)輸入你要排查的坐標(biāo):");

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

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

{

if (show[x][y] != '*')

{

printf("該坐標(biāo)已被排查過\n");

continue;

}

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

{

printf("踩到地雷,游戲結(jié)束?。?!\n");

PrintBoard(mine, ROW, COL);

break;

}

else

{

int n = get_round_mine(mine, x, y);

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

PrintBoard(show, ROW, COL);

win++;

}

}

else

{

printf("輸入超過限制,無法檢測(cè)是否有地雷!\n");

}

}

if (win == ROW * COL - EASY)

{

printf("掃雷成功,你太厲害了吧!\n");

}

}

現(xiàn)在這個(gè)代碼還不是很好,和網(wǎng)頁版的還是有差距的。目前能力有限往后就不太會(huì)了,見諒。?

柚子快報(bào)激活碼778899分享:C語言——掃雷游戲

http://yzkb.51969.com/

文章來源

評(píng)論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。

轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/19326735.html

發(fā)布評(píng)論

您暫未設(shè)置收款碼

請(qǐng)?jiān)谥黝}配置——文章設(shè)置里上傳

掃描二維碼手機(jī)訪問

文章目錄