黄金矿工—小游戏

2023-10-30

黄金矿工(使用easy-x图形库制作)

一、游戏思路

游戏的核心是如何让钩子动起来、怎么伸缩、怎么抓物品3个部分。

1.钩子的转动

钩子的转动可以根据角度的变化来决定,我们让起始坐标不变,让钩子的结尾坐标变化,在限定角度的范围即可,求结尾坐标思路过程如下,实现代码在后面

在这里插入图片描述

2.钩子的伸缩

钩子的伸缩:分为两部分:伸和缩。当接收到空格时,伸长,遇到边界与物品时要缩回来。
不管伸长还是缩短都与钩子的结尾坐标有关(反正钩子的起始坐标不会变),当按下空格时,要以一定的速度去伸长或者缩回,要注意,当钩子伸长与缩短时,角度要保持不变,所以要设置钩子的状态。实现代码在后面
在这里插入图片描述

3.物品的抓取

抓取是要判断钩子的结尾坐标有没有,在物品坐标的指定范围内,当在该范围时,将物品坐标跟着钩子的结尾坐标走(即物品坐标等于钩子的结尾坐标)。
在这里插入图片描述

在这里插入图片描述

二、游戏代码

头文件

#pragma once
#define Stuff_Max 8  //物品数量
#define PI 3.1426926
#include <stdio.h>
#include <graphics.h>
#include <stdlib.h>
#include <cmath>
#include <time.h>
IMAGE img[12];       //定义12张图片
using namespace std;
enum state
{
	extend,//伸长
	shorten,//缩短
	nomal,//正常
	left,//左
	right,//右
};
typedef struct _Role//角色
{
	int x;//位置
	int y;
	int width;//角色宽度
	int height;//角色高度
	byte w :1;//角色上,下控制
}Role;
typedef struct _Hook//钩子
{
	double x;//钩子开始坐标
	double y;
	double enx;//钩子结束坐标
	double endy;
	double angle;//钩子转动角度
	double vx;   //速度分量(伸长是以什么速度增长)
	double vy;
	int state;//状态
	int dir;//方向
	double len;//钩子长度
	int index;//抓到物品号数
}Hook;
typedef struct _Stuff//物品
{
	int size;      //物品大小
	double place_x;//位置指标
	double plaxe_y;
	int type;      //类型
	bool exsit;	   //是否存在
	int worth;     //物品价值
}stf;
Role* role = (Role*)calloc(1, sizeof(Role));//创建角色
Hook* hook = (Hook*)calloc(1, sizeof(Hook));//创建钩子
stf stuf[Stuff_Max];//创建物品
int score = 0;//统计分数
void init_IMAGE();//加载图片
void chartlet();//贴图
void init_role();//角色初始化
void init_stste();//钩子初始化
void swing(double angle);//钩子的摆动
void flex(double speed);//钩子的伸缩
void grab();//抓取物品的判断

main函数

#include "GoldMiner.h"


void init_IMAGE()//加载图片
{
	for (int i = 0; i < 10; i++)
	{
		char str[1020] = "";
		sprintf_s(str, "./%d.jpg", i);
		loadimage(img+i,str);
	}
	loadimage(img + 10, "./bk.jpg", getwidth(), getheight());
}
void chartlet()//贴图
{
	cleardevice();
	putimage(0, 120, img + 10);//背景
	switch ((role->w)+1)//角色上下转动
	{
	case 1:
		putimage(role->x, role->y, img + 6);
		putimage(role->x, role->y, img + 7);
		break;
	case 2:
		putimage(role->x, role->y, img + 4);
		putimage(role->x, role->y, img + 5);
		break;
	}
	//钩子的绘制
	setlinecolor(YELLOW);
	setlinestyle(PS_SOLID,5);
	line((int)hook->x, (int)hook->y, (int)hook->enx, (int)hook->endy);
	solidcircle((int)hook->enx, (int)hook->endy, 5);
	//物品的绘制
	for (int i = 0; i < Stuff_Max; i++)
	{
		if (stuf[i].exsit == true)
		{
			switch (stuf[i].type)
			{
			case 0://金块
				putimage((int)stuf[i].place_x, (int)stuf[i].plaxe_y, img, SRCAND);
				putimage((int)stuf[i].place_x, (int)stuf[i].plaxe_y, img + 1, SRCPAINT);
				stuf[i].worth=5;//物品价值
				break;
			case 1://钱袋
				putimage((int)stuf[i].place_x, (int)stuf[i].plaxe_y, img + 2, SRCAND);
				putimage((int)stuf[i].place_x, (int)stuf[i].plaxe_y, img + 3, SRCPAINT);
				stuf[i].worth = 10;
				break;
			case 2://石头
				putimage((int)stuf[i].place_x, (int)stuf[i].plaxe_y, img + 8, SRCAND);
				putimage((int)stuf[i].place_x, (int)stuf[i].plaxe_y, img + 9, SRCPAINT);
				stuf[i].worth = 1;
				break;
			}
		}
		
	}
	//分数绘制
	char str[30] = "";
	sprintf(str, "分数:%d", score);
	settextcolor(WHITE);
	setbkmode(TRANSPARENT);
	settextstyle(40, 0, "楷体");
	outtextxy(20, 20, str);
}
void init_role()//角色初始化
{
	role->height = 120;
	role->width = 140;
	role->x = (getwidth() - role->width)/2;//居中
	role->y = 0;
	role->w= 0;
}
bool size_line(Hook* hook)//求当前线的长度
{
	double size= sqrt((hook->enx - hook->x)*(hook->enx - hook->x) + (hook->endy - hook->y)*(hook->endy - hook->y));
	return size <= hook->len;
}
void init_stste()//初始化钩子
{
	hook->len = 50;
	hook->x = getwidth() / 2 -25;
	hook->y = role->height / 2 +35;
	hook->enx = hook->x;
	hook->endy = hook->y + hook->len;
	hook->angle = 0;
	hook->state = nomal;
	hook->vx = 0;
	hook->vy = 0;
	hook->index = -1;
}
void swing(int angle)//摆动
{
	if (hook->state == nomal)//正常状态下时转动,伸缩时不转
	{
		hook->endy = cos(PI / 180 * hook->angle)*hook->len + hook->y;
		hook->enx = sin(PI / 180 * hook->angle)*hook->len + hook->x;
		if (hook->angle > 80)
		{
			hook->dir = left;
		}
		else if (hook->angle< -80)
		{
			hook->dir = right;
		}

		if (hook->dir == right)
		{
			hook->angle += angle ;
		}
		else
		{
			hook->angle -= angle ;
		}
	}
}
void stuff()//物品
{
	//用随机数生成物品位置
	for (int i = 0; i < Stuff_Max; i++)
	{
		stuf[i].size = 50;
		stuf[i].place_x = rand() % (getwidth() - stuf[i].size);
		stuf[i].plaxe_y = rand() % (getheight() -150 ) + 150;	
		stuf[i].type = rand() % 3;
		stuf[i].exsit = true;
	}
}
void flex(int speed)//伸缩
{
	if ( GetAsyncKeyState(VK_SPACE ))//伸长
	{
		
		hook->state = extend;
		hook->vy = cos(PI / 180 * hook->angle)*speed;
		hook->vx = sin(PI / 180 * hook->angle)*speed;
	}
	if (hook->state == extend)
	{
		hook->endy += hook->vy;
		hook->enx += hook->vx;
		role->w++;
	}
	else if (hook->state == shorten)
	{
		hook->endy -= hook->vy;
		hook->enx -= hook->vx;
		if (size_line(hook))
		{
			hook->state = nomal;
		}
		role->w++;//角色上下转动
	}
	//边界
	if (( hook->enx >= getwidth() || hook->enx <= 0 ) || ( hook->endy >= getheight() || hook->endy <= 0 ))
	{
		hook->state = shorten;
	}
}
void grab()//抓取
{
	for (int i = 0; i < Stuff_Max; i++)
	{
		//根据图片大小来决定在哪个范围抓取
		if (stuf[i].type ==0 )
		{
			if ((stuf[i].exsit == true && hook->enx < (stuf[i].place_x + 100) && hook->enx >stuf[i].place_x+80) && (hook->endy < (stuf[i].plaxe_y + 90) && hook->endy > stuf[i].plaxe_y+70))
			{
				hook->index = i;
				break;
			}
		}
		if (stuf[i].type == 1||stuf[i].type==2 )
		{
			if ((stuf[i].exsit == true && hook->enx < (stuf[i].place_x + 47) && hook->enx > stuf[i].place_x + 27) && (hook->endy < (stuf[i].plaxe_y +43) && hook->endy > stuf[i].plaxe_y + 23))
			{
				hook->index = i;
				break;
			}
		}
	}
	if (hook->index != -1)
	{
		hook->state = shorten;//缩短
		stuf[hook->index].place_x = hook->enx-30;
		stuf[hook->index].plaxe_y = hook->endy-30;
		
		if (size_line(hook))
		{
			score += stuf[hook->index].worth;//统计分数
			stuf[hook->index].exsit = false;
			hook->index = -1;
			hook->state = nomal;//缩短
		}
	}
}
int main()
{
	srand((unsigned)time(NULL));
	initgraph(1080, 640);
	init_role();//初始化角色
	init_stste();//初始化钩子
	stuff();//物品
	init_IMAGE();//加载图片
	BeginBatchDraw();//双缓冲
	while (1)
	{
		chartlet();//贴图
		FlushBatchDraw();//双缓冲
		flex(1);//伸缩
		swing(1);//摆动
		grab();//抓取
	}
	while (1);
	return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

黄金矿工—小游戏 的相关文章

  • C语言写游戏——扫雷

    实现效果比较简陋 如图 写游戏需要不同的文件构成 首先看一下资源管理器清楚框架结构 在test c文件里编写整个游戏的运行逻辑 具体代码 define CRT SECURE NO WARNINGS 1 include game h 测试游戏
  • unity期末作业-插针游戏

    unity期末作业 插针游戏 附下载链接 鼠标控制针的发射 圆盘可以显示接住的针数目 若两根针碰到则界面变红 游戏结束 详细情况如下动态图 点我下载 https download csdn net download weixin 43474
  • 潜艇来袭(Qt官方案例-2维动画游戏)

    一 游戏介绍 1 开始界面 启动程序 进入开始界面 2 开始新游戏 点击菜单 File New Game 或者Ctrl N 进入新游戏 开始新游戏之后 会有一个海底的潜艇 和水面舰艇对战 计算机 自动控制潜艇 海底潜艇会隔段时间发射一枚鱼雷
  • 超级等级福利礼包

    文章目录 一 介绍 二 设计等级礼包的目的 1 提升游戏玩家活跃度 2 提升游戏用户吸引力 3 提高游戏用户留存率 4 实现间接收入 5 持续营收 三 玩家心理总结 四 总结该模式的赢利点 五 该模式的应用场景举例 一 介绍 超级等级福利礼
  • 国内比较好的软件接单平台有哪些?

    随着企业信息化水平的提高 已经有很多企业意识到了使用专用软件可以大大提高资金使用率 提高员工的工作效率 降低成本 同现有业务接轨 即软件设计思路和方法的一般过程 包括设计软件的功能和实现的算法和方法 软件的总体结构设计和模块设计 编程和调试
  • 【Unity Shader】屏幕后处理1.0:调整亮度/饱和度/对比度

    1 Unity中实现屏幕特效的基本步骤 什么叫屏幕后处理 Screen post processing effects 渲染完整个场景得到屏幕图像后对图像进行一系列操作 实现各种屏幕特效 这一步我们可以添加很多例如景深 Depth of F
  • 【UGUI】2D头顶血条制作

    前言 近期因为需要制作玩家和敌人头顶的2D血条 查找了很多博客 发现很多都拘束于Canvas的渲染模式必须要设定为ScreenSpace Overlay 还有应该是版本原因 我的是unity2019 1 11f1 用RecttTransfo
  • 想去游戏公司做游戏,最重要的是什么素养?

    首先 要学会沟通 话说 动过去游戏公司的念头 做游戏 感觉很酷 但是 想想自己一不会编程 二不会画画 做策划 那好像是两边受气里外不是人出事第一个背锅的角色 想想也就想想 不过正好前些天我们发过一篇讲去日本学游戏的文章 说不定能派上用场 前
  • 捕鱼游戏源码(数值+完整项目资源)

    目前捕鱼游戏的玩法 逐渐有这些趋势 捕鱼玩法 消除类玩法 捕鱼玩法 模拟经营玩法 捕鱼玩法 建造养成玩法 这些趋势已经有龙头企业逐渐开始做出尝试 但是对大部分团队来讲 对垂直领域的理解不够深刻 对产品理解不够深刻 团队没有沉淀和积累 通常都
  • 俄罗斯方块游戏(C语言)

    简介 俄罗斯方块 Tetris 是一款经典的游戏 下面是用C语言实现俄罗斯方块的示例代码 code include
  • visual studio 一直显示正在准备解决方案

    首先重启电脑 无法解决的情况下执行以下步骤 Kill Visual Studio Open Visual Studio without loading a solution Disable AnkhSvn as Source Control
  • 基于java的飞机大战游戏系统设计与实现

    基于java的飞机大战游戏系统设计与实现 I 引言 A 研究背景和动机 背景 随着现代游戏产业的不断发展 传统的飞行射击游戏已经无法满足玩家对新颖 刺激的需求 因此 设计一个基于Java的飞机大战游戏系统成为了游戏开发人员们的共同目标 动机
  • C++ 游戏服务器方向需要多少功底?

    这篇文章是回答一位知友的提问 现在大二了马上升大三 就读于一个很垫底的211 专业是计算机相关的 但是对本专业内容不感兴趣 希望能从事c 后端的工作 对游戏比较有兴趣 但又不知道需要哪方面的知识 希望各位能给出一个客观的评价或者批评 帮忙指
  • 运行游戏找不到x3daudio1_7.dll怎么解决?教你如何快速修复的教程

    在计算机使用过程中 我们经常会遇到一些错误提示 其中之一就是 x3daudio1 7 dll丢失 这个错误提示可能让我们感到困惑和烦恼 但是不用担心 本文将为您介绍x3daudio1 7 dll丢失的原因以及五种修复方法 帮助您解决这个问题
  • 利用阿里云的尖端数据库解决方案增强游戏数据管理

    在快节奏和动态的游戏世界中 对于努力为玩家提供无缝体验的公司来说 管理大量数据是一项关键挑战 阿里云是亚太地区的主要参与者 也是全球公认的运营数据库管理系统领导者 提供量身定制的创新解决方案 以应对游戏公司面临的独特数据管理挑战 这篇博客探
  • 揭开神秘面纱,探索犹格索托斯的庭院:一款令人陶醉的模拟经营+AVG游戏

    你是否曾梦想过踏入一个充满神秘与奇幻的世界 体验一番独特的冒险 现在 这个梦想将成为现实 我们荣幸地向你介绍一款全新的模拟经营 AVG游戏 犹格索托斯的庭院 犹格索托斯的庭院是一款极具创意的游戏 它将带你进入一个神秘而充满魅力的世界 在这里
  • 全面解析找不到xinput1_3.dll无法继续执行代码的多种解决方案(实用教程)

    xinput1 3 dll文件是什么 xinput1 3 dll是一个动态链接库文件 它是DirectInput的组件之一 DirectInput是微软公司开发的一种输入设备驱动程序 用于处理游戏控制器 键盘 鼠标等输入设备的信号 xinp
  • 游戏开发常见操作梳理之NPC药品商店系统(NGUI版)

    后续会出UGUI Json的版本 敬请期待 游戏开发中经常会出现药品商店 实际操作与武器商店类似 甚至根据实际情况可以简化设置 废话不多说 直接上代码 药品商店的源码 using System Collections using Syste
  • 申泰勇教练的独家人物化身系列即将登陆 The Sandbox

    申泰勇 Shin Tae yong 教练是足球界的传奇人物 他来到 The Sandbox 推出了自己的专属人物化身系列 作为前 K 联赛中场球员和印尼队取得历史性成就的幕后教练 他的传奇经历现在已经影响到了虚拟世界 向过去 现在和未来致敬
  • 计算机Java项目|java游戏账号交易系统

    作者简介 Java领域优质创作者 CSDN博客专家 CSDN内容合伙人 掘金特邀作者 阿里云博客专家 51CTO特邀作者 多年架构师设计经验 腾讯课堂常驻讲师 主要内容 Java项目 Python项目 前端项目 人工智能与大数据 简历模板

随机推荐

  • 您不是订单管理的定向开发者_全面升级投放和营销能力 华为应用市场商业推广助力开发者高效增长...

    9月10日 2020华为开发者大会在东莞松山湖盛大开幕 9月11日下午 在 共舟前行 创新未来 华为应用市场商业推广分论坛上 华为应用市场商业推广产品部部长与现场开发者及合作伙伴分享过去半年取得的成绩 并共同探讨了合作伙伴如何加速获量成长以
  • DNS部署与安全

    1 DNS Domain Name Service 域名服务 作用 为客户机提供域名解析服务器 2 域名组成 2 1 域名组成概述 如 www sina com cn 是一个域名 从严格意义讲 sina com cn 才被称为域名 全球唯一
  • GBDT 梯度提升树(Gradient Boosting Decision Tree)(万字全解)

    目录 一 相关基础知识 二 调用sklearn实现GBDT 1 梯度提升回归树 2 梯度提升分类树 三 参数 属性详解 1 迭代过程涉及的参数 1 n estimators 迭代次数 2 learning rate 学习率参数 3 init
  • Simon Video Course Task 2

    Lesson 01 The tasks This an IELTS training course training has five steps Understand the task what we need to do Break t
  • python硬币识别_OpenCV硬币检测和自动结果检查

    我正在做一个硬币识别项目 我遇到的第一件事就是从图像中正确提取硬币 即使是从非常简单的图像中 有很多很好的硬币检测工作方法 但我认为所有这些都需要人工检查后应用 我测试了其中两种 HoughCircles和threshold及其后的find
  • 智能交通系统调研

    背景 随着微电子技术系统 MEMS 和低功耗的信息交互技术的快速发展 如今已经能够部署大规模无线传感器网络 无线传感器网络是在需要被监视的地点附近或是内部随机地 密集地部署大量的无线传感器结点 传感器网络的应用是多种多样的 不同于传统的无线
  • linux怎么将命令变成汉语,在Linux系统中把firefox火狐游览器转成中文语言的两种方法...

    如果你的Linux操作系统中firefox火狐游览器不是中文语言 你现在要把它们改成中文语言 有两种方法可以实现 其中第二种方法适合所有的Linux发行版 第一种方法 采用系统命令处理 如果所用的Linux系统是Ubuntu Deepin等
  • 什么是原型、原型链?原型和原型链的作用(有图方便理解)

    原型 JS声明构造函数 用来实例化对象的函数 时 会在内存中创建一个对应的对象 这个对象就是原函数的原型 构造函数默认有一个prototype属性 prototype的值指向函数的原型 同时原型中也有一个constructor属性 cons
  • Python数值分析(杜普伊特-福希海默方法)一维固定透射率河流畜水层

    杜普伊特 福希海默方法 所有地下水流量都是三维的 但出于建模目的 流量可以近似为一维或二维 在区域尺度上 与面积相比 大多数含水层相对较薄 因此被称为浅层含水层 在这样的含水层中 流动主要是水平的 并且可以近似为水平面上的二维 水平流量由流
  • 【C语言】结构体的大小是如何计算的?(结构体对齐)

    目录 一 使用sizeof计算结构体的大小 二 影响结构体大小的因素 1 结构体成员的类型 2 结构体成员的对齐方式 3 结构体成员的顺序 三 利用结构体对齐规律计算结构体大小 1 结构体的对齐规则 2 结构体对齐的原因 1 gt 平台原因
  • 使用元学习来进行少样本图像分类

    点击上方 AI公园 关注公众号 选择加 星标 或 置顶 作者 Etienne 编译 ronghuaiyang 导读 你并不总是有足够的图像来训练一个深度神经网络 下面是教你如何通过几个样本让模型快速学习的方法 你并不总是有足够的图像来训练一
  • Mac实践--MAC搭建FTP服务器

    2019独角兽企业重金招聘Python工程师标准 gt gt gt Mac os 搭建FTP SFTP服务器 由于mac拥有自带的FTP工具 因此其实不需要借助其他工具 搭建更加方便 如果你访问过较新版本的Mac OS X中的 共享首选项
  • rockchip-rockxxdemo编译说明

    bin bash ARM编译器路径 20210708 1 修改为安装好路径 2 也可以修改为rv1126本身安装的编译器路径 GCC COMPILER PATH opts gcc arm 8 3 2019 03 x86 64 arm lin
  • Java Map和Set

    1 Map Map是一个接口 该类没有继承自Collection 该类中存储的是
  • 【OSS】阿里云对象存储OSS入门使用 JAVA SDK上传与下载 简单测试案例

    本文包括阿里云对象存储OSS入门使用 上传与下载以及简单测试案例的实现 首先 在阿里云中找到对象存储OSS 点击侧边栏的Bucket列表 创建Bucket列表 根据需求选择配置 创建完成后 点击进入查看概览 找到对应的Endpoint 在后
  • 【Python】JSON模块的使用

    JSON的基本使用 1 内置库 不需要额外安装 json模块是python内置的库 不需要额外安装就可以导入运行 json模块的主要功能是将序列化数据从文件里读取出来或者存入文件 四个函数 json模块的操作使用相对较为简单 该模块只有四个
  • vue3+ts极简教程

    一 依次执行以下四步 即可极速创建项目 跟着敲一次 你会放下2 x 1 npm init vitejs app my vite vue 2 cd my vite vue 3 npm install 4 npm run dev 二 通过两种不
  • 自定义控件——轮播图 ImageCycleView

    1 ImageCycleView Android 轮播图菜单 Huzz 出品 主要是对图片的循环播放 默认播放时间3秒 可以点击控制播放 添加JAR包 android smart image view 1 0 0 jar包 1 自定义类 i
  • 高校排课的数学模型

    一 高校排课面临的主要问题 1 1问题的提出 课程表问题又称时间表问题 课表编排是一个多指标的优化决策冋题 是组合规划中的典型问题 课程表的编排就是解决对时间和空间资源争夺而引起的冲突 20世纪60年代末 国外就有人开始研究课表编排问题 1
  • 黄金矿工—小游戏

    黄金矿工 使用easy x图形库制作 一 游戏思路 游戏的核心是如何让钩子动起来 怎么伸缩 怎么抓物品3个部分 1 钩子的转动 钩子的转动可以根据角度的变化来决定 我们让起始坐标不变 让钩子的结尾坐标变化 在限定角度的范围即可 求结尾坐标思