这篇文章主要为大家详细介绍了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文章
7616浏览量
138059 -
代码
+关注
关注
30文章
4841浏览量
69218
原文标题:C语言项目实战:《黄金矿工》零基础项目!180 行源代码示例
文章出处:【微信号:cyuyanxuexi,微信公众号:C语言编程学习基地】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
EE-188:使用C语言在ADSP-219x DSP上实现中断驱动系统
电子发烧友网站提供《EE-188:使用C语言在ADSP-219x DSP上实现中断驱动系统.pdf》资料免费下载
发表于 01-15 16:06
•0次下载
![EE-188:使用<b class='flag-5'>C</b><b class='flag-5'>语言</b>在ADSP-219x DSP上<b class='flag-5'>实现</b>中断驱动系统](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
AKI跨语言调用库神助攻C/C++代码迁移至HarmonyOS NEXT
量;某知名社交电商平台使用后减少了50%以上跨语言调用接口代码量;某图像处理软件所有C++代码复用通过AKI来实现。使用AKI后这些项目不仅减少了项
发表于 01-02 17:08
基于FPGA实现图像直方图设计
直方图统计的原理 直方图统计从数学上来说,是对图像中的像素点进行统计。图像直方图统计常用于统计灰度图像,表示图像中各个灰度级出现的次数或者概率。统计直方图的实现采用C/C++或者其他高级语言实
![基于FPGA<b class='flag-5'>实现</b>图像直方图设计](https://file1.elecfans.com/web3/M00/03/90/wKgZO2dqHAGARj8XAAAkNh_VJCs585.png)
紫金矿业与亿纬锂能达成战略合作
近日,紫金矿业集团股份有限公司(以下简称“紫金矿业”)董事长陈景河与惠州亿纬锂能股份有限公司(以下简称“亿纬锂能”)董事长刘金成博士正式会面,并就双方战略合作进行深入交流。
C语言中的socket编程基础
Socket编程简介 Socket是一种通信机制,允许程序之间进行通信。在C语言中,socket编程是网络编程的基础。通过使用socket,程序可以发送和接收数据,实现不同计算机之间的通信
C语言与Java语言的对比
C语言和Java语言都是当前编程领域中的重要成员,它们各自具有独特的优势和特点,适用于不同的应用场景。以下将从语法特性、内存管理、跨平台性、性能、应用领域等多个方面对C
PLC编程语言和C语言的区别
在工业自动化和计算机编程领域中,PLC(可编程逻辑控制器)编程语言和C语言各自扮演着重要的角色。尽管两者都是编程语言,但它们在多个方面存在显著的区别。本文将从多个维度深入探讨PLC编程
嵌入式编程,如何用 C 语言实现状态机设计?
状态机模式是一种行为模式,通过多态实现不同状态的调转行为的确是一种很好的方法,只可惜在嵌入式环境下,有时只能写纯C代码,并且还需要考虑代码的重入和多任务请求跳转等情形,因此实现起来着实需要一番考虑
发表于 04-23 11:00
fpga语言是什么?fpga语言与c语言的区别
功能,从而实现对数字电路的高效定制。FPGA语言主要包括VHDL(VHSIC Hardware Description Language)和Verilog等,这些语言具有强大的描述能力,能够精确地定义硬件的每一个细节,从而
评论