《黄金矿工中文版》是一款休闲益智小游戏,游戏中你需要看准时机出钩子勾取金子或者砖石来获得金钱的累加,达到一定的金钱数才能够闯关成功,游戏十分经典,强烈推荐大家学会编写这款游戏,休闲时没网也能自己玩哦。
黄金矿工道具说明:
金块:按大小区分,越大越值钱
石头:笨重且不值钱的障碍物
钻石:值钱的小石头
小猪:移动迅速的地下生物,能被钩子抓住
炸药桶:被触碰到就会爆炸的可怕道具
骨头:不值钱的地下道具
布袋:里面装着随机道具的袋子
炸药:按↑ 可以使用,炸掉钩子上的物品,快速收回钩子
生力药剂:加快你收回钩子的速度,一局内有效
石头收藏书:提高你收集到的石头价值,一局内有效
钻石收藏书:你搜集到的钻石将会更值钱,一局内有效
幸运草:可以从布袋中获得更好的道具,一局内有效
今天我就用C语言带大家一步步去完成好玩有趣学会没网也能打开的黄金矿工小游戏。
PS:要安装easyx图形库哦 #include<easyx.h> 开发工具为VS2013
在此之前呢,和大家说明一下,因为这是一个比较大的项目了,所以展示所有代码会有些困难,我裁剪了主要的大部分代码,主要目的是让大家明白实现这个项目的逻辑思路,希望大家可以理解,完整代码/编译器/图形库在文章最下方获取哦!
正片开始:
第一步: 打开vs2013,创建一个项目,并将准备好的素材资源放到CPP同级目录下(素材可以在文章最下方领取),如图:
第二步:创建窗口,加上背景:
int main()
{
//创建一个不一样得窗口,图形窗口
initgraph(1080, 640,EW_SHOWCONSOLE);
//设置整个窗口的背景颜色
setbkcolor(RGB(45, 121, 157));
//清楚屏幕
cleardevice();
initData();
BeginBatchDraw();
while (true)
{
cleardevice();
gameDraw();
hookRock(0.9);
hookLongAndshort(5);
FlushBatchDraw();
}
EndBatchDraw();
getchar();
return 0;
}
第三步:用枚举函数设置钩子,设置老头位置:
enum Index
{
i_gold = 1,
i_money = 3,
i_roleDwon = 5,
i_roleUp =7,
i_stone = 9,
i_bk = 10
};
enum Dir
{
LEFT,
RIGHT
};
enum State
{
S_Normal,
S_Long,
S_Short,
};
//角色位置(老头)
struct Role
{
int x;
int y;
int w;
int h;
}role;
// 钩子
struct Hook
{
int x;
int y;
int endx;
int endy;
int len;
double angle; //钩子的角度
Dir dir;
int vx;
int vy;
State state;
}hook;
第四步:初始化数据,绘制老头和钩子:
//初始化数据
void initData()
{
for (int i = 0; i < 10; i++)
{
WCHAR fileName[20] = { 0 };
wsprintf(fileName, _T("./images/%d.jpg"), i);
loadimage(img + i, fileName);
}
loadimage(img + 10, _T("./images/bk.jpg"), getwidth(), getheight() - 120);//加载图片到图片变量中去
//绘制老头子
role.w = (img + i_roleUp)->getwidth(); //140;
role.h = img[i_roleUp].getheight(); //120;
role.x = (getwidth() - role.w) / 2;
role.y = 0;
//绘制钩子hook
hook.x = role.x + 47;
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.vx = 0;
hook.vy = 0;
hook.state = S_Normal;
}
第五步:让钩子动起来:
//让钩子动起来
void hookRock(double inc)
{
if (hook.state != S_NORMAL)
return;
if (hook.dir == RIGHT)
{
hook.angle += inc;
}
else
{
hook.angle -= inc;
}
if (hook.angle >= 81)
{
hook.dir = LEFT;
}
else if(hook.angle <= -81)
{
hook.dir = RIGHT;
}
//求当前endx,endy的位置
hook.endx = hook.x + sin(PI/180* hook.angle)* hook.len;
hook.endy = hook.y + cos(PI/180 * hook.angle)* hook.len;
}
void hookLongAndshort(int speed)
{
if (GetAsyncKeyState(VK_SPACE) && hook.state == S_Normal)
{
hook.state = S_Long;
hook.vx = sin(PI / 180 * hook.angle) * speed;
hook.vy = cos(PI / 180 * hook.angle) * speed;
}
if (hook.state == S_Long)
{
hook.endx += hook.vx;
hook.endy += hook.vy;
}
else if (hook.state == S_Short)
{
hook.endx -= hook.vx;
hook.endy -= hook.vy;
}
if (hook.endx <= 0 || hook.endx >= getwidth() || hook.endy >= getheight())
{
hook.state = S_Short;
}
if (distance(hook)<= hook.len)
{
hook.state = S_Normal;
}
}
好啦,重要的基础代码就这些~需要完整源码对照的同学可以在文章末领取,黄金矿工教程就到此结束啦!
写在最后
今天就到这里了哈~
后续我还会发布更多的项目源或者学习资料,希望大家可以持续关注,有什么问题可以给我留言。
不管你是转行也好,初学也罢,进阶也可,如果你想学编程~
【值得关注】我的【C/C++源码资料学习群】点击进入