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

如何用纯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条)

报告相同问题?

悬赏问题

  • ¥20 双层网络上信息-疾病传播
  • ¥50 paddlepaddle pinn
  • ¥20 idea运行测试代码报错问题
  • ¥15 网络监控:网络故障告警通知
  • ¥15 django项目运行报编码错误
  • ¥15 请问这个是什么意思?
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏
  • ¥15 模糊pid与pid仿真结果几乎一样