我的项目

流量预警!!! 这篇文章是我参与的项目的汇总。

# 1 扫雷作弊器

这个项目是我高一的时候用OllyDbg调试扫雷,偶然发现其全局变量与答案之间的关系,因而实现作弊的一个软件。这个软件会从外部读入一个配置文件,选项包括软件的延时、解决的模式(全部解出还是只标出雷)等等,然后借助Windows API读取/修改扫雷的内存。项目的代码是在我初步了解了C++的面向对象机制后写的,作为最初的尝试,其代码结构还有待改进。

# 2 Nokia复式记账软件

这个项目是我高二的时候为了记账而写的第一个大型应用。这个应用支持复式记账、多文档视图、智能的交互、自动结账、多语言、撤销重做等等。这个项目经历了一次彻底的重构,而这应该是第2版。其代码风格很好地利用了面向对象的优势,简洁而又灵活。这款软件一直被我使用直至我Nokia E71退休。所有的代码都是在我的Nokia E71完成的。

在这前后,我还写过一个走迷宫的游戏,也算是个不小的项目,但代码已经遗失,便不在这里展示。

# 3 平板跑酷游戏

《Escape the Deadline》是一款采用物理模拟的跑酷游戏。所有的游戏场景均从文件读取。游戏中,若玩家与地面碰撞,将失去所有垂直于地面的动量分量。玩家的跳跃以垂直于地面方向的冲量实现。玩家不能在空中控制。目前实现了三个地图。第一个地图为无限随机的跑酷地图,强制向右卷屏。第二个地图的重力加速度较小(这使得玩家可沿着墙壁向上爬行),地图有限,当玩家高度低于-5000时才会死亡,此地图考验技术。第三个地图为空白地图,玩家可进入命令模式后手动绘制(进入命令模式务必确保输入法为英文模式。按住shift再按单引号)。由于使用纯C,整个代码都是面向过程的,使用了模块化设计。

# 4 联网井字棋

这个项目分服务端和客户端。服务端会将相邻的两个连接作为一组游戏,支持同时多组游戏。客户端依次落子下井字棋。

# 5 联网贪吃蛇

这个项目分为服务端和客户端。其架构进行了精心设计,使用了MVC设计模式,但最后客户端因为时间问题草率手工。服务端还有一个简易的用户管理机制。

# 6 Qt植物大战僵尸

这是一款使用Qt,模仿植物大战僵尸的游戏。虽然只有一关,可选的植物和僵尸也不多,但是代码非常具有扩展性。有火炬树桩、南瓜头、寒冰射手等植物。

# 7 知乎搜索引擎

  • 依赖:Electron(前端)
  • 语言:C++(内核)、JavaScript(前端)
  • 代码量:3504行(内核)、463行(前端)
  • 缘由:《数据结构与算法(1)》的《数据结构》课程实验2
  • 源码:sunziping2016/zhihu-search-engine
  • 发布:Windows x64版(点击gui.bat启动)
  • 文档:实验报告

这项作业要求手写各种数据结构、解析给定的HTML、使用前缀树分词、建立倒排索引从而完成对知乎日报文章的检索。我重新实现了C++中的vector、list、unordered_set等数据结构、写了一个具有良好错误检查的HTML解析器,并提供了类似BeautifulSoap的接口。为了加速我使用了多线程。相较于他人动辄1分钟以上的耗时,我仅用1.5秒即可完成这些步骤。前端部分使用Electron,以DLL的方式调用内核,界面模仿了Google。

# 8 图的可视化

  • 依赖:Boost(内核)、Electron(前端)
  • 语言:C++(内核)、JavaScript(前端)
  • 代码量:1196行(内核)、1502行(前端)
  • 缘由:《数据结构与算法(1)》的《图论》大作业
  • 源码:sunziping2016/GraphVisualization

这个项目使用了Boost图的算法,将其以DLL的方式导出,从而使前端Electron可以调用Boost。前端部分使用了three.js来做到3D的效果。

# 9 汇编画图

  • 依赖:Windows API
  • 语言:汇编(RadASM)
  • 代码量:2522行(三人组队,我是主力)
  • 缘由:《计算机与网络体系结构(2)》的《汇编》小组作业
  • 源码:sunziping2016/asmpaint
  • 发布:Windows x86
  • 文档:说明文档

用汇编实现了一个类似mspaint的画图软件。功能非常齐全,包括缩放、撤销重做、矩形椭圆手绘作图、选择前景背景颜色、画笔粗细、填充效果等等。

# 10 FTP服务器

  • 依赖:Linux,bcrypt,hash_table
  • 语言:C
  • 代码量:3011行
  • 缘由:《计算机与网络体系结构(1)》的《计算机网络》第一次实验
  • 源码:sunziping2016/ftp-server
  • 文档:说明文档

超高性能非阻塞IO的FTP服务器。支持用于添/删服务、添/删用户、踢出客户的CLI界面,支持双栈,支持基于bcrypt用户验证,有良好的信号处理。采用了防御式编程。

# 11 微信抢票系统

欲观看演示视频,请移步此处

这是一个借助微信发布活动、抢票、检票的系统,有邮箱验证的用户权限系统。前后端分离,API设计符合RESTful,有实时消息推送,安全且Scalable,前端为PWA。项目有单元测试,持续集成。

# 12 云众包平台

交付文档有很多截图,可以充当视频。

此项目的整体结构与微信抢票差异不大,不再赘述。

# 13 微信墙&微信弹幕

这个视频录制得有点卡。这是我后来录的,头像和昵称出了点问题。

这个项目包含微信墙和微信桌面弹幕两部分组成,支持emoji和微信表情。爬虫会模拟登陆微信号管理系统从而爬取用户头像。

# 14 体感游戏之碰撞

  • 依赖:Leap Motion SDK,jBox2d,Java运行环境
  • 语言:Java
  • 代码量:2455行
  • 缘由:科展使用
  • 源码:sunziping2016/Collision

这是一个基于Leap Motion的体感游戏,玩家用手控制游戏中的球,避免被其他的球撞击。架构采用了MVC。

# 15 小型数据库

  • 依赖:ANTLR4,Java运行环境,JUnit5(测试)
  • 语言:Java
  • 代码量:3774
  • 缘由:《计算机系统软件(2)》的《数据库》大作业
  • 源码:sunziping2016/mini-sql
  • 文档:演示文档

这是一个简单的关系型数据库实现。支持同时连接多个客户端;客户端服务端都支持命令行参数;对于核心代码有单元测试,可以JOIN任意多张表,支持丰富的表达式及表达式的递归。

# 16 函数式语言解释器

  • 依赖:megaparsec
  • 语言:Haskell
  • 代码量:3774
  • 缘由:《软件理论基础(2):函数式语言程序设计》大作业
  • 源码:sunziping2016/fpproject

这是一个简单的函数语言解释器,它支持递归函数、ADT、模式匹配、REPL等等特性,文法详见README.md

# 17 简易操作系统

这是一个在Xv6基础上继续改进的操作系统,我领导着大组约40人。但最终管理较为混乱。

# 18 声音通信

Sound Message UI

声音通过OFDM和QPSK调制方式传输信息。使用循环前缀避免干扰;使用Preamble信号定位其实与终止;最后使用导频信号恢复相位与振幅。开发了既可以作为发送端也可以作为接送端的Android APP。

# 19 声音定位

Sound Localization UI

这个项目采用FMCW的方式进行定位,我实现了1维和2维的实时定位,并且提供了不错的用于调试的UI。2维的定位效果不是特别好。

# 20 Graphviz可视化

Graphviz Visualizer UI

  • 语言:TypeScript
  • 缘由:专业课程实践导师布置的任务
  • 源码:暂时闭源
  • 文档:幻灯片

这个软件是用于可视化Graphviz文件。它有两个模式,第一个模式采用KamadaKawai作初始布局,紧接着用物理模拟,多体问题采用BarnesHut算法,可以拖拽。第二个模式使用Xdot的输出格式,按照里面的作图信息作图,不可拖拽。

2016-2020 Ziping Sun
京ICP备 17062397号