摘要:黃金礦工是一款非常經(jīng)典的游戲。在游戲中,玩家通過不斷挖礦,獲取金子,最終能夠闖入下一關(guān)。游戲的玩法主要是通過不斷采集地下的黃金和鉆石,來得到更高的積分。
在此之前呢,和大家說明一下,因為這是一個比較大的項目了,所以展示所有代碼會有些困難,從中還要數(shù)據(jù)庫的參與,所以我裁剪了主要部分的代碼,主要目的的讓大家明白實現(xiàn)這個項目的難點以及邏輯思路,希望大家可以理解
?
好了,話不多說,開始了
enum ATTR{ //圖片對應的數(shù)組下標 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, //錢袋 STONE, //石頭 //擺動方向 LEFT, RIGHT, //擺動狀態(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;//用來計算碰撞 int flag;//物品是否存在 int type;//物品類型,錢袋,石頭,金塊 int gold;//價值};//鉤子struct Hook{ double x;//繩子開始坐標,固定不變的 double y; double endx;//末端變化的坐標 double endy; int len;//繩子長度 int dir;//擺動方向 double angle;//擺動角度 double speed;//速度 double vx;//速度分量 double vy; int swing;//是否在擺動 int state;//伸長狀態(tài),伸長,正常,縮短 int index;//抓到的物品下標};
void GameInit(){ //初始化隨機數(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]); //透明貼圖 兩張圖片,一張掩碼圖,一張原圖 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; } } } //繪制分數(shù) char s[30]; sprintf(s, "金幣:%d", role.coin); settextstyle(50, 0, "黑體"); outtextxy(50, 50, s); EndBatchDraw();}
//鉤子擺動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(){ //按空格伸長 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; //如果縮短到原來的長度,就停止縮短,判斷起點和末端的距離是否等于,長度 if (distance(hook)) { hook.state = M_NORMAL; } }}
?void grap(){ //找到抓取的是哪個物品 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;//保存抓到的物品的下標 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)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/123068.html
前言 未來的公司形態(tài)會不斷地演化,去中心化,分布式,強化合作,適應變化,直到徹底地被網(wǎng)絡化。終極公司的形式將會變得與生物體相同,無縫地集成到生態(tài)圈中,成為其中的一個環(huán)節(jié)?!?凱文·凱利《失控》 小劇場 小二: 糖糖,我愛你哦~ 糖糖: 你騙人!男人的話能信母豬能上樹。 小二: 我可以向全世界證明,我說的是真的~ 糖糖: 那你怎么證明啊~ 小二: 我可以用 區(qū)塊鏈 寫下 糖糖我愛你哦~...
摘要:在上一節(jié)秘猿科技小課堂中,我們已經(jīng)提到了加密經(jīng)濟網(wǎng)絡中底層公鏈經(jīng)濟模型中的創(chuàng)新點和二級發(fā)行政策。長期持幣者這部分持幣者會把當作類似比特幣一樣的資產(chǎn)來看待。我們都知道擁有一個比特幣,代表著擁有兩千一百萬分之一的比特幣稀缺性。 在上一節(jié)秘猿科技小課堂中,我們已經(jīng)提到了Nervos 加密經(jīng)濟網(wǎng)絡中底層公鏈 CKB 經(jīng)濟模型中的創(chuàng)新點:Nervos DAO 和 二級發(fā)行政策。在本文中,我們深入...
摘要:比特幣和以太坊像兩座最早出現(xiàn)的虛擬城市。下面我們先來分析比特幣和以太坊這兩個最大加密經(jīng)濟體的經(jīng)濟模型,我們經(jīng)過研究發(fā)現(xiàn)它們在可持續(xù)性上都存在各自的問題。狀態(tài)爆炸比特幣與智能合約平臺,都 公鏈的競爭是慘烈的,這個戰(zhàn)場里的玩家要想生存下來,既要有絕活,還得沒短板。在構(gòu)建加密經(jīng)濟網(wǎng)絡上,在技術(shù)實現(xiàn)和共識協(xié)議部分,我們?yōu)榇蠹曳窒砹薈KB 的絕活,即: 與時俱進的 Cell 模型 用 RIS...
摘要:挖礦是什么挖礦是將一段時間內(nèi)比特幣系統(tǒng)中發(fā)生的交易進行確認,并記錄在區(qū)塊鏈上形成新區(qū)塊的過程。而成功搶到記賬權(quán)的礦工,會獲得系統(tǒng)新生的比特幣獎勵。礦機只執(zhí)行單一的計算程序,實際是礦工之間比拼算力,擁有較多算力的礦工挖到比特幣的概率更大。 第四期 有關(guān)挖礦和獲取比特幣(1) 卡酷少Wechat:13260325501 了解了這么多,大家是否想獲取一些屬于自己的比特幣呢?之前我們在第一...
摘要:如上圖,驗證過程可以表述為驗證者會按照一定的規(guī)則向礦工提起挑戰(zhàn),挑戰(zhàn)是隨機生成的,礦工不能提前獲知。三時空證明如圖所示,可以理解為礦工一定時間內(nèi)持續(xù)地生成復制證明和接受挑戰(zhàn)和驗證的過程,并通過這個過程,更新全網(wǎng)存儲算力。 歡迎大家來到第七章,經(jīng)過前章《【Filecoin源碼倉庫全解析】第六章:如何單機部署多節(jié)點集群及礦池設(shè)計思路》的介紹,我們分享了如何在單機部署多節(jié)點集群的知識以及礦池...
閱讀 1990·2021-11-11 16:55
閱讀 2209·2021-10-08 10:13
閱讀 804·2019-08-30 11:01
閱讀 2223·2019-08-29 13:19
閱讀 3342·2019-08-28 18:18
閱讀 2675·2019-08-26 13:26
閱讀 634·2019-08-26 11:40
閱讀 1941·2019-08-23 17:17