一流专业建设方案,鹤壁seo公司,wordpress 三大标签,公司建设网站费用做那个科目从控制台版本开始
考虑到象棋程序#xff0c;其实就是数据结构与算法实现。
所以和界面相关的QT部分我们先放一放。
我们从控制台版本开始。这样大家更容易接受#xff0c;也不影响开发。
后面我们会把控制台嫁接到QT上完成完整的游戏#xff0c;那时候自然就水到渠成了…从控制台版本开始
考虑到象棋程序其实就是数据结构与算法实现。
所以和界面相关的QT部分我们先放一放。
我们从控制台版本开始。这样大家更容易接受也不影响开发。
后面我们会把控制台嫁接到QT上完成完整的游戏那时候自然就水到渠成了。 显示棋盘
中国象棋的棋盘是一个宽9列长 55 10 行的一个长方形二维方格棋盘。 在控制台上显示一个棋盘是很容易的。
使用双重循环就可以打印出来了。
#include iostream
using namespace std;int main(void)
{for (int row 0; row 10; row){for (int col 0; col 9; col){cout _ ;//表示棋盘上的一个位置}cout endl;}return 0;
}程序输出如下 棋盘显示棋子
我们希望将棋子显示在棋盘上。
和贪吃蛇一样我们需要在内存内存中创建一个棋盘棋盘上不同的内容代表不同的棋子。
就用整数表示棋子就行。
我们希望像下面这样存储棋盘 vectorvectorint chess_board{{ 1, 2, 3, 4, 5, 6, 7, 8, 9},{ 0, 0, 0, 0, 0, 0, 0, 0, 0},{ 0,10, 0, 0, 0, 0, 0,11, 0},{12, 0,13, 0,14, 0,15, 0,16},{ 0, 0, 0, 0, 0, 0, 0, 0, 0},{ 0, 0, 0, 0, 0, 0, 0, 0, 0},{ 0, 0, 0, 0, 0, 0, 0, 0, 0},{ 0, 0, 0, 0, 0, 0, 0, 0, 0},{ 0, 0, 0, 0, 0, 0, 0, 0, 0},{17,18,19,20,21,22,23,24,25},};
棋盘上不同的整数表示不同的棋子在对应的位置。
上面是开局时的棋盘数组的样子。
棋子的表示
我们虽然在棋盘上用数字表示了棋子棋子ID但是显示给用户的时候总不能让用户看数字下棋。
所以我们打算用汉字显示棋子。
这样以来和贪吃蛇类似我们也需要一个棋子容器。这个容器接受棋子的ID作为索引查询棋子的名字用来显示在棋盘上。
这个容器我们就用数组vector表示棋子的数组的下标对应棋子的ID,数组的内容对应棋子的名字。 vectorstring chess_man;完整代码如下 #include iostream
#include string
#include vector
#include iomanip
using namespace std;struct chess_object
{string name;//棋子要显示的名字
};int main(void)
{//棋盘数组不同的数字表示不同的棋子0表示没有棋子vectorvectorint chess_board{{ 1, 2, 3, 4, 5, 6, 7, 8, 9},{ 0, 0, 0, 0, 0, 0, 0, 0, 0},{ 0,10, 0, 0, 0, 0, 0,11, 0},{12, 0,13, 0,14, 0,15, 0,16},{ 0, 0, 0, 0, 0, 0, 0, 0, 0},{ 0, 0, 0, 0, 0, 0, 0, 0, 0},{26, 0,27, 0,28, 0,29, 0,30},{ 0,31, 0, 0, 0, 0, 0,32, 0},{ 0, 0, 0, 0, 0, 0, 0, 0, 0},{17,18,19,20,21,22,23,24,25},};vectorstring chess_man{ ,//下标为0不用编号从1开始//上方黑方棋子车,马, 相, 士, 将, 士, 相, 马, 车,炮,炮,兵, 兵, 兵, 兵, 兵,//下方红方棋子車, 馬, 象, 仕, 帥, 仕, 象, 馬, 車,卒, 卒, 卒, 卒, 卒,砲, 砲,};for (int row 0; row 10; row){for (int col 0; col 9; col){auto id chess_board[row][col];if (id ! 0){cout setw(5) chess_man[id] ;//输出一个棋子}else{coutsetw(5) _;//表示棋盘上的一个位置}}cout endl;cout endl;}return 0;
}输出如下