我的项目

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

扫雷作弊器

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

Nokia复式记账软件

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

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

平板跑酷游戏

  • 依赖:Windows API
  • 语言:纯C
  • 代码量:3552行
  • 缘由:大一上《软件工程(1)》大作业
  • 源码:sunziping2016/Escape
  • 文档:设计文档

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

联网井字棋

  • 依赖:Java运行环境
  • 语言:Java
  • 代码量:713行
  • 缘由:《Java语言程序设计》第九次作业
  • 源码:sunziping2016/Java-TicTacToe

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

联网贪吃蛇

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

Qt植物大战僵尸

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

知乎搜索引擎

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

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

图的可视化

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

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

汇编画图

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

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

FTP服务器

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

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

微信抢票系统

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

云众包平台

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

微信墙&微信弹幕

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

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

体感游戏之碰撞

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

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

小型数据库

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

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

函数式语言解释器

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

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

简易操作系统

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

声音通信

Sound Message UI

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

声音定位

Sound Localization UI

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

Graphviz可视化

Graphviz Visualizer UI

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

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

全自动刷课脚本

通过爬虫爬取了4千验证码后,在朋友的帮助下标记了2千验证码。从头设计并训练神经网络,借助CNN和RNN使验证码识别准确率达到了95%。从而做到了全自动无人自动刷课。

RSA加密

  • 语言:Rust
  • 代码量:2000行
  • 缘由:研一上《应用密码学》期中大作业
  • 源码:sunziping2016/rsa-rs
  • 文档:报告

借助汇编手写高精度整数,实现了高性能的RSA密钥的生成、加密和解密。借助Rust,代码具有很好的跨平台支持,可在各x86_64平台运行。兼容OpenSSH密钥格式。代码风格良好,搭配单元测试。

简易联盟链实现

  • 依赖:SQLite
  • 语言: Python3(使用Mypy和PyLint),Vue2
  • 代码量:2267行(后端)、1264行(前端),我是主力
  • 缘由:研一上《应用密码学》期末大作业
  • 源码:sunziping2016/horde-blockchain
  • 文档:

使用数据库存储区块链,利用实用拜占庭容错协商,适配国密加密算法,可视化地展现了联盟链的操作。数据库和TCP连接均采用异步编程。值得一提的是这个项目在软件工程方面做得比较好,有Wiki帮助成员了解项目、有看板管理现在的任务、有issue追踪需求和bug、有CI对每个commit进行风格检查和单元测试。

光线追踪

光线追踪效果

  • 依赖:PyQt5
  • 语言:Rust、Python
  • 代码量:4842行(Rust内核)、3343(Python前端)
  • 缘由:研一下《真实感渲染技术》期末大作业
  • 源码:sunziping2016/ray-tracing
  • 文档:报告

本项目实现了包含多种材质、多种形状的场景的3D光线追踪。核心逻辑用Rust实现,部分API可被Python前端调用。项目最大的特色在于性能,使用了多线程和基于AoSoA的SIMD加速。代码使用了泛型,可在多种SIMD指令集中方便地切换。

孙子平
孙子平
静态分析方向研究生
下一页
上一页

相关