摘要:黃金礦工是一款非常經典的游戲。在游戲中,玩家通過不斷挖礦,獲取金子,最終能夠闖入下一關。游戲的玩法主要是通過不斷采集地下的黃金和鉆石,來得到更高的積分。
在此之前呢,和大家說明一下,因為這是一個比較大的項目了,所以展示所有代碼會有些困難,從中還要數據庫的參與,所以我裁剪了主要部分的代碼,主要目的的讓大家明白實現這個項目的難點以及邏輯思路,希望大家可以理解
?
好了,話不多說,開始了
enum ATTR{ //圖片對應的數組下標 i_gold=1, i_money=3, i_role=5, i_stone=9, i_bk= i_stone+1, //窗口尺寸 WIDTH = 1080, HEIGHT= 640, //物品數量 MINE_NUM=10,}; enum TYPE{ //物品類型 GOLD, //金塊 MONEY, //錢袋 STONE, //石頭 //擺動方向 LEFT, RIGHT, //擺動狀態 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;//伸長狀態,伸長,正常,縮短 int index;//抓到的物品下標};
void GameInit(){ //初始化隨機數種子 srand(GetTickCount()); //初始化角色數據 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(); //設置背景顏色 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; } } } //繪制分數 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;}
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/123068.html
前言 未來的公司形態會不斷地演化,去中心化,分布式,強化合作,適應變化,直到徹底地被網絡化。終極公司的形式將會變得與生物體相同,無縫地集成到生態圈中,成為其中的一個環節?!?凱文·凱利《失控》 小劇場 小二: 糖糖,我愛你哦~ 糖糖: 你騙人!男人的話能信母豬能上樹。 小二: 我可以向全世界證明,我說的是真的~ 糖糖: 那你怎么證明啊~ 小二: 我可以用 區塊鏈 寫下 糖糖我愛你哦~...
摘要:在上一節秘猿科技小課堂中,我們已經提到了加密經濟網絡中底層公鏈經濟模型中的創新點和二級發行政策。長期持幣者這部分持幣者會把當作類似比特幣一樣的資產來看待。我們都知道擁有一個比特幣,代表著擁有兩千一百萬分之一的比特幣稀缺性。 在上一節秘猿科技小課堂中,我們已經提到了Nervos 加密經濟網絡中底層公鏈 CKB 經濟模型中的創新點:Nervos DAO 和 二級發行政策。在本文中,我們深入...
摘要:比特幣和以太坊像兩座最早出現的虛擬城市。下面我們先來分析比特幣和以太坊這兩個最大加密經濟體的經濟模型,我們經過研究發現它們在可持續性上都存在各自的問題。狀態爆炸比特幣與智能合約平臺,都 公鏈的競爭是慘烈的,這個戰場里的玩家要想生存下來,既要有絕活,還得沒短板。在構建加密經濟網絡上,在技術實現和共識協議部分,我們為大家分享了CKB 的絕活,即: 與時俱進的 Cell 模型 用 RIS...
摘要:挖礦是什么挖礦是將一段時間內比特幣系統中發生的交易進行確認,并記錄在區塊鏈上形成新區塊的過程。而成功搶到記賬權的礦工,會獲得系統新生的比特幣獎勵。礦機只執行單一的計算程序,實際是礦工之間比拼算力,擁有較多算力的礦工挖到比特幣的概率更大。 第四期 有關挖礦和獲取比特幣(1) 卡酷少Wechat:13260325501 了解了這么多,大家是否想獲取一些屬于自己的比特幣呢?之前我們在第一...
摘要:如上圖,驗證過程可以表述為驗證者會按照一定的規則向礦工提起挑戰,挑戰是隨機生成的,礦工不能提前獲知。三時空證明如圖所示,可以理解為礦工一定時間內持續地生成復制證明和接受挑戰和驗證的過程,并通過這個過程,更新全網存儲算力。 歡迎大家來到第七章,經過前章《【Filecoin源碼倉庫全解析】第六章:如何單機部署多節點集群及礦池設計思路》的介紹,我們分享了如何在單機部署多節點集群的知識以及礦池...
閱讀 1882·2021-11-11 16:55
閱讀 2064·2021-10-08 10:13
閱讀 738·2019-08-30 11:01
閱讀 2155·2019-08-29 13:19
閱讀 3277·2019-08-28 18:18
閱讀 2620·2019-08-26 13:26
閱讀 578·2019-08-26 11:40
閱讀 1864·2019-08-23 17:17