直接上效果图
使用:按空格伸出钩子,再没抓到东西之前,再按一次空格,钩子会收回。
由于图片音乐资源的限制,这里不好放,所以直接给网盘链接。

网盘链接点我
提取码:vdyl
程序代码,注意看有一个头文件tools.hpp

#include<stdio.h>
#include<easyx.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
#include"tools.hpp"
#pragma comment(lib,"Winmm.lib");
#define MAX_ANGLE 80        //钩子最大幅度
#define MANHATTAN_DIS(hook) sqrt((hook->x-hook->endx)*(hook->x-hook->endx)+(hook->y-hook->endy)*(hook->y-hook->endy));
#define MAXNUM 10
int flag = 0;
enum Dir { Left,Right };
enum HookState {Normal,Long,Short};
enum CoinType{Gold,Wallet,Stone,Max};
IMAGE img_bk;
IMAGE imgs[4];
struct Role {float x;float y;int  width;int  height;int money;
};
struct Hook {float x;float y;float endx;float endy;float lenth;float angle;//角度int state;int dir;int index ;
};
struct Object {int x;int y;int width;int height;int value;bool isdie;int type;
};
Role role;
Hook hook;
Object ob[MAXNUM];
void init();
void initResource();
void draw();
void initResource() {loadimage(&img_bk, "./res/bk.jpg",0,getheight()-120);for (int i = 0; i < 4; i++) {char str[40] = { 0 };sprintf(str, "./res/%d.png", i);loadimage(imgs + i, str);}
}
void init_ob(Object* ob,int x,int y,int type) {ob->x = x;ob->y = y;ob->type = type;ob->isdie = false;ob->height = imgs[ob->type].getheight();ob->width = imgs[ob->type].getwidth();}
void ob_draw(Object* ob) {for (int i = 0; i < MAXNUM; i++) {if(!ob->isdie)drawImg(ob->x, ob->y, imgs+ob->type);}
}
void init_role(Role* role,int x,int y) {role->x = x;role->y = y;role->width = imgs[3].getwidth();role->height = imgs[3].getheight();role->money = 0;
}
void role_draw(Role* role) {drawImg((getwidth() - imgs[3].getwidth())/2, 0, imgs + 3);settextstyle(48, 0, "正楷");settextcolor(RED);setbkmode(TRANSPARENT);char buf[256] = { 0 };sprintf(buf, "金币数:%d ", role->money);outtextxy(20, (role->height - textheight(buf)) / 2, buf);
}
void init_hook(Hook* hook,int x,int y) {hook->x = x;hook->y = y;hook->lenth = 50;hook->endx = x;hook->endy = y + hook->lenth;hook->angle = 0;hook->state=Normal;hook->dir = Right;hook->index = -1;}
void hook_draw(Hook* hook) {//设置线条的样式:setlinestyle(PS_SOLID, 3);setlinecolor(BLACK);line(hook->x, hook->y, hook->endx, hook->endy);setfillcolor(BROWN);solidcircle(hook->endx, hook->endy,5);
}
void hook_swing(Hook* hook,float speed) {if (hook->state == Normal) {if (hook->angle > MAX_ANGLE) {hook->dir = Left;}else if (hook->angle < -MAX_ANGLE) {hook->dir = Right;}if (hook->dir == Left) {hook->angle -= speed;}else if (hook->dir == Right) {hook->angle += speed;}hook->endx = sin(3.1415 / 180 * hook->angle) * hook->lenth + hook->x;hook->endy = cos(3.1415 / 180 * hook->angle) * hook->lenth + hook->y;}
}
void control_hook(Hook* hook,float speed) {if (GetAsyncKeyState(VK_SPACE) & 0x8000&&hook->state==Normal) {hook->state = Long;flag = 1;}if (GetAsyncKeyState(VK_SPACE) & 0x8000 && hook->state == Long && flag == 1&&hook->lenth>280) {hook->state = Short;flag = 0;}if (hook->state == Long) {hook->lenth += speed;hook->endx = hook->x + sin(3.1415 / 180 * hook->angle) * hook->lenth;hook->endy = hook->y + cos(3.1415 / 180 * hook->angle) * hook->lenth;if (hook->endx<0 || hook->endx>getwidth() ||hook->endy > getheight()) {hook->state = Short;}}if (hook->state == Short) {hook->lenth -= speed;hook->endx = hook->x + sin(3.1415 / 180 * hook->angle) * hook->lenth;hook->endy = hook->y + cos(3.1415 / 180 * hook->angle) * hook->lenth;if (hook->lenth < 50) {hook->state = Normal;}}
}
void HookGet(Object*ob) {if (hook.state == Normal && hook.index != -1) {ob[hook.index].isdie = true;role.money += rand() % 100;hook.index = -1;}if (hook.state == Normal) {return;}for (int i = 0; i < MAXNUM; i++) {//printf("haha!\n");if (!(ob+i)->isdie&&hook.endx > (ob + i)->x && hook.endx<(ob+i)->x+(ob+i)->width &&hook.endy>(ob + i)->y && hook.endy < (ob+i)->y+(ob + i)->height) {hook.index = i;break;}}if (hook.index != -1) {hook.state = Short;(ob + hook.index)->x = hook.endx-(ob + hook.index)->width/2;(ob + hook.index)->y = hook.endy-(ob+hook.index)->height/2;}}
void draw() {putimage(0, 120, &img_bk);setfillcolor(YELLOW);solidrectangle(0, 0, getwidth(), imgs[3].getheight());role_draw(&role);hook_draw(&hook);for (int i = 0; i < MAXNUM; i++) {if(!ob[i].isdie)ob_draw(&ob[i]);}
}
void init() {mciSendString("./res/open aa.mp3 ", 0, 0, 0);//打开音乐mciSendString("play ./res/aa.mp3 repeat", 0, 0, 0);//播放音乐initResource();init_role(&role, (getwidth() - imgs[3].getwidth()) / 2, 0);init_hook(&hook, role.x + 40, role.y + 95);for (int i = 0; i < MAXNUM; i++) {int x = rand() % (getwidth() - 40) + 20;int y = rand() % (getheight() - role.height) + role.height;init_ob(&ob[i], x,y  ,rand()%Max);}
}
int main() {initgraph(1080, 640, EW_SHOWCONSOLE);srand(time(0));init();while (1){BeginBatchDraw();draw();EndBatchDraw();hook_swing(&hook,0.3);control_hook(&hook,3);HookGet(ob);}return 0;
}

黄金矿工两百行基于Easyx相关推荐

  1. C语言实现基于easyx的(低配版)黄金矿工游戏

    目录 一.项目环境 二.游戏说明 三.运行演示 四.代码 总结 一.项目环境 Visual Studio 2019+EasyX 20220116 二.游戏说明 与黄金矿工游戏类似,每关限时90s(可自 ...

  2. 基于Java+Swing+Mysql实现《黄金矿工》游戏

    基于Java+Swing+Mysq实现<黄金矿工>游戏 一.系统介绍 二.功能展示 三.其他系统 四.获取源码 一.系统介绍 <黄金矿工>游戏是一个经典的抓金子小游戏,它可以锻 ...

  3. 黄金矿工游戏demo

    试玩地址:  http://www.adanghome.com/js_demo/13/ 请使用chrome.firefox或safari.ie的话,请大于ie8. 按空格键扔出钩子,按左右键控制矿工移 ...

  4. 2018级C语言大作业 - 黄金矿工

    黄金矿工 C语言作业 分享18级同学大一上学期用C语言实现的黄金矿工.分步骤代码.图片音乐素材.可执行程序可从百度网盘下载: 链接:https://pan.baidu.com/s/1xCy1l2-7Q ...

  5. 洛谷P3961 [TJOI2013]黄金矿工—C++

    题目 题目描述 小A最近迷上了在上课时玩<黄金矿工>这款游戏.为了避免被老师发现,他必须小心翼翼,因此他总是输.在输掉自己所有的金币后,他向你求助.每个黄金可以看做一个点(没有体积).现在 ...

  6. [TJOI2013]黄金矿工解题报告

    题目描述 小A最近迷上了在上课时玩<黄金矿工>这款游戏.为了避免被老师发现,他必须小心翼翼,因此他总是输.在输掉自己所有的金币后,他向你求助.每个黄金可以看做一个点(没有体积).现在给出你 ...

  7. [TJOI2013]黄金矿工

    题目描述 小A最近迷上了在上课时玩<黄金矿工>这款游戏.为了避免被老师发现,他必须小心翼翼,因此他总是输.在输掉自己所有的金币后,他向你求助.每个黄金可以看做一个点(没有体积).现在给出你 ...

  8. 洛谷3961 [TJOI2013]黄金矿工

    题目描述 小A最近迷上了在上课时玩<黄金矿工>这款游戏.为了避免被老师发现,他必须小心翼翼,因此他总是输.在输掉自己所有的金币后,他向你求助.每个黄金可以看做一个点(没有体积).现在给出你 ...

  9. TJOI2013 黄金矿工(01背包改)

    题目描述 小A最近迷上了在上课时玩<黄金矿工>这款游戏.为了避免被老师发现,他必须小心翼翼,因此他总是输.在输掉自己所有的金币后,他向你求助.每个黄金可以看做一个点(没有体积).现在给出你 ...

最新文章

  1. Ubuntu创建新用户并增加管理员权限
  2. android 工作 绝望,我的人生绝望手游
  3. React从入门到精通系列之(12)深入理解JSX
  4. 史上最详细Docker安装Redis (含每一步的图解)实战
  5. 深入探讨Container
  6. FactroyBean方式配置bean
  7. 表单新增元素与属性(control、placehoulder、list、AutoComplete、pattern、SelectionDirection、indeterminate属性)
  8. java编码规范文档 下载_软件项目实训及课程设计指导——制定待开发项目中各种文档的规范...
  9. 在浏览器中执行Kettle job或者transformation
  10. 数组去重实现的方式(越多越好)
  11. caffe的googlenet模型使用
  12. Linux ldd时某个依赖库so not found的一种特殊情形
  13. oracle添加男女约束,Oracle如何给数据库添加约束过程解析
  14. switchhosts以管理员身份运行后不显示故障处理
  15. 利用ichart绘制网页图表
  16. windows本地安装PLSQL
  17. FusionCharts的使用方法
  18. win10c盘扩容_Win10磁盘分区工具-无损分区助手
  19. QA:笔记本如何选?
  20. 解读 | 经典实验介绍之小心视崖,等你来了解哦

热门文章

  1. Windows Defender 打开后一片空白,安全中心不显示
  2. 把吃出来的病吃回去 张悟本_吃出来的华为
  3. 迅为iTop4412精英板运行QT程序触摸/鼠标失灵
  4. 京东12年被裁,昨天赔偿到账了,加调休和年假总共47万多,感谢公司!
  5. Spring框架下载最新地址
  6. X-XSS-Protection
  7. 线下停摆,线上狂欢,疫情下云健身火了!
  8. IPv6的NAT原理以及MAP66
  9. 电子技术基础(三)__电路分析基础之重点__叠加原理
  10. 内容为王--分享经验、成就百万技术名博(3)