首页
/
每日頭條
/
遊戲
/
c語言初學必背代碼文庫
c語言初學必背代碼文庫
更新时间:2025-07-07 04:54:54

  玩家通過鍵盤的按鍵控制礦工抓取金塊,将鈎子碰觸到的金塊抓取過來。 要求如下: 

  1. 遊戲的金塊的總數是20(可以自己去設置),大小位置是随機的。

  c語言初學必背代碼文庫(CC編程筆記)(1)

  2. 在沒有抓取狀态下,鈎子左右擺動,此時礦工的是靜止的。當鈎子擺動到一定角度,玩家可以單擊鍵盤上的上下左右鍵中的下方向鍵或者是空格鍵控制礦工伸出長鈎,抓取金子,此時礦工是向下搖動轉軸。獲取到金子往回拉後,礦工是不斷轉動轉軸,直到金子拉動到鈎子初始處,礦工恢複靜止,鈎子繼續左右搖擺,直到玩家再次單擊向下方向鍵。

  3. 伸出的鈎子如果碰觸到金子,則鈎子和金子一起往回拉,回收的速度根據抓取到的金子的大小變化而變化,金子越大,回拉的速度越慢,反之亦然。如果鈎子沒有碰觸到金子,而是碰觸到左右和下的邊界,則鈎子保持原來的速度往回收。 

  4. 抓取到的金子拉回到轉軸處消失,此時金子數目減少一個。如果玩家将所有金子抓取完,遊戲返回或者結束。

  所用編譯器:VS2013,代碼純手寫,希望各位也能自己去手敲,而不是複制粘貼!!!圖片大家可以自己去找素材圖,也可以關注筆者微信公衆号回複關鍵字:黃金礦工領取~

  話不多說:直接上源碼!

  #includestdio.h #includemath.h #includegraphics.h//easyx 包含頭文件,可以使用提供的接口,函數 #define WIN_WIDTH 1080 #define WIN_HEIGHT 640 #define MAX_IMAGE 11 //最大圖片數量 #define MAX_mine 10 //最大物品數量 #define MAX_ANGLE 80 //最大角度 #define PI 3.1415926535898 //int a,char b enum MINE //枚舉圖片數組下标 { i_gold=1, i_money=3, i_soledown=5, i_soleup=7, i_stone=9, i_bk = MAX_IMAGE-1, }; enum MINE_TYPE //物品類型枚舉 { GOLD, MONEY, STONE, //方向 LEFT, RIGHT, //狀态,正常,伸長,縮短 M_NOMAL, M_LONG, M_SHORT, }; struct Sole //角色信息 { int x;//貼圖位置 int y; int width;//圖片寬高 int height; int coin;//金币 }sole; struct Mine //物品 { int x; int y; int szie; //邊界判斷 bool flag;//是否存在 int type;//物品類型,石頭,金塊,錢袋 int gold;//物品價值 }mine[MAX_MINE]; struct hook //鈎子 { int x; int y; int endx; int endy; int len;//長度 int angle;//角度 int dir;//擺動方向 int vx;//速度分量 int vy; int state; int index;//記錄抓到的物品下标 }hook; IMAGE img[MAX_IMAGE]; int distance(Hook hook); //初始化數據 void GameInit() { //創建窗口 init 初始化 graphics圖形界面 initgraph(WIN_WIDTH, WIN_HEIGHT,SHOWCONSOLE); //設置随機數種子 srand(GetTickCount()); //加載圖片 for (int i = 0; i MAX_IMAGE-1; i ) { char temp[25]= sprintf(temp, ./images/%d.jpg if (i = 1) { loadimage(&img[i], temp,73,62);//注意:字符集問題 } else { loadimage(&img[i], temp);//注意:字符集問題 } } loadimage(&img[i_bk], ./images/bk.jpg, WIN_WIDTH, WIN_HEIGHT-120); //初始化角色信息 sole.width = 140; sole.height = 120; sole.x = WIN_WIDTH/2-sole.width/2;//x軸居中 sole.y = 0; sole.coin = 0; //初始化物品信息 for (int i = 0; i MAX_MINE; i ) { mine[i].flag = true; mine[i].gold = rand() % 200 1; mine[i].szie = 60; mine[i].type = rand()%3; mine[i].x = rand() % (WIN_WIDTH - 60); mine[i].y = rand() % (WIN_HEIGHT - 150) 150; } //初始化鈎子 hook.x = sole.x 40; hook.y = sole.y 100; hook.len = 50; hook.endx = hook.x; hook.endy = hook.y hook.len; hook.angle = 0; hook.dir = RIGHT; hook.vx = 0; hook.vy = 0; hook.state = M_NOMAL; hook.index = -1; } //遊戲繪制 void GameDraw() { //繪制背景 putimage(0, 120, //繪制角色背景顔色 setfillcolor(RGB(255, 208, 52)); solidrectangle(0, 0, WIN_WIDTH, 120); //繪制角色 putimage(sole.x, sole.y, &img[i_soledown-1],SRCAND);//知道為啥減1不? putimage(sole.x, sole.y, &img[i_soledown],SRCPAINT); //繪制物品 for (int i = 0; i MAX_MINE; i ) { if (mine[i].flag == true) { 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; } } } //繪制鈎子 setlinecolor(BROWN); setlinestyle(PS_SOLID, 5); line(hook.x, hook.y, hook.endx, hook.endy); //繪制分數 char score[30] = sprintf(score, 分數:%d, sole.coin); settextcolor(WHITE); setbkmode(TRANSPARENT); settextstyle(50, 0, 楷體 outtextxy(20, 20, score); } //鈎子擺動 void HookRock() { if (hook.state == M_NOMAL) { if (hook.dir == RIGHT) { hook.angle ; } else { hook.angle--; } if (hook.angle MAX_ANGLE) { hook.dir = LEFT; } else if (hook.angle-MAX_ANGLE) { hook.dir = RIGHT; } //角度轉弧度 360 2pai 180 PI hook.endx = hook.x sin(PI / 180 * hook.angle)*hook.len; hook.endy = hook.y cos(PI / 180 * hook.angle)*hook.len; } } //遊戲控制 void GameControl(int speed) { if (GetAsyncKeyState(VK_SPACE) && hook.state==M_NOMAL) { //按鍵,求出速度分量 hook.vx = sin(PI / 180 * hook.angle)*speed; hook.vy = cos(PI / 180 * hook.angle)*speed; hook.state = M_LONG; } //碰到邊界返回 if (hook.endx0 || hook.endxWIN_WIDTH || hook.endy WIN_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_NOMAL; } } //接下來就是讓hook.endx 加上hook.vx printf(%d %d\n, hook.vx, hook.vy); } void JudgeGrap() { //判斷抓到那個物品 for (int i = 0; i MAX_MINE; i ) { if (mine[i].flag == true && hook.endxmine[i].x && hook.endxmine[i].x mine[i].szie && hook.endymine[i].y && hook.endymine[i].y mine[i].szie) { hook.index = i; break; } } //如果抓到了 if (hook.index != -1) { hook.state = M_SHORT; mine[hook.index].x = hook.endx; mine[hook.index].y = hook.endy; //縮短完成 if (distance(hook)) { mine[hook.index].flag = false; hook.index = -1; hook.state = M_NOMAL; } } } //void main int main() { GameInit(); DWORD t1 , t2; t1 = t2 = GetTickCount(); BeginBatchDraw(); while (1) { if (t2 - t1 15) { HookRock(); t1 = t2; } t2 = GetTickCount(); GameDraw(); FlushBatchDraw(); GameControl(10); JudgeGrap(); //防止閃退 } return 0; } int distance(Hook hook) { int dis = sqrt((float)(hook.x - hook.endx)*(hook.x - hook.endx) (hook.y - hook.endy)*(hook.y - hook.endy)); return dis = hook.len; }

  還在等什麼呢?代碼都給你了,趕緊照着去做呗!

  自學C/C 編程難度很大,不妨和一些志同道合的小夥伴一起學習成長!

  C語言C 編程學習交流圈子,關注 私信【C/C 編程】C語言編程學習基地

  有一些源碼和資料分享,歡迎轉行也學習編程的夥伴,和大家一起交流成長會比自己琢磨更快哦!

  c語言初學必背代碼文庫(CC編程筆記)(2)

  c語言初學必背代碼文庫(CC編程筆記)(3)

  ,

Comments
Welcome to tft每日頭條 comments! Please keep conversations courteous and on-topic. To fosterproductive and respectful conversations, you may see comments from our Community Managers.
Sign up to post
Sort by
Show More Comments
推荐阅读
了解遊戲規則
了解遊戲規則
現在遊戲規則充斥着每個地方,平台有規則,門衛保安也有他們的規則,大型公司也有自己的規則,城市管理、交通運營都有很多規則,不去了解弄清楚這些規則,你怎麼可能很好的活下去嗎?規矩現在這個社會不是你想幹什麼?你想怎麼幹?就可以幹的了,很多事情講究...
2025-07-07
lol阿卡麗的神秘商店可以買英雄
lol阿卡麗的神秘商店可以買英雄
火爆的阿卡麗的神秘商店近期在lol英雄聯盟官網上線了,小夥伴們都紛紛的前去抽取折扣,有2折、3折、7折不等了;幸運的小夥伴有神秘鑰匙,可以享受雙重折扣,即折上折;聽說有人開出了1折,哎逗(小編)是隻聽過沒見過,就像笑笑(lol男主播,前LP...
2025-07-07
王者榮耀大後期誰能打過伽羅
王者榮耀大後期誰能打過伽羅
今年的春節毫無疑問是特殊的,大多數人都出不了門。在家無聊就會找事情打發時間,玩王者榮耀毫無疑問是最佳途徑。很多玩家抱怨:小學生實在是太多了,很難上分。其實隻要選這四個射手,輕松就可以上王者,一起來看看吧。第一:伽羅當前版本勝率以及出場率最高...
2025-07-07
嶽飛傳得分攻略
嶽飛傳得分攻略
在帶領親族回遷湯陰的途中,嶽飛與衆兄弟雖然遭遇了洪先領頭的衆山賊圍攻,還是憑借着高超的武藝化險為夷。那一場戰鬥讓嶽飛徹底認識到了裝備對于打怪升級的重要性,縣、府兩級武舉考試的魁首頭銜就是個虛的稱謂,想提升自己的屬性還是得武裝到牙齒啊。“京城...
2025-07-07
天美之前是什麼遊戲
天美之前是什麼遊戲
來征服世界吧!《重返帝國》給你全自由的策略體驗征服戰場,更征服世界!這句話是不是很霸氣?其實這句話出自由騰訊天美與原帝國時代項目組聯合研發的手遊——《重返帝國》。當一款策略遊戲加入了即時操作後,就不再是可玩性差的推格子遊戲了,行軍過程實時操...
2025-07-07
Copyright 2023-2025 - www.tftnews.com All Rights Reserved