象棋对弈小软件

来源:互联网 发布:apache开源项目名称 编辑:程序博客网 时间:2024/05/01 22:49

星期五, 在网上 整理完socket通信的代码, 我就着手开始用mfc + socket 弄一个 局域网的1对1 的象棋对弈软件。晚上回到家后开始着手编码,我的主要思想是:

1. 用mfc 创建一个单文档工程, 用 LineTo、MoveTo 、Eclipse 等库函数 画一个棋盘 和棋子。

2. 将 棋盘 看做 一个 10 * 11 的 矩阵(初始化都为0), 0行 和 0列没有用到, 用 正负 1、2、3、4、5、6、7 分别 代表 红方、黑方的 帅(将)、车、马、炮(砲)、相(象)、仕(士)、兵(卒), 然后用这些数字分别填充 到 10 * 11 的 矩阵中。

3. 在代码中 加进 socket 通信的代码, 通信的内容是 一方 的 棋盘的布局 10 * 11的矩阵。

进度情况:

1. 星期五晚 20:00~ 1:00、星期六早上10:00~晚上24:00、星期日早10:00 ~下午4:00 , 经过 20个小时的编码, 程序的单机上的对弈已经实现。

2. 局域网的对弈, 存在 刷新 问题。

3. 没有 加入 一方 只能走 特定 颜色的 棋子的 限定。

4. 用的是 面向 过程 的函数思想。

遇到的困难:

1. 棋子 的 走法规则,例如: 别马腿, 象眼 的判断。

2. 因为 我后填的函数 没有用面向对象的思想, 所以在socket接收到 对方的 棋盘布局矩阵的时候不知如何刷新屏幕?

   最后我想出了几个解决方案:

  1. 再 编一个 程序, 不停地 刷新 整个屏幕。

  2. 设置一个 全局标识,在 程序中一直有一个线程在 观察这个标识, 在socket接收到消息的时候, 改变全局标识, 这时 哪个线程检测到标识改变后进行刷新工作区。

  3. 将 socket 的代码 和 棋盘的 布局代码 等 改成 面向对象的 方法, 既 都 封装到类中( 有待 改善)。

  2012年5月22日12:05:53

 4. 在 局域网中 测试 出现 不同机器 不同的分辨率 会出现 bug, 因为 我 在代码中 用了系统函数 算出 当前屏幕的 长宽, 然后依据这个 长宽的 值 绘画棋盘和棋子。

     解决办法: 把 屏幕的 分辨率的 问题 考虑进去, 先 将 长宽 设置一个定值, 然后 再 着手 将 不同分辨率 转化一下。

下一步的工作:

1. 将 程序 完善, 能够 在 局域网中 完成 对弈。(完成后会将代码、程序上传

2. 将 程序中的 面向过程的函数, 改写成 面向对象的编码方式。

3. 优化 代码: 例如: 棋子走法的限定、变量 的生存周期的控制。

4. 开发 一个 socket 服务器端, 用于 接受两个socket客户端的 信息 和 转发。