VC绘图/游戏简易教程--10:用鼠标控制绘图/游戏程序

教程总目录:https://www.codeabc.cn/bestans/post/concise-lesson-contents(里面包括VC下的graphics.h的配置方法)

学习本节课前,需要熟练掌握第 7 节。详见:https://www.codeabc.cn/bestans/post/concise-lesson-7

==本节课开始==

捕获鼠标消息就像捕获按键消息一样简单。
对于按键,通常我们会先检查是否有按键,然后定义一个变量保存按键,再然后根据该按键的值,执行相应的程序。
对于鼠标,道理是一样的。

先写个代码对比一下:

获取按键:      &

...

VC绘图/游戏简易教程--9:绘图中的位运算

教程总目录:https://www.codeabc.cn/bestans/post/concise-lesson-contents(里面包括VC下的graphics.h的配置方法)

========================

位运算和绘图有什么关系?先举个例子来个感性认识:使用XOR运算可以实现擦除图形后不破坏背景,这在时钟程序中绘制表针是很有用的。稍后我们会给出这样的例子。

一、位运算的运算法则

位运算主要分 4 种:NOT、AND、OR、XOR,位运算的运算对象是二进制数(十进制要转换为二进制,计算机会自动转换)。

运算法则如下:

1. NOT

表示“取反”,将二进制位的 1 变 0、0 变 1。
C 语言用符号 ~ 表示。

如:
二进制: ~1101 = 001

...

VC绘图/游戏简易教程--8:用函数简化相同图案的制作

教程总目录:https://www.codeabc.cn/bestans/post/concise-lesson-contents

实际中有许多类似的图案,如果一一单独绘制,太麻烦。于是,我们需要一个公用的绘制过程,就是函数。

例如,我们需要画5个三角形,位于不同的位置。我们可以将绘制单个三角形的过程写成函数,函数内是一个独立的程序段,这个绘制过程很简单。
然后,在需要绘制的时候,调用这个函数即可。可以通过参数来解决细微差异(图案的坐标、颜色等),例如:

#include <graphics.h>
#include <conio.h>

// 在坐标 (x,y) 处,用颜色 c 绘制三角形
void sanjiaoxing(int x, int y, int c)
{
	// 设置画线颜色
	setlineco

...

VC绘图/游戏简易教程--7:捕获按键,实现动画的简单控制

教程总目录:https://www.codeabc.cn/bestans/post/concise-lesson-contents(里面包括VC下的graphics.h的配置方法)

最常用的一个捕获按键的函数:_getch()
前几课,都把这个函数当做“按任意键继续”来用,现在我们用变量保存这个按键:

char c = _getch();

然后再做判断即可。

不过程序执行到 _getch() 是会阻塞的,直到用户有按键才能继续执行。可游戏中总不能因为等待按键而停止游戏执行吧?所以,要有一个函数,判断是否有用户按键:_kbhit()
这个函数返回当前是否有用户按键,如果有,再用 _getch() 获取即可,这样是不会阻塞的。

即:

char c;

...

VC绘图/游戏简易教程--6:实现简单动画

教程总目录:https://www.codeabc.cn/bestans/post/concise-lesson-contents(里面包括VC下的graphics.h的配置方法)

所谓动画,其实是连续显示一系列图形而已。
结合到程序上,我们需要以下几个步骤:

  1. 绘制图像
  2. 延时
  3. 擦掉图像

循环以上即可实现动画。

举一个例子,我们实现一条直线从上往下移动:

#include <graphics.h>
#include <conio.h>

int main()
{
	initgraph(640, 480);

	for(int y = 0; y < 480; y++)
	{
		// 

...

VC绘图/游戏简易教程--5:数学知识在绘图中的运用

教程总目录:https://www.codeabc.cn/bestans/post/concise-lesson-contents(里面包括VC下的graphics.h的配置方法)

[学习目标]

理解数学的重要性

1. 最简单的,来个全屏的渐变色吧,是上一课的扩展。就是需要将 0~255 的颜色和 0~479 的 y 轴对应起来
c 表示颜色,范围 0~255
y 表示y轴,范围 0~479
于是:
c / 255 = y / 479
c = y / 479 * 255 = y * 255 / 479 (先算乘法再算除法可以提高精度)

看代码:

#include <graphics.h>
#include <conio.h>

...

VC绘图/游戏简易教程--4:结合流程控制语句来绘图

教程总目录:https://www.codeabc.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();

...

VC绘图/游戏简易教程--3:熟悉更多的绘图语句

教程总目录:https://www.codeabc.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

还有很多,如画椭圆、圆弧、矩形、多边形,等等,请参考绘图帮助文件(第一课的绘图库的下载里面有)

[设置颜色]

setlinecolor(c);    //

...

VC绘图/游戏简易教程--2:简单绘图,学习单步执行

教程总目录:https://www.codeabc.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, 

...

VC绘图/游戏简易教程--1:创建新项目

教程总目录:https://www.codeabc.cn/bestans/post/concise-lesson-contents (里面包括VC下的graphics.h的配置方法)

[本期目标]

学会在 VC 里面创建项目,并写简单的程序。

VC 写程序要有项目的概念,一个项目可以有多个 .cpp 文件,多个项目构成一个工作区。先记住这两个英文单词吧:

  • Workspace: 工作区
  • Project: 项目

现在开始创建一个新项目。

...