怎么用C语言实现黄金矿工游戏
发表于:2024-09-22 作者:千家信息网编辑
千家信息网最后更新 2024年09月22日,这篇文章主要介绍"怎么用C语言实现黄金矿工游戏",在日常操作中,相信很多人在怎么用C语言实现黄金矿工游戏问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"怎么用C语言实现黄
千家信息网最后更新 2024年09月22日怎么用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安全错误
数据库的锁怎样保障安全
泉州软件开发需要多少钱
湖南服务器虚拟化迁移服务器
网络安全领域调研报告
mdb 软件开发
oracle12c选择数据库
重庆数据库
基于大智慧的软件开发
hp服务器固件升级
网络安全测评公告
数据库唯一值最高值
世界上最大的连续动态更新的数据库指的是
idea复制创建数据库表
文明重启如何重启服务器不关服
仿制别人软件开发违法吗
网络技术标准化专题
软件开发项目经 本职工作
我的世界服务器不刷幻翼
四川数据库脱敏
建立一个sql数据库
数据库技术资源
宽带服务器不显示网络怎么办
软件开发的用处
导入应用数据库到手机号
服务器的那个东西怎么生产出来的
为什么数据库拒绝访问
数据库中菱形代表什么
苹果为什么显示连接服务器失败
科讯数据库
科密a1数据库连接
rac和ha数据库的区别