game项目(梦开始的地方)

梦开始的地方

由于easyx只支持vis,所以这个项目的书写以后都是在vis上进行,希望自己能够把这个项目好好完成,相信自己,加油!

我们需要一个头文件来包括作图工具
(这个头文件在easyx上面下载)

#include<graphics.h>

想一想我们平时玩游戏的时候都是需要一个窗口来作为显示游戏的主体,所以最开始我们需要一个建立窗口函数initgraph();既然已经打开了窗口那么就需要关闭窗口,所以我们选哟用到关闭窗口函数closegraph();
所有我们最开始的窗口就建立好了
 

//1.包含一个图形库的头文件
#include<graphics.h>
#include<iostream>
using namespace std;
int main()
{
	//2.建立一个窗口,使用一个建立窗口函数,需要确定窗口大小
	initgraph(640, 480);//一般默认为640 480

	getchar();

	//既然打开我们就需要关闭窗口,需要用到关闭窗口函数
	closegraph();
	return 0;
}

圆的绘图

介绍几个绘图的函数

 注意这个坐标图的起点是在整个框框的最左上角为(0,0)

接下来我门来写我们的第一个程序 画圆

//1.包含一个图形库的头文件
#include<graphics.h>
#include<iostream>
using namespace std;
int main()
{
	//2.建立一个窗口,使用一个建立窗口函数,需要确定窗口大小
	initgraph(640, 480);//一般默认为640 480
	//画圆函数
	circle(100, 100, 100);
	getchar();
	//既然打开我们就需要关闭窗口,需要用到关闭窗口函数
	closegraph();
	return 0;
}

实际效果如下

设置背景

我们想要写游戏总需要一个游戏背景吧,我们一般都是在一块黑黑的屏幕下进行各种各样的操作,这样显得太枯燥无味了,所以就需要将这个改变一下。

//背景
setbkcolor(WHITE);//设置背景颜色,这两步一定不能少
cleardevice();//初始化,相当于清屏

值得注意的是,这个是线填充颜色,然后再清屏

设置颜色

我们可以给背景上颜色,同时也可以给线条上颜色,这里就有几个函数是专门干这个事的。

//填颜色
setfillcolor(BLUE);	//设置颜色,我喜欢蓝色
setlinecolor(RED);//设置线条颜色
setlinestyle(PS_SOLID, 5);//设置线条样式  setlinestyle(字体,长度)

文字

颜色 背景 图形我们都有了,接下来就是上文字了(其具体使用方法都再注释下面了)

//文字
settextcolor(BLACK);//设置字体颜色,字体最开始的颜色就是白色 
settextstyle(50, 0, "楷体");//设置字体样式,分别为高度,宽度,字体。
setbkmode(TRANSPARENT);//这个transparent的意思就是透明的意思,就可以将文字的边框给隐藏起来了,OPAQUE这个是不透明的意思
settextcolor(RGB(255, 102, 153));//这个是设置字体颜色,可以用qq截图加上c就可以截上我们喜欢的颜色了,也可以在画图中自定义
outtextxy(50, 50, "我是一个大帅哥");//输出字符串,#在这里一定要记得在前面要加上一个大写的L,这样就不会报错了
//还有第二种解决方案,就是使用TEXT()将字符串包起来
//还有第三种解决方案就是使用_T()
//还有第四种解决方案就是:项目->属性->配置属性->高级->字符集->改为多字符字符集,注意改完之后就不能使用以上的改变方式

我们平时玩游戏的时候都是需要按下按钮的,这个按钮就是一个矩形再加上一段文字,而这个文字一般都是在矩形中间

所以接下来就是对如何将文字放在矩形中间进行处理

//把文字居中
solidrectangle(100, 200, 500, 300);//居中的一些操作 宽度=500-100,高度=300-100
char arr[] = "居中输出";
int w = 400 / 2 - textwidth(arr) / 2;//这个400是怎么来的呢?就是前面计算500-100得来的,这个textwidth就是用于计算字符串宽度的
int h = 100 / 2 - textheight(arr) / 2;//这个100是怎么来的呢?就是前面计算高度300-100得来的,这个textheight就是用于计算高度的
outtextxy(w + 100, h + 200, arr);

图像处理函数

如何来处理图像呢?我们需要在网上下载图片,将图片放在我们编写代码的文件中,我们再使用相对路径或者绝对路径对图片进行提取,提取的方式就是将图片的名称写进相对应的函数中就可以了

//对图片进行操作
IMAGE img;//这个就是相当于定义了一个图形变量
loadimage(&img, "./鸡你太美.jpg", 250, 250);//相对路径:"./"表示当前文件夹下 "../"就是表示当前文件夹的上一节  绝对路径:就是直接使用这个文件的所在位置很麻烦 没有相对路径好用
//这个loadimage函数,第一个变量就是给img变量赋值,第二个就是其具体的值,第三第四就是这个图片的大小
putimage(0, 0, &img);

值得注意的是,对于图像我们使用一个变量来承载的,所以我们需要定义一个变量IMAGE就是定义图形变量的方式
还值得一提的是这个相对路径和绝对路径的区别,相对路径是在本文件夹和上一个文件夹中,而绝对路径就是i直接指名道姓的来(而且还不能有空格,所以我觉得相对路径要优于绝对路径)。

//对图片进行操作
IMAGE img;//这个就是相当于定义了一个图形变量 250 ,250
loadimage(&img, "./鸡你太美.jpg", 250, 250);//相对路径:"./"表示当前文件夹下 "../"就是表示当前文件夹的上一节  绝对路径:就是直接使用这个文件的所在位置很麻烦 没有相对路径好用
//这个loadimage函数,第一个变量就是给img变量赋值,第二个就是其具体的值,第三第四就是这个图片的大小
putimage(0, 0, &img);

鼠标操作

在fps游戏中某些2.5d,2d游戏中很多都是靠鼠标键去攻击的,所以我们就需要对鼠标进行对应的操作。

我们需要一个不断循环的while(1)来使得这个项目能够一直

//鼠标操作
while (1)
{

	if (MouseHit())
	{
		//cleardevice();//清屏
		MOUSEMSG msg = GetMouseMsg();
		switch (msg.uMsg)
		{
		case WM_LBUTTONDOWN://lbuttondown 按下鼠标左键
			outtextxy(msg.x - 120, msg.y - 30, "鸡你太美");
			break;
		case WM_RBUTTONDOWN://rbuttondown 按下鼠标右键
			outtextxy(msg.x - 50, msg.y - 30, "哎呀!");
			break;
		}
	}
}

outtextxy函数我想到如果将我们鼠标的位置输进去,再进行一些调整就能将字符按照中心进行输出了

最终代码和效果

//1.包含一个图形库的头文件
#include<graphics.h>
#include<iostream>
#include<cstdio>
#include<easyx.h>
#include<conio.h>//这个是有关键盘的头文件 _getch()
using namespace std;
int main()
{
	//2.建立一个窗口,使用一个建立窗口函数,需要确定窗口大小
	initgraph(1000, 640, SHOWCONSOLE);//一般默认为640 480
	//showconsole代表展示控制台,NOCLOSE关闭关闭键,NOMINIMIZE关闭最小化键
	//若想要及关闭关闭键又想要关闭最小化键,就需要将用‘|’这个就可以了 有点&&的意思

	//背景
	setbkcolor(WHITE);//设置背景颜色,这两步一定不能少
	cleardevice();//初始化,相当于清屏

	//填颜色
	setfillcolor(BLUE);	//设置颜色,我喜欢蓝色
	setlinecolor(RED);//设置线条颜色
	setlinestyle(PS_SOLID, 5);//设置线条样式  setlinestyle(字体,长度)

	//画圆
	circle(100, 100, 100);//画圆函数(只有边框的)
	fillcircle(200, 100, 100);//实心的圆(带有边框的圆)
	solidcircle(300, 100, 100);//正真意义上的实心圆

	//文字
	settextcolor(BLACK);//设置字体颜色,字体最开始的颜色就是白色 
	settextstyle(50, 0, "楷体");//设置字体样式,分别为高度,宽度,字体。
	setbkmode(TRANSPARENT);//这个transparent的意思就是透明的意思,就可以将文字的边框给隐藏起来了,OPAQUE这个是不透明的意思
	settextcolor(RGB(255, 102, 153));//这个是设置字体颜色,可以用qq截图加上c就可以截上我们喜欢的颜色了,也可以在画图中自定义
	outtextxy(50, 50, "我是一个大帅哥");//输出字符串,#在这里一定要记得在前面要加上一个大写的L,这样就不会报错了
	//还有第二种解决方案,就是使用TEXT()将字符串包起来
	//还有第三种解决方案就是使用_T()
	//还有第四种解决方案就是:项目->属性->配置属性->高级->字符集->改为多字符字符集,注意改完之后就不能使用以上的改变方式

	//把文字居中
	solidrectangle(100, 200, 500, 300);//居中的一些操作 宽度=500-100,高度=300-100
	char arr[] = "居中输出";
	int w = 400 / 2 - textwidth(arr) / 2;//这个400是怎么来的呢?就是前面计算500-100得来的,这个textwidth就是用于计算字符串宽度的
	int h = 100 / 2 - textheight(arr) / 2;//这个100是怎么来的呢?就是前面计算高度300-100得来的,这个textheight就是用于计算高度的
	outtextxy(w + 100, h + 200, arr);


	/
	//对图片进行操作
	IMAGE img;//这个就是相当于定义了一个图形变量 250 ,250
	loadimage(&img, "./鸡你太美.jpg", 1000, 640);//相对路径:"./"表示当前文件夹下 "../"就是表示当前文件夹的上一节  绝对路径:就是直接使用这个文件的所在位置很麻烦 没有相对路径好用
	//这个loadimage函数,第一个变量就是给img变量赋值,第二个就是其具体的值,第三第四就是这个图片的大小
	putimage(0, 0, &img);

	//鼠标操作
	while (1)
	{

		if (MouseHit())
		{
			//cleardevice();//清屏
			MOUSEMSG msg = GetMouseMsg();
			switch (msg.uMsg)
			{
			case WM_LBUTTONDOWN://lbuttondown 按下鼠标左键
				outtextxy(msg.x - 120, msg.y - 30, "鸡你太美");
				break;
			case WM_RBUTTONDOWN://rbuttondown 按下鼠标右键
				outtextxy(msg.x - 50, msg.y - 30, "哎呀!");
				break;
			}
		}
	}

	getchar();

	//既然打开我们就需要关闭窗口,需要用到关闭窗口函数
	closegraph();
	return 0;
}

效果是怎样的呢?

首先我们得背景会出来

我们这个鼠标在这个窗口内进行左右键操作会打出不同的文字

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/402633.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024.2.21 模拟实现 RabbitMQ —— 实现转发规则

目录 需求分析 直接交换机&#xff08;Direct &#xff09; 主题交换机&#xff08;Topic &#xff09; 扇出交换机&#xff08;Fanout &#xff09; Topic 交换机转发规则 routingKey 组成 bindingKey 组成 匹配规则 情况一 情况二 情况三 实现 Router 类 校验 b…

为新固态硬盘安装操作系统

目录 背景方案具体步骤1 为新硬盘进行分区2 下载Dism3 下载win10的iso文件4 通过Dism 重装系统5 从biso调整启动顺序5 遗留问题 参考资料 背景 情况是这样的&#xff0c;我的电脑本来就有一块sata的固态硬盘&#xff0c;作为c盘&#xff0c;装载的是win10系统。 一方面只有500…

滚雪球学Java(68):全面了解Java中常用的集合类:LinkedHashMap的应用与实践

咦咦咦&#xff0c;各位小可爱&#xff0c;我是你们的好伙伴——bug菌&#xff0c;今天又来给大家普及Java SE相关知识点了&#xff0c;别躲起来啊&#xff0c;听我讲干货还不快点赞&#xff0c;赞多了我就有动力讲得更嗨啦&#xff01;所以呀&#xff0c;养成先点赞后阅读的好…

【JAVA高级面试题】运用锁机制实现一个自定义的阻塞队列

文章目录 前言实战演示写在最后 前言 前几天看见一个高级Java面试题&#xff0c;我觉得很有代表意义。既考察了面试者的基本锁机制运用&#xff0c;也了解了阻塞队列的产生实现原理。先分享出来&#xff0c;以供鉴赏。 面试题&#xff1a;实现一个自定义的阻塞队列&#xff0c…

git@github.com: Permission denied (publickey).

这个问题是使用git克隆自己的私有代码仓库时发现的&#xff0c;虚拟机中执行下面的指令生成了ssh私钥和公钥 ssh-keygen并且成功将公钥上传到了github上 但是执行git clone克隆私有仓库时依旧失败&#xff0c;报错内容和标题差不多 通过这个报错最终还是锁定了问题&#xff…

牛客网 JZ53 数字在升序数组中出现的次数

思路&#xff1a; 因为是非降序数组&#xff0c;所以可以通过二分法快速排查范围&#xff0c;等mid值找到对应k时&#xff0c;只需要往前找有多少个k和往后找有多少个k&#xff0c;计算出总数即可 答案&#xff1a; int GetNumberOfK(int* nums, int numsLen, int k ) {int…

程序员必备技能----删库跑路大总结

删库跑路大总结&#xff0c;各个都是大杀器&#xff0c;破坏性太大&#xff0c;轻易不要尝试。 删除linux根目录&#xff0c;用户目录&#xff0c;其实还可以增加一个删除/etc。删除&#xff08;清除&#xff09;数据库。删除redis缓存和持久化文件。删除mongodb库。git push …

Android 沉浸式状态栏

过时的API //设置默认隐藏虚拟按键&#xff0c;虚拟按键显示后为半透明protected open fun hideNavigationBarAndFullScreen() {val flags: Int// This work only for android 4.4flags if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT) {// This work only for a…

Java面向对象(四)

一、面向对象特征&#xff08;三&#xff09;---多态 父类引用指向子类的对象&#xff0c;从而产生多种形态 例&#xff1a; Animal dog new Dog(); 同一种事物&#xff0c;在不同的时刻表现不同的状态前提&#xff1a;二者存在直接或间接的继承关系时&#xff0c;/*//装狗pu…

SSH tunneling 简明示例

基本概念 SSH tunneling又称为SSH port forwarding。 如果想快速了解其应用场景&#xff0c;这篇文章A short guide to SSH port forwarding 很不错。其详细解释了Client to Server的Local Forwarding。虽然没有涉及Server to Client的Remote Forwarding&#xff0c;但他也指…

高盛:日本这轮通胀是否可持续,关键看房租

租金在日本CPI中的权重高达20%&#xff0c;高盛预计短期内租金将继续拖累通胀至1.7%或以下&#xff0c;长期有望温和上行&#xff0c;使通胀稳在2%的水平。 日本正在转向“去通缩”&#xff0c;房租能否支撑通胀态势&#xff1f; 在日股今年一路高歌、有望“收复失地”时&…

STM32 4位数码管和74HC595

4位数码管 在使用一位数码管的时候&#xff0c;会用到8个IO口&#xff0c;那如果使用4位数码管&#xff0c;难道要使用32个IO口吗&#xff1f;肯定是不行的&#xff0c;太浪费了IO口了。把四个数码管全部接一起共用8个IO口&#xff0c;然后分别给他们一个片选。所以4位数码管共…

想高薪就业鸿蒙HarmonyOS 开发岗位,到底该学习些啥?

鸿蒙是什么&#xff1f; 经过十多年的发展&#xff0c;传统移动互联网的增长红利已渐见顶。万物互联时代正在开启&#xff0c;应用的设备底座将从几十亿手机扩展到数百亿 IoT 设备。GSMA 预测到 2025 年&#xff0c;全球物联网终端连接数量将达 246 亿个&#xff0c;其中消费物…

Nginx网络服务三-----(三方模块和内置变量)

1.验证模块 需要输入用户名和密码 我们要用htpasswd这个命令&#xff0c;先安装一下httpd 生成文件和用户 修改文件 访问页面 为什么找不到页面&#xff1f; 对应的路径下&#xff0c;没有这个文件 去创建文件 去虚拟机浏览器查看 有的页面不想被别人看到&#xff0c;可以做…

电脑蓝牙在哪里打开?1分钟轻松打开蓝牙!

“我在操作电脑的时候想将电脑的蓝牙打开来连接音响和键盘&#xff0c;但是不知道电脑蓝牙应该如何打开&#xff0c;有什么比较简单的方法吗&#xff1f;” 随着无线技术的日益发展&#xff0c;蓝牙已成为连接各种设备的重要桥梁。无论是传输文件、音频还是与外部设备进行通信&…

mysql优化指南之原理篇

之前碰到一个线上问题&#xff0c;在接手一个同事的项目后&#xff0c;因为工期比较赶&#xff0c;我还没来得及了解业务背景和大致实现&#xff0c;只是了解了上线发布的顺序和验证方式就进行了上线&#xff0c;在上线进行金丝雀的时候系统还没发生什么异常&#xff0c;于是我…

独家深度 | 一文看懂 ClickHouse vs Elasticsearch:谁更胜一筹?

简介&#xff1a; 本文的主旨在于通过彻底剖析ClickHouse和Elasticsearch的内核架构&#xff0c;从原理上讲明白两者的优劣之处&#xff0c;同时会附上一份覆盖多场景的测试报告给读者作为参考。 作者&#xff1a;阿里云数据库OLAP产品部 仁劼 原文地址:https://developer.ali…

【鸿蒙 HarmonyOS 4.0】路由router

一、介绍 页面路由指在应用程序中实现不同页面之间的跳转和数据传递。HarmonyOS提供了Router模块&#xff0c;通过不同的url地址&#xff0c;可以方便地进行页面路由&#xff0c;轻松地访问不同的页面。 二、页面跳转 2.1、两种跳转模式&#xff1a; router.pushUrl()&…

为全志D1开发板移植LVGL日历控件和显示天气

利用TCP封装HTTP包请求天气信息 Linux还真是逐步熟悉中&#xff0c;现在才了解到Linux即没有原生的GUI&#xff0c;也没有应用层协议栈&#xff0c;所以要实现HTTP应用&#xff0c;必须利用TCP然后自己封装HTTP数据包。本篇即记录封装HTTP数据包&#xff0c;到心知天气请求天气…

【SiamFC】《Fully-Convolutional Siamese Networks for Object Tracking》

ECCV 2016 Workshops 文章目录 1 Background and Motivation2 Related Work3 Advantages / Contributions4 Method5 Experiments5.1 Datasets and Metrics5.2 The OTB-13 benchmark5.3 The VOT benchmarks5.4 Dataset size 6 Conclusion&#xff08;own&#xff09;/ Future wo…