C措辞项目实战:《黄金矿工》零根本项目!180 行源代码示例_钩子_金子
游戏先容:
在规定的韶光内得到规定的金钱时即可。玩法非常大略,按“↓”键开使捞金子,如有炸弹,按“↑”键放炸弹,买东西点鼠标左键。不过本游戏之设计到钩子勾金子的程度,后面的关卡大家可以自行设计,相信能够设计金子了,钻石的话同理还是非常大略的。
本项目编译环境:VS2019/VS2013;
插件:图形库插件easyX,涉及图片素材可以自行百度找也可以关注文末领取;
效果图展示
配套讲解教程:黄金矿工游戏教程——哔哩哔哩
源代码示例:
#include<stdio.h>#include<graphics.h>#include<math.h>#define WIDTH 1080#define HEIGHT 640#define PI 3.1415#define MAX_ANGLE 80enum Index{i_gold = 1,i_money = 3,i_roleDown = 5,i_roleUp = 7,i_stone = 9};/钩子摆动状态,摆动,伸长,缩短,停滞/enum ATTR{LEFT,RIGHT,M_NORMAL,M_LONG,M_SHORT};struct Role{int x;int y;int width;int height;int coin; //总金钱};struct Hook{int x;int y;int endx;int endy;int len;//钩子长度double angle;//钩子当前角度int dir;//钩子摆动方向,左,右int vx;//速率变革量int vy;int state;//当前状态};struct Role role;struct Hook hook;struct Mine//物品{int x;int y;int size;int type;bool flag;int gold;};struct Mine mine[10];//把图片加载进程序 IMAGE img[11];void loadImg(){for (int i = 0; i < 10; i++){//如何把数字,转成字符串char fileName[20] = "";sprintf(fileName, "./images/%d.jpg", i);loadimage(img + i, fileName);}loadimage(img+10,"./images/bk.jpg",WIDTH,HEIGHT);}void gameInit(){loadImg();role.width = 140;role.height = 120;role.x = WIDTH / 2 - role.width / 2;role.y = 0;hook.len = 50;hook.x = role.x+40;hook.y = role.y+100;hook.endx = hook.x;hook.endy = hook.y + hook.len;hook.angle = 0;hook.dir = RIGHT;hook.state = M_NORMAL;}void gameDraw(){setfillcolor(GREEN);solidrectangle(0, 0, WIDTH, role.height);putimage(0, role.height, img + 10);putimage(role.x, role.y, img + i_roleDown - 1, SRCAND);putimage(role.x, role.y, img + i_roleDown, SRCPAINT);//输出我的钱setbkmode(TRANSPARENT);//设置背景透明settextstyle(50, 0, "黑体");char coin[20] = "";sprintf(coin, "金钱:%d", role.coin);outtextxy(20, 20, coin);//绘制钩子setlinecolor(RED);setlinestyle(PS_SOLID, 5);line(hook.x, hook.y, hook.endx, hook.endy);setfillcolor(YELLOW);solidcircle(hook.endx, hook.endy, 5);}//钩子摆动void hookRock(){if (hook.state == M_NORMAL){if (hook.dir == RIGHT){hook.angle++;}else if (hook.dir == LEFT){hook.angle--;}if (hook.angle > MAX_ANGLE){hook.dir = LEFT;}else if (hook.angle<-MAX_ANGLE){hook.dir = RIGHT;}hook.endx = hook.x + sin(PI / 180 hook.angle)hook.len;hook.endy = hook.y + cos(PI / 180 hook.angle)hook.len;}}double distance(Hook h){return sqrt((double)(hook.endx - hook.x)(hook.endx - hook.x) + (hook.endy - hook.y)(hook.endy - hook.y));}void keyControl(int speed){if (GetAsyncKeyState(VK_SPACE))//virtual key{hook.state = M_LONG;hook.vx = sin(PI / 180 hook.angle)speed;hook.vy = cos(PI / 180 hook.angle)speed;}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.len){hook.state =M_NORMAL;}}//碰到边界反回if (hook.endx<0 || hook.endx>WIDTH || hook.endy<0 || hook.endy > HEIGHT){hook.state = M_SHORT;}}int main(){//掌握台窗口(只能用来输出笔墨)//我们须要能够画图的窗口initgraph(WIDTH, HEIGHT, SHOWCONSOLE);gameInit();while (1){//双缓冲绘图,防止闪屏BeginBatchDraw();gameDraw();EndBatchDraw();hookRock();keyControl(5);}return 0;}
写在末了:对付准备学习C/C++编程的小伙伴,如果你想更好的提升你的编程核心能力(内功)不妨从现在开始!
编程学习书天职享:
编程学习视频分享:
整理分享(多年学习的源码、项目实战视频、项目条记,根本入门教程)
欢迎转行和学习编程的伙伴,利用更多的资料学习发展比自己琢磨更快哦!
对付C/C++感兴趣可以关注小编在后台私信我:【编程互换】一起来学习哦!
可以领取一些C/C++的项目学习视频资料哦!
已经设置好了关键词自动回答,自动领取就好了!
本文系作者个人观点,不代表本站立场,转载请注明出处!