怎么用C语言实现黄金矿工游戏
发表于:2025-11-13 作者:千家信息网编辑
千家信息网最后更新 2025年11月13日,这篇文章主要介绍"怎么用C语言实现黄金矿工游戏",在日常操作中,相信很多人在怎么用C语言实现黄金矿工游戏问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"怎么用C语言实现黄
千家信息网最后更新 2025年11月13日怎么用C语言实现黄金矿工游戏
这篇文章主要介绍"怎么用C语言实现黄金矿工游戏",在日常操作中,相信很多人在怎么用C语言实现黄金矿工游戏问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"怎么用C语言实现黄金矿工游戏"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
首先我们先创建一个头文件,把一些结构体以及枚举类型的函数放进去,这样会让整个项目看起来更加有序,更好理解,先把枚举类型放进去
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.endxmine[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;}到此,关于"怎么用C语言实现黄金矿工游戏"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
物品
函数
钩子
图片
矿工
语言
黄金
类型
学习
接下来
下标
贴图
长度
放进
原图
坐标
就是
文件
方向
更多
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
佳都科技是互联网公司吗
ftp服务器安全架构
河南软件开发定制怎么样
b5只有杭州服务器吗
温州云软件开发设计
国家网络安全基地泾河
网络安全基线扫描是什么意思
有关数据库的专著
梦幻网络安全海报
杭州双线服务器
国产服务器品牌排行榜
网络安全 网站排名
交换机柜能放服务器吗
丰南租房网络安全
数据库错误-1
数据库安全的第一道屏障是
网络安全与执行
数据库查询对象的英文
sci数据库检
镇魔曲数据库
软件开发进度难以预测
帝国还原数据库
网络安全法违法信息传播
东莞高防服务器托管
吉林数据库安全箱销售价格
电脑数据库密码怎样查
2019百度网络安全大赛
水果忍者在哪个服务器是中文
服务器有那几种
软件开发等专业