梦开始的地方
由于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;
}
效果是怎样的呢?
首先我们得背景会出来
我们这个鼠标在这个窗口内进行左右键操作会打出不同的文字