2022秋计算机程序设计大作业
该游戏采用C++语言和Qt实现图形界面,使用Socket.IO实现客户端与服务端的实时通信。游戏分为Primary端和Secondary端,Primary端负责绘画,Secondary端负责猜词。
Primary端和Secondary端对应同一个客户端程序的两种状态,客户端默认为Secondary状态。用户可以无缝切换两种状态。
Primary端在画布区域进行绘画,鼠标操作会实时传送给服务端,再广播给所有Secondary端进行同步绘画。Secondary端根据Primary端传来的绘画内容进行猜词。
服务端用于转发绘画操作和处理题目分发、计时及判断胜负等逻辑。
-
客户端
- 主窗口类MainWindow:实现界面及游戏逻辑
- 绘图类Painter:实现绘图功能
- 图片生成类BMPGenerator:实现画布导出
- 平滑曲线类SmoothCurveGenerator:实现绘画平滑
- 颜色类colorPalette:实现颜色选择
-
服务端
- 题目分发与计时
- 判断答案正确性
- 绘画操作转发
- Qt框架搭建图形界面
- Socket.IO实现客户端与服务端通信
- 信号槽机制处理跨线程UI操作
- Savitzky-Golay滤波器实现绘画平滑
- 时间戳控制刷新率优化性能
- 记录日志实现操作演示
- 输出BMP文件实现画布导出
- Primary端点击注册获得绘画权限后在画布绘画
- Secondary端观看Primary端绘画并输入答案
- 支持多人联机游戏
- 可调节画笔粗细和颜色
- 支持导出画布为图片
- 可通过配置文件开启日志记录和操作演示模式
- 配置服务端地址
- 编译客户端程序
- 启动服务端
- 运行客户端程序
编译过程颇为不易,需要熟练掌握cmake使用方式,并手动编译第三方依赖
源码中附带了win-x64的第三方库预编译文件
./final-build.zip
包含客户端程序完整打包
./export/
包含图片导出示例
./demo/
包含程序运行截图
./config.sample.json
为配置文件示例,需要与客户端可执行文件位于同一目录下