国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

請回答c語言-掃雷游戲

fou7 / 2896人閱讀

摘要:設(shè)計實現(xiàn)掃雷游戲大致思路創(chuàng)建文件想法實現(xiàn)設(shè)計一個函數(shù),實現(xiàn)建議菜單循環(huán)和分支選擇游戲選項創(chuàng)造一個掃雷版面版面的大小最后是要可控的如何存放雷和版面的信息呢考慮排查雷時候的思路,我們要判斷該位置周圍個格子里面是否有雷初始化

掃雷游戲是我們能實現(xiàn)的較簡單的游戲之一,在考慮不使用圖形界面的前提下,我們嘗試僅使用數(shù)組來實現(xiàn)掃雷游戲的基礎(chǔ)功能

想要制作一個掃雷游戲我們先得熟悉掃雷游戲的規(guī)則,我們可以先試試幾把掃雷感受掃雷游戲所要實現(xiàn)的功能

點我傳送掃雷游戲

1.大致思路

1.1 創(chuàng)建文件

還是老樣子先創(chuàng)建3個文件

文件名功能作用
game.c掃雷所需函數(shù)實現(xiàn)
game.h聲明用頭文件,實現(xiàn)每個函數(shù)的聲明,用來引用
test.c測試運行文件,主函數(shù)在這里

1.2 想法實現(xiàn)

設(shè)計一個menu函數(shù),實現(xiàn)建議菜單

void menu(){	printf("******************/n");	printf("***   1.play   ***/n");	printf("***   0.exit   ***/n");	printf("******************/n");}

do while循環(huán)和switch分支選擇游戲選項

	int input = 0;	do	{		menu();		printf("請選擇:");		scanf("%d", &input);		switch (input)		{		case 1:  game();			break;		case 0: printf("退出/n");		default:printf("選擇錯誤,重新選擇");			break;		}	} while (input);//1為真0為假非0都為真

創(chuàng)造一個掃雷版面

版面的大小最后是要可控的

如何存放雷和版面的信息呢?

利用二維數(shù)組

  • 分別創(chuàng)造2個存放字符的char類型二維數(shù)組,一個放置布置好雷的信息,還有一個放置排查出的信息

考慮排查雷時候的思路,我們要判斷該位置周圍8個格子里面是否有雷

  • 這時候就遇到了情況,也就是如果遇到了最邊上的話去直接排查周圍8個格子可能會造成數(shù)組越界

解決方法就是創(chuàng)建一個更大一個維度(9*9->11*11)的數(shù)組,為了嚴(yán)格對應(yīng),所以最好創(chuàng)建兩個一樣大的數(shù)組

初始化兩個數(shù)組

game.h宏定義行與列數(shù)

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

test.c初始化雷的信息存儲

//雷的信息存儲	char mine[ROWS][COLS] = { 0 };//布置好雷的信息	char show[ROWS][COLS] = { 0 };//排查好雷的信息	printf("掃雷/n");//通過初始化函數(shù)實現(xiàn)初始化	InitBoard(mine, ROWS, COLS, "0");//初始化mine數(shù)組為全"0"	InitBoard(show, ROWS, COLS, "*");//初始化show數(shù)組為全"*"
實現(xiàn)InitBoard

game.h初始化雷盤

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

game.c實現(xiàn)InitBoard

void InitBoard(char board[ROWS][COLS], int rows, int cols, char set){	int i = 0, j = 0;	for (i = 0; i < rows; i++)	{		for (j = 0; j < cols; j++)		{			board[i][j] = set; //set巧妙讓既可以顯示*又可以0		}	}}

實現(xiàn)打印雷盤的函數(shù)DisplayBoard

game.h

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

game.c

void DisplayBoard(char board[ROWS][COLS], int row, int col){	int i = 0, j = 0;	for (i = 0; i <= col; i++)//打印列號	{		printf("%d ", i);	}	printf("/n");	for (i = 1; i <= row; i++)//因為傳了ROWS少兩個	{		printf("%d ", i);//行號		for (j = 1; j <= col; j++)		{			printf("%c ", board[i][j]);		}		printf("/n");	}}

布置雷

game.h

#define EASY_COUNT 10void SetMine(char board[ROWS][COLS], int row, int col);//row和col是要打印或者改變的元素數(shù)要操作的是9

test.c

播撒隨機(jī)種子不用放到函數(shù)里面,只要放到主函數(shù)里面然后,播撒一次,每次循環(huán)游戲就可以實現(xiàn)隨機(jī)數(shù)

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

game.c

雷要隨機(jī)布置,所以要用randsrand,是雷的話就在信息數(shù)組里面對應(yīng)的格子放上1,此外放0

void SetMine(char board[ROWS][COLS], int row, int col){	int count = EASY_COUNT;//布置雷的數(shù)字,本質(zhì)是一個難度分級的選擇,也用宏定義	while (count)	{		int x = rand()% row+1;//1-9		int y = rand() % col + 1;//1-9   mod9=>0-8 need add 1 		if (board[x][y] == "0")		{			board[x][y] = "1";			count--;//直到0退出		}	}}

排查雷

game.h

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

game.c

在正常的while循環(huán)之下分情況用if實現(xiàn)分支

void Findmine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col){	int x = 0, y = 0;	int win = 0;	//9 * 9情況下	if (x >= 1 && x <= row&&y >= 1 && y <= col)		{			//坐標(biāo)合法前提下			//1.踩雷2.不是雷			if (mine[x][y] == "1")//1.踩雷			{				printf("很遺憾,你被炸死了/n");				DisplayBoard(mine, row, col);//死了之后調(diào)一下給打印出來看一看				break;			}			else//2.不是雷			{				//計算周圍有幾個雷				int count = get_mine_count(mine,x,y);				show[x][y] = count + "0";				DisplayBoard(show, row, col);				win++;			}		}		else		{			printf("輸入坐標(biāo)非法,無法排雷,請重新輸入!/n");		}	}}

判斷有幾個雷

game.c

//思考準(zhǔn)備把周圍數(shù)字加起來看有幾個雷//注意每個存的字符都是字符而ASCII"1" - "0"正好是數(shù)字1int get_mine_count(char mine[ROWS][COLS], int x, int y){	return mine[x - 1][y] +		mine[x - 1][y - 1] +		mine[x][y - 1] +		mine[x + 1][y - 1] +		mine[x + 1][y] +		mine[x + 1][y + 1] +		mine[x][y + 1] +		mine[x - 1][y + 1] - 8 * "0";}

這就是我們要用0和1來表示雷的原因,同時也能實現(xiàn)告訴你周圍有幾個雷,這樣就比較巧妙

結(jié)束判斷勝利函數(shù)

這時候我們發(fā)現(xiàn)雖然可以正常排雷,但是我們不可以做到勝利的判斷,所以我們要在排查雷前面加一個循環(huán),就像這樣

while (win < row * col - EASY_COUNT)	{		printf("請輸入排查雷的坐標(biāo)/n");		scanf("%d%d", &x, &y);		if (x >= 1 && x <= row && y >= 1 && y <= col)		{			//坐標(biāo)合法			//1.踩雷2.不是雷			if (mine[x][y] == "1")			{				printf("很遺憾,你被炸死了/n");				DisplayBoard(mine, row, col);				break;			}			else//不是雷			{				//計算周圍有幾個雷				int count = get_mine_count(mine, x, y);				show[x][y] = count + "0";				DisplayBoard(show, row, col);				win++;			}		}		else		{			printf("坐標(biāo)非法請重新輸入!/n");		}	}	if (win == row * col - EASY_COUNT)	{		printf("恭喜你,排雷成功/n");		DisplayBoard(mine, row, col);	}}

最后修改一下主函數(shù)就可以了

2. 具體實現(xiàn)

game.h

#define _CRT_SECURE_NO_WARNINGS 1#include #define ROW 9#define COL 9#define ROWS ROW+2#define COLS COL+2#define EASY_COUNT 10void InitBoard(char board[ROWS][COLS], int rows, int cols, char set);void DisplayBoard(char board[ROWS][COLS], int row, int col);void SetMine(char board[ROWS][COLS], int row, int col);//row和col是要打印或者改變的元素數(shù)要操作的是9void Findmine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);

game.c

#define _CRT_SECURE_NO_WARNINGS 1#include "game.h"void InitBoard(char board[ROWS][COLS], int rows, int cols, char set){	int i = 0, j = 0;	for (i = 0; i < rows; i++)	{		for (j = 0; j < cols; j++)		{			board[i][j] = set;//set 巧妙讓既可以顯示*又可以0		}	}}void DisplayBoard(char board[ROWS][COLS], int row, int col){	int i = 0, j = 0;	for (i = 0; i <= col; i++)//打印列號	{		printf("%d ", i);	}	printf("/n");	for (i = 1; i <= row; i++)//因為傳了ROWS少兩個	{		printf("%d ", i);//行號		for (j = 1; j <= col; j++)		{			printf("%c ", board[i][j]);		}		printf("/n");	}}void SetMine(char board[ROWS][COLS], int row, int col){	int count = EASY_COUNT;	while (count)	{		int x = rand() % row + 1;//1-9		int y = rand() % col + 1;//1-9   mod9=>0-8 need add 1		if (board[x][y] == "0")		{			board[x][y] = "1";			count--;//直到0退出		}	}}void Findmine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col){	int x = 0, y = 0;	int win = 0;	//9 * 9	while (win < row * col - EASY_COUNT)	{		printf("請輸入排查雷的坐標(biāo)/n");		scanf("%d%d", &x, &y);		if (x >= 1 && x <= row && y >= 1 && y <= col)		{			//坐標(biāo)合法			//1.踩雷2.不是雷			if (mine[x][y] == "1")			{				printf("很遺憾,你被炸死了/n");				DisplayBoard(mine, row, col);				break;			}			else//不是雷			{				//計算周圍有幾個雷				int count = get_mine_count(mine, x, y);				show[x][y] = count + "0";				DisplayBoard(show, row, col);				win++;			}		}		else		{			printf("坐標(biāo)非法請重新輸入!/n");		}	}	if (win == row * col - EASY_COUNT)	{		printf("恭喜你,排雷成功/n");		DisplayBoard(mine, row, col);	}}//思考準(zhǔn)備把周圍數(shù)字加起來看有幾個雷//注意每個存的字符都是字符而ASCII"1" - "0"正好是數(shù)字1int get_mine_count(char mine[ROWS][COLS], int x, int y){	return mine[x - 1][y] +		mine[x - 1][y - 1] +		mine[x][y - 1] +		mine[x + 1][y - 1] +		mine[x + 1][y] +		mine[x + 1][y + 1] +		mine[x][y + 1] +		mine[x - 1][y + 1] - 8 * "0";}

test.c

#define _CRT_SECURE_NO_WARNINGS 1#include "game.h"void menu(){	printf("******************/n");	printf(
            
                     
             
               

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/123069.html

相關(guān)文章

  • 掃雷游戲C語言實現(xiàn))

    摘要:寫在前面我們已經(jīng)寫過了三子棋小游戲肯定沒玩過癮,我們再寫個掃雷小游戲吧目錄寫在前面認(rèn)識游戲游戲規(guī)則游戲框架游戲?qū)崿F(xiàn)效果展示全部代碼文件文件文件認(rèn)識游戲相信大家對掃雷都不陌生每臺電腦必備的小游戲游戲規(guī)則就是在規(guī)定的時間將 ...

    Coding01 評論0 收藏0
  • [ C語言 ] 掃雷 ------> 用C語言實現(xiàn)game2

    摘要:函數(shù)游戲菜單請選擇掃雷游戲退出游戲選擇錯誤解析函數(shù)內(nèi)部利用時間戳,形成隨機(jī)數(shù),主要目的是實現(xiàn)游戲中地雷的隨機(jī)埋放。 前言 本篇文章使用C語言實現(xiàn)簡單小游戲---掃雷。(文章最后有完整代碼鏈接) 想必大多數(shù)人都玩過或者了解過掃雷的游戲規(guī)則,但是在這里,我們在一起重溫一下掃雷的游戲規(guī)則,也更好...

    I_Am 評論0 收藏0
  • C語言初階學(xué)習(xí)——掃雷游戲(遞歸)

    摘要:目錄前言前言前期的準(zhǔn)備前期的準(zhǔn)備游戲代碼的具體實現(xiàn)游戲代碼的具體實現(xiàn)完整版的掃雷小游戲代碼完整版的掃雷小游戲代碼總結(jié)總結(jié)前言掃雷是一款大眾類的益智小游戲,于年發(fā)行。 目錄 前言 前期的準(zhǔn)備 游戲代碼的具體實現(xiàn) 1、text.c 2、game.h 3、game.c 完整版的掃雷小游戲代碼: 1...

    zhonghanwen 評論0 收藏0
  • C語言實現(xiàn)游戲】(二)掃雷(遞歸實現(xiàn)排雷)

    摘要:玩家選擇開始游戲后,出現(xiàn)雷盤,并且隨機(jī)布置雷。雷盤的數(shù)組大小為,方便計算掃雷時周圍雷的數(shù)量,并防止數(shù)組越界。放置布置的雷的信息放置排查出雷的信息初始化雷盤初始化展示界面打印展示界面效果如下布置雷隨機(jī)在數(shù)組中讓十個變成作為雷。 目錄 前言 一、游戲思路 二、游戲框架 1.菜單界面 1.菜單:...

    U2FsdGVkX1x 評論0 收藏0
  • c語言實現(xiàn)掃雷

    摘要:上一篇講了三子棋,今天我們來講掃雷原理都是一樣的通常我們寫代碼的時候,寫之前都要整理分析好邏輯,要做到分段分塊來寫,以便于代碼閱讀和后期維護(hù)這里我將代碼分為三個文件頭文件通常用來完成函數(shù)聲明頭文件的引用宏定義變量用于游戲功能函數(shù)的實現(xiàn)作為 上一篇講了三子棋,今天我們來講掃雷原理都是一樣的; ...

    LiangJ 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<