/Graw-Guess

网络联机版你画我猜

Primary LanguageC++MIT LicenseMIT

网络联机“你画我猜”游戏

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为配置文件示例,需要与客户端可执行文件位于同一目录下