文章目录

  • 前言
  • 一、绘制
    •   边框绘制
    •   图形绘制
    •   批量绘图
  • 二、输出
  • 三、输入
  • 四、事件响应
    •    鼠标事件响应
    •    键盘事件响应
  • 五、多媒体
    •    图片
    •    音频
  • 六、其他
    •   读写应用程序的配置信息文件
    •   设置窗口标题
    •   随机数函数
    •   时间函数
    •   将资源(图片、音频等)嵌入 exe
    •   游戏制作流程
    •   项目

前言

  本篇文章是在学习《一步一步写带界面的程序(基于 EasyX 等库)》 2019 年 6 月 16 日·席锦的文档过程的记录总结,不作商用,如有侵权,告知删改
  EasyX 是针对 C/C++ 的图形库,可以帮助使用C/C++语言的程序员快速上手图形和游戏编程。比如,可以用 VC + EasyX 很快的用几何图形画一个房子,或者一辆移动的小车,可以编写俄罗斯方块、贪吃蛇、黑白棋等小游戏,可以练习图形学的各种算法,等等(来自百度百科)。easy-x的下载、安装请自行查找 。本教程基于vs2019(貌似easyx不支持vscode)

下载: 官网地址

链接: easy-x中文参考手册.

下载安装流程转载自博主genius:

版权声明:本文为博主-genius-x-的原创文章,遵循 CC 4.0 BY-SA 版权协议
genius
(链接:https://blog.csdn.net/qq_25327609/article/details/78917727)


测试代码:

#include <graphics.h> // 引用 EasyX 图形库
#include <stdio.h>
int main()
{initgraph(640, 480);//创建一个宽 640 x 高 480 像素的窗口,注意窗口左上角为原点,水平向右为x正向,竖直向下为y正向//initgraph(640, 480, SHOWCONSOLE);创建一个宽 640 x 高 480 像素的窗口,同时显示控制台窗口    //initgraph(640, 480, SHOWCONSOLE | NOCLOSE);创建一个宽640 x高480像素的窗口,同时显示控制台窗口,并禁用关闭按钮:outtextxy(0,10,_T("Hello Easy-x!")); // 在坐标(0,10)处输出Hello Easy-x!getchar(); // 暂停程序运行,查看输出结果closegraph(); // 关闭图形界面return 0;
}

一、绘制

  unicode 字符集函数与多字节字符集下函数各自对应的函数名有所不同,编译报错考虑更换字符集
  为了整体程序风格统一,这里默认将字符集由多字节字符集(MBCS)改为unicode 字符集。在修改成 unicode 后,将可能面临原来的函数无法正常使用的问题,此时只需要用 unicode 字符集下的函数替换多字节字符集下对应的函数即可。替换可百度关键字: ** unicode。其中**为多字节字符集下的函数名。

  RGB 色彩模式是工业界的一种颜色标准,是通过对红、绿、蓝三个颜色通道
的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB 即是代表红、绿、蓝三个通道的颜色,这个标准几乎包括了人类视力所能感知的所有颜色,是目前运用最广的颜色系统之一。(来自百度百科:RGB)
附:颜色值在线查询网址:颜色值

  传统的 0xFFFFFF (EasyX 的 0xFFFFFF 每组依次表示的通道颜色蓝、绿、红三个通道的颜色,其余相同)==

  还可以使用 传统的 0xFFFFFF来表示颜色。实际上 0xFFFFFF 是颜色值的十六进制写法。尾部 6 个字符分成 3 组,每组含 2 个字符,每组依次表示红、绿、蓝三个通道的颜色,合在一起表示一个颜色。

推荐使用RGB()

  边框绘制

绘制线段前要设置线段的颜色和样式(顺序无要求,但必须在绘制线段前)

setlinecolor(RGB(0, 0, 255));//设置线的颜色
setlinestyle(PS_DASHDOT);//设置线的样式
line(10,10,10,20);//绘制线段起点坐标(10,10),终点坐标(10,20)

该样式由直线样式、端点样式、连接样式三类组成。可以是其中一类或多类的组合。同一类型中只能指定一个样式。直线样式可以是以下值:
值 含义
PS_SOLID 线形为实线。
PS_DASH 线形为:------------
PS_DOT 线形为:············
PS_DASHDOT 线形为:-·-·-·-·-·-·
PS_DASHDOTDOT 线形为:-··-··-··-··
PS_NULL 线形为不可见。
PS_USERSTYLE 线形样式为用户自定义,由参数 puserstyle 和 userstylecount 指定。

宏 PS_STYLE_MASK 是直线样式的掩码,可以通过该宏从画线样式中分离出直线样式。

端点样式可以是以下值:

值 含义
PS_ENDCAP_ROUND 端点为圆形。
PS_ENDCAP_SQUARE 端点为方形。
PS_ENDCAP_FLAT 端点为平坦。

宏 PS_ENDCAP_MASK 是端点样式的掩码,可以通过该宏从画线样式中分离出端点样式。

连接样式可以是以下值:

值 含义
PS_JOIN_BEVEL 连接处为斜面。
PS_JOIN_MITER 连接处为斜接。
PS_JOIN_ROUND 连接处为圆弧。

宏 PS_JOIN_MASK 是连接样式的掩码,可以通过该宏从画线样式中分离出连接样式。

掩码宏表示对应样式组所占用的所有位。
例如,对于一个已经混合了多种样式的 style 变量,如果希望仅将直线样式修改为点划线,可以这么做:style = (style & ~PS_STYLE_MASK) | PS_DASHDOT;

示例:
设置画线样式为点划线:
setlinestyle(PS_DASHDOT);设置画线样式为宽度 3 像素的虚线,端点为平坦的:
setlinestyle(PS_DASH | PS_ENDCAP_FLAT, 3);设置画线样式为宽度 10 像素的实线,连接处为斜面:
setlinestyle(PS_SOLID | PS_JOIN_BEVEL, 10);设置画线样式为自定义样式(画 5 个像素,跳过 2 个像素,画 3 个像素,跳过 1 个像素……),端点为平坦的:
DWORD a[4] = {5, 2, 3, 1};
setlinestyle(PS_USERSTYLE | PS_ENDCAP_FLAT, 1, a, 4);

绘制元素点只需要putpixel(x,y,RGB()),但要注意坐标的度量单位是像素,单一颜色的极小方格,循环下,点可以连成线段、图形、文字等。

putpixel(10,10,RGB(0,255,0));在(10,10)处绘制一个绿色点
for (i=10;i<100;i++)
{putpixel(i,8,RGB(255,0,0));putpixel(i,9,RGB(255,0,0));putpixel(i,10,RGB(255,0,0));putpixel(i,11,RGB(255,0,0));putpixel(i,12,RGB(255,0,0));}

  图形绘制

无填充图框:设置画线颜色和样式(无顺序要求,但必须在绘制空心框之前)
有填充外框:设置画线颜色、样式和填充颜色、样式(无顺序要求,但必须在绘制填充框之前)
无外框填充:设置填充颜色、样式(无顺序要求,但必须在绘制无外框的填充图形之前)
注意:**多边形函数polygon()、fillpolygon()、solidpolygon() **
参数:
points<每个点的坐标,数组元素个数为 num。该函数会自动连接多边形首尾>
num<多边形顶点的个数>

//无填充图框setlinecolor(RGB(0, 255, 0));setlinestyle(PS_SOLID);circle(40, 40, 20);
//有填充外框setlinecolor(RGB(0, 255, 0));setlinestyle(PS_SOLID,5);setfillcolor(RGB(255, 0, 0));setfillstyle(BS_SOLID);fillcircle(40, 40, 20);//无外框填充setfillcolor(RGB(255, 0, 0));setfillstyle(BS_HATCHED, HS_DIAGCROSS);solidcircle(40, 40, 20);
//无外框多边形填充POINT pts[] = { {50, 200}, {200, 200}, {200, 50} };//POINT是一个坐标结构体的别名setfillcolor(RGB(255, 0, 0));setfillstyle(BS_HATCHED, HS_DIAGCROSS);solidpolygon(pts, 3);

setfillstyle
这个函数用于设置当前设备填充样式。

void setfillstyle
(
FILLSTYLE* pstyle
);
void setfillstyle
(
int style,
long hatch = NULL,
IMAGE* ppattern = NULL
);
void setfillstyle
(
BYTE* ppattern8x8
);
参数
pstyle
指向填充样式 FILLSTYLE 的指针。

style
指定填充样式。可以是以下宏或值:

宏 值 含义
BS_SOLID 0 固实填充。
BS_NULL 1 不填充。
BS_HATCHED 2 图案填充。
BS_PATTERN 3 自定义图案填充。
BS_DIBPATTERN 5 自定义图像填充。

hatch
指定填充图案,仅当 style 为 BS_HATCHED 时有效。填充图案的颜色由函数 setfillcolor 设置,背景区域使用背景色还是保持透明由函数 setbkmode 设置。hatch 参数可以是以下宏或值:

宏 值 含义
HS_HORIZONTAL 0
HS_VERTICAL 1
HS_FDIAGONAL 2
HS_BDIAGONAL 3
HS_CROSS 4
HS_DIAGCROSS 5

ppattern
指定自定义填充图案或图像,仅当 style 为 BS_PATTERN 或 BS_DIBPATTERN 时有效。
当 style 为 BS_PATTERN 时,ppattern 指向的 IMAGE 对象表示自定义填充图案,IMAGE 中的黑色(BLACK)对应背景区域,非黑色对应图案区域。图案区域的颜色由函数 settextcolor 设置。
当 style 为 BS_DIBPATTERN 时,ppattern 指向的 IMAGE 对象表示自定义填充图像,以该图像为填充单元实施填充。

ppattern8x8
指定自定义填充图案,效果同 BS_PATTERN,该重载以 BYTE[8] 数组定义 8 x 8 区域的填充图案。数组中,每个元素表示一行的样式,BYTE 类型有 8 位,按位从高到低表示从左到右每个点的状态,由此组成 8 x 8 的填充单元,将填充单元平铺实现填充。对应的二进制位为 0 表示背景区域,为 1 表示图案区域。

  批量绘图

二、输出

文字输出1:设置文字背景模式、颜色、字体、大小(无顺序要求,但必须在输出带背景的文字前)

OPAQUE 背景用当前背景色填充(默认)即带背景、TRANSPARENT 背景是透明的(不带背景)

_T("")是一个宏,他的作用是让你的程序支持Unicode编码
L是表示字符串资源为Unicode的

设置文字大小和字体,参数依次为:高、宽、字体。若宽为 0 则表示自适应
字体_T(“”)中可自行替换,建议使用常见的字体,如:宋体、楷体、隶书等

outtextxy
这个函数用于在指定位置输出字符串。void outtextxy(int x,int y,LPCTSTR str
);
void outtextxy(int x,int y,TCHAR c
);
参数
x:字符串输出时头字母的 x 轴的坐标值。
y:字符串输出时头字母的 y 轴的坐标值。
str:待输出的字符串的指针。
c:待输出的字符。示例
// 输出字符串(MBCS 字符集)
char s[] = "Hello World";
outtextxy(10, 20, s);
// 输出字符串(Unicode 字符集)
wchar_t s[] = L"Hello World";
outtextxy(10, 20, s);
// 输出字符串(项目字符集)
TCHAR s[] = _T("Hello World");
outtextxy(10, 20, s);
// 输出字符(MBCS 字符集)
char c = 'A';
outtextxy(10, 40, c);
// 输出字符(项目字符集)
TCHAR c = _T('A');
outtextxy(10, 40, c);
// 输出数值,先将数字格式化输出为字符串(MBCS 字符集)
char s[5];
sprintf(s, "%d", 1024);
outtextxy(10, 60, s);
// 输出数值 1024,先将数字格式化输出为字符串(项目字符集)
TCHAR s[5];
_stprintf(s, _T("%d"), 1024);     // 高版本 VC 推荐使用 _stprintf_s 函数
outtextxy(10, 60, s);
//
setbkmode(OPAQUE);;//OPAQUE 背景用当前背景色填充(默认)、TRANSPARENT 背景是透明的。
setbkcolor(RGB(0, 255, 0));
settextcolor(RGB(255, 0, 0));
settextstyle(20, 0, _T("隶书"));
outtextxy(20, 20, _T("hello easyx!"));
程序中经常会使用一些常规的标志图片,例如,音量开关、各种方向箭头、电话、五角 星等。
可以通过输出文字的形式将这些常规的标志图片进行输出。这种以文字方式表示的图片一般称作:字体图标.
可以通过windowns附件中的字符映射表。

setbkmode(OPAQUE);
setbkcolor(RGB(0, 255, 0));
settextcolor(RGB(255, 0, 0));
settextstyle(50, 0, _T("Wingdings"));
outtextxy(20, 20, 0x25);//(20,20)出输出字体Wingdings下的0x25闹铃图标


文字输出2:设置文字背景模式、颜色、字体、大小、文字输出区域(无顺序要求,但必须在输出带背景的文字前)

drawtext
这个函数用于在指定区域内以指定格式输出字符串。
int drawtext(LPCTSTR str,RECT* pRect,UINT uFormat
);
int drawtext(TCHAR c,RECT* pRect,UINT uFormat
);
参数
str:待输出的字符串。
pRect指定的矩形区域的指针。某些 uFormat 标志会使用这个矩形区域做返回值。详见后文说明。
uFormat:指定格式化输出文字的方法。详见后文说明。
c:待输出的字符。
返回值:函数执行成功时,返回文字的高度。如果指定了 DT_VCENTER 或 DT_BOTTOM 标志,返回值表示从 pRect->top 到输出文字的底部的偏移量。如果函数执行失败,返回 0。
备注:默认情况下,输出字符串的背景会用当前背景色填充。使用函数 setbkmode 可以设置文字的背景部分保持透明或使用背景色填充。以下是 uFormat 参数可以使用的设置项,用来设置文字输出时的格式:
标志 描述
DT_BOTTOM 调整文字位置到矩形底部,仅当和 DT_SINGLELINE 一起使用时有效。
DT_CALCRECT 检测矩形的宽高。如果有多行文字,drawtext 使用 pRect 指定的宽度,并且扩展矩形的底部以容纳每一行文字。如果只有一行文字,drawtext 修改 pRect 的右边以容纳最后一个文字。无论哪种情况,drawtext 都返回格式化后的文字高度,并且不输出文字。
DT_CENTER 文字水平居中。
DT_EDITCONTROL 以单行编辑的方式复制可见文本。具体的说,就是以字符的平均宽度为计算依据,同时用这个方式应用于编辑控制,并且这种方式不显示可见部分的最后一行。
DT_END_ELLIPSIS 对于文本显示,如果字符串的末字符不在矩形内,它会被截断并以省略号标识。 如果是一个单词而不是一个字符,其末尾超出了矩形范围,它不会被截断。
字符串不会被修改,除非指定了 DT_MODIFYSTRING 标志。
DT_EXPANDTABS 展开 TAB 符号。 默认每个 TAB 占8个字符位置。注意,DT_WORD_ELLIPSIS、DT_PATH_ELLIPSIS 和 DT_END_ELLIPSIS 不能和 DT_EXPANDTABS 一起用。
DT_EXTERNALLEADING 在行高里包含字体的行间距。通常情况下,行间距不被包含在正文的行高里。
DT_HIDEPREFIX Windows 2000/XP: 忽略文字中的前缀字符(&),并且前缀字符后面的字符不会出现下划线。其他前缀字符仍会被处理。例如:
输入字符串:      "A&bc&&d"
通常输出:       "Abc&d"
DTDT_HIDEPREFIX:    "Abc&d"DT_INTERNAL 使用系统字体计算文字的宽高等属性。
DT_LEFT 文字左对齐。
DT_MODIFYSTRING 修改指定字符串为显示出的正文。仅当和 DT_END_ELLIPSIS 或 DT_PATH_ELLIPSIS 标志同时使用时有效。
DT_NOCLIP 使输出文字不受 pRect 裁剪限制。使用 DT_NOCLIP 会使 drawtext 执行稍快一些。
DT_NOFULLWIDTHCHARBREAK Windows 2000/XP: 防止换行符插入到 DBCS (double-wide character string,即宽字符串),换行规则相当于 SBCS 字符串。仅当和 DT_WORDBREAK 一起使用时有效。例如,汉字就是宽字符,设置该标志后,连续的汉字会像英文单词一样不被换行符中断。
DT_NOPREFIX 关闭前缀字符的处理。通常,DrawText 解释前缀转义符 & 为其后的字符加下划线,解释 && 为显示单个 &。指定 DT_NOPREFIX,这种处理被关闭。例如:
输入字符串:  "A&bc&&d"
通常输出:   "Abc&d"
DT_NOPREFIX:    "A&bc&&d"DT_PATH_ELLIPSIS 对于显示的文字,用省略号替换字符串中间的字符以便容纳于矩形内。如果字符串包含反斜杠(\),DT_PATH_ELLIPSIS 尽可能的保留最后一个反斜杠后面的文字。
字符串不会被修改,除非指定了DT_MODIFYSTRING标志。
DT_PREFIXONLY Windows 2000/XP:仅仅在(&)前缀字符的位置下绘制一个下划线。不绘制字符串中的任何其他字符。例如:
输入字符串:  "A&bc&&d"
通常输出:   "Abc&d"
DT_PREFIXONLY:  " _   "DT_RIGHT 文字右对齐。
DT_RTLREADING 设置从右向左的阅读顺序(当文字是希伯来文或阿拉伯文时)。默认的阅读顺序是从左向右。
DT_SINGLELINE 使文字显示在一行。回车和换行符都无效。
DT_TABSTOP 设置 TAB 制表位。uFormat 的 15–8 位指定 TAB 的字符宽度。默认 TAB 表示 8 个字符宽度。注意,DT_CALCRECT、DT_EXTERNALLEADING、DT_INTERNAL、DT_NOCLIP 和 DT_NOPREFIX 不能和 DT_TABSTOP 一起用。
DT_TOP 文字顶部对齐。
DT_VCENTER 文字垂直居中。仅当和 DT_SINGLELINE 一起使用时有效。
DT_WORDBREAK 自动换行。当文字超过右边界时会自动换行(不拆开单词)。回车符同样可以换行。
DT_WORD_ELLIPSIS 截去无法容纳的文字,并在末尾增加省略号。 示例
//参考上文
setbkmode(OPAQUE);
setbkcolor(RGB(0, 255, 0));
settextcolor(RGB(255, 0, 0));
settextstyle(30, 0, _T("楷体"));setlinecolor(RGB(255, 0, 0));
setlinestyle(PS_SOLID,5);
rectangle(20, 20, 200, 50);//绘制边框
//
RECT text1 = { 20, 20, 200, 50 };//文字指定的区域
drawtext(_T("hello easyx!"), &text1, DT_WORDBREAK)//DT_WORDBREAK 自动换行。当文字超过右边界时会自动换行(不拆开单词)

三、输入

四、事件响应

   鼠标事件响应

响应鼠标点击事件:定义保存鼠标信息的变量、监听鼠标信息、获取鼠标信息、判断鼠标信息、相应鼠标操作的对应操作
MOUSEMSG:这个结构体用于保存鼠标消息,定义如下:
struct MOUSEMSG
{
   UINT uMsg; // 当前鼠标消息
   bool mkCtrl; // Ctrl 键是否按下
   bool mkShift; // Shift 键是否按下
   bool mkLButton; // 鼠标左键是否按下
   bool mkMButton; // 鼠标中键是否按下
   bool mkRButton; // 鼠标右键是否按下
   int x; // 当前鼠标 x 坐标(物理坐标)
   int y; // 当前鼠标 y 坐标(物理坐标)
   int wheel; // 鼠标滚轮滚动值
};
成员
uMsg:指定鼠标消息类型,可为以下值:
值 含义
WM_MOUSEMOVE 鼠标移动消息。
WM_MOUSEWHEEL 鼠标滚轮拨动消息。
WM_LBUTTONDOWN 左键按下消息。
WM_LBUTTONUP 左键弹起消息。
WM_LBUTTONDBLCLK 左键双击消息。
WM_MBUTTONDOWN 中键按下消息。
WM_MBUTTONUP 中键弹起消息。
WM_MBUTTONDBLCLK 中键双击消息。
WM_RBUTTONDOWN 右键按下消息。
WM_RBUTTONUP 右键弹起消息。
WM_RBUTTONDBLCLK 右键双击消息。

mkCtrlCtrl :键是否按下
mkShiftShift :键是否按下
mkLButton:鼠标左键是否按下
mkMButton:鼠标中键是否按下
mkRButton:鼠标右键是否按下

x:当前鼠标 x 坐标(物理坐标)
y:当前鼠标 y 坐标(物理坐标)
wheel:鼠标滚轮滚动值,为 120 的倍数。

#include<stdio.h>
#include<graphics.h>int main()
{initgraph(640, 480);MOUSEMSG msg;//定义储存鼠标消息的变量FlushMouseMsgBuffer();//清除鼠消息标缓存区,防止无效的鼠标消息影响判断while (true)//持续监听{while (MouseHit())//MouseHit()只能监测鼠标信息的有无不能监测内容{msg = GetMouseMsg();//获取鼠标信息switch(msg.uMsg)   //判断鼠标信息及响应对应操作{case WM_MOUSEMOVE:putpixel(msg.x, msg.y, GREEN);//元素点break;case WM_LBUTTONDOWN://左键setlinecolor(RGB(0, 255, 0));setlinestyle(PS_SOLID);if (msg.mkCtrl)//同时ctrlrectangle(msg.x - 10, msg.y - 10, msg.x + 10, msg.y + 10);//大矩形elserectangle(msg.x - 5, msg.y - 5, msg.x + 5, msg.y + 5);/小矩形break;case WM_RBUTTONDOWN://右键退出return 0;}}}closegraph();//关闭图形窗口return 0;
}

   键盘事件响应

响应键盘点击事件:定义保存键盘信息的变量、监听键盘信息、获取键盘信息、判断键盘信息、相应键盘操作的对应操作

  FlushConsoleInputBuffer 函数:刷新控制台输入缓冲区,当前在输入缓冲区中的所有输入记录将被丢弃。参数为控制台输入缓冲区的句柄。 此句柄必须具有 GENERIC_WRITE 访问权限。

  FlushConsoleInputBuffer(GetStdHandle(STD_INPUT_HANDLE));这个函数功能在游戏中会很有用。例如,游戏开始之前,会有些等待(例如过场动画)。正式游戏开始时,应该清空按键缓冲区,防止用户在等待期间的按键影响游戏操作。

  GetStdHandle是一个Windows API函数。它用于从一个特定的标准设备(标准输入、标准输出或标准错误)中取得一个句柄(用来标识不同设备的数值)GetStdHandle函数的参数可以是下列之一
参数 含义
   STD_INPUT_HANDLE 标准输入句柄
   STD_OUTPUT_HANDLE 标准输出句柄
   STD_ERROR_HANDLE 标准错误句柄
   kbhit()是一个C和C++函数,用于非阻塞地响应键盘输入事件,检查当前是否有键盘输入,若有则返回一个非0值,否则返回0。用 法:int kbhit(void);C++语言包含头文件: include <conio.h>。C语言不需包含额外头文件。
   键盘信息有普通字符按键、响应功能按键,两种按键的信息获取有所区别,当按下功能按键时_getch()会返回值是 char 型 0 或 0xE0,这时候需要再调用一次_getch(),第二次_getch()返回的值表示功能键键码,功能按键可能与普通字符按键冲突,比如:72 即表示 H,也表示功能按键 上,需要添加一个标记,解决这个冲突。键码是用来判断键盘事件的,而不是用来判断输入值的,大写状态和小写状态下按A键是同一个事件

键码(KeyCode)对照表
字母和数字键的键码值(KeyCode)
按键  键码  按键  键码
A   65  J   74
B   66  K   75
C   67  L   76
D   68  M   77
E   69  N   78
F   70  O   79
G   71  P   80
H   72  Q   81
I   73  R   82
字母和数字键的键码值(KeyCode)
按键  键码  按键  键码
S   83  1   49
T   84  2   50
U   85  3   51
V   86  4   52
W   87  5   53
X   88  6   54
Y   89  7   55
Z   90  8   56
0   48  9   57
数字键盘上的键的键码值(KeyCode)
按键  键码  按键  键码
0   96  8   104
1   97  9   105
2   98  *   106
3   99  +  107
4   100 Enter   108
5   101 -   109
6   102 .   110
7   103 /   111
功能键键码值(KeyCode)
按键  键码  按键  键码
F1  112 F7  118
F2  113 F8  119
F3  114 F9  120
F4  115 F10 121
F5  116 F11 122
F6  117 F12 123控制键键码值(KeyCode)
按键  键码  按键  键码
BackSpace   8   Esc 27
Tab 9   Spacebar    32
Clear   12  Page Up 33
Enter   13  Page Down   34
Shift   16  End 35
Control 17  Home    36
Alt 18  Left Arrow  37
Cape Lock   20  Up Arrow    38
控制键键码值(KeyCode)
按键  键码  按键  键码
Right Arrow 39  -_  189
Dw Arrow    40  .>   190
Insert  45  /?  191
Delete  46  `~ 192
Num Lock    144 [{  219
;:  186 \|  220
=+    187 ]}  221
,<   188 '"    222
多媒体键码值(KeyCode)
按键  键码  按键  键码
音量加 175
音量减 174
停止  179
静音  173
浏览器 172
邮件  180
搜索  170
收藏  171      两种代码类型的区别是:字符代码 - 表示 ASCII 字符的数字键盘代码 - 表示键盘上真实键的数字两种类型的值不是都相等的,例如小写字符 "w" 和大写字符 "W" 有相同的键盘代码,因为他们他们键盘上 ( "W" 代码为 "87"),但是它们有不同的字符代码,两个字符输出是不一样的( "w" 和 "W" 字符代码为 "119" 和 "87")
#include<stdio.h>
#include<graphics.h>
#include<conio.h> //_getch()在这个头文件中int main()
{int flag;// 标记区分功能按键和普通按键char ch;  //定义变量,保存键盘消息;printf("程序运行开始\n");Sleep(5000);FlushConsoleInputBuffer(GetStdHandle(STD_INPUT_HANDLE));//清空之前缓冲区内的所有按键信息,可以尝试注释掉此行观察while (true){                 //持续监听监听键盘信息flag = 0;// 重置,标记功能按键未按下while (_kbhit()){ch = _getch();if (ch == '0' || ch == '0xE0')//判断是否是功能键{printf("功能建\n");flag = 1;// 标记功能按键按下ch = _getch();}if (ch != '1' && flag == 0){printf("%c\n", ch);}}Sleep(200);printf("no keyboard message!\n");}getchar();return 0;
}

五、多媒体

路径分隔符“\”在 C 语言里面是转义字符,所以表达路径分隔符需要用“\”。访问每台电脑上路径都固定不变的文件,需要用绝对路径,例如访问 c:\boot.ini。如果文件所在路径不固定,访问的文件和程序放在一起,就可用相对路径。例如:和程序放在一起的图片、音频、文本等文件。在实际操作中,可能路径不一定设置正确,为了检测路径设置是否正确,特意增加一个检测的代码。

#include <io.h>头文件下的_waccess()函数。
_waccess()函数功能:判断文件夹或者文件是否存在及其他权限。
函数原型: int _waccess( const wchar_t *path, int mode );
所属头文件:io.h
参数说明: path:文件路径或目录名。Unicode 字符。
mode:0 (F_OK) 只判断是否存在
2 (R_OK) 判断写入权限
4 (W_OK) 判断读取权限
6 (X_OK) 判断执行权限
返回值:若存在或者具有权限,返回值为 0;不存在或者无权限,返回值为-1。
以下给出的是检查*.wav 文件和 res 文件夹是否存在的示例。

   图片

   音频

六、其他

  读写应用程序的配置信息文件

  设置窗口标题

  随机数函数

  时间函数

  将资源(图片、音频等)嵌入 exe

  游戏制作流程

游戏玩法—程序整体设计–素材收集–程序编写–程序优化(包含程序各模块设计并实现等)

  项目

链接: easyx项目练习.

Easy-x的基础教程使用介绍相关推荐

  1. OpenLayers3基础教程——OL3 介绍control

    概述: 本文讲述的是Ol3中的control的介绍和应用. OL2和OL3 control比较: 相比较Ol2的control,OL3显得特别少,下图分别为Ol2和Ol3的control: Ol2的c ...

  2. (转) OpenLayers3基础教程——OL3 介绍control

    http://blog.csdn.net/gisshixisheng/article/details/46761535 概述: 本文讲述的是Ol3中的control的介绍和应用. OL2和OL3 co ...

  3. (转)OpenLayers3基础教程——OL3 介绍interaction

    http://blog.csdn.net/gisshixisheng/article/details/46808647 概述: 本节主要讲述OL3的交互操作interaction,重点介绍draw,s ...

  4. OpenLayers3基础教程——OL3之Popup

    概述: 本节重点讲述OpenLayers3中Popup的调用时实现,OL3改用Overlay取代OL2的Popup功能. 接口简单介绍: overlay跟ol.control.Control一样,是一 ...

  5. ppt python 爬虫_python基础教程 PPT-python为什么叫爬虫

    看过了Python基础教程,接下来应该怎么做 看完基础教程代表你已经入门了,接下来就需要你做一下项目,把书本上的知识转化为自己的,活学活用,之后再进行中高级的学习! Python基础教程的介绍 本书包 ...

  6. Xamarin.FormsShell基础教程(7)Shell项目关于页面的介绍

    Xamarin.FormsShell基础教程(7)Shell项目关于页面的介绍 轻拍标签栏中的About标签,进入关于页面,如图1.8和图1.9所示.它是对应用程序介绍的页面. 该页面源自Views文 ...

  7. Unity4.x 2D游戏开发基础教程第1章Unity及其组成的介绍

    Unity4.x 2D游戏开发基础教程第1章Unity及其组成的介绍 本书主要讲解的是,如何使用Unity开发2D游戏.但在开始讲解之前,最好先熟悉一下Unity这个工具.本章会首先介绍Unity的下 ...

  8. LTspice基础教程-003.LTspice工具栏使用介绍

    直接上图,如下是我们必须学会的工具栏按钮,下面会详细介绍. 首先我们从放置被动器件开始,搭建一个RLC低通滤波电路,如下: 放置完器件后,我们开始连线以及放置地,当鼠标变成大十字说明进入了画线状态: ...

  9. 【MySQL基础教程】事务详细介绍

    前言 本文为 [MySQL基础教程]事务 相关知识,下边将对事务简介,事务操作(包括:未控制事务,控制事务),事务四大特性,并发事务问题,事务隔离级别等进行详尽介绍~

最新文章

  1. java pack unicode,汉字和Unicode码(utf-8)之间的转换(Pack/Unpack)
  2. python2中文导致的错误
  3. TensorFlow的基本运算01-01
  4. paho mqtt 在某平台sdk应用上发送数据定时器超时问题
  5. RocketMQ消息的存储结构
  6. org.apache.flink.table.catalog.exceptions.CatalogException: Failed to create Hive Metastore client
  7. (五)构建和训练深度伪造自动编码器
  8. Eucalyptus-NC管理
  9. linux bash脚本 坑,向大家分享一个shell脚本的坑
  10. python maketrans函数_python中maketrans
  11. Echarts使用教程
  12. 【模型5.0】幸福sharp模型:让优势带动劣势
  13. python将pascal VOC数据集转成coco数据集
  14. hive-使用开窗函数实现百分比、topN、前百分比
  15. mac 电脑如何从双系统恢复原mac系统,无需u盘一键重新安装macos
  16. 电路设计中如何解决电压跌落
  17. JCA - 核心类和接口 - Cipher类
  18. JAVA基础(for语句的统计思想)
  19. 完美解决VS2003.Net fatal error LNK1201: 写入程序数据库“.pdb”时出错 - 细雨淅淅
  20. 阿里万亿交易量级下的秒级监控

热门文章

  1. 抖音搬运视频热门技巧 剪辑后会修改视频md5
  2. 通过Python来调用Chrom浏览器,进入设定网页
  3. 【机器学习-斯坦福】学习笔记1 - 机器学习的动机与应用
  4. 202好看好玩的简单html动画案例
  5. 华为云空间联系人是不是机主_电脑上整理华为云空间联系人数据
  6. 人力资源如何进行数据分析
  7. 内存占用少的linux桌面,不同桌面环境占用内存/CPU对比
  8. Mac-连接Windows远程桌面
  9. IDEA的介绍基础运用和优化还有各种功能(超级全!!多图!!)
  10. 关于短信群发的简单实现