《黄金矿工》是一款非常经典的游戏。在游戏中,玩家通过不断挖矿,获取金子,最终能够闯入下一关。在这个过程中,会不断有岩石、烟雾、老鼠来捣乱,甚至还会出现扛着炸药包的小老鼠,玩家必须战胜它们,才能进入更深的矿坑。

游戏的玩法主要是通过不断采集地下的黄金和钻石,来得到更高的积分。只有完成任务目标,才可以通过相应的关卡。游戏画面中沙滩上的人物便是玩家的角色,下方深褐色的部分是地下,而黄金和钻石就是玩家需要采集的物品。人物右边的四个方框里的物品是游戏中可以使用的道具。

画面中的虚线就是游戏中的探测器,探测器会不断的左右摆动,当摆动到地下的黄金和钻石的位置时,只需要点击矿坑任意处,便可以发射勘探头采集到这些物品,当然一定要瞄准好再出手呦。

当然想要顺利采集到丰富的资源也不是那么简单的,地下矿坑中,会有各式各样的困难和阻碍来干扰玩家的采集,这时我们就要用到人物右边的各种道具了,当矿坑中采集到石块的时候,玩家可以使用炸药棒来炸毁这些石块。当矿坑中有大量石块阻碍玩家的采集时,这时就可以用炸弹来拖拽到矿坑中石块群的位置,会一次性炸毁所有碍事的石块。当矿坑中烟雾桶被引爆后,看不清地下情况的时候,我们可以使用电风扇,它会把所有的烟雾都吹散,让玩家可以清楚的彻底看清矿坑的分布。矿坑中不时也会有小老鼠来捣乱,不用担心,我们有老鼠药来对付这些小东西,只要把老鼠药拖拽到老鼠所在的位置,就会瞬间消灭这些小麻烦,让玩家更顺利的采集到想要得到的资源。

紧张刺激的对战,轻松有趣的玩法,丰富多样的道具,还有精美细致的画面,这就是我们今天要完成的项目《黄金矿工》

在此之前呢,和大家说明一下,因为这是一个比较大的项目了,所以展示所有代码会有些困难,从中还要数据库的参与,所以我裁剪了主要部分的代码,主要目的的让大家明白实现这个项目的难点以及逻辑思路,希望大家可以理解

好了,话不多说,开始了

首先我们先创建一个头文件,把一些结构体以及枚举类型的函数放进去,这样会让整个项目看起来更加有序,更好理解,先把枚举类型放进去

enum ATTR
{//图片对应的数组下标i_gold=1,i_money=3,i_role=5,i_stone=9,i_bk= i_stone+1,//窗口尺寸WIDTH = 1080,HEIGHT= 640,//物品数量MINE_NUM=10,
};
enum TYPE
{//物品类型GOLD,    //金块MONEY,  //钱袋STONE,  //石头//摆动方向LEFT,RIGHT,//摆动状态M_LONG,M_NORMAL,M_SHORT,};

之后把我们的老朋友结构体也放进去

struct Role
{int x;     //贴图的位置int y;int width;//图片宽度和高度int height;int coin;//金币
};
struct Mine //物品
{int x;int y;int size;//用来计算碰撞int flag;//物品是否存在int type;//物品类型,钱袋,石头,金块int gold;//价值
};
//钩子
struct Hook
{double x;//绳子开始坐标,固定不变的double y;double endx;//末端变化的坐标double endy;int len;//绳子长度int dir;//摆动方向double angle;//摆动角度double speed;//速度double vx;//速度分量double vy;int swing;//是否在摆动int state;//伸长状态,伸长,正常,缩短int index;//抓到的物品下标
};

OK,接下来就是我们的主要函数main.Cpp了,记得开始的时候加上我们写的头文件,先写初始化函数

void GameInit()
{//初始化随机数种子srand(GetTickCount());//初始化角色数据role.coin = 0;role.width = 140;role.height = 120;role.x = WIDTH / 2 - role.width / 2;//让角色图片居中显示role.y = 0;//加载图片for (int i = 0; i < 10; i++){char fileName[20];sprintf(fileName, "./images/%d.jpg", i);if (i <= 1){loadimage(&img[i], fileName,73,62);}else{loadimage(&img[i], fileName);}  }loadimage(&img[i_bk], "./images/bk.jpg",WIDTH,HEIGHT-role.height);//初始化物品for (int i = 0; i < MINE_NUM; i++){mine[i].flag = 1;mine[i].size = 60;mine[i].type = rand() % 3;mine[i].x=rand()%(WIDTH-mine[i].size);mine[i].y=rand()%(HEIGHT-role.height-100)+ role.height+ 50;mine[i].gold = rand()%600+rand()%200;}//初始化钩子hook.x = role.x+45;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.state = M_NORMAL;hook.vx = 0;hook.vy = 0;hook.speed = 5.0;hook.index = -1;
}

再写我们的绘制函数,这个比较简单,就是贴图

void Gamedraw()
{BeginBatchDraw();//设置背景颜色setbkcolor(GREEN);cleardevice();putimage(0, role.height, &img[i_bk]);//透明贴图 两张图片,一张掩码图,一张原图putimage(role.x, role.y, &img[i_role-1],SRCAND);//掩码图putimage(role.x, role.y, &img[i_role],SRCPAINT);//原图//绘制钩子setlinestyle(PS_SOLID, 5);setlinecolor(BROWN);line(hook.x, hook.y, hook.endx, hook.endy);//绘制物品for (int i = 0; i < MINE_NUM; i++){if (mine[i].flag){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;}}}//绘制分数char s[30];sprintf(s, "金币:%d", role.coin);settextstyle(50, 0, "黑体");outtextxy(50, 50, s);EndBatchDraw();
}

钩子摆动的函数,钩子该如何的摆,主要是让他不要往天上摆就行

//钩子摆动
void hookRock()
{if (hook.state == M_NORMAL){if (hook.dir == RIGHT){hook.angle++;}else{hook.angle--;}if (hook.angle > 80){hook.dir = LEFT;}else if (hook.angle < -80){hook.dir = RIGHT;}hook.endx = hook.x + sin(π / 180 * hook.angle) * hook.len;hook.endy = hook.y + cos(π / 180 * hook.angle) * hook.len;}
}
int distance(struct Hook hook)
{double dis=sqrt((hook.x-hook.endx)* (hook.x - hook.endx) + (hook.y-hook.endy) * (hook.y - hook.endy));return dis <= hook.len;
}
void keyControl()
{//按空格伸长if (GetAsyncKeyState(VK_SPACE) && hook.state == M_NORMAL){hook.state = M_LONG;hook.vx = sin(π / 180 * hook.angle) * hook.speed;hook.vy = cos(π / 180 * hook.angle) * hook.speed;}if (hook.endx <= 0 || hook.endx >= WIDTH || hook.endy >= 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_NORMAL;}}
}

接下来是我们的抓取函数,也是比较简单

​
void grap()
{//找到抓取的是哪个物品for (int i = 0; i < MINE_NUM; i++){if (mine[i].flag &&hook.endx > mine[i].x && hook.endx<mine[i].x + mine[i].size &&hook.endy>mine[i].y && hook.endy < mine[i].y + mine[i].size){hook.index = i;//保存抓到的物品的下标break;}}if (hook.index != -1){hook.state = M_SHORT;mine[hook.index].x = hook.endx-mine[hook.index].size/2;mine[hook.index].y = hook.endy- mine[hook.index].size / 2;if (distance(hook)){hook.state = M_NORMAL;mine[hook.index].flag = 0;role.coin += mine[hook.index].gold;hook.state = M_NORMAL;hook.index = -1;}}
}​

最后是我们的主函数

int main()
{initgraph(WIDTH,HEIGHT,1);GameInit();while (1){printf("%lf,%lf vxy(%lf,%lf)\n", hook.endx, hook.endy,hook.vx,hook.vy);hookRock();Gamedraw();keyControl();   grap();}closegraph();return 0;
}

这就是我们《黄金矿工》的主要代码了,有人会问了,好像也不多呀,从代码上看确实还好,但这个项目牵扯的东西有点多,包括数据库,考虑到有些同学看不懂我就不放在这里了,有兴趣的同学可以进去领取源码之后自己学习,最后想说的是,写游戏项目其实还好,主要是理清初始化函数以及更新函数,包装起来就很好理解了,好啦,希望大家可以在这里得到自己想要的知识以及快乐吧,也希望大家可以给UP主一个关注,非常感谢大家了!!!

后续UP主还会发布更多的项目源码以及学习资料,希望大家可以持续关注,有什么问题可以回帖留言,我尽量回答。想要C/C++学习资料以及其他项目的源码的可以加群【765860056】了解。想要对程序员的未来发展有兴趣的也可加群闲聊。也可以关注微信公众号:【狐狸的编码时光】,希望和大家一起学习进步!!!

点击下方链接进群更快拿到学习资料以及项目素材

进群领取学习资料以及项目源码素材https://jq.qq.com/?_wv=1027&k=7zZnEXM8

视频讲解

有需要视频讲解的,不要错过了【C/C++游戏开发】黄金矿工,拥有一副好钩子之前你得先学会编程!你的峡谷矿工小能手上线啦!_哔哩哔哩_bilibili每天学习两小时,不掉头发,不秃顶!制作不易,如果你喜欢这个视频的话,给个关注吧,顺便用三连砸一下可怜的UP~https://www.bilibili.com/video/BV14T4y1M7oK?spm_id_from=333.999.0.0

C/C++游戏项目详细教程:《黄金矿工》相关推荐

  1. C/C++游戏项目详细教程:《中国象棋》

    中国象棋是起源于中国的一种棋,属于二人对抗性游戏的一种,在中国有着悠久的历史.由于用具简单,趣味性强,成为流行极为广泛的棋艺活动. 中国象棋的中国棋文化,也是中华民族的文化瑰宝,它源远流长,趣味浓厚, ...

  2. C/C++超级玛丽C++游戏项目详细教程

    在你的童年记忆里,是否有一个蹦跳.顶蘑菇的小人已经被遗忘? 如果你回忆起了它,你定然会觉得现在它幼稚.无聊,画面不漂亮,游戏不精彩--但请你记住:这才是真正的游戏,它给了你无限的欢乐!许多人只玩过红白 ...

  3. C/C++游戏项目详细教程:《贪吃蛇》

    还记我们童年时的贪吃蛇吗,用"砖头"诺基亚玩的更是经典中的经典,贪食蛇操作简单,可玩性比较高.这个游戏难度最大的不是蛇长得很长的时候,而是开始.那个时候蛇身很短,看上去难度不大,却 ...

  4. 4399曾经最火的黄金矿工小游戏,用Java语言2小时学会

    你玩过4399曾经最火的黄金矿工小游戏吗,黄金矿工小游戏是一款休闲娱乐的一个挖宝游戏,在游戏中地下会有许多的宝藏,你得想办法把它们都挖出来,作为矿工的你,对你来说是轻车熟路的,能不能挖到宝,看你抓取的 ...

  5. 【源码+教程】Java课设项目_12款最热最新Java游戏项目_Java游戏开发_Java小游戏_飞翔的小鸟_王者荣耀_超级玛丽_推箱子_黄金矿工_贪吃蛇

    马上就要期末了,同学们课设做的如何了呢?本篇为大家带来了12款热门Java小游戏项目的源码和教程,助力大家顺利迎接暑假![源码+教程]Java课设项目_12款最热最新Java游戏项目_Java游戏开发 ...

  6. 【源码+图片素材+详细教程】Java游戏开发_Java开发经典游戏飞翔的小鸟_飞扬的小鸟_Java游戏项目Flappy Bird像素鸟游戏_Java课程设计项目

    课程目标: 1.通过本课程的学习巩固Java的相关基础知识,例如循环判断,数组和集合的使用,对象的继承,接口的实现,窗口的创建,事件监听,图形绘制. 2.完成小鸟的移动,管道自动生成.碰撞死亡,计分系 ...

  7. C/C++项目:4399小游戏黄金矿工编译教程

    <黄金矿工中文版>是一款休闲益智小游戏,游戏中你需要看准时机出钩子勾取金子或者砖石来获得金钱的累加,达到一定的金钱数才能够闯关成功,游戏十分经典,强烈推荐大家学会编写这款游戏,休闲时没网也 ...

  8. Java游戏项目——仿4399小游戏《黄金矿工》

    简介 作者简介:青铜码农,和大多数同学一样从零开始一步步学习,一步步积累.期待您的关注,让我们一起成长~注:本人学疏才浅,文章如有错误之处,敬请指正~ 内容简介:实现4399<黄金矿工>小 ...

  9. 你的记忆里有黄金矿工吗?

    黄金矿工是大概是我初中时候玩的游戏吧,记忆中的样子是一群人围在一个电脑傍边,两人一组,输了就换下一组,虽然它不上现在游戏的丰富的游戏内容.但是就是让人欲罢不能,成为一款经典! Java游戏项目黄金矿工 ...

  10. 自己竟做出来了《黄金矿工》

    <黄金矿工>是一款益智类小游戏. 该游戏中,可以通过"挖矿"获得积分并不断升级.玩家可以在线玩flash版黄金矿工,也可以下载后玩单机版黄金矿工.黄金矿工小游戏有多个版 ...

最新文章

  1. 客户管理系统企业客户管理crm客户管理
  2. linux编译树莓派内核,编译树莓派 4B Linux 5.9 内核
  3. 腾讯阿里字节扎堆做公益,互联网技术也要“内卷”?
  4. springBoot搭建activiti工作流
  5. 让S3c2410里拥有HIVE注册表的 全部步骤
  6. 安装Kubernetes V1.18.2
  7. 用python实现一个socket echo程序 tcp socket的几个关闭状态
  8. How to create a angular2 project process
  9. 拷贝构造函数什么时候调用?
  10. 印象笔记Mac版的快捷键有哪些?Evernote for Mac快捷键大全
  11. 关于windriver WD_NO_LICENSE错误和解决办法
  12. PS教程,今天它来了
  13. 工商银行计算机网银不能连接u盾,工商银行网银U盾无法识别怎么办
  14. 电脑连android手机上网,电脑通过手机3G上网(android安卓手机)的几种方法
  15. 学计算机的怎样提升打字速度,如何提高打字速度:电脑键盘指法练习
  16. Excel基础(14)条件格式与公式
  17. iOS开发:xcode无法选择设备和corner stone如何过滤上传文件
  18. python提示unmatched_Python: Unmatched group exception
  19. vps搭建代理ip服务
  20. word中公式编辑器的快捷键

热门文章

  1. 数商云:大宗商品供应链电子交易系统支撑业务运营模块落地浅谈
  2. OAI搭建 eNB(2018-09最新版)
  3. 电脑如何备份重要文件?教你两种简单方法
  4. 贷款用户逾期问题Task1
  5. 我为什么要表扬深信服(转)
  6. 【Android 系统开发】CyanogenMod 13.0 源码下载 编译 ROM 制作 ( 手机平台 : 小米4 | 编译平台 : Ubuntu 14.04 LTS 虚拟机)
  7. 基于Qt的局域网即时通讯软件
  8. Nginx二级域名代理二级目录
  9. 【年度总结】——难忘的45天
  10. 计算机控制台咋用,怎么使用控制台?饥荒海难控制台使用教程