Qt实现中国象棋:(三)棋盘绘制的详细分析及实现 |
您所在的位置:网站首页 › 象棋的方位 › Qt实现中国象棋:(三)棋盘绘制的详细分析及实现 |
一、图片及棋盘分析
1:在上文中已经对单张图片的显示进行了测试,从中可以知道一张图片需要一个QPixmap对象对其进行加载。棋盘图片共有23张,也就需要23个QPixmap的对象。同时要求对象名与图片名一致,避免对象过多造成混乱。图片的命名是根据该图片在整个棋盘中的位置对其进行命名。例如下图是棋盘的左下角,故此命名为“leftDown”;其中又有一些特殊位置,比如炮,兵的位置,该位置存在特殊标记,故其图片命名为“SIGN” 4:先定义23个QPixmap类型的变量来表示图片(在mywidget.h中定义),下面就需要考虑如何将23张图片与这些常量关联起来。图片是QPixmap类型,常量是int型。使用关联容器QHash来将图片和常量关联起来,形成一一影射。 QPixmap变量 //map QPixmap sign;//炮兵标记 QPixmap lSign;//左兵/卒标记 QPixmap rSign;// 右兵/卒标记 QPixmap upRiverBank;//上河岸 QPixmap downRiverBank;//下河岸 QPixmap upEdge;//上边缘 QPixmap downEdge;//下边缘 QPixmap leftEdge;//左边缘 QPixmap rightEdge;//右边缘 QPixmap cross;//十字格 QPixmap mi;//米字格 QPixmap leftUp;//左上角 QPixmap rightUp;//右上角 QPixmap leftDown;//左下角 QPixmap rightDown;//右下角 QPixmap upjglu;//上九宫左上 QPixmap upjgru;//上九宫右上 QPixmap upjgld;//上九宫左下 QPixmap upjgrd;//上九宫右下 QPixmap downjglu;//下九宫左上 QPixmap downjgru;//下九宫右上 QPixmap downjgld;//下九宫左下 QPixmap downjgrd;//下九宫右下棋盘图片值映射对组在mywidget.h中定义,再定义一个对应的函数,在其中完成键值一一对应的操作 QHash chessboardPairs; void valueMappingPic();//键映射图片valueMappingPic函数(注:这里键值的映射不可出错) //键映射图片 void myWidget::valueMappingPic() { //棋盘值映射图片 chessboardPairs.insert(in,cross); chessboardPairs.insert(up,upEdge); chessboardPairs.insert(down,downEdge); chessboardPairs.insert(mleft,leftEdge); chessboardPairs.insert(mright,rightEdge); chessboardPairs.insert(up_left,leftUp); chessboardPairs.insert(up_right,rightUp); chessboardPairs.insert(down_left,leftDown); chessboardPairs.insert(down_right,rightDown); chessboardPairs.insert(mark,sign); chessboardPairs.insert(sign_left,lSign); chessboardPairs.insert(sign_right,rSign); chessboardPairs.insert(inu,upRiverBank); chessboardPairs.insert(ind,downRiverBank); chessboardPairs.insert(s,mi); chessboardPairs.insert(sdru,downjgru); chessboardPairs.insert(sdlu,downjglu); chessboardPairs.insert(sdld,downjgld); chessboardPairs.insert(sdrd,downjgrd); chessboardPairs.insert(surd,upjgrd); chessboardPairs.insert(suld,upjgld); chessboardPairs.insert(suru,upjgru); chessboardPairs.insert(sulu,upjglu); } 二、棋盘的实现1:棋盘的实现要先对图片进行加载,定义一个函数来完成棋盘图片加载工作。 void pictureload();//图片加载 //图片加载 void myWidget::pictureload() { //棋盘图片加载 sign.load("map/SIGN.gif");//炮、兵、卒标记 lSign.load("map/LEFTSIGN.gif");//左兵、卒标记 rSign.load("map/RightSIGN.gif");//右兵、卒标记 upRiverBank.load("map/upRiverBank.gif");//上河岸 downRiverBank.load("map/downRiverBank.gif");//下河岸 upEdge.load("map/upEdge.gif");//上边缘 downEdge.load("map/downEdge.gif");//下边缘 leftEdge.load("map/leftEdge.gif");//左边缘 rightEdge.load("map/rightEdge.gif");//右边缘 cross.load("map/Sizige.gif");//十字格 mi.load("map/X.gif");//米字格 leftUp.load("map/leftUp.gif");//左上角 rightUp.load("map/rightUp.gif");//右上角 leftDown.load("map/leftDown.gif");//左下角 rightDown.load("map/rightDown.gif");//右下角 upjglu.load("map/X_up_leftUp.gif");//上九宫左上 upjgru.load("map/X_up_rightUp.gif");//上九宫右上 upjgld.load("map/X_up_leftDown.gif");//上九宫左下 upjgrd.load("map/X_up_rightDown.gif");//上九宫右下 downjglu.load("map/X_down_leftUp.gif");//下九宫左上 downjgru.load("map/X_down_rightUp.gif");//下九宫右上 downjgld.load("map/X_down_leftDown.gif");//下九宫左下 downjgrd.load("map/X_down_rightDown.gif");//下九宫右下 }2:下面就可以为chessmap数组进行赋值 myWidget::mapInit() void myWidget::mapInit() { //棋盘棋子数组值初始恢复(全为0) for(int j=0;j |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |