chuanmx20 / JunQi-MilitaryChess-by-Qt

大一小学期大作业一周肝的军棋大作业

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

两国军棋在线对战

基于Qt Widgets(c++)

description

联机双人对战,用DFS简单实现了工兵移动 目前貌似只支持OSX系统

大概实现方法

  • 网络连接用的ip是本机所有IP地址中符合ipv4协议且非本地ip的第一个ip地址

  • 端口预设8081

  • 有聊天系统,未来打算通过聊天系统提供作弊操作(可能会添加微信收款码🐶

  • 有20秒计时器,用lcdnumber显示

  • 棋盘和棋子用的QLabel实现,重载了鼠标release槽,固定棋盘中60个位置,对每个位置的相邻位置以及该位置是否在铁路上做了记录,打乱棋盘时shuffle棋子数组,然后用打乱后的棋子数组与固定的棋盘数组进行布局

  • 棋子在选中时鼠标release事件会得到选中的行列,从而通过遍历棋子数组找到选中的棋子,再判断并操作当前棋子

  • 选中棋子的边框用的双缓冲绘制(先绘制在一个pixmap上,再用paintevent画到棋盘上)

  • 没有实现悔棋(个人感觉没必要)

  • 输赢条件 ** 排完地雷扛军棋 ** 超时三次判输 ** 离开游戏或投降判输

文件介绍

  1. main.cpp
  • 不多介绍了,进程入口
  1. mainwindow.cpp
  • 在此窗口选择是要创房间还是加入别人的房间
  1. client.cpp
  • 在此窗口连接到别人的房间,输入ip地址,并有正则表达式对IP地址进行格式判断
  1. server.cpp
  • 在此窗口创建房间,显示ip地址
  1. numkeyboard.cpp
  • 如其名,数字键盘的实现,包含了删除和清除操作
  1. chess.cpp
  • 棋子类,继承自QLabel,内部存有棋子的信息,包括但不限于生死、位置、类型、图片路径等等
  1. countdown.cpp
  • 倒计时类,继承自QLcdNumber,固定base计时20s发出timeout信号
  1. board.cpp
  • 棋盘类,包含了游戏的界面、游戏逻辑、通信方式,在此窗口下进行对局,同时还有聊天功能

About

大一小学期大作业一周肝的军棋大作业


Languages

Language:C++ 98.1%Language:QMake 1.9%