教程总目录:https://codebus.cn/bestans/post/concise-lesson-contents(里面包括VC下的graphics.h的配置方法)
========================
位运算和绘图有什么关系?先举个例子来个感性认识:使用XOR运算可以实现擦除图形后不破坏背景,这在时钟程序中绘制表针是很有用的。稍后我们会给出这样的例子。
一、位运算的运算法则
位运算主要分 4 种:NOT、AND、OR、XOR,位运算的运算对象是二进制数(十进制要转换为二进制,计算机会自动转换)。
运算法则如下:
- NOT
表示“取反”,将二进制位的 1 变 0、0 变 1。
C 语言用符号 ~ 表示。
如:
二进制: ~1101 = 0010
用十进制表示就是:~13 = 2
- AND
表示“并且”,只有两数的对应
...
教程总目录:https://codebus.cn/bestans/post/concise-lesson-contents(里面包括VC下的graphics.h的配置方法)
最常用的一个捕获按键的函数:_getch()
前几课,都把这个函数当做“按任意键继续”来用,现在我们用变量保存这个按键:
char c = _getch();
然后再做判断即可。
不过程序执行到 _getch() 是会阻塞的,直到用户有按键才能继续执行。可游戏中总不能因为等待按键而停止游戏执行吧?所以,要有一个函数,判断是否有用户按键:_kbhit()
这个函数返回当前是否有用户按键,如果有,再用 _getch() 获取即可,这样是不会阻塞的。
即:
char c;
if (_kbhit())
c = _getch();
举一个简单的例子,如果有按键,就输出相关按键。否则,输出“.”。每隔 100 毫秒输出一次
...
教程总目录:https://codebus.cn/bestans/post/concise-lesson-contents(里面包括VC下的graphics.h的配置方法)
所谓动画,其实是连续显示一系列图形而已。
结合到程序上,我们需要以下几个步骤:
- 绘制图像
- 延时
- 擦掉图像
循环以上即可实现动画。
举一个例子,我们实现一条直线从上往下移动:
#include <graphics.h>
#include <conio.h>
int main()
{
initgraph(640, 480);
for(int y = 0; y < 480; y++)
{
// 绘制绿色直线
setlinecolor(GREEN);
line(0, y, 639, y);
// 延时
Sleep(10);
// 绘制黑色直线(即擦掉之
...
教程总目录:https://codebus.cn/bestans/post/concise-lesson-contents(里面包括VC下的graphics.h的配置方法)
[学习目标]
熟练使用循环、判断语句
[熟悉for语句]
这步需要自学,看看自己手边的书,是怎样讲for语句的,简单看看就行。
[范例]
例如,画10条直线的代码:
#include <graphics.h>
#include <conio.h>
int main()
{
initgraph(640, 480);
for(int y=100; y<200; y+=10)
line(100, y, 300, y);
_getch();
closegraph();
return 0;
}
换一下循环的范围和间隔,看看效果。
还可以用来画渐变色,例如:
...
教程总目录:https://codebus.cn/bestans/post/concise-lesson-contents(里面包括VC下的graphics.h的配置方法)
[学习目标]
学会更多的绘图语句
[常用的绘图语句]
- line(x1, y1, x2, y2); // 画直线 (x1,y1)-(x2,y2),都是整形
- circle(x, y, r); // 画圆,圆心为 (x,y),半径为 r
- putpixel(x, y, c); // 画点 (x,y),颜色 c
还有很多,如画椭圆、圆弧、矩形、多边形,等等,请参考 EasyX 在线帮助 https://docs.easyx.cn
[设置颜色]
setlinecolor(c); // 设置画线颜色,如 setlinecolor(RED) 设置画线颜色为红色
常用的颜色常量可以用:
...
教程总目录:https://codebus.cn/bestans/post/concise-lesson-contents(里面包括VC下的graphics.h的配置方法)
本期目标
学会简单绘图,并学会简单调试。
先看看上一课的代码,我加上了注释
#include <graphics.h> // 绘图库头文件,绘图语句需要
#include <conio.h> // 控制台输入输出头文件,_getch()语句需要
int main()
{
initgraph(640, 480); // 初始化640x480的绘图屏幕
line(200, 240, 440, 240); // 画线(200,240) - (440,240)
line(320, 120, 320, 360); // 画线(320,120) - (320,360)
_getch(); // 按任意键
closegraph(); // 关闭
...
教程总目录:https://codebus.cn/bestans/post/concise-lesson-contents(里面包括VC下的graphics.h的配置方法)
本节课要求熟练掌握位运算,详见:
http://hi.baidu.com/bestans/blog/item/fb75b439404876e614cecb9f.html (已失效)
[颜色基础]
在 EasyX 库中,颜色是一个 int 类型的数据,转换为 16 进制后的颜色格式是 0xbbggrr,其中,bb/gg/rr 分别表示两位十六进制的蓝/绿/红颜色值,每种颜色的范围是 0x0~0xff,转换为十进制就是 0~255。
举几个颜色标示的例子:
- 颜色 直接表示 RGB 宏标示
- 纯绿色 0x00ff00 RGB(0, 255, 0)
- 青色 0xffff00 RGB(0, 255, 255) 注:青=蓝+绿
- 中灰色 0x7f7f7f RGB(12
...