您的位置:首页 → 攻略  →  手游攻略  →  挖金子小游戏图形化编程(黄金矿工游戏源码)

挖金子小游戏图形化编程(黄金矿工游戏源码)

2023-08-01 13:30:37作者:传世攻速手游    阅读数:

玩家通过键盘的按键控制矿工抓取金块,将钩子碰触到的金块抓取过来。 要求如下: 

1. 游戏的金块的总数是20(可以自己去设置),大小位置是随机的。

挖金子小游戏图形化编程(黄金矿工游戏源码)

 

2. 在没有抓取状态下,钩子左右摆动,此时矿工的是静止的。当钩子摆动到角度,玩家可以单击键盘上的上下左右键中的下方向键或者是空格键控制矿工伸出长钩,抓取金子,此时矿工是向下摇动转轴。获取到金子往回拉后,矿工是不断转动转轴,直到金子拉动到钩子初始处,矿工恢复静止,钩子继续左右摇摆,直到玩家再次单击向下方向键。

3. 伸出的钩子如果碰触到金子,则钩子和金子一起往回拉,回收的速度根据抓取到的金子的大小变化而变化,金子越大,回拉的速度越慢,反之亦然。如果钩子没有碰触到金子,而是碰触到左右和下的边界,则钩子保持原来的速度往回收。 

4. 抓取到的金子拉回到转轴处消失,此时金子数目减少一个。如果玩家将所有金子抓取完,游戏返回或者结束。

所用编译器:VS2013,代码纯手写,希望各位也能自己去手敲,而不是复制粘贴!!!图片大家可以自己去找素材图,也可以关注笔者微信公众号回复关键字:黄金矿工领取~

话不多说:直接上源码!

#include<stdio.h> #include<math.h> #include<graphics.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", i); 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, &img[i_bk]); //绘制角色背景颜色 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.endx<0 || hook.endx>WIN_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.endx>mine[i].x && hook.endx<mine[i].x+mine[i].szie && hook.endy>mine[i].y && hook.endy<mine[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语言编程学习基地

有一些源码和资料分享,欢迎转行也学习编程的伙伴,和大家一起交流成长会比自己琢磨更快哦!

挖金子小游戏图形化编程(黄金矿工游戏源码)

 


挖金子小游戏图形化编程(黄金矿工游戏源码)

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至957126978@qq.com举报,一经查实,本站将立刻删除。

攻略排行榜

  • 映像大厅多少装等能进(魔兽世界副本映像大厅介绍)映像大厅多少装等能进(魔兽世界副本映像大厅介绍)
    魔兽世界-巫妖王之怒副本《映像大厅》由吉安娜和希尔瓦娜斯领头,那些跟着来着此地处的冒险者们很快的就会发现面前摆着的武器正是霜之哀伤——巫妖王那把传说中能使人堕落的武器。巫妖王的密室就在触手可及的地方,但这也有可能是所有冒险至此的人的葬身之地。 《映像大厅》位于诺森德—冰冠冰川,坐标:50/85. 《法瑞克》他曾经是跟随米奈希尔·阿尔萨斯王子来到诺森德的一名军舰指挥官,而如今他被阿尔萨斯王子复活成为亡灵,并且守护着到寒冰王座的通道。 《玛维恩》自小认识阿尔萨斯,并把他当成真正的朋友。尽管阿尔萨斯将一把被诅咒的符文剑插入他的心脏,但眼见王子变成这副模样,他还是体会到了心碎的感觉。 《逃离阿尔萨斯
    阅读:52024-01-23
  • 鬼魂新娘莫甘娜多少钱(LOL盘点定价不合理的皮肤)鬼魂新娘莫甘娜多少钱(LOL盘点定价不合理的皮肤)
    说起LOL的氪金点,皮肤占了大头,《英雄联盟》中的皮肤虽然不像《王者荣耀》那样给你加一点点属性,但是一个好用的皮肤可以提升你的手感,间接提升了你的操作,另外有些皮肤的特效好看能让你游戏更有体验感,更有牌面。 LOL中能直接购买到的最有牌面的皮肤当然就是终极皮肤了,模型可以变换,特效更好看,还有特殊的语音,真的是把一个英雄的体验感拉满。因为其高超的质量,所以价格也不菲,一般都定价在了199左右。不过这种高质量的皮肤也算是配得上这个价格,但是由于一些国服特色,一些特效一般的皮肤甚至定价超过了终极皮肤,今天我们就来盘点几个定价不合理的皮肤。 一.勇敢的心 诺手 老玩家应该知道这是国服两周年纪念的皮
    阅读:52024-01-23
  • dnf冒险团等级经验表(DNF经验结构大改版)dnf冒险团等级经验表(DNF经验结构大改版)
    很多小伙伴好奇探险记第11季的[初级探险家]、[高级探险家]以及[大师探险家]需要多久才能将探险等级升满级,接下来就让我们一起来看吧! 各等级经验分布 等级区间 每级经验 2~100 1000 升至满级合计经验:99000 经验获取方式 本季经验获取途径依旧是由[每日任务]、[每周任务]、[赛季任务]、[助力任务]以及[消耗点券]组成。 1、每日任务 本季探险记的[初级/高级/大师探险家]的每个每日任务都是100探险经验,每天可完成6个每日任务,无论是否完成都会在隔天早6点重置。 每天通过完成每日任务共可获得600探险经验,全勤84天共可获得50400探险经验。 每日任务中有一个“获得地下城
    阅读:42024-01-23
  • 穿越火线挑战模式怪物图鉴(cf生化怪物大盘点)穿越火线挑战模式怪物图鉴(cf生化怪物大盘点)
    暗杀女皇 割喉隐身旋风斩 踢她一脚就不砍你了 装甲蝎子王 这个难点 先打毒刺避免射精 出小蝎子先打小的避免回血 还有全图抓人 滑行哦 绞肉机 激光要滑行才躲的过 全屏镭射按f 转到你身边踹一脚 很炫酷的说 迅捷虫 和跳蚤一样 钢铁泰迪! 技能:大炮,火箭发射器,加特林机枪,火焰保护膜,咆哮,扑击,前爪攻击 有黄金手雷可秒,没的话好好打!伤害很高注意躲避,有个替身吸引仇恨很好用。
    阅读:42024-01-23
  • 首领之傲技能介绍(LOL4大钩人技能)首领之傲技能介绍(LOL4大钩人技能)
    在英雄联盟当中,设计师设计了许多具有趣味性的技能来增加游戏的可玩性,让LOL的技能不仅仅局限于伤害,钩子技能便是LOL里十分独特的一种设定,这种能够迫使敌方强制位移的手段能让对手从安全的敌方突然进入火力范围,因此对敌人的恐惧效果十分明显,今天指南哥就来给大家盘点一下LOL当中最让对手恐惧的4大钩人技能。 TOP4深海泰坦 Q技能 泰坦是一名可上可辅的肉盾英雄,虽然他自身的伤害不高,但是配合队友的能力却十分强,因为他的五个技能中有三个控制和一个减速,而这些控制技能当中最让敌方胆寒的便是Q技能的钩子,一旦被泰坦钩中迎接对手的将是一套长达5秒左右的控制链,插翅难飞! TOP3魂锁典狱长 Q技能 锤
    阅读:52024-01-23
  • 冒险岛怪物图鉴未来勇士(冒险岛怪物收藏攻略)冒险岛怪物图鉴未来勇士(冒险岛怪物收藏攻略)
    本周日活动正好是双倍收藏活动(也有不少小伙伴怀疑,收藏双倍真的顶用吗?),笔者趁着活动,来和大家分享下怪物收藏的一些小知识,可能不齐全,但尽量确保准确无误的告诉大家,如果有错误的地方,也欢迎各位读者指出来。 1、为什么要弄怪物收藏 做任何事情,要有一个大概的目标,怪物收藏也是,弄怪物收藏的目的是什么?有的人为了突破上限石、有的为了A潜能卷、幸运日卷轴、印章,有人为了怪异,也有的人为了刷椅子。需要明白自己需要什么,针对该目标去努力。 2、明确收藏目标 想要的东西不一样,因此导向也不大一样。如果为了突破上限石,收藏自然是越多越好(600最好,开的探险个数最多,达5个),如果为了怪物收藏拿椅子,则
    阅读:42024-01-23
  • 原罪之战天赋神权(暗黑破坏神原罪之战剧情)原罪之战天赋神权(暗黑破坏神原罪之战剧情)
    上回讲到莉莉丝企图掌控艾迪伦,被乌迪西安打败。最后被自己的老情人艾纳利尤斯再次放逐到了虚空中。 三神教覆灭后,乌迪西安带领艾迪伦向艾纳利尤斯的圣光大教堂进发。 01.蒙面先知 艾纳利尤斯喜欢以先知的身份行走在庇护之地。跟躲躲藏藏的恶魔不同,他享受着世人的崇拜和敬仰。 数百年来,他喜欢飞在天上观察自己的造物、欣赏自己统治的世界。直到一个叫”乌迪西安“的农夫横空出世,才打破了这样枯燥的生活。 不过他心底里还是把乌迪西安当做一枚棋子。比方说在三神教和乌迪西安的交锋中,他就曾暗中帮助乌迪西安,铲除三神教,他自己也顺手放逐了莉莉丝。 这自负的大天使认为,解决莉莉丝可比解决乌迪西安难多了。 面对乌迪西安
    阅读:72024-01-23
  • war3秘籍对电脑有效吗(魔兽争霸秘籍手游方法)war3秘籍对电脑有效吗(魔兽争霸秘籍手游方法)
    魔兽秘籍是在单人模式下使用的一些特殊的指令,通过这些魔兽秘籍你可以获取金钱,无敌等各种快速取得胜利的办法。下面来一起看一下吧。 魔兽争霸自带的秘籍只能在单人模式下使用,在多人模式下是无法使用的。 点击键盘的回车,在对话框中输入想要启用的秘籍,发送即可。 输入“KeyserSoze”,可以得到黄金500。输入“LeafItToMe”,可以得到木头500。 输入“GreedIsGood”加上数字,可以得到全部资源。 输入“PointBreak”,可以得到无限的食物。输入“WarpTen”,可以开启快速建筑。 输入“ThereIsNoSpoon”,可以得到无限的魔力。输入“ISeeDeadPeop
    阅读:52024-01-23
  • 枪炮师30级技能(晶核枪炮师技能搭配推荐)枪炮师30级技能(晶核枪炮师技能搭配推荐)
    晶核枪炮师技能搭配推荐   一号位:负级子炮+烈焰爆弹   这一套技能主要作用就是可以群攻,清怪非常的快。   二号位:负级子炮+烈焰爆弹   和上一套技能似乎是差不多的,需要和1号位的搭配起来使用,为了提升命中。   三号位:回旋截击+破阵冲锋   这一套技能主要是为了补伤害,可以增加距离上的输出。   四号位:狩猎者轰炸+重火力狂潮   这一套技能伤害的倍率很高,主要是可以打出很高的输出。   《晶核》莱茵城拍照地点位置介绍   一、除了诗还有远方   地点:莱茵城威德附近   来到莱茵城威德附近地点位置,在下城区中间位置选择拍照。   二、熙熙攘攘   地点:莱茵城-下城区   打开地
    阅读:52024-01-23
  • 新天上碑国服官网(新天上碑传奇游戏评测)新天上碑国服官网(新天上碑传奇游戏评测)
    新天上碑传奇中有个boss之家,传说里面住着许多不同种类的boss,它们的身上随时都带着无数的珍宝,只等有情郎……不是,只等勇士来把它们消灭,怎么样,你们能打得过boss之家的boss么?我们还是先来看看boss之家到底怎么玩吧! 在8090新天上碑传奇中,boss之家是boss云集的地方,其中怪物林立,击败boss就可以获得大量的稀有装备哦,想要酣畅淋漓的打个痛快吗!就来boss之家吧!同时这里也是侠客热血PK的地方,所以要小心咯! boss之家是全天24小时开放的,大家的等级达到30级就可以进入了哦,进入boss之家需要消耗一个boss之家卷轴,每一次可以在这个副本里面呆满一个小时哦,各
    阅读:32024-01-23