
由于最近从 matlab 转接到 vs 平台继续自己的仿真工作,但是却一直没有找到简易 plot 工具,于是尝试用 EasyX 开发一个绘制波形的小工具,希望可以帮助到有需要的人。
执行效果如图:
完整源代码如下:
/******************************************************************************************/
// EasyPlot 是基于 EasyX 绘图库(https://www.easyx.cn)而编写的,对实时信号进行绘制的一个工具
// 以下代码为了便于学习以源文件形式展示,如果应用于工程建议采用头文件形式封装
// 本文采用Unicode字符集,ANSI环境的读者注意相关地方格式的转换
// 作者:Ephemeroptera
// 地点:安徽大学
// 联系方式:605686962@qq.com
// 最后修改时间:2018-11-29
/*************
...
一个比较新颖的贪吃蛇程序。
用左右表示蛇向左转或向右转,上用来加速。
源代码如下:
///////////////////////////////////
// 程序名称:贪吃蛇
// 编译环境:Visual C++ 6.0 / 2008,EasyX 2013冬至版
// 作者:王垣恒 QQ:646361765
// 最后修改:2014-5-20
// 操作方式:以蛇为第一视角,左 左转;右 右转;下 暂停;上 快进。
// 状态: 黄色 蛇头;红色 蛇身;绿色 食物。
//
#include <graphics.h>
#include <string.h>
#include <time.h>
#define NUM_R 10 //半径
#define NUM_X 25 //横向个数
#define NUM_Y 25 //纵向个数
#define NUM 30 //所需节点个数
void exe(int x,int y,int f);
...
这个程序实现将彩色图像转换为灰度图像。
彩色转换为灰度使用如下公式:
Gray = R * 0.299 + G * 0.587 + B * 0.114
为了提高运算速度,将这个公式转换为整数运算:
Gray = (R * 229 + G * 587 + B * 114 + 500) / 1000
为了提高运算速度的方法还有很多,这里作为演示,不再详述。
完整代码如下:
/////////////////////////////////////////////////////////
// 程序名称:彩色图片转换为灰阶图片
// 编译环境:Visual C++ 6.0 / 2010,EasyX 20130322(beta)
// 作 者:krissi <zh@easyx.cn>
// 最后修改:2013-1
...
这个程序实现将图片转化成底片效果。
底片效果使用如下公式:
R = 0xFF - GetRValue(pMem[i]);
G = 0xFF - GetGValue(pMem[i]);
B = 0xFF - GetBValue(pMem[i]);
完整代码如下:
/////////////////////////////////////////////////////////
// 程序名称:底片效果
// 编译环境:Visual C++ 6.0 / 2010,EasyX_20200727
// 作 者:krissi <zh@easyx.cn>
// 最后修改:2013-1-20
//
#include <graphics.h>
#include <conio.h>
// 底片效果
void ColorInvert(IMAGE *pimg)
{
...
本程序模拟了以不同速度行驶的三辆小车。
源代码如下:
////////////////////////////////////////////
// 程序名称:3 辆行驶的小车
// 编译环境:Visual C++ 6.0,EasyX_20120603(beta)
// 程序编写:E_SHARE <501748772@qq.com>
// 编写时间:2012-6-26
////////////////////////////////////////////
#include <graphics.h>
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
// 声明需要使用的函数
void carstart(int x, int y, int z);
void drawbus();
void init();
// 定义全局变量
IMAGE img;
/////////
...
相信看到这篇文章大部分得小伙伴都是用过 EasyX 的,这是一个 Windows 下的 C++ 图形库,过多的介绍不再赘述。
当初接触 EasyX 时,我最大的感触就是:哇,原来还有这么简单易用的图形库!!!!
用过一段时间感觉很棒,推荐给大家!
某次突发奇想,要不我把 EasyX 封装成 Lua 模块吧,这样子就不受到编译器的限制了,只要装有相应版本的 Lua 解释器,并且提供运行库那就很 OK 啦。
大家 LuaEasyX = require "LuaEasyX" 后自己 for k,v in pairs(LuaEasyX) do print(k,v) end 看一看
我也懒得做文档了,因为 LuaEasyX 本质就是对 EasyX 的再次封装,API 的参数几乎一模一样。
在下面放出的文件中我会把一些API的差异给列出到一个文本文档中。
以后还会用自己封装的LuaEasyX来再做几个小游戏给大家玩玩的。
大家到时候拿来过过瘾就好啦,哈哈哈
...

本程序采用面向对象技术编写,主要涉及到了三个类:GButton、GEdit、GCount。
GButton 负责按钮的放置,绘制,响应鼠标等操作。GEdit 负责编辑框的显示更新数据,通过设置其内部的字符串来更新数据, 设置函数 SetEditString 就是程序与编辑框的接口,每进行一次操作将 GCount 的字符串通过该函数传递给编辑框,然后编辑框更新数据。每个按钮内部也有字符串, 每次通过读取按钮内部的字符串来裁决 GCount 要进行的操作,当程序获取到左右操作数时,相当于用户点击了等于号按钮,程序便计算结果,并将结果传递给 GCount 内部的字符串,以便后续操作。当用户使用鼠标滑动时,会产生鼠标消息,若有鼠标消息,程序便读取一个消息,此时判断鼠标滑动的位置,函数 OnLocate 就是原来计算鼠标是否滑动到按钮上,若的确滑动到了按钮上,则将其设置为当前按钮,并将上次滑动到的按钮的颜色恢复,当前按钮的颜色将变化,至于 GButton 为什么使用二维数组,便是为了快速的将鼠标消息所对应的位置与相应的按钮映射过来,这样能迅速的找到对应的按钮,并对其进行操作。
...

本迷宫游戏支持用户自己创建迷宫,定义迷宫的出入口,并求解最短路径。
游戏运行抓图如下:
使用方法:
- 执行程序后,先按 s,开始用鼠标绘制迷宫墙壁。
- 绘制完墙壁后,按 e,用鼠标设置迷宫的出入口。
- 设置好出入口之后,按 d,动态演示迷宫的最短路径。
游戏采用面向对象技术编写,完整的游戏 VC++ 源代码下载:<点击这里下载>
作者:Redman
邮箱:huangxionging@163.com

这个程序是 BFS 寻路 Demo。
该程序可以让用户自由设置起点、终点、障碍物,并得出寻路结果。寻路算法用的是广度优先搜索算法(BFS),界面和图形显示用的是 EasyX。
程序运行界面如下:
完整的源代码如下:
// 程序名称:BFS 寻路 Demo
// 作者:光棱坦克(prismtank)
// QQ:3152239285
// 完成日期:2016-7-16
// EasyX 版本:2015-10-15
//
#include <graphics.h>
#include <stdio.h>
#include <memory.h>
#include <queue>
using namespace std;
const int WIDTH = 24, HEIGHT = 24;
struct Block
{
BYTE x, y, depth, data[200];
bool searched,
...

这是经典的下 100 层游戏。>_<
通过鼠标左右键或者键盘 A、D 按键及左右方向键控制小球左右移动,木板会不断上升,小球到底认定游戏结束,按下键盘后小球会加速到一个最大速度,小球在木板上则会跟着木板上移,达到一定分数启动反向操作。
本程序采用单例设计模式,RollingBall 公有继承 BallAndPlank,protected 便于派生类访问基类数据成员。
木板的颜色随机,位置随机。
界面由初始化界面大小控制,可自行更改。
游戏运行截图如下:
游戏的完整源代码如下:
/*
项目名称:
RollingBall
作者:
tzdhu.z@qq.com (1926594835)
编译环境:
Visual Studio 2017,EasyX_20190219(beta)
发布日期:
2019-2-2
最后修改:
2019-2-23
项目介绍:
本程序由单例设计模式
...

贪婪球第一版在这里:https://codebus.cn/contributor/post/greedy-ball
2.0 版本相对第一版做了如下修改:
- 视野缩放,会随着体积增大视野变大,解决一代玩家球过大挡住屏幕现象
- 增加高杀伤力毒圈,解决满地图跑问题
- 提高敌人 AI 智商,会主动吃食物
- 修复若干已知 bug
- 扩大了游戏区域
- 全部用 c++ 重写
执行效果如下:
完整的源代码如下:
///////////////////////////////////////////////////
// 程序名称:贪婪球 2.0
// 编译环境:Microsoft Visual studio 2017,EasyX 2018春分版
// 作 者:奶酪
// 邮 箱:2190038793@qq.com
// 发布日期:2019-6-24
...

游戏介绍
【第一版】
花了一天时间,用 easyx 做了一个小游戏,程序中所有的类函数都是内联函数,大约 300 行,开发环境是 Visual Studio 2015 Community。
【第二版】
主要做了代码优化,加强可读性。
同时改了操作方式,玩家和敌人都可以在 x、y 方向上移动,敌人每隔一段时间会随机换向。
游戏运行截图如下:
操作方式
玩家通过方向键移动,z 键射击,左 Shift 进入低速移动模式提高操作精度。
代码说明
关于无阻塞延时,
首先,先要 ctime 创建一个 clock_t 变量 a,初始化为 clock(),貌似是自从 1970 年到现在的毫秒数。
我们要每隔 0.5 秒执行函数 func() 一次。
那么创建主循环 while(1)
调用前用 clock() - a;
如果 clock() - a > 500,那么执
...
本程序模拟了多个小球在方框内的碰撞运动。
源代码如下:
///////////////////////////////////////////////////
// 程序名称:多个小球在方框内的碰撞运动
// 编译环境:Visual C++ 6.0,EasyX 2013冬至版
// 作 者:可可
// 最后修改:2014-03-18
//
#include <graphics.h>
#include <conio.h>
#include <math.h>
#define XN 640
#define YN 480 // 设置图形窗口的大小
#define N 40 // 设置球的个数,最多 90 个
#define V 20 // 设置球的速度
// 画出一个球
void Ball(int x, int y)
{
fillcircle(x, YN - y, 20); // 转换成常用的坐标
}
// 判定是否发
...

关于 Julia Set (茱莉亚集) 的介绍什么的我就不多说了,网上一大堆。执行效果如图:
关于 Julia Set,可以通过设置复数 c 的初值,显示出不同的图案,比如,大家可以试试以下几组:
c.re = 0.45, c.im = -0.1428; c.re = 0.285, c.im = 0.01; c.re = 0.285, c.im = 0; c.re = -0.8, c.im = 0.156; c.re = -0.835, c.im = -0.2321; c.re = -0.70176, c.im = -0.3842;
随便用哪行替换掉源程序中的“c.re = -0.75, c.im = 0;”都可以看到不同的精美图案。循环变量 k 是迭代次数,在某些参数下需要高一些会更精细。
为了美观,还需要修改一下颜色部分,目前代码中的颜色是这样的:
HSLtoRGB((float)((k<<5) % 3
...

这是一个简单的飞机空战游戏。
游戏操作说明:
w、s、a、d 控制飞机移动
k 发射子弹
空格暂停
ESC退出
敌机自动发射子弹、自动移动
当飞船碰到敌机、飞船血量为 0、敌机碰到底部时游戏结束
敌机血量为 0 时,会出现一个新的敌机
小敌机随机出现
结束后按 ESC 退出,按 R 重来。
游戏运行截图如下:
该游戏的编译环境为:Visual C++ 2013,EasyX_20190219(beta)。
完整的游戏源码包【点击这里下载】。
作者:刘华欣
QQ:1359240780
邮箱:1359240780@qq.com