snn_light 2020-01-03 12:22 采纳率: 100%
浏览 1590
已采纳

如何用纯C++编写国际象棋程序?

编写程序,实现国际象棋游戏,要求:
(1)实现国际象棋游戏的各个规则。
(2)使用图形函数生成棋盘等。
(3)用文件存储用户的进度。
(4)用户开始新游戏时,先检测是否有历史记录,有的话可以继续未完成的棋局,也可以重新开始。
(5)实现用户排名功能。

  • 写回答

4条回答 默认 最新

  • sinat_33817180 2020-01-08 03:24
    关注

    (1)实现国际象棋游戏的各个规则。
    楼主提到了「各个」规则,由于 C++ 是面向对象程序语言,
    善用设计模式 (Design Pattern) 的话可以很容易撰写不同的规则
    例如,根据敌方 我方 进行不同规则时,可以使用 状态模式 (State Pattern)
    每个旗子的移动的规则,能够使用策略模式 (Strategy Pattern)
    想初始化不同的旗子资源 (e.g., 影像、规则) 可以使用 工厂方法模式 (Factory Method Pattern) 或是 雏形模式 (Prototype Pattern)
    如此一来便能让程式码进行解耦

    (2)使用图形函数生成棋盘等。
    您需要的是一个 GUI 框架,例如 Qt, GTK, wxWidgets 等等
    这些框架都有其绘图函数,棋盘就相当是 m 条 横线 * n 条直线 (或矩形)
    调用起来像是 drawLine(m, n)

    (3)用文件存储用户的进度。
    要将 C++ Class 的实例或其他数据进行储存,
    可以自行设计资料格式,并透过 fstream 等函数进行写档
    也能透过 Boost 函式库的 serialization
    但我个人更建议使用数据库,譬如本地的 SQLite 或者 伺服端的 Postgresql, MySQL

    (4)用户开始新游戏时,先检测是否有历史记录,有的话可以继续未完成的棋局,也可以重新开始。
    这问题跟第一题相同,可以使用命令模式 (Command Pattern) 将每个步骤包装成一个「命令」
    如此一来,便能易于储存历史纪录、也可以拥有「返回前一手」的功能
    建议阅读此篇教程 Command Pattern

    (5)实现用户排名功能。
    这问题跟第三题相同,因此你需要一个伺服端的数据库
    记录不同用户的分数,并利用数据库的「orderBy 」来进行排序

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 python爬取bilibili校园招聘网站
  • ¥30 求解达问题(有红包)
  • ¥15 请解包一个pak文件
  • ¥15 不同系统编译兼容问题
  • ¥100 三相直流充电模块对数字电源芯片在物理上它必须具备哪些功能和性能?
  • ¥30 数字电源对DSP芯片的具体要求
  • ¥20 antv g6 折线边如何变为钝角
  • ¥30 如何在Matlab或Python中 设置饼图的高度
  • ¥15 nginx中的CORS策略应该如何配置
  • ¥30 信号与系统实验:采样定理分析