摘要:黃金礦工是一款非常經(jīng)典的游戲。在游戲中,玩家通過(guò)不斷挖礦,獲取金子,最終能夠闖入下一關(guān)。游戲的玩法主要是通過(guò)不斷采集地下的黃金和鉆石,來(lái)得到更高的積分。
在此之前呢,和大家說(shuō)明一下,因?yàn)檫@是一個(gè)比較大的項(xiàng)目了,所以展示所有代碼會(huì)有些困難,從中還要數(shù)據(jù)庫(kù)的參與,所以我裁剪了主要部分的代碼,主要目的的讓大家明白實(shí)現(xiàn)這個(gè)項(xiàng)目的難點(diǎn)以及邏輯思路,希望大家可以理解
?
好了,話不多說(shuō),開(kāi)始了
enum ATTR{ //圖片對(duì)應(yīng)的數(shù)組下標(biāo) i_gold=1, i_money=3, i_role=5, i_stone=9, i_bk= i_stone+1, //窗口尺寸 WIDTH = 1080, HEIGHT= 640, //物品數(shù)量 MINE_NUM=10,}; enum TYPE{ //物品類型 GOLD, //金塊 MONEY, //錢(qián)袋 STONE, //石頭 //擺動(dòng)方向 LEFT, RIGHT, //擺動(dòng)狀態(tài) M_LONG, M_NORMAL, M_SHORT,};
struct Role{ int x; //貼圖的位置 int y; int width;//圖片寬度和高度 int height; int coin;//金幣};struct Mine //物品{ int x; int y; int size;//用來(lái)計(jì)算碰撞 int flag;//物品是否存在 int type;//物品類型,錢(qián)袋,石頭,金塊 int gold;//價(jià)值};//鉤子struct Hook{ double x;//繩子開(kāi)始坐標(biāo),固定不變的 double y; double endx;//末端變化的坐標(biāo) double endy; int len;//繩子長(zhǎng)度 int dir;//擺動(dòng)方向 double angle;//擺動(dòng)角度 double speed;//速度 double vx;//速度分量 double vy; int swing;//是否在擺動(dòng) int state;//伸長(zhǎng)狀態(tài),伸長(zhǎng),正常,縮短 int index;//抓到的物品下標(biāo)};
void GameInit(){ //初始化隨機(jī)數(shù)種子 srand(GetTickCount()); //初始化角色數(shù)據(jù) role.coin = 0; role.width = 140; role.height = 120; role.x = WIDTH / 2 - role.width / 2;//讓角色圖片居中顯示 role.y = 0; //加載圖片 for (int i = 0; i < 10; i++) { char fileName[20]; sprintf(fileName, "./images/%d.jpg", i); if (i <= 1) { loadimage(&img[i], fileName,73,62); } else { loadimage(&img[i], fileName); } } loadimage(&img[i_bk], "./images/bk.jpg",WIDTH,HEIGHT-role.height); //初始化物品 for (int i = 0; i < MINE_NUM; i++) { mine[i].flag = 1; mine[i].size = 60; mine[i].type = rand() % 3; mine[i].x=rand()%(WIDTH-mine[i].size); mine[i].y=rand()%(HEIGHT-role.height-100)+ role.height+ 50; mine[i].gold = rand()%600+rand()%200; } //初始化鉤子 hook.x = role.x+45; hook.y = role.y+100; hook.len = 50; hook.endx = hook.x; hook.endy=hook.y+hook.len; hook.angle = 0.0; hook.dir = RIGHT; hook.state = M_NORMAL; hook.vx = 0; hook.vy = 0; hook.speed = 5.0; hook.index = -1;}
void Gamedraw(){ BeginBatchDraw(); //設(shè)置背景顏色 setbkcolor(GREEN); cleardevice(); putimage(0, role.height, &img[i_bk]); //透明貼圖 兩張圖片,一張掩碼圖,一張?jiān)瓐D putimage(role.x, role.y, &img[i_role-1],SRCAND);//掩碼圖 putimage(role.x, role.y, &img[i_role],SRCPAINT);//原圖 //繪制鉤子 setlinestyle(PS_SOLID, 5); setlinecolor(BROWN); line(hook.x, hook.y, hook.endx, hook.endy); //繪制物品 for (int i = 0; i < MINE_NUM; i++) { if (mine[i].flag) { switch (mine[i].type) { case GOLD: putimage(mine[i].x, mine[i].y, &img[i_gold-1],SRCAND); putimage(mine[i].x, mine[i].y, &img[i_gold],SRCPAINT); break; case MONEY: putimage(mine[i].x, mine[i].y, &img[i_money-1], SRCAND); putimage(mine[i].x, mine[i].y, &img[i_money], SRCPAINT); break; case STONE: putimage(mine[i].x, mine[i].y, &img[i_stone-1], SRCAND); putimage(mine[i].x, mine[i].y, &img[i_stone], SRCPAINT); break; } } } //繪制分?jǐn)?shù) char s[30]; sprintf(s, "金幣:%d", role.coin); settextstyle(50, 0, "黑體"); outtextxy(50, 50, s); EndBatchDraw();}
//鉤子擺動(dòng)void hookRock(){ if (hook.state == M_NORMAL) { if (hook.dir == RIGHT) { hook.angle++; } else { hook.angle--; } if (hook.angle > 80) { hook.dir = LEFT; } else if (hook.angle < -80) { hook.dir = RIGHT; } hook.endx = hook.x + sin(π / 180 * hook.angle) * hook.len; hook.endy = hook.y + cos(π / 180 * hook.angle) * hook.len; }}int distance(struct Hook hook){ double dis=sqrt((hook.x-hook.endx)* (hook.x - hook.endx) + (hook.y-hook.endy) * (hook.y - hook.endy)); return dis <= hook.len;}void keyControl(){ //按空格伸長(zhǎng) if (GetAsyncKeyState(VK_SPACE) && hook.state == M_NORMAL) { hook.state = M_LONG; hook.vx = sin(π / 180 * hook.angle) * hook.speed; hook.vy = cos(π / 180 * hook.angle) * hook.speed; } if (hook.endx <= 0 || hook.endx >= WIDTH || hook.endy >= HEIGHT) { hook.state = M_SHORT; } 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; //如果縮短到原來(lái)的長(zhǎng)度,就停止縮短,判斷起點(diǎn)和末端的距離是否等于,長(zhǎng)度 if (distance(hook)) { hook.state = M_NORMAL; } }}
?void grap(){ //找到抓取的是哪個(gè)物品 for (int i = 0; i < MINE_NUM; i++) { if (mine[i].flag && hook.endx > mine[i].x && hook.endxmine[i].y && hook.endy < mine[i].y + mine[i].size) { hook.index = i;//保存抓到的物品的下標(biāo) break; } } if (hook.index != -1) { hook.state = M_SHORT; mine[hook.index].x = hook.endx-mine[hook.index].size/2; mine[hook.index].y = hook.endy- mine[hook.index].size / 2; if (distance(hook)) { hook.state = M_NORMAL; mine[hook.index].flag = 0; role.coin += mine[hook.index].gold; hook.state = M_NORMAL; hook.index = -1; } }}?
int main(){ initgraph(WIDTH,HEIGHT,1); GameInit(); while (1) { printf("%lf,%lf vxy(%lf,%lf)/n", hook.endx, hook.endy,hook.vx,hook.vy); hookRock(); Gamedraw(); keyControl(); grap(); } closegraph(); return 0;}
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/123068.html
前言 未來(lái)的公司形態(tài)會(huì)不斷地演化,去中心化,分布式,強(qiáng)化合作,適應(yīng)變化,直到徹底地被網(wǎng)絡(luò)化。終極公司的形式將會(huì)變得與生物體相同,無(wú)縫地集成到生態(tài)圈中,成為其中的一個(gè)環(huán)節(jié)?!?凱文·凱利《失控》 小劇場(chǎng) 小二: 糖糖,我愛(ài)你哦~ 糖糖: 你騙人!男人的話能信母豬能上樹(shù)。 小二: 我可以向全世界證明,我說(shuō)的是真的~ 糖糖: 那你怎么證明啊~ 小二: 我可以用 區(qū)塊鏈 寫(xiě)下 糖糖我愛(ài)你哦~...
摘要:在上一節(jié)秘猿科技小課堂中,我們已經(jīng)提到了加密經(jīng)濟(jì)網(wǎng)絡(luò)中底層公鏈經(jīng)濟(jì)模型中的創(chuàng)新點(diǎn)和二級(jí)發(fā)行政策。長(zhǎng)期持幣者這部分持幣者會(huì)把當(dāng)作類似比特幣一樣的資產(chǎn)來(lái)看待。我們都知道擁有一個(gè)比特幣,代表著擁有兩千一百萬(wàn)分之一的比特幣稀缺性。 在上一節(jié)秘猿科技小課堂中,我們已經(jīng)提到了Nervos 加密經(jīng)濟(jì)網(wǎng)絡(luò)中底層公鏈 CKB 經(jīng)濟(jì)模型中的創(chuàng)新點(diǎn):Nervos DAO 和 二級(jí)發(fā)行政策。在本文中,我們深入...
摘要:比特幣和以太坊像兩座最早出現(xiàn)的虛擬城市。下面我們先來(lái)分析比特幣和以太坊這兩個(gè)最大加密經(jīng)濟(jì)體的經(jīng)濟(jì)模型,我們經(jīng)過(guò)研究發(fā)現(xiàn)它們?cè)诳沙掷m(xù)性上都存在各自的問(wèn)題。狀態(tài)爆炸比特幣與智能合約平臺(tái),都 公鏈的競(jìng)爭(zhēng)是慘烈的,這個(gè)戰(zhàn)場(chǎng)里的玩家要想生存下來(lái),既要有絕活,還得沒(méi)短板。在構(gòu)建加密經(jīng)濟(jì)網(wǎng)絡(luò)上,在技術(shù)實(shí)現(xiàn)和共識(shí)協(xié)議部分,我們?yōu)榇蠹曳窒砹薈KB 的絕活,即: 與時(shí)俱進(jìn)的 Cell 模型 用 RIS...
摘要:挖礦是什么挖礦是將一段時(shí)間內(nèi)比特幣系統(tǒng)中發(fā)生的交易進(jìn)行確認(rèn),并記錄在區(qū)塊鏈上形成新區(qū)塊的過(guò)程。而成功搶到記賬權(quán)的礦工,會(huì)獲得系統(tǒng)新生的比特幣獎(jiǎng)勵(lì)。礦機(jī)只執(zhí)行單一的計(jì)算程序,實(shí)際是礦工之間比拼算力,擁有較多算力的礦工挖到比特幣的概率更大。 第四期 有關(guān)挖礦和獲取比特幣(1) 卡酷少Wechat:13260325501 了解了這么多,大家是否想獲取一些屬于自己的比特幣呢?之前我們?cè)诘谝?..
摘要:如上圖,驗(yàn)證過(guò)程可以表述為驗(yàn)證者會(huì)按照一定的規(guī)則向礦工提起挑戰(zhàn),挑戰(zhàn)是隨機(jī)生成的,礦工不能提前獲知。三時(shí)空證明如圖所示,可以理解為礦工一定時(shí)間內(nèi)持續(xù)地生成復(fù)制證明和接受挑戰(zhàn)和驗(yàn)證的過(guò)程,并通過(guò)這個(gè)過(guò)程,更新全網(wǎng)存儲(chǔ)算力。 歡迎大家來(lái)到第七章,經(jīng)過(guò)前章《【Filecoin源碼倉(cāng)庫(kù)全解析】第六章:如何單機(jī)部署多節(jié)點(diǎn)集群及礦池設(shè)計(jì)思路》的介紹,我們分享了如何在單機(jī)部署多節(jié)點(diǎn)集群的知識(shí)以及礦池...
閱讀 1891·2021-11-11 16:55
閱讀 2095·2021-10-08 10:13
閱讀 752·2019-08-30 11:01
閱讀 2162·2019-08-29 13:19
閱讀 3288·2019-08-28 18:18
閱讀 2626·2019-08-26 13:26
閱讀 585·2019-08-26 11:40
閱讀 1877·2019-08-23 17:17