整体的文件框架,如下图所示,
运行时,如下图:
选择人机对战:
选择网络对战,在这可以同时运行两次,先运行服务器端。
代码分析
main.cpp主函数(入口)
ChooseDlg dlg; //对话框
即弹出的几个选项。在choosedlg.cpp中实现。
choosedlg.cpp 选项
ChooseDlg::ChooseDlg(QWidget *parent) : QDialog(parent)
{
QVBoxLayout* lay = new QVBoxLayout(this);
lay->addWidget(_buttons[0] = new QPushButton("人机对战"));
lay->addWidget(_buttons[1] = new QPushButton("人人对战"));
lay->addWidget(_buttons[2] = new QPushButton("网络对战(服务端)"));
lay->addWidget(_buttons[3] = new QPushButton("网络对战(客户端)"));
for(int i=0; i<4; ++i)
{
connect(_buttons[i], SIGNAL(clicked()), this, SLOT(slotClicked()));
}
}
mainwnd.cpp 选项实现
此函数,当点击不同按钮时,传入不同参数,用以选择不同情境下的对战。
MultiGame.cpp
多人游戏。
singlegame.cpp
单人游戏,即人机对战。
netgame.cpp
网络游戏。
board.cpp
棋类,创建棋盘,记录走棋的信息,游戏规则等信息。
stone.cpp
棋子类,关于棋子坐标,类型即什么棋子,颜色等。
step.cpp
关于棋子走的记录,主要用于悔棋。在人工智能走的时候记录最优走法。