(二)QT实现中国象棋(棋子实现)

16 篇文章 0 订阅

简介:第二部份主要功能是在棋盘上画棋子,使用到几个重要函数把数组下标转换为像素等。

1、工程中添加主要文件如下所示


2、global.cpp

#include "global.h"
short piece[48]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
                 0xc7,0xc6,0xc8,0xc5,0xc9,0xc4,0xca,0xc3,0xcb,0xa4,0xaa,0x93,0x95,0x97,0x99,0x9b,
                 0x37,0x36,0x38,0x35,0x39,0x34,0x3a,0x33,0x3b,0x54,0x5a,0x63,0x65,0x67,0x69,0x6b
};
short num(short x,short y,short size)                          //将像素转化为数组下标
{
    short a,b,n;
    if(30<=x&&x<=570&&30<=y&&y<=630)
    {
        x-=size/2;
        y-=size/2;
        a=x%size;
        b=y%size;
        x=(x-a)/size;
        y=(y-b)/size;
        n=(y+3)*16+x+3;
    }else
        n=0;
    return n;
}

short posx(short n,short size)                                //从数组下标获取像素
{
    n=n%16-3;
    n=size*n+size/2+2;
    return n;
}
short posy(short n,short size)
{
    short m=n%16;
    n=(n-m)/16-3;
    n=size*n+size/2+2;
    return n;
}

3、glabal.h

#ifndef GLOBAL_H
#define GLOBAL_H

extern short piece[48];
//extern short piece[48];

short num(short x,short y,short size);                          //将像素转化为数组下标
short posx(short n,short size);                                //从数组下标获取像素
short posy(short n,short size);

#endif // GLOBAL_H

4、mainwindow.cpp添加

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    size = 60;
    this->setWindowTitle(tr("楚河汉界"));
    this->setFixedSize(size*10+100,size*10+100);
    this->move(400,0);

    pic[0]=QPixmap("./pic/redgen.png");                          //将棋子对应的图片导入
    pic[1]=QPixmap("./pic/redadv.png");
    pic[2]=QPixmap("./pic/redadv.png");
    pic[3]=QPixmap("./pic/redele.png");
    pic[4]=QPixmap("./pic/redele.png");
    pic[5]=QPixmap("./pic/redhorse.png");
    pic[6]=QPixmap("./pic/redhorse.png");
    pic[7]=QPixmap("./pic/redchar.png");
    pic[8]=QPixmap("./pic/redchar.png");
    pic[9]=QPixmap("./pic/redcan.png");
    pic[10]=QPixmap("./pic/redcan.png");
    pic[11]=QPixmap("./pic/redsod.png");
    pic[12]=QPixmap("./pic/redsod.png");
    pic[13]=QPixmap("./pic/redsod.png");
    pic[14]=QPixmap("./pic/redsod.png");
    pic[15]=QPixmap("./pic/redsod.png");
    pic[16]=QPixmap("./pic/blackgen.png");
    pic[17]=QPixmap("./pic/blackadv.png");
    pic[18]=QPixmap("./pic/blackadv.png");
    pic[19]=QPixmap("./pic/blackele.png");
    pic[20]=QPixmap("./pic/blackele.png");
    pic[21]=QPixmap("./pic/blackhorse.png");
    pic[22]=QPixmap("./pic/blackhorse.png");
    pic[23]=QPixmap("./pic/blackchar.png");
    pic[24]=QPixmap("./pic/blackchar.png");
    pic[25]=QPixmap("./pic/blackcan.png");
    pic[26]=QPixmap("./pic/blackcan.png");
    pic[27]=QPixmap("./pic/blacksod.png");
    pic[28]=QPixmap("./pic/blacksod.png");
    pic[29]=QPixmap("./pic/blacksod.png");
    pic[30]=QPixmap("./pic/blacksod.png");
    pic[31]=QPixmap("./pic/blacksod.png");
    pic[32]=QPixmap("./pic/redboundary.png");
    pic[33]=QPixmap("./pic/blackboundary.png");

    //画32个棋子
    int i=0;
    for(;i<=31;i++)                                             //定义棋子
    {
        chess[i]=new QLabel(this);
        chess[i]->setPixmap(pic[i]);
        chess[i]->setGeometry(posx(piece[i+16],size),posy(piece[i+16],size),56,56);
        qDebug() << posx(piece[i+16],size) << posy(piece[i+16],size) << endl;
    }
}
5、运行结果


  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wz2051900044

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值