首页
/
每日頭條
/
遊戲
/
c語言初學必背代碼文庫
c語言初學必背代碼文庫
更新时间:2024-10-20 23:24:42

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

  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
推荐阅读
吃雞遊戲如何找到被你淘汰的敵人
吃雞遊戲如何找到被你淘汰的敵人
歡迎諸位小夥伴們來到天哥開講的《和平精英》“精英小課堂”~在很多老玩家的印象裡,這款遊戲一直都以“競技”為主,即便是如今出現了太多的皮膚,但核心玩法并沒有太大的變化~但是接下來的新模式,卻讓玩家有一種“穿越感”,甚至産生“進錯了遊戲”的感覺...
2024-10-20
蕪湖方特攻略是什麼
蕪湖方特攻略是什麼
蕪湖方特攻略是什麼?準備去方特遊玩可以先下載“方特”APP,裡面不僅有詳細的項目開放時間,還有地圖指引因為很多遊戲項目都要排隊還有固定的開放時間,用APP提前準備好方便大家卡點,實時地圖指引也讓大家少繞很多彎路,下面我們就來說一說關于蕪湖方...
2024-10-20
王者榮耀五周年限定稱号怎樣獲得
王者榮耀五周年限定稱号怎樣獲得
王者榮耀五周年限定稱号怎樣獲得?王者榮耀即将開啟六周年慶典,很多小夥伴都很想知道六周年稱号應該怎麼獲得,今天小編給大家帶來了《王者榮耀》六周年稱号獲取方法介紹,感興趣的小夥伴一起來看看吧,希望可以幫助到大家,我來為大家講解一下關于王者榮耀五...
2024-10-20
王者榮耀新英雄貂蟬和誰配合好
王者榮耀新英雄貂蟬和誰配合好
王者榮耀新英雄貂蟬和誰配合好?哈喽,親愛的小夥伴們,大家好,最近小編在玩王者榮耀的時候,可以說是被對方秀到頭皮發麻,而自己手下的英雄也被擊殺了一次又一次,不過小編自己也有點好奇,這些英雄們被擊殺後,到底是什麼樣子呢?,今天小編就來說說關于王...
2024-10-20
吃雞遊戲現在的狀況
吃雞遊戲現在的狀況
歡迎諸位小夥伴們來到天哥開講的《和平精英》“精英小課堂”~不知不覺間,這款遊戲陪伴我們已經長達3年多之久,雖然與動辄十餘年的端遊無法相提并論,但是在快節奏的手遊行業裡,已經算得上“老遊戲”了。前不久,評論區裡出現了這麼1個内容:這遊戲,還有...
2024-10-20
Copyright 2023-2024 - www.tftnews.com All Rights Reserved