亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C++調(diào)用EasyX庫(kù)實(shí)現(xiàn)嫦娥奔月小游戲

 更新時(shí)間:2023年09月15日 14:37:20   作者:GZX墨痕  
這篇文章主要為大家詳細(xì)介紹了C++如何調(diào)用EasyX庫(kù)編寫(xiě)一個(gè)簡(jiǎn)單的嫦娥奔月小游戲,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以參考一下

引言

不羨嫦娥成神仙,月宮寒冷恨無(wú)邊;不羨吳剛桂花酒,人間美酒比蜜甜。中秋之夜慶團(tuán)圓,家家戶(hù)戶(hù)笑聲歡。愿以此心寄明月,國(guó)泰民安長(zhǎng)萬(wàn)年。

前期準(zhǔn)備

這個(gè)C++項(xiàng)目需要調(diào)用Easyx圖形庫(kù),可從官網(wǎng)下載使用:easyx.cn/

我們只需要將下載好的文件中的.exe文件復(fù)制粘貼到我們建立項(xiàng)目的地址處就可以使用了。

開(kāi)始項(xiàng)目

在建立項(xiàng)目后,我們需要建立一個(gè)文件夾用來(lái)存放圖片,這里需要存放 "嫦娥"、"月亮”圖片:

完成這些之后,就可以安心敲代碼了。

我們首先需要對(duì)程序設(shè)計(jì)進(jìn)行大致分析,也就是說(shuō)我需要干什么、怎么干。

在這里我需要設(shè)計(jì)一款游戲,玩家通過(guò)鍵盤(pán)進(jìn)行移動(dòng),月亮在玩家移動(dòng)后也會(huì)隨機(jī)移動(dòng),玩家需要幫助嫦娥追到月亮。

初始化繪圖窗口后加載圖片,為了代碼的可閱讀性,這里使用棋盤(pán)的思想,設(shè)計(jì)一個(gè)棋盤(pán),我們將月亮放在棋盤(pán)中間,將嫦娥放在棋盤(pán)左下角,宏定義棋盤(pán)格子的大小后,我們使嫦娥和月亮的坐標(biāo)最小長(zhǎng)度都為1,將相應(yīng)的坐標(biāo)乘上格子大小就是真實(shí)坐標(biāo)了。

現(xiàn)在具體分析一下:

下面將需要全局聲明、全局變量、宏定義、頭文件貼出來(lái):

#include <graphics.h>
#include <conio.h>
#include<iostream>
using namespace std;
#define WINDOW_LENGTH 1024    //棋盤(pán)長(zhǎng)
#define WINDOW_WIDTH 768      //棋盤(pán)寬
#define BEGIN_X 85            //棋盤(pán)最左上角點(diǎn)的x坐標(biāo)
#define BEGIN_Y 85            //棋盤(pán)最左上角點(diǎn)的y坐標(biāo)
#define GRID_N 15             //格子數(shù)
#define GRID_LENGTH 30        //每個(gè)格子的邊長(zhǎng)(像素?cái)?shù))
//定義圖型變量
IMAGE pic_moon;
IMAGE pic_ren;
//定義二維棋盤(pán)數(shù)組 
int chessboard[15][15] = { 0 };
//****************核心數(shù)據(jù)*****************//
//定義判斷玩家或電腦
int last = 1;
//人物初始位置
int renX = 0;
int renY = 14;
int moonX = 7;
int moonY = 7;
int step = 0;
//判斷贏 
int num = 0;
void start();
void loadsource();
void playgame();
void wingame();
void drawpicture();

程序主要使用自定義函數(shù),主函數(shù)非常簡(jiǎn)短:

void main()
{
	start();
}

下面是start()函數(shù)代碼:

void start()
{
	//設(shè)置初始面板
	//mciSendString("play  music\qingtian.mp3",0,0,0);
	initgraph(WINDOW_LENGTH, WINDOW_WIDTH);
	loadsource();
	playgame();
}

根據(jù)執(zhí)行順序,我們進(jìn)入加載圖片的函數(shù):

void loadsource()
{
	//加載
	loadimage(&pic_moon, L"tupian\moon.png", GRID_LENGTH, GRID_LENGTH);
	loadimage(&pic_ren, L"tupian\ren.png", GRID_LENGTH, GRID_LENGTH);
}

接下來(lái)就是玩游戲的函數(shù)了,這里相比之前的函數(shù)代碼相對(duì)較長(zhǎng),但是也很好理解,我們將嫦娥和月亮限制在棋盤(pán)中,根據(jù)玩家的輸入嫦娥移動(dòng),使用last來(lái)使玩家和電腦依次移動(dòng),最后判斷是否勝利。

void playgame()
{
	//移動(dòng)人物
	unsigned char ch;
	while (1)
	{
		drawpicture();
		if (last == 1 && renX >= 0 && renX <= 14 && renY >= 0 && renY <= 14)
		{
			ch = _getch();
			step++;
			switch (ch)
			{
			case 'a':
			case 'A':
			{
				renX--;
				last = 2;
				break;
			}
			case 'w':
			case 'W':
			{
				renY--;
				last = 2;
				break;
			}
			case 's':
			case 'S':
			{
				renY++;
				last = 2;
				break;
			}
			case 'd':
			case 'D':
			{
				renX++;
				last = 2;
				break;
			}
			}
		}
		if (renX > 14)
			renX--;
		if (renX < 0)
			renX++;
		if (renY > 14)
			renY--;
		if (renY < 0)
			renY++;
		//移動(dòng)月亮
		if (last == 2)
		{
			last = 1;
			int moon_temp_X = rand() % 3;
			int moon_temp_Y = rand() % 3;
			switch (moon_temp_X)
			{
			case 0:
				break;
			case 1:
				moonX++;
				break;
			case 2:
				moonX--;
				break;
			}
			switch (moon_temp_Y)
			{
			case 0:
				break;
			case 1:
				moonY++;
				break;
			case 2:
				moonY--;
				break;
			}
		}
		if (moonX > 14)
			moonX--;
		if (moonX < 0)
			moonX++;
		if (moonY > 14)
			moonY--;
		if (moonY < 0)
			moonY++;
		wingame();
	}
}

wengame()函數(shù)非常簡(jiǎn)短,也很簡(jiǎn)單:

void wingame()
{
	if (renX == moonX && renY == moonY)
		num = 1;
}

我們可以在playgame()函數(shù)中看到使用了顯示圖片函數(shù),這個(gè)函數(shù)根據(jù)坐標(biāo)顯示嫦娥和月亮圖片,并每一次都重新繪制圖像,不然程序中會(huì)出現(xiàn)多個(gè)嫦娥和月亮,這是因?yàn)閳D片被顯示后在程序中會(huì)一直存在,使用我們需要使用函數(shù)重新繪制圖像??梢钥吹竭@里有畫(huà)線(xiàn)的操作,其實(shí)在最后這是可以被注釋掉的(不注釋也不會(huì)有什么大問(wèn)題,而且這可以幫助我們調(diào)整嫦娥和月亮位置),最后我們根據(jù)是否勝利進(jìn)行輸出。這里同樣貼出代碼:

void drawpicture()
{
	for (int i = 0; i < GRID_N; i++)
	{
		setlinecolor(WHITE);
		line(100, 100 + i * GRID_LENGTH, 100 + GRID_LENGTH * 14, 100 + i * GRID_LENGTH);
		line(100 + i * GRID_LENGTH, 100, 100 + i * GRID_LENGTH, 100 + GRID_LENGTH * 14);
	}
	cleardevice();
	putimage(BEGIN_X + renX * GRID_LENGTH, BEGIN_Y + renY * GRID_LENGTH, &pic_ren);
	putimage(BEGIN_X + moonX * GRID_LENGTH, BEGIN_Y + moonY * GRID_LENGTH, &pic_moon);
	if (num == 1)
	{
		settextcolor(BLACK);
		setbkmode(TRANSPARENT);
		settextstyle(50, 30, L"宋體");
		outtextxy(650, 340, L"勝利,終端查看移動(dòng)步數(shù)!");
		cout << "玩家勝利,共移動(dòng)" << step << "步" << endl;
		Sleep(1000);
		closegraph();
	}
}

結(jié)語(yǔ)

游戲到這里就基本設(shè)計(jì)結(jié)束了,當(dāng)然也可以繼續(xù)修改增加一些技能什么的,這個(gè)筆者后續(xù)可能會(huì)繼續(xù)設(shè)計(jì)。下面貼出部分游戲畫(huà)面:

以上就是C++調(diào)用EasyX庫(kù)實(shí)現(xiàn)嫦娥奔月小游戲的詳細(xì)內(nèi)容,更多關(guān)于C++ EasyX游戲的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C++實(shí)現(xiàn)騎士走棋盤(pán)算法

    C++實(shí)現(xiàn)騎士走棋盤(pán)算法

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)騎士走棋盤(pán)算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • C語(yǔ)言每日練習(xí)之選擇排序

    C語(yǔ)言每日練習(xí)之選擇排序

    本篇文章主要介紹了 C語(yǔ)言的選擇排序,這里提供代碼實(shí)例以便大家理解,通過(guò)本文,更好的理解排序算法
    2021-11-11
  • C語(yǔ)言中`||`的短路機(jī)制詳解

    C語(yǔ)言中`||`的短路機(jī)制詳解

    在C語(yǔ)言中,邏輯或運(yùn)算符(||)是一種常用的邏輯運(yùn)算符,用于組合多個(gè)條件表達(dá)式,C語(yǔ)言中的邏輯或運(yùn)算符具有短路機(jī)制,這是一種非常重要的概念,本文將深入解釋C語(yǔ)言中的||短路機(jī)制以及其在編程中的應(yīng)用,感興趣的朋友跟隨小編一起看看吧
    2024-01-01
  • C++實(shí)現(xiàn)二叉樹(shù)非遞歸遍歷算法詳解

    C++實(shí)現(xiàn)二叉樹(shù)非遞歸遍歷算法詳解

    在C++中,二叉樹(shù)非遞歸遍歷是一種常用的算法,可避免遞歸過(guò)程中的系統(tǒng)開(kāi)銷(xiāo)和棧溢出問(wèn)題。非遞歸遍歷算法利用棧數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn),可以實(shí)現(xiàn)前序、中序和后序遍歷,是C++程序員必備技能之一
    2023-04-04
  • C語(yǔ)言中數(shù)據(jù)如何存儲(chǔ)進(jìn)內(nèi)存揭秘

    C語(yǔ)言中數(shù)據(jù)如何存儲(chǔ)進(jìn)內(nèi)存揭秘

    使用編程語(yǔ)言進(jìn)行編程時(shí),需要用到各種變量來(lái)存儲(chǔ)各種信息。變量保留的是它所存儲(chǔ)的值的內(nèi)存位置。這意味著,當(dāng)您創(chuàng)建一個(gè)變量時(shí),就會(huì)在內(nèi)存中保留一些空間。您可能需要存儲(chǔ)各種數(shù)據(jù)類(lèi)型的信息,操作系統(tǒng)會(huì)根據(jù)變量的數(shù)據(jù)類(lèi)型,來(lái)分配內(nèi)存和決定在保留內(nèi)存中存儲(chǔ)什么
    2022-08-08
  • C語(yǔ)言三子棋游戲?qū)崿F(xiàn)代碼解析

    C語(yǔ)言三子棋游戲?qū)崿F(xiàn)代碼解析

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言三子棋游戲?qū)崿F(xiàn)代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • C語(yǔ)言中傳值與傳指針的介紹與區(qū)別

    C語(yǔ)言中傳值與傳指針的介紹與區(qū)別

    這篇文章主要給大家介紹了關(guān)于C語(yǔ)言中傳值與傳指針的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用C語(yǔ)言具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • C++變量和基本類(lèi)型詳解

    C++變量和基本類(lèi)型詳解

    這篇文章主要介紹了C++變量和基本類(lèi)型,,一定要注意局部變量與全局變量的作用范圍,需要的朋友可以參考下,希望能夠給你帶來(lái)幫助
    2021-10-10
  • C語(yǔ)言實(shí)現(xiàn)統(tǒng)計(jì)字符串單詞數(shù)

    C語(yǔ)言實(shí)現(xiàn)統(tǒng)計(jì)字符串單詞數(shù)

    這篇文章主要介紹了C語(yǔ)言實(shí)現(xiàn)統(tǒng)計(jì)字符串單詞數(shù),代碼非常的簡(jiǎn)潔,有需要的小伙伴快來(lái)參考下。
    2015-03-03
  • C++實(shí)現(xiàn)職工工資管理系統(tǒng)課程設(shè)計(jì)

    C++實(shí)現(xiàn)職工工資管理系統(tǒng)課程設(shè)計(jì)

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)職工工資管理系統(tǒng)課程設(shè)計(jì),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03

最新評(píng)論