学习 C/C++ 语言的常用开发工具下载
刮刮乐(掩码图的范例)
基于 EasyX 的文本框(TextBox)和按钮(Button)控件
[视觉错觉] 隐藏的爱心
VC绘图/游戏简易教程--8:随机函数
VC绘图/游戏简易教程--5:数学知识在绘图中的运用
三维旋转球 源码+注释+简单讲解
前言
关于三维的东西远不止这么点内容,也不是我几句话可以讲完的,需要大家扎扎实实的看图形学。不能好高骛远,要扎实、系统的学习。还要注意相关数学知识的学习。
图形学一般是借助矩阵实现的各种转换。我在这篇文章里尽量不用图形学的术语,也不做优化、不加额外功能,只用最简单的三角函数实现,希望大家能从道理上看的清楚明白。
简单讲解
关于一个点,一定要有一个三维坐标,程序中的结构体 POINT3D 就是。
点的初始化由函数 InitPoint() 实现,该函数产生了 n 个半径为 1 的点。
点的运动,是在三维坐标内运动的,包括平移、缩放、旋转等。这个程序只涉及到了旋转,定义了三个方法:RotateX()、RotateY()、RotateZ(),分别实现绕三个轴旋转;可以使用矩阵运算来实现,也可以直接这样算出来。
最后需要将三维世界呈现出来,这里用到一个术语:投影,就是将三维的画面投影到二维上。投影有多种方法,这个球体用的单点透视,因此还需要一个“观察点”,程序中用 viewZ 定义,观
...VC绘图/游戏简易教程--9:用函数简化相同图案的制作
教程总目录:https://codebus.cn/bestans/post/concise-lesson-contents
实际中有许多类似的图案,如果一一单独绘制,太麻烦。于是,我们需要一个公用的绘制过程,就是函数。
例如,我们需要画5个三角形,位于不同的位置。我们可以将绘制单个三角形的过程写成函数,函数内是一个独立的程序段,这个绘制过程很简单。
然后,在需要绘制的时候,调用这个函数即可。可以通过参数来解决细微差异(图案的坐标、颜色等),例如:
#include <graphics.h>
#include <conio.h>
// 在坐标 (x,y) 处,用颜色 c 绘制三角形
void sanjiaoxing(int x, int y, int c)
{
// 设置画线颜色
setlinecolor(c);
// 画三角形的三条边
line(x, y, x+50, y);
line(x, y, x, y+50);
line(x
...
VC绘图/游戏简易教程--1:创建新项目
教程总目录:https://codebus.cn/bestans/concise-lesson-contents (里面包括VC下的graphics.h的配置方法)
[本期目标]
学会在 VC 里面创建项目,并写简单的程序。
VC 写程序要有项目的概念,一个项目可以有多个 .cpp 文件,多个项目构成一个工作区。先记住这两个英文单词吧:
- Workspace: 工作区
- Project: 项目
现在开始创建一个新项目。
- VC6 创建新项目请参考这里:https://easyx.cn/used-in-vc6-console
- VC2010 创建新项目请参考这里:https://easyx.cn/used-in-vc2010-console
- 高版本 VisualStudio 创建项目的步骤与 VC2010 相似。
看明白后,自己动手建立项目试试,并输入以下代码:
...VC绘图/游戏简易教程--前言
针对人群
- 职业不限,水平不限,男女不限。基本上,是从很基础的层次开始(但还是需要一点点基础)。
基础要求
- 希望读者已经简单学过C语言。我不会从定义变量开始讲。
- 要有英语基础,现阶段虽不是必须,但是学学英语总没错,以后有用。
学习目标
- 能做简单的图形小游戏。
- 讲解以简单实用为主,不要指望看了这几篇文章后就能过二级考试。
- 目标,除了能做小游戏外,更重要的,是锻炼编程思想,以备将来做更大的程序。
学习方式
- 以自学为主吧,有问题就在相关课程后面跟帖就行,一起讨论。
学习要求
- 欲速则不达,不要指望一口气都看完,请务必每次看完后都写几个相关的程序。勤动手才能学好编程,请务必重视。
连载次数
- 不确定,想到哪写到哪吧,我会把每次的文章目录发到这里。
VC绘图/游戏简易教程--11:鼠标控制及高级按键控制
教程总目录:https://codebus.cn/bestans/concise-lesson-contents(里面包括VC下的graphics.h的配置方法)
学习本节课前,需要熟练掌握第 7 节。详见:https://codebus.cn/bestans/concise-lesson-7
==本节课开始==
首先,获取鼠标消息:
ExMessage m;
m = getmessage();
ExMessage 是 EasyX 定义的一个表示消息的结构体类型,以上代码表示用该类型声明了一个变量 m,然后通过 getmessage 函数获取消息,并返回给变量 m。根据 m 的内容,进一步分析获取到的是什么消息。鼠标消息可以通过以下成员获取鼠标消息中的信息:
USHORT message; // 当前消息
bool ctrl; // Ctrl 键是否按下
...
钟表模拟程序(表针形式)
这是个简单的表针式时钟模拟程序。
运行效果如下:
在源代码的基础上,可以通过 API 函数 mciSendString 轻松加上滴答声音,我就不再多写了。
代码如下:
////////////////////////////////////////////
// 程序名称:钟表模拟程序(表针形式)
// 编译环境:Visual C++ 6.0 ~ 2019,EasyX_20210730
// 程序编写:BestAns <BestAns@qq.com>
// 最后更新:2010-10-30
//
#include <graphics.h>
#include <conio.h>
#include <math.h>
#define PI 3.1415926536
void DrawHand(int hour, int minute, int second)
{
double a_hour, a_min,
...
VC绘图/游戏简易教程--目录
VC绘图/游戏简易教程--16:设备上下文句柄(Windows 编程入门2)
教程总目录:https://codebus.cn/bestans/post/concise-lesson-contents(里面包括VC下的graphics.h的配置方法)
注:学习本节前,请自备 MSDN,以便查阅 Windows GDI 函数。
对于 Windows GDI 中的绘图函数,操作目标通常是 DC(Device Context),因此需要传入一个 DC 的句柄,数据类型为 HDC(Handle of Device Context)。用 GetImageHDC() 函数可以获取 EasyX 的绘图窗口或 IMAGE 对象的句柄,然后就可以使用 Windows GDI 函数进行绘图操作。看以下示例:
#include <graphics.h>
#include <conio.h>
int main()
{
// 初始化绘图窗口,并获取 HDC 句柄
initgraph(640, 480);
HDC hdc = GetImageHDC();
...