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

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

c++

3个回答

(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 」来进行排序

使用图形函数生成棋盘,看你用什么库,有字符模式下的 EasyX,Windows的库,MFC以及QT等等。
不涉及AI其实主要就是绘图和简单的规则判断了。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问