C语言课设:植物大战僵尸-优快云博客
目录
贝塞尔曲线
Bézier curve(贝塞尔曲线) 是应用于二维图形应用程序的数学曲线。 曲线定义:起始点、终止点(也称锚点)、两个控制点。通过调整控制点,贝塞尔曲线的形状会发生变化。 1962年,法国数学家Pierre Bézier第一个研究了这种矢量绘制曲线的方法,并给出了详细的计算公式,因此按照这样的公式绘制出来的曲线就用他的姓氏来命名,称为贝塞尔曲线。
利用贝塞尔曲线的原理可以绘制出一条光滑的的曲线
IMAGE类
IMAGE类似声明结构体,IMAGE imgBg可以定义变量
对图片进行操作用IMAGE定义变量
IMAGE* img
getwidth()返回指定图片的宽度,gethight()返回指定图片的高度
引用方式img->getwidth(),表示获得img中存储的图片信息
图片显示
loadimage()
函数的作用是从图片文件提取图片从而显示图片
代码实现:通过路径将图片存进变量imgBg
//加载单张图片
IMAGE imgBg;
loadimage(&imgBg, "res/bg.jpg");
加载多张图片时可搭配sprintf_s()和for循环使用
for (int i = 0; i < 10; i++)
{
sprintf_s(name, sizeof(plant_name), "res/sunshine/%d.png", i + 1);//生成文件名
loadimage(&img[i], name);
}
加载图片所在的文件夹必须和main.cpp在同一个文件内
putimage()
函数的作用是打印图片,传参是图片打印大小,是由坐标确定的,这个函数的几个重载用于在当前设备上绘制指定图像。
putimage(x坐标, y坐标, img);
initgraph()
函数用于创建图形窗口,参数是高和宽(第三个参数可写可不写)
//在屏幕上绘制一个高600,宽900的窗口
initgraph(600, 900, 1);//第三个参数可默认为1
sprintf_s()
sprintf()函数这个函数的作用是将一些数据,格式化的组织成字符串
第一个参数是字符串保存的空间,第二个参数是格式化,第三个参数是需要被组织的数据
sprintf_s()是sprintf()的安全版本,通过指定缓冲区长度来避免sprintf()存在的溢出风险。
其返回值是字符个数
sprintf_s(格式化的地址, 格式化大小,"路径")
缓冲
BeginBatchDraw(开始缓冲)和EndBatchDraw(结束缓冲)都是easyx中的两个函数,返回值均为void
运行BeginBatchDraw后,所有的绘图都不再显示在屏幕上,而是在内存中进行
直到碰到EndBatchDraw,之前所有在内存中绘图的成品将一并展示在屏幕中
鼠标消息
基本鼠标消息
WM_LBUTTONDOWN - 鼠标左键按下
WM_LBUTTONUP - 鼠标左键抬起
WM_RBUTTONDOWN - 鼠标右键按下
WM_RBUTTONUP - 鼠标右键抬起
WM_MOUSEMOVE - 鼠标移动消息
peekmessage ()
看看消息堆栈中有没有消息。不管有没有,获取结果以后,立即返回(不阻塞)
ExMessage类
ExMessage用于保存鼠标消息
定义变量
ExMessage msg;
msg.message 是消息结构体中的一个字段,用于指定接收到的消息的类型或标识符。
msg.x当前鼠标 x 坐标(物理坐标)。
msg.y当前鼠标 y 坐标(物理坐标)。
Windows 操作系统中有很多不同类型的消息,例如鼠标事件、键盘事件、窗口事件等等,每种消息都有自己的标识符。当接收到消息时,可以通过检查 message 字段的值来判断接收到的是哪种类型的消息,从而采取相应的处理方式。
memset()
memset是一个初始化函数,作用是将某一块内存中的全部设置为指定的值。
void *memset(void *s, int c, size_t n);
s指向要填充的内存块。
c是要被设置的值。
n是要被设置该值的字符数。
返回类型是一个指向存储区s的指针。
通常用于对数组的整体初始化
IMAGE img[10];//定义IMAGE类型的数组
memset(img, 0, sizeof(img));
FILE类
对图片进行操作用FILE定义变量
fopen()
用指定的形式打开文件——即fopen(需要打开文件的文件名,打开文件的方式)
fopen(_In_z_ char const* _FileName,_In_z_ char const* _Mode);
即fopen(需要打开文件的文件名,打开文件的方式)
需要打开文件的文件名:
需要和exe文件在同一目录下,或者写出相对路径或绝对路径
fopen的返回值是对应文件的指针,如果打不开文件则返回NIULL指针
打开方式:
1.“r” 以"读"的方式打开一个文本文件(只能读)。
2.“r+” 在"r"的基础下增加了"写"。
3.“rb” 以"读"的方式打开一个二进制文件(只能读)。
4.“rb+” 在"rb"的基础下增加了"写"。
5.“w” 以"写"的方式创建一个文本文件,
如果这个文件已经存在,就会覆盖原来的文件。
6.“w+” 在"w"的基础下增加了"读"。
7.“wb” 以"写"的方式创建一个二进制文件。
8.“wb+” 在"wb"的基础下增加了"读"。
9.“a” 以"尾部追加"的方式打开一个文本文件(只能写)。
10.“a+” 在"a"的基础下增加了"读"。
11.“ab” 以"尾部追加"的方式打开一个二进制文件(只能写)。
12.“ab+” 在"ab"的基础下增加了"读"。
fclose()
关闭文件——fclose(FILE* name)参数是将要关闭的文件指针
fclose(_Inout_ FILE* _Stream);
在文件操作完成后需将文件关闭,即fclose(文件名)
LOGFONT类
LOGFONT 结构定义字体的属性。
lfHeight:字体的字符单元格或字符的高度
lfWeight:字体的粗细
fFaceName:指向NULL结尾的字符串的指针,此字符串即为所使用的字体名称,其长度不能超过32个字符,如果为空,则使用系统默认的字体。
lfQuality指定文字的输出质量。
gettextstyle(指针)这个函数用于获取当前文字样式。
settextstyle() 设置图形文本当前字体、文本显示方向(水平显示或垂直显示)以及字符大小。
SetBkMode(TRANSPARENT):设置绘图dc的背景模式为透明模式
LOGFONT f;//设置更改字体格式的变量
gettextstyle(&f);//获取字体的文本格式
f.lfHeight = 30;//字体高度30
f.lfWeight = 15;//设置字体的粗细
strcpy(f.lfFaceName, "Segoe UI Black");//设置字体格式
f.lfQuality = ANTIALIASED_QUALITY;//抗锯齿
settextstyle(&f);
setbkmode(TRANSPARENT);//设置字体背景透明
setcolor(BLACK);//设置字体颜色(黑色)
抗锯齿
抗锯齿是一种图像处理技术,用于减少图像边缘处出现的锯齿状的走样现象 在字体渲染中,如果没有启用抗锯齿功能,那么在字体边缘处会出现锯齿状的边缘,影响视觉效果和清晰度。而启用了抗锯齿功能后,字体边缘处的锯齿状边缘会被平滑处理,使得整个字体看起来更加流畅、清晰、自然
outtextxy
这个函数用于在指定位置输出字符串。
此函数仅在图形模式下生效
outtextxy (int x , int y , "Text");
MessageBox()
MessageBox指的是显示一个对话框
参数:
MessageBox( HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType)
-
hWnd:
此参数代表消息框拥有的窗口。如果为NULL,则消息框没有拥有窗口。
-
lpText:
消息框的内容。
-
lpCaption:
消息框的标题。
-
uType:
指定一个决定对话框的内容和行为的位标志集。
exit()
-
exit() 结束当前进程/当前程序
-
exit(1)表示进程正常退出. 返回 1;
-
exit(0)表示进程非正常退出. 返回 0.
播放音乐
mciSendString()(音乐略有延迟)
头文件#include <mmsystem.h>
库#pragma comment(lib,"winmm.lib")
mciSendString函数的参数(一共有4个参数):
mciSendString(操作指令 , 获取返回的信息(字符串) , 返回信息的长度 , 窗口句柄(一般为NULL));
mciSendString("play 音乐路径", 0, 0, NULL);
常用命令:
1.打开(Open)
2.播放(Play)
3.暂停(Pause)
4.继续(Resume)
5.停止(Stop)
6.关闭(Colse)
PlaySound()
BOOL PlaySound(LPCSTR pszSound, HMODULE hmod,DWORD fdwSound);
PlaySound是Windows中用来播放声音的API
PlaySound只能播放WAV文件。
使用PlaySound函数时要包含以下头文件:
#include\<windows.h>
#include\<Mmsystem.h>
#pragma comment(lib,"winmm.lib")
using namespace std;
而且顺序不能错,“windows.h”要在“Mmsystem.h”前面。
参数如下:
PlaySound("音乐路径", NULL, SND_FILENAME | SND_ASYNC);
hmod一般设置为空(NULL)
-
SND_APPLICATION 用应用程序指定的关联来播放声音。
SND_ALIAS pszSound参数指定了注册表或WIN.INI中的系统事件的别名。
SND_ALIAS_ID pszSound参数指定了预定义的声音标识符。
SND_ASYNC 用异步方式播放声音,PlaySound函数在开始播放后立即返回。
SND_FILENAME pszSound参数指定了WAVE文件名。
SND_LOOP 重复播放声音,必须与SND_ASYNC标志一块使用。
SND_MEMORY 播放载入到内存中的声音,此时pszSound是指向声音数据的指针。
SND_NODEFAULT 不播放缺省声音,若无此标志,则PlaySound在没找到声音时会播放缺省声音。
SND_NOSTOP PlaySound不打断原来的声音播出并立即返回FALSE。
SND_NOWAIT 如果驱动程序正忙则函数就不播放声音并立即返回。
SND_PURGE 停止所有与调用任务有关的声音。若参数pszSound为NULL,就停止所有的声音,否则,停止pszSound指定的声音。