這篇文章主要為大家詳細介紹了C語言實現——《黃金礦工項目》,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下!
游戲介紹:
在規定的時間內得到規定的金錢時即可。玩法非常簡單,按“↓”鍵開使撈金子,如有***,按“↑”鍵放***,買東西點鼠標左鍵。不過本游戲之設計到鉤子勾金子的程度,后面的關卡大家可以自行設計,相信能夠設計金子了,鉆石的話同理還是非常簡單的。
本項目編譯環境:VS2019/VS2013;
插件:圖形庫插件easyX,涉及圖片素材可以自行百度找也可以關注文末領取;
配套講解教程:黃金礦工游戲教程——嗶哩嗶哩
源代碼示例:
enum Index
{
i_gold = 1,
i_money = 3,
i_roleDown = 5,
i_roleUp = 7,
i_stone = 9
};
/*
鉤子擺動狀態,擺動,伸長,縮短,停止
*/
enum ATTR
{
LEFT,
RIGHT,
M_NORMAL,
M_LONG,
M_SHORT
};
struct Role
{
int x;
int y;
int width;
int height;
int coin; //總金錢
};
struct Hook
{
int x;
int y;
int endx;
int endy;
int len;//鉤子長度
double angle;//鉤子當前角度
int dir;//鉤子擺動方向,左,右
int vx;//速度變化量
int vy;
int state;//當前狀態
};
struct Role role;
struct Hook hook;
struct Mine//物品
{
int x;
int y;
int size;
int type;
bool flag;
int gold;
};
struct Mine mine[10];
//把圖片加載進程序
IMAGE img[11];
void loadImg()
{
for (int i = 0; i < 10; i++)
{
//如何把數字,轉成字符串
char fileName[20] = "";
sprintf(fileName, "./images/%d.jpg", i);
loadimage(img + i, fileName);
}
loadimage(img+10,"./images/bk.jpg",WIDTH,HEIGHT);
}
void gameInit()
{
loadImg();
role.width = 140;
role.height = 120;
role.x = WIDTH / 2 - role.width / 2;
role.y = 0;
hook.len = 50;
hook.x = role.x+40;
hook.y = role.y+100;
hook.endx = hook.x;
hook.endy = hook.y + hook.len;
hook.angle = 0;
hook.dir = RIGHT;
hook.state = M_NORMAL;
}
void gameDraw()
{
setfillcolor(GREEN);
solidrectangle(0, 0, WIDTH, role.height);
putimage(0, role.height, img + 10);
putimage(role.x, role.y, img + i_roleDown - 1, SRCAND);
putimage(role.x, role.y, img + i_roleDown, SRCPAINT);
//輸出我的錢
setbkmode(TRANSPARENT);//設置背景透明
settextstyle(50, 0, "黑體");
char coin[20] = "";
sprintf(coin, "金錢:%d", role.coin);
outtextxy(20, 20, coin);
//繪制鉤子
setlinecolor(RED);
setlinestyle(PS_SOLID, 5);
line(hook.x, hook.y, hook.endx, hook.endy);
setfillcolor(YELLOW);
solidcircle(hook.endx, hook.endy, 5);
}
//鉤子擺動
void hookRock()
{
if (hook.state == M_NORMAL)
{
if (hook.dir == RIGHT)
{
hook.angle++;
}
else if (hook.dir == LEFT)
{
hook.angle--;
}
if (hook.angle > MAX_ANGLE)
{
hook.dir = LEFT;
}
else if (hook.angle<-MAX_ANGLE)
{
hook.dir = RIGHT;
}
hook.endx = hook.x + sin(PI / 180 * hook.angle)*hook.len;
hook.endy = hook.y + cos(PI / 180 * hook.angle)*hook.len;
}
}
double distance(Hook h)
{
return sqrt((double)(hook.endx - hook.x)*(hook.endx - hook.x) + (hook.endy - hook.y)*(hook.endy - hook.y));
}
void keyControl(int speed)
{
if (GetAsyncKeyState(VK_SPACE))//virtual key
{
hook.state = M_LONG;
hook.vx = sin(PI / 180 * hook.angle)*speed;
hook.vy = cos(PI / 180 * hook.angle)*speed;
}
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.len)
{
hook.state =M_NORMAL;
}
}
//碰到邊界反回
if (hook.endx<0 || hook.endx>WIDTH || hook.endy<0 || hook.endy > HEIGHT)
{
hook.state = M_SHORT;
}
}
int main()
{
//控制臺窗口(只能用來輸出文字)
//我們需要能夠畫圖的窗口
initgraph(WIDTH, HEIGHT, SHOWCONSOLE);
gameInit();
while (1)
{
//雙緩沖繪圖,防止閃屏
BeginBatchDraw();
gameDraw();
EndBatchDraw();
hookRock();
keyControl(5);
}
return 0;
}
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
C語言
+關注
關注
180文章
7608瀏覽量
137152 -
代碼
+關注
關注
30文章
4803瀏覽量
68754
原文標題:C語言項目實戰:《黃金礦工》零基礎項目!180 行源代碼示例
文章出處:【微信號:cyuyanxuexi,微信公眾號:C語言編程學習基地】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
AKI跨語言調用庫神助攻C/C++代碼遷移至HarmonyOS NEXT
量;某知名社交電商平臺使用后減少了50%以上跨語言調用接口代碼量;某圖像處理軟件所有C++代碼復用通過AKI來實現。使用AKI后這些項目不僅減少了項
發表于 01-02 17:08
基于FPGA實現圖像直方圖設計
直方圖統計的原理 直方圖統計從數學上來說,是對圖像中的像素點進行統計。圖像直方圖統計常用于統計灰度圖像,表示圖像中各個灰度級出現的次數或者概率。統計直方圖的實現采用C/C++或者其他高級語言實
C語言與Java語言的對比
C語言和Java語言都是當前編程領域中的重要成員,它們各自具有獨特的優勢和特點,適用于不同的應用場景。以下將從語法特性、內存管理、跨平臺性、性能、應用領域等多個方面對C
PLC編程語言和C語言的區別
在工業自動化和計算機編程領域中,PLC(可編程邏輯控制器)編程語言和C語言各自扮演著重要的角色。盡管兩者都是編程語言,但它們在多個方面存在顯著的區別。本文將從多個維度深入探討PLC編程
嵌入式編程,如何用 C 語言實現狀態機設計?
狀態機模式是一種行為模式,通過多態實現不同狀態的調轉行為的確是一種很好的方法,只可惜在嵌入式環境下,有時只能寫純C代碼,并且還需要考慮代碼的重入和多任務請求跳轉等情形,因此實現起來著實需要一番考慮
發表于 04-23 11:00
ADUC7061如何使用C語言實現EEPROM功能?
我使用ADUC7061做的信號采集,現在客戶需要實現EEPROM功能來保存3-5個數據,請問如何使用C語言實現?不使用外部EEPROM 專用IC。
發表于 01-12 06:56
評論