欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++ 情懷游戲掃雷的實(shí)現(xiàn)流程詳解

 更新時間:2021年11月19日 11:57:46   作者:MAX在碼字  
掃雷是電腦上很經(jīng)典很經(jīng)典的傳統(tǒng)老游戲,從小編第一次摸到計算機(jī)開始就玩過掃雷,雖然當(dāng)時并不理解玩法原理,但終是第一次玩電腦游戲,下面來從掃雷的前世今生講起

掃雷最原始的版本可以追溯到1973年一款名為“方塊”的游戲。 不久,“方塊”被改寫成了游戲“Rlogic”。在“Rlogic”里,玩家的任務(wù)是作為美國海軍陸戰(zhàn)隊隊員,為指揮中心探出一條沒有地雷的安全路線,如果路全被地雷堵死就算輸。兩年后,湯姆·安德森在“Rlogic”的基礎(chǔ)上又編寫出了游戲“地雷”,由此奠定了現(xiàn)代掃雷游戲的雛形。 1981年,微軟公司的羅伯特·杜爾和卡特·約翰遜兩位工程師在Windows3.1系統(tǒng)上加載了該游戲,掃雷游戲才正式在全世界推廣開來。

這款游戲的玩法是在一個9*9(初級),16*16(中級),16*30(高級),或自定義大小的方塊矩陣中隨機(jī)布置一定量的地雷(初級為10個,中級為40個,高級為99個)。由玩家逐個翻開方塊,以找出所有地雷為最終游戲目標(biāo)。如果玩家翻開的方塊有地雷,則游戲結(jié)束。

我們今天就來自己寫《掃雷》 這個項目并不是很難,今天就和大家從頭到尾詳細(xì)的講一遍,大家一定要好好看好好學(xué)!

行吧,開始了

我們今天用的是Cpp來寫,但不是用Windows來創(chuàng)建窗口,而是用他的遠(yuǎn)房表親EasyX圖形庫來創(chuàng)建窗口,因?yàn)橛脠D形庫會簡單很多,剛學(xué)C的也可以聽懂,而且C/C++不分家,沒有什么問題,OK,我們現(xiàn)在開始寫代碼,今天我就把頭文件也分享出來了,主要是教大家如何去調(diào)用圖形庫。(注:沒有EasyX圖形庫的可以去官網(wǎng)下載,也可以進(jìn)群直接下載) 首先是我們的頭文件以及一些宏定義

#include<stdio.h>
#include<graphics.h>//包含圖形庫頭文件
#define ROW 9 //行
#define COL 9 //列  共81個格子
#define MINE_NUM  18//雷的數(shù)量
#define IMG_SIZE 40

初始化函數(shù),也是我們的老朋友了

void GameInit()
{
	//1,創(chuàng)建窗口 一行有九張圖片每張圖片40px,
	initgraph(IMG_SIZE*ROW, IMG_SIZE*COL,SHOWCONSOLE);
	//加載圖片(賦值) load加載 第一個參數(shù),存儲圖片的變量 錯誤:字符集問題
	for (int i = 0; i < 12; i++)
	{
		char file[20] = "";
		sprintf(file, "./image/%d.jpg", i);
		loadimage(&img[i], file, IMG_SIZE, IMG_SIZE);
	}
	//布雷
	for (int i = 0; i < MINE_NUM; )
	{
		//排除輔助區(qū)
		int row = rand() % ROW+1;//0-8  1-9
		int col = rand() % COL+1;
		if (mine[row][col] == 0)
		{
			mine[row][col] = 9;
			i++;
		}
	}
	//雷所在的九宮格,要加1(雷除外)
	for (int i = 1; i < ROW+1; i++)
	{
		for (int k = 1; k < COL+1; k++)
		{
			if (mine[i][k] == 9)
			{
				//遍歷雷的九宮格 細(xì)心
				for (int a = i - 1; a <= i + 1; a++)
				{
					for (int b = k - 1; b <= k + 1; b++)
					{
						//非雷的格子加1
						if (mine[a][b] != 9)
						{
							mine[a][b]++;
						}
					}
				}
			}
		}
	}
	//加密 開始時全部為掩碼圖
	for (int i = 1; i < ROW + 1; i++)
	{
		for (int k = 1; k < COL + 1; k++)
		{
			mine[i][k] += 20;
		}
	}
 
}

鼠標(biāo)信息處理函數(shù)

void MouseEvent()
{
	//檢測是否有鼠標(biāo)消息
	if (MouseHit())
	{
		//獲取鼠標(biāo)消息,坐標(biāo),左鍵還是右鍵
		MOUSEMSG msg = GetMouseMsg();
		//把坐標(biāo)轉(zhuǎn)化成數(shù)組下標(biāo)
		openr = msg.y / IMG_SIZE+1;
		openc = msg.x / IMG_SIZE+1;
		//判斷是左鍵還是右鍵
		switch (msg.uMsg)
		{
		case WM_LBUTTONDOWN:
			//如果格子沒有打開,就打開格子,否則不做處理
			if (mine[openr][openc] > 9)
			{
				mine[openr][openc] -= 20;
				OpenNull(openr,openc);
				num++;
			}
			break;
		case WM_RBUTTONDOWN:
			//標(biāo)記
			if (mine[openr][openc] > 9 && mine[openr][openc] <= 29)
			{
				mine[openr][openc] += 20;
			}
			else
			{
				mine[openr][openc] -= 20;
			}
			break;
		}
	}
}

進(jìn)行遞歸操作,判斷鼠標(biāo)點(diǎn)擊的地方

//遞歸打開所有空白,以及空白周圍的數(shù)字
void OpenNull(int row,int col)
{
	//點(diǎn)擊的是空白才能打開
	if (mine[row][col] == 0)
	{
		for (int i = row - 1; i <= row + 1; i++)
		{
			for (size_t k = col-1; k <= col+1; k++)
			{
				//如果為空或者不是雷就打開
				if ((mine[i][k] == 20 || mine[i][k] != 29)&& mine[i][k]>9)
				{
					mine[i][k] -= 20;
					num++;
					OpenNull(i, k);
				}
			}
		}
	}
}

游戲的輸贏判斷函數(shù),注意理清邏輯

void Jude()
{
	//判斷輸
	if (mine[openr][openc] == 9)
	{
		int isok = MessageBox(GetHWnd(), "是否繼續(xù)!", "點(diǎn)到雷了", MB_OKCANCEL);
		if (isok == IDOK)
		{
			mine[openr][openc] += 20;
		}
		else
		{
			exit(666);
		}
	}
	//判斷贏
	if (num == ROW*COL - MINE_NUM)
	{
		int isok = MessageBox(GetHWnd(), "是否繼續(xù)!", "點(diǎn)到雷了", MB_OKCANCEL);
		if (isok == IDOK)
		{
			num = 0;
			GameInit();
		}
		else
		{
			exit(666);
		}
	}
}

最后就是我們的主函數(shù)了

int main()
{
	GameInit();
	show();
	//循環(huán)處理游戲邏輯
	while (1)
	{
		MouseEvent();
		GameDraw();
		Jude();
	}
	
	getchar();
	return 0;
}

經(jīng)典游戲《掃雷》完成,OK,簡單總結(jié)一下,代碼很簡單,邏輯也不難,重要是大家一定要自己動手去做,這是毋庸置疑的,編程沒有捷徑,只有不斷的學(xué)習(xí)熟練,加強(qiáng)自己的能力,有條件的話找個老師的話效果會更好,我也特意找了一個朋友叫他把一些關(guān)于《掃雷》的教學(xué)視頻發(fā)給我,大家可以去我的主頁上查看,我也希望下面的視頻可以更好的幫助同學(xué)們掌握這個項目,好了,希望大家可以在這里得到自己想要的知識以及快樂吧,也希望大家可以給UP主一個關(guān)注,非常感謝大家了!??!

點(diǎn)擊下方鏈接觀看詳細(xì)視頻講解
C/C++游戲《掃雷》詳細(xì)教程
https://www.bilibili.com/video/BV1oF411a7MQ/

到此這篇關(guān)于C++ 情懷游戲掃雷的實(shí)現(xiàn)流程詳解的文章就介紹到這了,更多相關(guān)C語言 掃雷內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++的函數(shù)與指針

    C++的函數(shù)與指針

    今天小編就為大家分享一篇關(guān)于C++函數(shù)與指針的文章,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2021-10-10
  • 基于C++語言實(shí)現(xiàn)機(jī)動車違章處罰管理系統(tǒng)

    基于C++語言實(shí)現(xiàn)機(jī)動車違章處罰管理系統(tǒng)

    這篇文章主要介紹了基于C++語言實(shí)現(xiàn)機(jī)動車違章處罰管理系統(tǒng)的相關(guān)資料,需要的朋友可以參考下
    2016-07-07
  • C語言運(yùn)算符深入探究優(yōu)先級與結(jié)合性及種類

    C語言運(yùn)算符深入探究優(yōu)先級與結(jié)合性及種類

    C語言運(yùn)算符號指的是運(yùn)算符號。C語言中的符號分為10類:算術(shù)運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符、位操作運(yùn)算符、賦值運(yùn)算符、條件運(yùn)算符、逗號運(yùn)算符、指針運(yùn)算符、求字節(jié)數(shù)運(yùn)算符和特殊運(yùn)算符
    2022-05-05
  • 詳解C++編程中運(yùn)算符的使用

    詳解C++編程中運(yùn)算符的使用

    這篇文章主要介紹了詳解C++編程中運(yùn)算符的使用,是C++入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-09-09
  • 利用C++如何覆蓋或刪除指定位置的文件內(nèi)容

    利用C++如何覆蓋或刪除指定位置的文件內(nèi)容

    這篇文章主要給大家介紹了關(guān)于利用C++如何覆蓋或刪除指定位置的文件內(nèi)容,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面跟著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-08-08
  • Qt自定義Widget實(shí)現(xiàn)互斥效果詳解

    Qt自定義Widget實(shí)現(xiàn)互斥效果詳解

    在使用Qt時,可能會遇到這種問題:多個控件互斥,類似于QRadiButton控件,但又不是單純的QRadioButton控件,互斥的可能是一個窗口,也可能是幾個按鈕,等等多種情況。本文將介紹利用Qt自定義Widget實(shí)現(xiàn)的互斥效果,需要的可以參考一下
    2022-01-01
  • C++中g(shù)etline()、gets()等函數(shù)的用法詳解

    C++中g(shù)etline()、gets()等函數(shù)的用法詳解

    這篇文章主要介紹了C++中g(shù)etline()、gets()等函數(shù)的用法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02
  • C++數(shù)據(jù)模型應(yīng)用在QML委托代理機(jī)制中

    C++數(shù)據(jù)模型應(yīng)用在QML委托代理機(jī)制中

    這篇文章主要介紹了在QML委托代理機(jī)制中使用C++數(shù)據(jù)模型,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • C++char類型和輸入輸出優(yōu)化

    C++char類型和輸入輸出優(yōu)化

    這篇文章主要介紹了C++char類型和輸入輸出優(yōu)化,char的全稱是character,也就是字符的意思。顧名思義,char類型是專門為了存儲字符而設(shè)計的。下面我們一起來看看文章的具體內(nèi)容吧
    2021-11-11
  • c語言static關(guān)鍵字用法詳解

    c語言static關(guān)鍵字用法詳解

    大家好,本篇文章主要講的是c語言static關(guān)鍵字用法詳解,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01

最新評論