
介绍
这是一款十分简单的音乐游戏。
编译环境:Visual Studio 2019,EasyX_20210730
游戏说明
- 介绍:玩家需根据音乐节奏,控制方向块,接住不断靠近的 note。
- 控制:Q 逆时针旋转,W 后移,E 顺时针旋转,ESC 暂停游戏,具体可于游戏中进行设置。
- 若想游玩其他谱面可以访问 osu 或镜像站 v mirror (推荐 使用时可以下载其中的MINI谱面,减少不必要的空间占用)下载谱面 并将下载的 .osz 文件以 zip 格式打开并解压到 obm 文件夹中。
- 对于任何音乐游戏,包括该游戏都建议从最低难度开始。
项目共包含以下文件
源程序文件:
- main.cpp 主程序。
- Control.h/cpp 游戏控制部分 包含类 keycheck 单独按键控制,timer 计时器,FPSCounter 帧数计算。
- EasyG
...
现在的屏幕分辨率都比较高,为了使屏幕字体不至于太小,通常在 Win10 的显示设置里面设为放大 125% 或 150% 或更大,这样就会导致像素实际上被放大了。
如果你的程序不希望受系统缩放设置影响,你需要使用一个新的 API 函数:SetProcessDpiAwareness
注意这个 API 函数的使用条件:
- Win8.1 及以上版本
- 头文件 ShellScalingApi.h
- 库文件 Shcore.lib
以下是一个完整的范例程序,该范例创建一个不受系统缩放设置影响的绘图窗口,并画一个圆:
// 编译环境:Win10 + VS2019 + EasyX_20200727
//
// 设定操作系统版本为 Win10(需要放到 #include <graphics.h> 前面)
#define WINVER 0x0A00
#define _WIN32_WINNT 0x0A00
...

这是个简单的表针式时钟模拟程序。
运行效果如下:
在源代码的基础上,可以通过 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,
...

编写思路
该程序的难点在于字符串的书写角度,理解了这个就已经理解了这个程序的核心内容,需要注意的地方是这个程序的每一圈代表一个 for 循环,我开始写的时候认为一个 for 循环嵌套一个 for 循环,但是后面我发现 for 循环嵌套的太多,就会导致程序运行的速度变慢,为了提高程序的速度,我将所有的 for 循环分开写,不用循环嵌套。然后用一个 while 循环来控制主循环。还有一个问题,程序中我没有用 Sleep 函数,直接使用了获取系统时间的函数,通过慢羊羊的指导,后续又加以修正,让钟表产生旋转的效果。在这里要感谢慢羊羊,感谢他对我编写的每一个程序进行指导,并给我一个展示的平台,让我对编程产生了浓厚的兴趣,由衷的感谢他。
心得体会
****写程序总是兴趣使然,实现自己的想法所带来的成就感还是挺不错。如果发现一个自己想用程序实现的东西,总是心中念念不忘,然后悄悄酝酿着,积累着,当有足够的能力将所看所学所想的组合起来时,那可能就是创新吧。多想,多看,多敲代码。这个程序创新之处就是旋转。就比如秒的那圈旋转,为了达到动态旋转的效果,并
...
基本概念
加载图片、音乐等各种文件的时候,都要指定文件路径。通常,可以用绝对路径和相对路径两种方式来指定文件。
先解释一下概念:
- 绝对路径,就是从盘符开始的路径,例如:“C:\Windows\system32\mfc42.dll”。
- 相对路径,就是从当前路径开始的路径,例如,当前路径是“C:\Windows”,那么指定前面范例的文件,可以直接写“system32\mfc42.dll”。
注意,路径分隔符“”在 C 语言里面是转义字符,所以表达路径分隔符需要用“\”。
从功能上讲:
- 访问每台电脑上路径都固定不变的文件,需要用绝对路径,例如访问 C:\Windows\system.ini。
- 如果程序所在路径不固定,访问的文件和程序放在一起,就要用相对路径。例如和程序放在一起的图片文件。
项目范例
以下用 VC2010 的项目来说明绝对路径和相对路径如何使用。
...

问题概述
EasyX 提供了两个头文件:
easyx.h 包含最新的函数,并且删掉了旧函数。graphics.h 引用了 easyx.h,同时提供了对旧函数的支持。使用 graphics.h 里面提供的旧函数时,会收到一个 Warning C4996,例如使用旧函数 GetMouseMsg,会收到编译提醒:
C4996:'GetMouseMsg': This function is deprecated. Instead, use this new function: getmessage. See https://docs.easyx.cn/getmessage for details.
在过去,Visual C++ 默认会将 C4996 归类为 Wa
...

游戏介绍
在 4399 上面看到一个很有趣的小游戏:合成立方体(游戏原地址)。
游戏中,玩家需要通过所给的形状去尽可能拼凑出完整的一行一列,然后完整的行列会增加分数,一旦所给的形状无法被塞下,游戏结束。非常简单的游戏,我用了 EasyX 去复原了一下。
游戏运行截图如下:
游戏源码下载
点击这里下载游戏完整源代码

游戏介绍
鼠标左键拖动图形移动,松开时自动吸附,按下 ctrl 键的同时拖动则不进行吸附,右键单击图形顺时针旋转 45°,ESC 结束游戏。
新增内容
增加了点吸附效果,拖动图形松开后,触发边吸附的同时也会触发点吸附。
拖动图形的同时,若按下 ctrl 键,则不会进行吸附。
不定期更新,力求完善。。。
程序说明
简要介绍程序中的一些点。
属性
使用模板类和 lambda 表达式实现了属性,用于对外暴露字段,详见 C# 属性。
使用属性可以简化程序,减少繁琐的 get 函数和 set 函数,提高了程序的可读性。
因为是自行封装的属性,所以存在很大的缺陷,很大程度上增加了类的大小(因为把函数成员变成了数据成员),属性的重写以及访问控制的不完善等。
对象管理机制
使用 Tangram 类来管理程序中所有的图形。
...
这个程序模拟了几个小方块用弹簧连接到鼠标上的效果。当鼠标在绘图窗口上移动时,可以看到小方块连续受力的效果。
动态程序就不再抓图了。源代码如下:
///////////////////////////////////////////////////
// 程序名称:力学:鼠标用弹簧挂着一串小方块
// 编译环境:Visual C++ 6.0 / 2010,EasyX_20210730
// 移植作者:yangw80 <yw80@qq.com>
// 发布日期:2012-4-27
//
#include <graphics.h>
#include <math.h>
#include <time.h>
const int WIDTH = 640; // 窗口宽
const int HEIGHT = 480; // 窗口高
const int BOXCOUNT = 10; // 方块的数量
const int BOXSIZE = 10;
...

每次看到这个程序我就会想起高中时曾那么痴迷编程。当时看到一本书的封面有这个图案,就用那个时候学的 QuickBasic 写了这个程序。现在移植到 VC 上,做个纪念吧。
执行效果如下:
代码如下:
// 程序名称:椭圆组合而成的抽象图案
// 编译环境:Visual C++ 6.0/2010,EasyX_20210730
// 最初编写:1998-2-21,by yw80@qq.com(QuickBasic 版本)
// 最后修改:2011-3-23,by yw80@qq.com
//
// 高中时候看到一本书的封面有这个图案,就用当时学的 QuickBasic 写了这个程序。
// 现在移植到 VC6 上,做个纪念。
//
#include <graphics.h>
#include <conio.h>
#include <math.h>
const double PI = 3.1415926536;
// 四舍五入
int
...

这是网上经常见的视觉错觉艺术图片,可以用程序生成的。效果如下:
完整的源代码如下:
///////////////////////////////////////////////////
// 程序名称:视觉错觉艺术3
// 编译环境:Visual C++ 6.0 / 2010,EasyX_20210730
// 作 者:yangw80 <yw80@qq.com>
// 最后修改:2014-7-14
//
#include <graphics.h>
#include <conio.h>
// 定义回调
void (*callback)(int x, int y);
// 圆中的每个点(回调函数)
void CirclePoints(int x, int y)
{
if (x < y)
{
COLORREF c1 = getpixel(x, y);
COLORREF c2 = getpixel(y, x);
put
...

2012年2月14日情人节就要来临了,西班牙程序员 Roman Cortes 用纯 javascript 脚本编写了红色玫瑰花。
现在,我把这个精彩的程序移植到了 VC 上。以下是执行效果:
完整的 VC 源代码如下:
////////////////////////////////////////////////////////////////////
// 程序名称:情人节的玫瑰
// 编译环境:VC6.0 / VC2010,EasyX_20210730
// 原 作 者:西班牙程序员 Roman Cortes
// 原 程 序:http://js1k.com/2012-love/demo/1022 (javascript 版本)
// 移植作者:krissi <zh@easyx.cn>
// 最后修改:2012-2-13
// 注:程序中的很多精简变量名都沿用原 javascript 中的变量名。
//
#include <graphics.
...

一个群里的大佬做的 DOS 版我的世界让我想到了这个游戏,后面去看了看 Terraria 的视频,学习了下,做了个极其简陋的沙盒游戏
开发环境:VS2019 + EasyX_20210730
游戏说明:
一个类似于二维版我的世界和泰拉瑞亚的沙盒游戏,你可以建造属于你的一片天地
(但因为目前方块过少,效果极其单调。。)
WASD 键:移动
Q 键:打开制作页面,再次按下返回
E 键:打开背包页面,再次按下返回
R 键:查看角色属性
ESC:设置页面(可调整为观察模式、普通模式,查看当前坐标)
大键盘1键:保存!!
制作页面:鼠标滚轮选择目标制作物品(部分物品需在工作台或熔炉旁才能制作)
背包页面:鼠标选中背包物品后拖动至使用栏便可更换使用栏物品
目前版本
...
图形学中的 Bresenham 画圆算法是基于中点画圆算法的派生,以下是该算法的 C 语言实现:
///////////////////////////////////////////////////
// 程序名称:基于 Bresenham 算法画圆
// 编译环境:Visual C++ 6.0 / 2010,EasyX_20210730
// 作 者:YangW <yw80@qq.com>
// 最后修改:2011-5-3
//
#include <graphics.h>
#include <conio.h>
// 使用 Bresenham 画圆法
void Circle_Bresenham(int x, int y, int r, int color)
{
int tx = 0, ty = r, d = 3 - 2 * r;
while( tx <= ty)
{
// 利用圆的八分对称性画点
putpixel(x + tx, y + ty,
...