目录
一、五子棋项目介绍
1.游戏规则
五子棋是我国古代传统的黑白棋种之一,黑白双方依次落子,任意一方在棋盘上形成横向、纵向、斜向的连续相同颜色的五颗棋子的一方胜。
2.五指棋界面显示
此次项目将不使用任何图形库进行开发,所有显示内容都是以字符形式进行显示,为了让整个五子棋项目显示的界面更加漂亮,这里我们使用VT100终端控制码进行输出。效果如下
二、 VT100简介
VT100是一个终端类型定义,VT100控制码是用来在终端扩展显示的代码。主要用来在终端上任意坐标用不同的颜色显示字符。所有的控制符是\033或\e打头(即ESC的ASCII码)用输出字符语句来输出。可以在命令行用echo命令,或者在c程序中用printf来输出VT100的控制字符。
1.VT100控制码
2.前景颜色(字体颜色)设置
3. 背景颜色设置
注意 :字体颜色可以和背景颜色一起设置,例如: \033[44;37m 表示将背景颜色设置为蓝色,字体颜色设为白色。
注意:
1.在终端上面,坐标系的原点为左上角,水平向右为x轴正方向坐标垂直向下为y轴正方向坐标
2.在输出完内容结束的时候,一定要记得使用\033[0m关闭属性,否则会影响终端正常输出
三、配置头文件
#ifndef CONFIG_HPP
#define CONFIG_HPP
#define BLACK 0x1 //黑色
#define WHITE 0x2 //白色
#define BLACK_COLOR "\033[37;40m[♀]\033[0m" //黑棋颜色配置
#define WHITE_COLOR "\033[47;30m[♀]\033[0m" //白棋颜色配置
#define LINE 21 //棋盘宽21
#define COLUMN 21 //棋盘长21
#define CHESS_BOARD_FILE "ChessBoard.txt" //棋盘文件配置
#define CHESS_BOARD_COLOR "\033[43;37m" //棋盘颜色配置
#define LINE_INTERVAL 2 //宽距
#define COLUMN_INTERVAL 4 //长距
#define X_MAX 81 //最大x坐标
#define Y_MAX 41 //最大y坐标
#define X_CENTER 41 //棋盘中心点的x坐标
#define Y_CENTER 21 //棋盘中心点的y坐标
#endif
四、棋子对象设计
1.棋子的抽象类
#ifndef CHESS_HPP
#define CHESS_HPP
#include <iostream>
#include <cstdio>
using namespace std;
class Chess
{
public:
Chess(int x,int y,char color) : x(x),y(y),color(color)
{
}
virtual ~Chess(){}
virtual void show()=0; //棋子方法的纯虚函数
int getX() const //获取棋子的x坐标
{
return x;
}
int getY() const //获取棋子的y坐标
{
return y;
}
char getColor() const //获取棋子的颜色
{
return color;
}
private:
int x; //棋子的x坐标
int y; //棋子的y坐标
char color; //棋子的颜色
};
#endif
2.白棋子类
#ifndef WHITECHESS_HPP
#define WHI