C++ MFC棋牌类小游戏day4

根据昨天的计划,今天开始做下面的内容。

1.鼠标点击事件

2.点击坐标进行处理。(坐标转换)

3.判断选中的位置是否有效。

4.确定选中的棋子,设置棋子的状态和棋子所在坐标的状态。

5.判断移动是否有效

6.设置移动后棋子的状态和坐标的状态。

鼠标点击事件在View中进行。如何把棋子移动和坐标转换进行有效的解耦合是当前的问题。

我开始的想法是Move单独写成一个类,坐标转换单独写一个Common,当触发鼠标左键点击时间时候,调用Move类,Move类中通过坐标转换算法,计算出坐标,暂时先不考虑规则,只实现鼠标单机移动棋子。5和6暂时不考虑。

Move类跟Piece类中的Move方法有重叠,暂时先不使用Move类,使用move方法试试。

使用move方法的缺陷是不知道鼠标点击的坐标应该传给哪一类棋子,因为规则还没有指定,刚才想设计Move类是想用Move类做一个过渡,这样的话Move类起到的作用应该是当做规则来使用,用来协调调用哪一个棋子的move方法。这样的话那就把Move类改为Ruler类,后面的规则在里面添加。

经过排查,终于找到纠结的原因了,是因为自己在前面挖的一个大坑,在初始化棋子的时候,棋子的状态依然是用的Location结构体定义的,没有对棋子的状态进行保存,导致后面无法获得棋子的状态。

创建一个新的结构体Piece_State,用来记录棋子的状态;

struct Piece_State
{
	int x = 0;
	int y = 0;
	int num = 0;//记录棋盘0-24序号
	bool isSurvice = true;
	bool isChose = false;

};

  

 今天先到这了,代码不完善,先不放了

原文地址:https://www.cnblogs.com/smh2015/p/9694217.html