分享代码 快乐编程

一起学习,一起进步,从分享代码开始~

贪吃蛇大作战

这是一个贪吃蛇大作战类游戏,修改特性为 AI 不互杀;

该程序有四个类:蛇基类 SnakeBase,玩家类 Player,AI 类,Game 类;
SnakeBase 和 AI 均继承自 SnakeBase,SnakeBase 提供基础接口;
Game 提供数据初始化以及游戏主循环。

程序设计之初,采用“实运行”方式,即所有动画均在地图 imgMap 上真实绘制,
这样却有一些严重的问题,需要不断地记录节点背景以恢复节点经过的地方等。

后修改为“虚运行”方式,判断位置是否可视后直接绘至窗口内,
这样大大降低时间开销,同时不会因为蛇靠近而产生不可擦除的颜色。

至于蛇运行,采用位置继承,即节点下一个位置为上一个节点的位置,但是会发现跨度太大,
解决办法是在这个跨度中插入适当帧数。

执行效果如下:

...

纯软件算法实现 3D 渲染(by 桌子)

大部分说明在源码中可以看见,这个项目是在尝试做软件渲染器时边想边做的,模仿了很多 OpenGL 的 API 定义(类似 OpenGL 运行库),然后在 main.cpp 里面写用户自己的模型及贴图代码。

软件运行可以得到如下的效果:

主要实现的功能:

  • 一些简单的数学运算(矩阵相乘,向量叉乘等)
  • 使用扫描线多边形填充算法绘制多边形
  • 线性插值(linear interpolation)
  • 透视校正插值(perspective correct interpolation)
  • 深度测试(用于消隐)

一些我想到的但是暂时没实现的功能:

  • 不支持 ddx 和 ddy,所以没有 Mipmap,因为实现起来比较麻烦。
    ddx 和 ddy 是指在屏幕空间上求 vbo 的偏导数。真正的 GPU 绘制的时候是在
...

高仿版扫雷

这是个高仿的扫雷游戏,游戏手感非常贴近原版。

代码由两个类构成,基类 Graph 对 IMAGE 进行绘制,同时生成界面,初始化相关数据。MineSweeper 类继承 Graph 类,主要进行相关操作,识别按钮等做出反应。

执行效果如下:

完整的游戏源码如下:

/*
	程序名称:扫雷

	简  介:一款经典的小游戏,程序运行中可以通过 ESC 直接退出
			 左键点击,右键标记和取消标记,同时按下左右或按下中间键触发提示
			 其他操作基本和官方一致,界面略有调整,详细操作自行测试

	编译环境:VS2019 + EasyX_20190529(beta)

	编写时间:2019-6-29
	最后修改:2019-7-30

	作  者:Teternity(qq1926594835)

	版  权:作者原创,无抄袭,不涉及版权问题,仅用作学习
*/

// 头文件
#include <easyx.h>
#in
...

贪婪球 2.0(by 奶酪)

贪婪球第一版在这里:https://codebus.cn/contributor/post/greedy-ball

2.0 版本相对第一版做了如下修改:

  1. 视野缩放,会随着体积增大视野变大,解决一代玩家球过大挡住屏幕现象
  2. 增加高杀伤力毒圈,解决满地图跑问题
  3. 提高敌人 AI 智商,会主动吃食物
  4. 修复若干已知 bug
  5. 扩大了游戏区域
  6. 全部用 c++ 重写

执行效果如下:

完整的源代码如下:

///////////////////////////////////////////////////
// 程序名称:贪婪球 2.0
// 编译环境:Microsoft Visual stu

...

程序员专用的打字练习程序(by 温良)

这是一个专门给初学 C 语言的同学用的练习打字的程序。

屏幕上会落下来几个单词(都是 C 语言的关键字),然后通过键盘输入任意一个单词,如果输入正确,下落的对应单词就会消失。

程序会统计实时的准确率和打字速度等数据。

执行效果如下:

完整的源代码如下:

//////////////////////////////////////////////////////
// 程序名称:C 语言码农专用的打字练习程序
// 编译环境:Visual C++ 2008, EasyX_20190415(beta) 
// 作  者:温良(大一)
//    QQ:1677376433
// 最后修改:2019-5-10
//
#include <graphics.h>
#include <conio.h>
#include <time.h>
#include <stdio.h>
...

EasyUI:基于 EasyX 的 UI 界面库(by 祝融)

EasyUI 类构成指南

EasyUI 将 UI 拆分成了两个部分--绘制单元和事件触发器。
使用者可以使用绘制单元来控制 UI 的风格,同时选择一定的事件触发器来使 UI 具备响应事件的功能。

绘制单元:

-CDrawCell:所有绘制单元的基类
-CSimpleShape:继承自 CDrawCell,集成了通过 EasyX 图形绘制函数绘制的图形属性
-CHaveSize:所有拥有大小的类的基类
-CRect:继承自 CSimpleShape,绘制一个矩形
-CRoundRect:继承自 CSimpleShape,绘制一个圆角矩形
-CCircle:继承自 CSimpleShape,绘制一个圆形,并以绘制位置为中心(所有绘制单元都从左上角画起,除了圆)
-CEllipse:继承自 CSimpleShap,绘制一个椭圆(通过外接矩形)
-CText:继承自 CDrawCell,输出一串字符串
-CUIImage:继

...

2048(by 洛枫)

经典的 2048 游戏的 C/C++ 实现!

这是个益智游戏,规则很简单,按上、下、左、右键,使游戏区域的所有方块向该方向滑动,每次滑动时,相碰的两个相同数字会合并。同时,空白的地方也会在随机出现一个数字方块(2 或者 4)。游戏目标,是想办法合成 2048 这个数字方块。

执行效果如下:

完整的源代码如下:

/*
项目名称:2048
开发工具:Visual Studio 2017,EasyX 20190415(beta)
项目类型:Windows Consoal Application
作者:洛枫
QQ:1101458726
Email:1101458726@qq.com
发布日期:2019-4-17
最后修改:2019-4-24
*/

#include <easyx.h>
#include <string.h>
#include <map>
#
...

小球连连看(by 洛枫)

游戏玩法:从第一个小球出发,按鼠标左键发射射线连接第二个小球,直到重新连接到第一个小球,形成闭环游戏过关。

游戏难度逐关递增。第一关小球位置随机,第二关球更小更多,第三关球会移动。

游戏运行截图如下:

该游戏的编译环境:Visual C++ 2008,EasyX_20190314(beta)

全部游戏源代码【请点击这里下载】

作者:洛枫
QQ:1101458726
Email:1101458726@qq.com

C 语言高仿 FlappyBird 电脑版(by 徐洛洛)

该程序是用 C 语言实现的 FlappyBird 的电脑版,玩法和手机版的相同。

程序通过 alpha 域实现透明贴图,并且通过双缓冲绘图防止刷新闪屏。

程序执行效果如下:

该程序的编译环境:Visual C++ 2008,EasyX 20190314(beta)
项目类型:控制台程序

完整的项目代码与资源【请点击这里下载】

作者:徐洛洛
QQ:1584133118
Email:1584133118@qq.com

可以自由定制的电子相册(by 席锦)

这是一个自已DIY内容并且具有背景音乐的电子相册。通过自定义内容,可以制作成属于自己的电子纪念册。

点击小图可以查看每张图片以及对于的图片文字描述,按下 w、s、a、d、↑、↓、←、→ 按键可以达到和鼠标点击的同样效果。支持跳转至任意一张已加载的相片,也支持自动循环浏览相册,具体操作请点击对应的工具图标。

执行效果如下:

操作说明:

  1. 点击小相片将看到对应的大相片和相片印记
  2. 点击不同的工具图标将产生不同的效果
  3. 支持按键 w、s、a、d、↑、↓、←、→,作用分别是上下移动和左右翻页
  4. 支持跳转至任意编号相片
  5. 支持内容 DIY,具体操作请参照 Set.ini
  6. rc 文件为程序图标,不可修改
  7. res 为程序 DIY 内容所在文件夹,里面内容皆可修改
...