怎么用C语言实现黄金矿工游戏
发表于:2025-01-25 作者:千家信息网编辑
千家信息网最后更新 2025年01月25日,这篇文章主要介绍"怎么用C语言实现黄金矿工游戏",在日常操作中,相信很多人在怎么用C语言实现黄金矿工游戏问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"怎么用C语言实现黄
千家信息网最后更新 2025年01月25日怎么用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安全错误
数据库的锁怎样保障安全
北京冬奥会网络安全工作方案
网络安全致家长的一封信模板
软件开发的考核制度
AI麻将智能软件开发
中国电信软件开发面试题目
中国航天软件开发工程师
软件开发的老板不懂技术
中国网络安全附属
扩DB2数据库字段长度
主机给服务器发送了两个数据包
新时达5021服务器微平层调整
计算机网络技术应用费用
做一个软件开发公司
数据库实验报告300字
华为基站平台软件开发部
苏州公路管理软件开发
标准规范与软件开发采购法
关系数据库中的关系与表格的不同
电脑装安卓系统服务器异常
数据库怎么把数据储存
各数据库的默认隔离级别
实时报告形势与政策网络安全问题
广州软件开发学校哪里好
软件开发收文科生吗
软件开发成本 会计科目
idc服务器工厂
数据库的整型
东西湖区 网络安全产业港
屏蔽数据库差异设计
江苏帕瓦软件开发