C++調(diào)用EasyX庫實(shí)現(xiàn)嫦娥奔月小游戲
引言
不羨嫦娥成神仙,月宮寒冷恨無邊;不羨吳剛桂花酒,人間美酒比蜜甜。中秋之夜慶團(tuán)圓,家家戶戶笑聲歡。愿以此心寄明月,國泰民安長萬年。
前期準(zhǔn)備
這個C++項目需要調(diào)用Easyx圖形庫,可從官網(wǎng)下載使用:easyx.cn/
我們只需要將下載好的文件中的.exe文件復(fù)制粘貼到我們建立項目的地址處就可以使用了。
開始項目
在建立項目后,我們需要建立一個文件夾用來存放圖片,這里需要存放 "嫦娥"、"月亮”圖片:
完成這些之后,就可以安心敲代碼了。
我們首先需要對程序設(shè)計進(jìn)行大致分析,也就是說我需要干什么、怎么干。
在這里我需要設(shè)計一款游戲,玩家通過鍵盤進(jìn)行移動,月亮在玩家移動后也會隨機(jī)移動,玩家需要幫助嫦娥追到月亮。
初始化繪圖窗口后加載圖片,為了代碼的可閱讀性,這里使用棋盤的思想,設(shè)計一個棋盤,我們將月亮放在棋盤中間,將嫦娥放在棋盤左下角,宏定義棋盤格子的大小后,我們使嫦娥和月亮的坐標(biāo)最小長度都為1,將相應(yīng)的坐標(biāo)乘上格子大小就是真實(shí)坐標(biāo)了。
現(xiàn)在具體分析一下:
下面將需要全局聲明、全局變量、宏定義、頭文件貼出來:
#include <graphics.h> #include <conio.h> #include<iostream> using namespace std; #define WINDOW_LENGTH 1024 //棋盤長 #define WINDOW_WIDTH 768 //棋盤寬 #define BEGIN_X 85 //棋盤最左上角點(diǎn)的x坐標(biāo) #define BEGIN_Y 85 //棋盤最左上角點(diǎn)的y坐標(biāo) #define GRID_N 15 //格子數(shù) #define GRID_LENGTH 30 //每個格子的邊長(像素數(shù)) //定義圖型變量 IMAGE pic_moon; IMAGE pic_ren; //定義二維棋盤數(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ù)非常簡短:
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); }
接下來就是玩游戲的函數(shù)了,這里相比之前的函數(shù)代碼相對較長,但是也很好理解,我們將嫦娥和月亮限制在棋盤中,根據(jù)玩家的輸入嫦娥移動,使用last來使玩家和電腦依次移動,最后判斷是否勝利。
void playgame() { //移動人物 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++; //移動月亮 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ù)非常簡短,也很簡單:
void wingame() { if (renX == moonX && renY == moonY) num = 1; }
我們可以在playgame()函數(shù)中看到使用了顯示圖片函數(shù),這個函數(shù)根據(jù)坐標(biāo)顯示嫦娥和月亮圖片,并每一次都重新繪制圖像,不然程序中會出現(xiàn)多個嫦娥和月亮,這是因?yàn)閳D片被顯示后在程序中會一直存在,使用我們需要使用函數(shù)重新繪制圖像??梢钥吹竭@里有畫線的操作,其實(shí)在最后這是可以被注釋掉的(不注釋也不會有什么大問題,而且這可以幫助我們調(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"勝利,終端查看移動步數(shù)!"); cout << "玩家勝利,共移動" << step << "步" << endl; Sleep(1000); closegraph(); } }
結(jié)語
游戲到這里就基本設(shè)計結(jié)束了,當(dāng)然也可以繼續(xù)修改增加一些技能什么的,這個筆者后續(xù)可能會繼續(xù)設(shè)計。下面貼出部分游戲畫面:
以上就是C++調(diào)用EasyX庫實(shí)現(xiàn)嫦娥奔月小游戲的詳細(xì)內(nèi)容,更多關(guān)于C++ EasyX游戲的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
C語言中數(shù)據(jù)如何存儲進(jìn)內(nèi)存揭秘
使用編程語言進(jìn)行編程時,需要用到各種變量來存儲各種信息。變量保留的是它所存儲的值的內(nèi)存位置。這意味著,當(dāng)您創(chuàng)建一個變量時,就會在內(nèi)存中保留一些空間。您可能需要存儲各種數(shù)據(jù)類型的信息,操作系統(tǒng)會根據(jù)變量的數(shù)據(jù)類型,來分配內(nèi)存和決定在保留內(nèi)存中存儲什么2022-08-08C語言實(shí)現(xiàn)統(tǒng)計字符串單詞數(shù)
這篇文章主要介紹了C語言實(shí)現(xiàn)統(tǒng)計字符串單詞數(shù),代碼非常的簡潔,有需要的小伙伴快來參考下。2015-03-03C++實(shí)現(xiàn)職工工資管理系統(tǒng)課程設(shè)計
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)職工工資管理系統(tǒng)課程設(shè)計,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-03-03