反思了一下昨天的设计,觉得略有不足,我决定把棋盘做成单例模式。这样的话需要重新设计棋盘类,emmm,是新建棋盘类。
Baord类
成员变量:
Location coordinate;//棋子坐标
bool isHavePiece;//记录是否有棋子
CRect rect;//备用
vector<Loaction> all_Board;//整个棋盘
方法:
int Coordinate_Px(Location loc,CRect &rect);
int Px_Coordinate(CRect rect,Location &loc);
先这样吧,不够再加
这样的话,棋子应该也需要重新设计一下
PaintPiece方法只负责话棋子,位置通过棋盘类中的Px_Coordinate转换
嗯。。。。。今天留下了一堆问题,明天有时间的话去解决
1.Tiger棋子画失败,应该是View的OnSize传的cx和cy的问题
2.搞清楚cx和cy的值是什么
3.嗯。。。我的逻辑应该没问题
链接:https://pan.baidu.com/s/1UlTCEDepaOPHVtynxGbtmQ 密码:t3nw
找到上面的问题了
1.问题一出在OnSize这边,传输的cx和cy都是0
在网上搜了一下,好像也有网友遇到过这个情况,看到过一位博主提到重绘,待会试一下,现在我是通过OnPaint传的值
试过Invalidate(),并没什么用,以后再查一下
2.问题二在画棋子时候我resize了vector的大小,导致前两个空间已经存了0,注释掉即可
有发现一个大bug,棋子位置不随着窗口大小改变,本来是以为OnSize和Onpaint的问题,通过调试发现是tiger和board里面的vector没有清除,导致内部数据无限累加,使用ersase(beg,end)清理一遍就ok了。
需要添加free board类的释放方法。