這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)——《黃金礦工項(xiàng)目》,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下!
游戲介紹:
在規(guī)定的時(shí)間內(nèi)得到規(guī)定的金錢時(shí)即可。玩法非常簡(jiǎn)單,按“↓”鍵開使撈金子,如有***,按“↑”鍵放***,買東西點(diǎn)鼠標(biāo)左鍵。不過(guò)本游戲之設(shè)計(jì)到鉤子勾金子的程度,后面的關(guān)卡大家可以自行設(shè)計(jì),相信能夠設(shè)計(jì)金子了,鉆石的話同理還是非常簡(jiǎn)單的。
本項(xiàng)目編譯環(huán)境:VS2019/VS2013;
插件:圖形庫(kù)插件easyX,涉及圖片素材可以自行百度找也可以關(guān)注文末領(lǐng)??;
配套講解教程:黃金礦工游戲教程——嗶哩嗶哩
源代碼示例:
enum Index{i_gold = 1,i_money = 3,i_roleDown = 5,i_roleUp = 7,i_stone = 9};/*鉤子擺動(dòng)狀態(tài),擺動(dòng),伸長(zhǎng),縮短,停止*/enum ATTR{LEFT,RIGHT,M_NORMAL,M_LONG,M_SHORT};struct Role{int x;int y;int width;int height;int coin; //總金錢};struct Hook{int x;int y;int endx;int endy;int len;//鉤子長(zhǎng)度double angle;//鉤子當(dāng)前角度int dir;//鉤子擺動(dòng)方向,左,右int vx;//速度變化量int vy;int state;//當(dāng)前狀態(tài)};struct Role role;struct Hook hook;struct Mine//物品{int x;int y;int size;int type;bool flag;int gold;};struct Mine mine[10];//把圖片加載進(jìn)程序IMAGE img[11];void loadImg(){for (int i = 0; i < 10; i++){//如何把數(shù)字,轉(zhuǎn)成字符串char fileName[20] = "";sprintf(fileName, "./images/%d.jpg", i);loadimage(img + i, fileName);}loadimage(img+10,"./images/bk.jpg",WIDTH,HEIGHT);}void gameInit(){loadImg();role.width = 140;role.height = 120;role.x = WIDTH / 2 - role.width / 2;role.y = 0;hook.len = 50;hook.x = role.x+40;hook.y = role.y+100;hook.endx = hook.x;hook.endy = hook.y + hook.len;hook.angle = 0;hook.dir = RIGHT;hook.state = M_NORMAL;}void gameDraw(){setfillcolor(GREEN);solidrectangle(0, 0, WIDTH, role.height);putimage(0, role.height, img + 10);putimage(role.x, role.y, img + i_roleDown - 1, SRCAND);putimage(role.x, role.y, img + i_roleDown, SRCPAINT);//輸出我的錢setbkmode(TRANSPARENT);//設(shè)置背景透明settextstyle(50, 0, "黑體");char coin[20] = "";sprintf(coin, "金錢:%d", role.coin);outtextxy(20, 20, coin);//繪制鉤子setlinecolor(RED);setlinestyle(PS_SOLID, 5);line(hook.x, hook.y, hook.endx, hook.endy);setfillcolor(YELLOW);solidcircle(hook.endx, hook.endy, 5);}//鉤子擺動(dòng)void hookRock(){if (hook.state == M_NORMAL){if (hook.dir == RIGHT){hook.angle++;}else if (hook.dir == LEFT){hook.angle--;}if (hook.angle > MAX_ANGLE){hook.dir = LEFT;}else if (hook.angle<-MAX_ANGLE){hook.dir = RIGHT;}hook.endx = hook.x + sin(PI / 180 * hook.angle)*hook.len;hook.endy = hook.y + cos(PI / 180 * hook.angle)*hook.len;}}double distance(Hook h){return sqrt((double)(hook.endx - hook.x)*(hook.endx - hook.x) + (hook.endy - hook.y)*(hook.endy - hook.y));}void keyControl(int speed){if (GetAsyncKeyState(VK_SPACE))//virtual key{hook.state = M_LONG;hook.vx = sin(PI / 180 * hook.angle)*speed;hook.vy = cos(PI / 180 * hook.angle)*speed;}if (hook.state == M_LONG){hook.endx += hook.vx;hook.endy += hook.vy;}else if (hook.state==M_SHORT){hook.endx -= hook.vx;hook.endy -= hook.vy;if (distance(hook)<=hook.len){hook.state =M_NORMAL;}}//碰到邊界反回if (hook.endx<0 || hook.endx>WIDTH || hook.endy<0 || hook.endy > HEIGHT){hook.state = M_SHORT;}}int main(){//控制臺(tái)窗口(只能用來(lái)輸出文字)//我們需要能夠畫圖的窗口initgraph(WIDTH, HEIGHT, SHOWCONSOLE);gameInit();while (1){//雙緩沖繪圖,防止閃屏BeginBatchDraw();gameDraw();EndBatchDraw();hookRock();keyControl(5);}return 0;}
-
C語(yǔ)言
+關(guān)注
關(guān)注
183文章
7646瀏覽量
146208 -
代碼
+關(guān)注
關(guān)注
30文章
4977瀏覽量
74426
原文標(biāo)題:C語(yǔ)言項(xiàng)目實(shí)戰(zhàn):《黃金礦工》零基礎(chǔ)項(xiàng)目!180 行源代碼示例
文章出處:【微信號(hào):cyuyanxuexi,微信公眾號(hào):C語(yǔ)言編程學(xué)習(xí)基地】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
講解C語(yǔ)言代碼的實(shí)現(xiàn)過(guò)程
C語(yǔ)言來(lái)實(shí)現(xiàn)萬(wàn)年歷
C語(yǔ)言實(shí)現(xiàn)PID算法介紹
如何用軟件實(shí)現(xiàn)系統(tǒng)的復(fù)位?
C語(yǔ)言主要特點(diǎn)
如何用好 C 語(yǔ)言函數(shù)的返回值?
C語(yǔ)言與C++的區(qū)別及聯(lián)系
單片機(jī)C語(yǔ)言編程的心得
為什么單片機(jī)還在用C語(yǔ)言編程?
C語(yǔ)言特性
C語(yǔ)言和單片機(jī)C語(yǔ)言有什么差異
強(qiáng)實(shí)時(shí)運(yùn)動(dòng)控制內(nèi)核MotionRT750(九):內(nèi)置C語(yǔ)言的自定義機(jī)械手模型實(shí)現(xiàn)
C++ 與 Python:樹莓派上哪種語(yǔ)言更優(yōu)?
如何用C語(yǔ)言實(shí)現(xiàn)黃金礦工項(xiàng)目
評(píng)論