Qt编写的简单象棋程序 chessbroad.cpp

#include "chessbroad.h"

#include <qtextcodec.h>


ChessBroad::ChessBroad(QWidget *parent)
    : QWidget(parent)
{

    //g[0][1]=0;
    key = 0;

    for(int i=0; i < NUMX+1; i++)
        for(int j=0; j < NUMY+1; j++)
        {
            g[i][j] = 0;
        }
    //黑棋
    g[0][0]=24;//车
    g[0][1]=22;//马
    g[0][2]=20;//象
    g[0][3]=18;//士
    g[0][4]=17;//将
    g[0][5]=19;//士
    g[0][6]=21;//象
    g[0][7]=23;//马
    g[0][8]=25;//车
    g[2][1]=26;//炮
    g[2][7]=27;//炮
    g[3][0]=28;//卒
    g[3][2]=29;//卒
    g[3][4]=30;//卒
    g[3][6]=31;//卒
    g[3][8]=32;//卒
    //红棋
    g[6][0]=12;//兵
    g[6][2]=13;//兵
    g[6][4]=14;//兵
    g[6][6]=15;//兵
    g[6][8]=16;//兵
    g[7][1]=10;//炮
    g[7][7]=11;//炮
    g[9][0]=8;//车
    g[9][1]=6;//马
    g[9][2]=4;//相
    g[9][3]=2;//士
    g[9][4]=1;//帅
    g[9][5]=3;//士
    g[9][6]=5;//相
    g[9][7]=7;//马
    g[9][8]=9;//车

}

void ChessBroad::paintEvent(QPaintEvent *e)
{
    QPainter* paint = new QPainter(this);
    float max, min;
    int flag;
    if(this->width() >= this->height())
    {
        max = this->width();
        min = this->height();
        flag = 0;
    }
    else
    {
        max = this->height();
        min = this->width();
        flag = 1;
    }
    float check ;
    if(flag == 0)
    {
        check = min/(NUMY+2);
        paint->drawLine((max-(NUMX*check))/2, check, (max-(NUMX*check))/2, min-check);
        paint->drawLine((max-(NUMX*check))/2+check*NUMX, check, (max-(NUMX*check))/2+check*NUMX, min-check);
        for(int i = 1; i < NUMX; i++)//间断的竖线;
        {
            paint->drawLine((max-(NUMX*check))/2+check*i, check, (max-(NUMX*check))/2+check*i, check+check*4);
            paint->drawLine((max-(NUMX*check))/2+check*i, check+check*5, (max-(NUMX*check))/2+check*i, min-check);
        }
        for(int i = 0; i <= NUMY; i++)
        {
            paint->drawLine((max-(NUMX*check))/2, check+i*check, (max-(max-(NUMX*check))/2), check+i*check);
        }
        paint->drawLine( (max-NUMX*check)/2+3*check, check, (max-NUMX*check)/2+5*check, 3*check);
        paint->drawLine( (max-NUMX*check)/2+3*check, 3*check, (max-NUMX*check)/2+5*check, check);

        paint->drawLine( (max-NUMX*check)/2+3*check, 8*check, (max-NUMX*check)/2+5*check, 10*check);
        paint->drawLine( (max-NUMX*check)/2+3*check, 10*check, (max-NUMX*check)/2+5*check, 8*check);
    }
    if(flag == 1)
    {
        check = min/(NUMX+2);
        paint->drawLine(check, (max-(check*NUMY))/2, check, (max-(check*NUMY))/2+NUMY*check);
        paint->drawLine(check+NUMX*check, (max-(check*NUMY))/2, check+NUMX*check, (max-(check*NUMY))/2+NUMY*check);
        for(int i = 1; i < NUMX; i++)//竖线
        {
            paint->drawLine( check+i*check, (max-(check*NUMY))/2, check+i*check, (max-(check*NUMY))/2+4*check);
            paint->drawLine( check+i*check, (max-(check*NUMY))/2+check*5, check+i*check, (max-(check*NUMY))/2+NUMY*check);
        }
        for(int i = 0; i <= NUMY; i++)//横线
        {
            paint->drawLine(check, (max-(NUMY*check))/2+i*check, check+NUMX*check, (max-(NUMY*check))/2+i*check);
        }
        paint->drawLine( check*4, (max-(NUMY*check))/2, check*6, (max-(NUMY*check))/2+check*2);
        paint->drawLine( check*4, (max-(NUMY*check))/2+check*2, check*6, (max-(NUMY*check))/2);

        paint->drawLine( check*4, (max-(NUMY*check))/2+check*7, check*6, (max-(NUMY*check))/2+check*9);
        paint->drawLine( check*4, (max-(NUMY*check))/2+check*9, check*6, (max-(NUMY*check))/2+check*7);
    }


    if( flag == 0 )
    {
        paint->setPen(QPen( Qt::red, 1, Qt::DotLine));
        for(int i=0; i <= NUMX+1; i++)
        {
            paint->drawLine((max-NUMX*check)/2-check/2+i*check, check/2, (max-NUMX*check)/2-check/2+i*check, min-check/2);//竖线
        }
        for(int i=0; i <= NUMY+1; i++)
        {
            paint->drawLine((max-NUMX*check)/2-check/2, check/2+check*i, (max-NUMX*check)/2+NUMX*check+check/2, check/2+check*i);
        }
        paint->setPen(QPen( Qt::black, 1, Qt::SolidLine));
    }
    if( flag == 1 )
    {
        paint->setPen(QPen( Qt::red, 1, Qt::DotLine));
        for(int i=0; i <= NUMX+1; i++)
        {
            paint->drawLine( check/2+check*i, (max-NUMY*check)/2-check/2, check/2+check*i, (max-NUMY*check)/2+NUMY*check+check/2);
        }
        for(int i=0; i <= NUMY+1; i++)
        {
            paint->drawLine( check/2, (max-NUMY*check)/2-check/2+i*check, min-check/2, (max-NUMY*check)/2-check/2+i*check);
        }
        paint->setPen(QPen( Qt::black, 1, Qt::SolidLine));
    }

    //画红车

    /*
    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GB2312"));//对QString型可以使用汉字
    QString text("车");

    paint->setPen(Qt::red);
    paint->setFont(QFont("Arial", check/2));
    paint->drawEllipse( 0, 0, check, check);
    paint->drawText(0, 0, check, check, Qt::AlignCenter, text);
*/

    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GB2312"));
    paint->setFont(QFont("Arial", check/2));

    if( flag == 0 )
    {
        for(int i = 0; i < NUMY+1; i++)
            for(int j = 0; j < NUMX+1; j++)
            {
                if( g[i][j]/17 == 0)
                {
                    paint->setPen(Qt::red);
                }
                if( g[i][j]/17 == 1)
                {
                    paint->setPen(Qt::blue);
                 }
                if( g[i][j] != 0)
                {
                    paint->drawEllipse( (max-NUMX*check)/2+j*check-check/2, check/2+i*check, check, check);
                    switch( g[i][j] )
                    {
                    case 1:
                    {
                        QString text("帅");
                        paint->drawText((max-NUMX*check)/2+j*check-check/2, check/2+i*check, check, check, Qt::AlignCenter, text);
                        break;
                    }
                    case 2:
                    case 3:
                    {
                        QString text("仕");
                        paint->drawText((max-NUMX*check)/2+j*check-check/2, check/2+i*check, check, check, Qt::AlignCenter, text);
                        break;
                    }
                    case 4:
                    case 5:
                    {
                        QString text("相");
                        paint->drawText((max-NUMX*check)/2+j*check-check/2, check/2+i*check, check, check, Qt::AlignCenter, text);
                        break;
                    }
                    case 6:
                    case 7:
                    {
                        QString text("马");
                        paint->drawText((max-NUMX*check)/2+j*check-check/2, check/2+i*check, check, check, Qt::AlignCenter, text);
                        break;
                    }
                    case 8:
                    case 9:
                    {
                        QString text("车");
                        paint->drawText((max-NUMX*check)/2+j*check-check/2, check/2+i*check, check, check, Qt::AlignCenter, text);
                        break;
                    }
                    case 10:
                    case 11:
                    {
                        QString text("炮");
                        paint->drawText((max-NUMX*check)/2+j*check-check/2, check/2+i*check, check, check, Qt::AlignCenter, text);
                        break;
                    }
                    case 12:
                    case 13:
                    case 14:
                    case 15:
                    case 16:
                    {
                        QString text("兵");
                        paint->drawText((max-NUMX*check)/2+j*check-check/2, check/2+i*check, check, check, Qt::AlignCenter, text);
                        break;
                    }
                    case 17:
                    {
                        QString text("将");
                        paint->drawText((max-NUMX*check)/2+j*check-check/2, check/2+i*check, check, check, Qt::AlignCenter, text);
                        break;
                    }
                    case 18:
                    case 19:
                    {
                        QString text("士");
                        paint->drawText((max-NUMX*check)/2+j*check-check/2, check/2+i*check, check, check, Qt::AlignCenter, text);
                        break;
                    }
                    case 20:
                    case 21:
                    {
                        QString text("象");
                        paint->drawText((max-NUMX*check)/2+j*check-check/2, check/2+i*check, check, check, Qt::AlignCenter, text);
                        break;
                    }
                    case 22:
                    case 23:
                    {
                        QString text("马");
                        paint->drawText((max-NUMX*check)/2+j*check-check/2, check/2+i*check, check, check, Qt::AlignCenter, text);
                        break;
                    }
                    case 24:
                    case 25:
                    {
                        QString text("车");
                        paint->drawText((max-NUMX*check)/2+j*check-check/2, check/2+i*check, check, check, Qt::AlignCenter, text);
                        break;
                    }
                    case 26:
                    case 27:
                    {
                        QString text("炮");
                        paint->drawText((max-NUMX*check)/2+j*check-check/2, check/2+i*check, check, check, Qt::AlignCenter, text);
                        break;
                    }
                    case 28:
                    case 29:
                    case 30:
                    case 31:
                    case 32:
                    {
                        QString text("卒");
                        paint->drawText((max-NUMX*check)/2+j*check-check/2, check/2+i*check, check, check, Qt::AlignCenter, text);
                        break;
                    }
                    }

                }
             }
      //放到flag里比较好
        if( key != 0 )
        {
            for(int i = 0; i < NUMY+1; i++)
                for(int j = 0; j <NUMX+1; j++)
                {
                    if(g[i][j] == key)
                    {
                        qWarning("%d %d",i,j);
                        paint->setPen(Qt::green);
                        paint->drawRect( (max-((NUMX+1)*check))/2+j*check, check/2+i*check, check, check);
                    }
                }
        }

    }
    if( flag == 1 )
    {
        for(int i = 0; i < NUMY+1; i++)
            for(int j = 0; j < NUMX+1; j++)
            {
                if( g[i][j]/17 == 0)
                {
                    paint->setPen(Qt::red);
                }
                if( g[i][j]/17 == 1)
                {
                    paint->setPen(Qt::blue);
                }
                if( g[i][j] != 0)
                {
                    paint->drawEllipse(  check/2+j*check, (max-NUMX*check)/2+i*check-check, check, check);
                    switch( g[i][j] )
                    {
                    case 1:
                    {
                        QString text("帅");
                        paint->drawText(  check/2+j*check, (max-NUMX*check)/2+i*check-check, check, check, Qt::AlignCenter, text);
                        break;
                    }
                    case 2:
                    case 3:
                    {
                        QString text("仕");
                        paint->drawText(  check/2+j*check, (max-NUMX*check)/2+i*check-check, check, check, Qt::AlignCenter, text);
                        break;
                    }
                    case 4:
                    case 5:
                    {
                        QString text("相");
                        paint->drawText(  check/2+j*check, (max-NUMX*check)/2+i*check-check, check, check, Qt::AlignCenter, text);
                        break;
                    }
                    case 6:
                    case 7:
                    {
                        QString text("马");
                        paint->drawText(  check/2+j*check, (max-NUMX*check)/2+i*check-check, check, check, Qt::AlignCenter, text);
                        break;
                    }
                    case 8:
                    case 9:
                    {
                        QString text("车");
                        paint->drawText(  check/2+j*check, (max-NUMX*check)/2+i*check-check, check, check, Qt::AlignCenter, text);
                        break;
                    }
                    case 10:
                    case 11:
                    {
                        QString text("炮");
                        paint->drawText(  check/2+j*check, (max-NUMX*check)/2+i*check-check, check, check, Qt::AlignCenter, text);
                        break;
                    }
                    case 12:
                    case 13:
                    case 14:
                    case 15:
                    case 16:
                    {
                        QString text("兵");
                        paint->drawText(  check/2+j*check, (max-NUMX*check)/2+i*check-check, check, check, Qt::AlignCenter, text);
                        break;
                    }
                    case 17:
                    {
                        QString text("将");
                        paint->drawText(  check/2+j*check, (max-NUMX*check)/2+i*check-check, check, check, Qt::AlignCenter, text);
                        break;
                    }
                    case 18:
                    case 19:
                    {
                        QString text("士");
                        paint->drawText(  check/2+j*check, (max-NUMX*check)/2+i*check-check, check, check, Qt::AlignCenter, text);
                        break;
                    }
                    case 20:
                    case 21:
                    {
                        QString text("象");
                        paint->drawText(  check/2+j*check, (max-NUMX*check)/2+i*check-check, check, check, Qt::AlignCenter, text);
                        break;
                    }
                    case 22:
                    case 23:
                    {
                        QString text("马");
                        paint->drawText(  check/2+j*check, (max-NUMX*check)/2+i*check-check, check, check, Qt::AlignCenter, text);
                        break;
                    }
                    case 24:
                    case 25:
                    {
                        QString text("车");
                        paint->drawText(  check/2+j*check, (max-NUMX*check)/2+i*check-check, check, check, Qt::AlignCenter, text);
                        break;
                    }
                    case 26:
                    case 27:
                    {
                        QString text("炮");
                        paint->drawText(  check/2+j*check, (max-NUMX*check)/2+i*check-check, check, check, Qt::AlignCenter, text);
                        break;
                    }
                    case 28:
                    case 29:
                    case 30:
                    case 31:
                    case 32:
                    {
                        QString text("卒");
                        paint->drawText(  check/2+j*check, (max-NUMX*check)/2+i*check-check, check, check, Qt::AlignCenter, text);
                        break;
                    }
                    }
                }
             }
     if(key != 0)
     {
        for(int i=0; i < NUMY+1; i++)
            for(int j=0; j<NUMX+1; j++)
            {
                if(g[i][j] == key)
                {
                    qWarning("%d %d",i,j);
                    paint->setPen(Qt::green);
                    paint->drawRect( check/2+j*check, (max-((NUMY+1)*check))/2+i*check, check, check);
                }
            }
     }
    }

    paint->~QPainter();
}

void ChessBroad::mousePressEvent(QMouseEvent *e)
{
    float max, min;
    int flag;
    if(this->width() >= this->height())
    {
        max = this->width();
        min = this->height();
        flag = 0;
    }
    else
    {
        max = this->height();
        min = this->width();
        flag = 1;
    }
    float check ;

    if( flag == 0 )
    {
        check = min/(NUMY+2);
        if((e->pos().x() > (max-(NUMX+1)*check)/2)&&(e->pos().x() < max-(max-(NUMX+1)*check)/2)&&(e->pos().y() > check/2)&&(e->pos().y() < (min-check/2)))
        {
            int px = (e->pos().y()-check/2)/check;
            int py = (e->pos().x()-(max-(NUMX+1)*check)/2)/check;


            //落子
            if(key != 0)
            {
                int x, y;
                for(int i=0; i<NUMY+1; i++)
                    for(int j=0; j<NUMX+1; j++)
                    {
                        if( g[i][j] == key )
                        {
                            x = i;
                            y = j;
                        }
                    }
                switch(key)
                {//红方
                case 1://帅
                {
                    int x1, y1;
                    for(int i=0; i<NUMY+1; i++)
                        for(int j=0; j<NUMX+1; j++)
                        {
                            if(g[i][j] == 17)
                            {
                                x1 = i;
                                y1 = j;
                            }
                        }
                    qWarning("%d %d", x1, y1);
                    if((y1 == y))
                    {
                        int i;
                        for( i = 1; (i <= x-x1)&&(g[x-i][y] == 0); i++);
                        qWarning("%d", i);
                        if((i == x-x1)&&(g[px][py] == 17))
                        {
                            g[px][py] = key;
                            g[x][y] = 0;
                            key = 17;
                        }
                    }

                    if((((px == x+1)&&(py == y))||((px == x-1)&&(py == y))
                           ||((px == x)&&(py ==y+1))||((px == x)&&(py == y-1)))
                        &&((px >=7)&&(py >= 3)&&(py <= 5)))
                    {
                        if((g[px][py]/17 != 0)&&(g[px][py] != 0))//吃子
                        {
                            g[px][py] = key;
                            g[x][y] = 0;
                            key = 17;
                        }
                        if(g[px][py] == 0)
                        {
                            g[px][py] = key;
                            g[x][y] = 0;
                            key = 17;
                        }

                    }
                    break;
                }
                case 2://仕
                case 3:
                {
                    if(((px >=7)&&(py >= 3)&&(py <= 5))
                            &&(((px == x+1)&&(py == y+1))||((px == x-1)&&(py == y-1))||((px == x+1)&&(py == y-1))||((px == x-1)&&(py == y+1))))
                    {
                        if((g[px][py]/17 != 0)&&(g[px][py] != 0))
                        {
                            g[px][py] = key;
                            g[x][y] = 0;
                            key = 17;
                        }
                        if(g[px][py] == 0)
                        {
                            g[px][py] = key;
                            g[x][y] = 0;
                            key = 17;
                        }

                    }
                    break;
                }
                case 4://相
                case 5:
                {
                    if((((px == x+2)&&(py == y+2)&&(g[x+1][y+1] == 0))||((px == x-2)&&(py == y-2)&&(g[x-1][y-1] == 0))
                            ||((px == x+2)&&(py == y-2)&&(g[x+1][y-1] == 0))||((px ==x-2)&&(py == y+2)&&(g[x-1][y+1] == 0)))
                            &&(px >= 5))
                    {
                        if((g[px][py]/17 != 0)&&(g[px][py] != 0))
                        {
                            g[px][py] = key;
                            g[x][y] = 0;
                            key = 17;
                        }
                        if(g[px][py] == 0)
                        {
                            g[px][py] = key;
                            g[x][y] = 0;
                            key = 17;
                        }

                    }
                    break;
                }
                case 6://马
                case 7:
                {
                    if(((px == x+2)&&(py == y+1)&&(g[x+1][y] == 0))||((px == x+2)&&(py == y-1)&&(g[x+1][y] == 0))
                            ||((px == x-2)&&(py == y+1)&&(g[x-1][y] == 0))||((px == x-2)&&(py == y-1)&&(g[x-1][y] == 0))
                            ||((px == x+1)&&(py == y+2)&&(g[x][y+1] == 0))||((px == x+1)&&(py == y-2)&&(g[x][y-1] == 0))
                            ||((px == x-1)&&(py == y+2)&&(g[x][y+1] == 0))||((px == x-1)&&(py == y-2)&&(g[x][y-1] == 0)))
                    {
                        if((g[px][py]/17 != 0)&&(g[px][py] != 0))
                        {
                            g[px][py] = key;
                            g[x][y] = 0;
                            key = 17;
                        }
                        if(g[px][py] == 0)
                        {
                            g[px][py] = key;
                            g[x][y] = 0;
                            key = 17;
                        }

                    }
                    break;

                }
                case 8://车
                case 9:
                {
                    if(px == x)
                    {
                        if(py > y)
                        {
                            int i;
                            for( i=1; (i < (py-y))&&(g[x][y+i] == 0); i++);
                            if(i == (py-y))
                            {
                                if((g[px][py]/17 != 0)&&(g[px][py] != 0))
                                {
                                    g[px][py] = key;
                                    g[x][y] = 0;
                                    key = 17;
                                }
                                if(g[px][py] == 0)
                                {
                                    g[px][py] = key;
                                    g[x][y] = 0;
                                    key = 17;
                                }

                            }
                        }
                        if(py < y)
                        {
                            int i;
                            for( i=y-py-1; (i > 0)&&(g[x][y-i] == 0); i--);
                            if(i == 0)
                            {
                                if((g[px][py]/17 != 0)&&(g[px][py] != 0))
                                {
                                    g[px][py] = key;
                                    g[x][y] = 0;
                                    key = 17;
                                }
                                if(g[px][py] == 0)
                                {
                                    g[px][py] = key;
                                    g[x][y] = 0;
                                    key = 17;
                                }

                             }
                         }
}
                    if(py == y)
                    {
                        if(px > x)
                        {
                            int i;
                            for( i=1; (i < (px-x))&&(g[x+i][y] == 0); i++);
                            if(i == (px-x))
                            {
                                if((g[px][py]/17 != 0)&&(g[px][py] != 0))
                                {
                                    g[px][py] = key;
                                    g[x][y] = 0;
                                    key = 17;
                                }
                                if(g[px][py] == 0)
                                {
                                    g[px][py] = key;
                                    g[x][y] = 0;
                                    key = 17;
                                }

                            }
                        }
                        if(px < x)
                        {
                            int i;
                            for( i=x-px-1; (i > 0)&&(g[x-i][y] == 0); i--);
                            if(i == 0)
                            {
                                if((g[px][py]/17 != 0)&&(g[px][py] != 0))
                                {
                                    g[px][py] = key;
                                    g[x][y] = 0;
                                    key = 17;
                                }
                                if(g[px][py] == 0)
                                {
                                    g[px][py] = key;
                                    g[x][y] = 0;
                                    key = 17;
                                }

                             }
                         }
                    }

                    break;
                }
                case 10://炮
                case 11:
                {
                    if(px == x)
                    {
                        if(g[px][py] == 0)
                        {

                            if(py > y)
                            {
                                int i;

                                for( i = 1; (i < (py-y))&&(g[x][y+i] == 0); i++);
                                if(i == (py-y))
                                {
                                    g[px][py] = key;
                                    g[x][y] = 0;
                                    key = 17;
                                }
                            }
                            if(py < y)
                            {
                                int i;
                                for( i = (y-py-1); (i > 0)&&(g[x][y-i] == 0); i--);
                                if(i == 0)
                                {
                                    g[px][py] = key;
                                    g[x][y] = 0;
                                    key = 17;
                                }
                            }
                        }
                        if((g[px][py]/17 != 0)&&(g[px][py] != 0))
                        {//吃子
                            //qWarning("%d %d",px,py);
                            if(py > y)//向右吃子
                            {
                                int i, j;
                                for( i = 1; (i < py-y)&&(g[x][y+i] == 0); i++);
                                qWarning("%d %d",px, py);
                                qWarning("%d",i);
                                if(i != py-y)
                                {

                                    for(j = i+1; (j < py-y)&&(g[x][y+j] == 0);  j++);
                                    qWarning("%d",j);
                                    if(j == py-y)
                                    {

                                        g[px][py] = key;
                                        g[x][y] = 0;
                                        key = 17;
                                    }
                                 }

                            }
                            if(py < y)//向左吃子
                            {
                                int i, j;
                                for( i = 1; (i < y-py)&&(g[x][y-i] == 0); i++);
                                qWarning("%d %d", px, py);
                                qWarning("%d", i);
                                if(i != y-py)
                                {

                                    for( j = i+1; (j < y-py)&&(g[x][y-j] == 0); j++);
                                    qWarning("%d",j);
                                    if(j == y-py)
                                    {
                                        g[px][py] = key;
                                        g[x][y] = 0;
                                        key = 17;
                                    }

                                }
                            }
                        }

                    }
                    if(py == y)
                    {
                        if(g[px][py] == 0)
                        {
                            if(px > x)
                            {
                                int i;

                                for( i = 1; (i < (px-x))&&(g[x+i][y] == 0); i++);
                                if(i == (px-x))
                                {
                                    g[px][py] = key;
                                    g[x][y] = 0;
                                    key = 17;
                                }
                            }
                            if(px < x)
                            {
                                int i;
                                for( i = (x-px-1); (i > 0)&&(g[x-i][y] == 0); i--);
                                if(i == 0)
                                {
                                    g[px][py] = key;
                                    g[x][y] = 0;
                                    key = 17;
                                }
                            }
                        }
                        if((g[px][py]/17 != 0)&&(g[px][py] != 0))
                        {

                            if(px > x)
                            {
                                int i, j;
                                for( i = 1; (i < px-x)&&(g[x+i][y] == 0); i++);
                                qWarning("%d %d",px, py);
                                qWarning("%d",i);
                                if(i != px-x)
                                {

                                    for(j = i+1; (j < px-x)&&(g[x+j][y] == 0);  j++);
                                    qWarning("%d",j);
                                    if(j == px-x)
                                    {

                                        g[px][py] = key;
                                        g[x][y] = 0;
                                        key = 17;
                                    }
                                 }

                            }
                            if(px < x)//向上吃子
                            {
                                int i, j;
                                for( i = 1; (i < x-px)&&(g[x-i][y] == 0); i++);
                                qWarning("%d %d", px, py);
                                qWarning("%d", i);
                                if(i != x-px)
                                {

                                    for( j = i+1; (j < x-px)&&(g[x-j][y] == 0); j++);
                                    qWarning("%d",j);
                                    if(j == x-px)
                                    {
                                        g[px][py] = key;
                                        g[x][y] = 0;
                                        key = 17;
                                    }
                                }
                            }
                        }
                    }

                    break;
                }
                case 12://兵
                case 13:
                case 14:
                case 15:
                case 16:
                {
                    //qWarning("%d %d", px, py);
                    if((px == 5)&&(px == (x-1))&&(py == y))
                    {
                        if(((g[px][py]/17 != key/17)&&(g[px][py] != 0))||(g[px][py] == 0))
                        {
                            g[px][py] = key;
                            g[x][y] = 0;
                            key = 17;
                        }
                    }
                    if(px < 5)
                    {
                        if(((px == x)&&(py == y+1))||((px == x)&&(py == y-1))
                                ||((px == x-1)&&(py == y)))
                        {
                            if((g[px][py]/17 != key/17)&&(g[px][py] != 0))
                            {
                                g[px][py] = key;
                                g[x][y] = 0;
                                key = 17;
                            }
                            if(g[px][py] == 0)
                            {
                                g[px][py] = key;
                                g[x][y] = 0;
                                key = 17;
                            }
                        }
                    }
                    break;
                }
                case 17://黑将
                {
                    int x1, y1;
                    for(int i=0; i<NUMY+1; i++)
                        for(int j=0; j<NUMX+1; j++)
                        {
                            if(g[i][j] == 1)
                            {
                                x1 = i;
                                y1 = j;
                            }
                        }
                    qWarning("%d %d", x1, y1);
                    if(y1 == y)
                    {
                        int i;
                        for( i = 1; (i <= x1-x)&&(g[x+i][y] == 0); i++);
                        qWarning("%d", i);
                        if((i == x1-x)&&(g[px][py] == 1))
                        {
                            g[px][py] = g[x][y];
                            g[x][y] = 0;
                            key = 1;
                        }
                    }
                    if((((px == x+1)&&(py == y))||((px == x-1)&&(py == y))
                           ||((px == x)&&(py ==y+1))||((px == x)&&(py == y-1)))
                        &&((px <= 2)&&(py >= 3)&&(py <= 5)))
                    {
                        if((g[px][py]/17 != key/17)&&(g[px][py] != 0))//吃子
                        {
                            g[px][py] = g[x][y];
                            g[x][y] = 0;
                            key = 1;
                        }
                        if(g[px][py] == 0)
                        {
                            g[px][py] = g[x][y];
                            g[x][y] = 0;
                            key = 1;
                        }

                    }
                    break;
                }
                case 18://士
                case 19:
                {
                    qWarning("%d %d",px,py);
                    qWarning("%d",g[x][y]);
                    qWarning("%d",g[px][py]);
                    if(((px <= 2)&&(py >= 3)&&(py <= 5))
                            &&(((px == x+1)&&(py == y+1))||((px == x-1)&&(py == y-1))||((px == x+1)&&(py == y-1))||((px == x-1)&&(py == y+1))))
                    {
                        if((g[px][py]/17 != key/17)&&(g[px][py] != 0))
                        {
                            qWarning("e");
                            g[px][py] = g[x][y];
                            g[x][y] = 0;
                            key = 1;
                        }
                        qWarning("%d %d",px,py);
                        qWarning("%d",g[x][y]);
                        qWarning("%d",g[px][py]);
                        if(g[px][py] == 0)
                        {
                            g[px][py] = g[x][y];
                            g[x][y] = 0;
                            key = 1;
                        }


                    }
                    qWarning("%d %d",px,py);
                    qWarning("%d",g[x][y]);
                    qWarning("%d",g[px][py]);
                    break;
                }
                case 20://象
                case 21:
                {
                    if((((px == x+2)&&(py == y+2)&&(g[x+1][y+1] == 0))||((px == x-2)&&(py == y-2)&&(g[x-1][y-1] == 0))
                            ||((px == x+2)&&(py == y-2)&&(g[x+1][y-1] == 0))||((px ==x-2)&&(py == y+2)&&(g[x-1][y+1] == 0)))
                            &&(px <= 4))
                    {
                        if((g[px][py]/17 != key/17)&&(g[px][py] != 0))
                        {
                            g[px][py] = g[x][y];
                            g[x][y] = 0;
                            key = 1;
                        }
                        if(g[px][py] == 0)
                        {
                            g[px][py] = g[x][y];
                            g[x][y] = 0;
                            key = 1;
                        }

                    }
                    break;
                }
                case 22://马
                case 23:
                {
                    if(((px == x+2)&&(py == y+1)&&(g[x+1][y] == 0))||((px == x+2)&&(py == y-1)&&(g[x+1][y] == 0))
                            ||((px == x-2)&&(py == y+1)&&(g[x-1][y] == 0))||((px == x-2)&&(py == y-1)&&(g[x-1][y] == 0))
                            ||((px == x+1)&&(py == y+2)&&(g[x][y+1] == 0))||((px == x+1)&&(py == y-2)&&(g[x][y-1] == 0))
                            ||((px == x-1)&&(py == y+2)&&(g[x][y+1] == 0))||((px == x-1)&&(py == y-2)&&(g[x][y-1] == 0)))
                    {
                        if((g[px][py]/17 != key/17)&&(g[px][py] != 0))
                        {
                            g[px][py] = g[x][y];
                            g[x][y] = 0;
                            key = 1;
                        }
                        if(g[px][py] == 0)
                        {
                            g[px][py] = g[x][y];
                            g[x][y] = 0;
                            key = 1;
                        }

                    }
                    break;
                }
                case 24://车
                case 25:
                {
                    if(px == x)
                    {
                        if(py > y)
                        {
                            int i;
                            for( i=1; (i < (py-y))&&(g[x][y+i] == 0); i++);
                            if(i == (py-y))
                            {
                                if((g[px][py]/17 != key/17)&&(g[px][py] != 0))
                                {
                                    g[px][py] = g[x][y];
                                    g[x][y] = 0;
                                    key = 1;
                                }
                                if(g[px][py] == 0)
                                {
                                    g[px][py] = g[x][y];
                                    g[x][y] = 0;
                                    key = 1;
                                }

                            }
                        }
                        if(py < y)
                        {
                            int i;
                            for( i=y-py-1; (i > 0)&&(g[x][y-i] == 0); i--);
                            if(i == 0)
                            {
                                if((g[px][py]/17 != key/17)&&(g[px][py] != 0))
                                {
                                    g[px][py] = g[x][y];
                                    g[x][y] = 0;
                                    key = 1;
                                }
                                if(g[px][py] == 0)
                                {
                                    g[px][py] = g[x][y];
                                    g[x][y] = 0;
                                    key = 1;
                                }

                             }
                         }
}
                    if(py == y)
                    {
                        if(px > x)
                        {
                            int i;
                            for( i=1; (i < (px-x))&&(g[x+i][y] == 0); i++);
                            if(i == (px-x))
                            {
                                if((g[px][py]/17 != key/17)&&(g[px][py] != 0))
                                {
                                    g[px][py] = g[x][y];
                                    g[x][y] = 0;
                                    key = 1;
                                }
                                if(g[px][py] == 0)
                                {
                                    g[px][py] = g[x][y];
                                    g[x][y] = 0;
                                    key = 1;
                                }

                            }
                        }
                        if(px < x)
                        {
                            int i;
                            for( i=x-px-1; (i > 0)&&(g[x-i][y] == 0); i--);
                            if(i == 0)
                            {
                                if((g[px][py]/17 != key/17)&&(g[px][py] != 0))
                                {
                                    g[px][py] = g[x][y];
                                    g[x][y] = 0;
                                    key = 1;
                                }
                                if(g[px][py] == 0)
                                {
                                    g[px][py] = g[x][y];
                                    g[x][y] = 0;
                                    key = 1;
                                }

                             }
                         }
                    }

                    break;
                }
                case 26://炮
                case 27:
                {
                    if(px == x)
                    {
                        if(g[px][py] == 0)
                        {

                            if(py > y)
                            {
                                int i;

                                for( i = 1; (i < (py-y))&&(g[x][y+i] == 0); i++);
                                if(i == (py-y))
                                {
                                    g[px][py] = g[x][y];
                                    g[x][y] = 0;
                                    key = 1;
                                }
                            }
                            if(py < y)
                            {
                                int i;
                                for( i = (y-py-1); (i > 0)&&(g[x][y-i] == 0); i--);
                                if(i == 0)
                                {
                                    g[px][py] = g[x][y];
                                    g[x][y] = 0;
                                    key = 1;
                                }
                            }
                        }
                        if((g[px][py]/17 != key/17)&&(g[px][py] != 0))
                        {//吃子
                            //qWarning("%d %d",px,py);
                            if(py > y)//向右吃子
                            {
                                int i, j;
                                for( i = 1; (i < py-y)&&(g[x][y+i] == 0); i++);
                                qWarning("%d %d",px, py);
                                qWarning("%d",i);
                                if(i != py-y)
                                {

                                    for(j = i+1; (j < py-y)&&(g[x][y+j] == 0);  j++);
                                    qWarning("%d",j);
                                    if(j == py-y)
                                    {

                                        g[px][py] = g[x][y];
                                        g[x][y] = 0;
                                        key = 1;
                                    }
                                 }

                            }
                            if(py < y)//向左吃子
                            {
                                int i, j;
                                for( i = 1; (i < y-py)&&(g[x][y-i] == 0); i++);
                                qWarning("%d %d", px, py);
                                qWarning("%d", i);
                                if(i != y-py)
                                {

                                    for( j = i+1; (j < y-py)&&(g[x][y-j] == 0); j++);
                                    qWarning("%d",j);
                                    if(j == y-py)
                                    {
                                        g[px][py] = g[x][y];
                                        g[x][y] = 0;
                                        key = 1;
                                    }
                                }
                            }
                        }

                    }
                    if(py == y)
                    {
                        if(g[px][py] == 0)
                        {
                            if(px > x)
                            {
                                int i;

                                for( i = 1; (i < (px-x))&&(g[x+i][y] == 0); i++);
                                if(i == (px-x))
                                {
                                    g[px][py] = key;
                                    g[x][y] = 0;
                                    key = 1;
                                }
                            }
                            if(px < x)
                            {
                                int i;
                                for( i = (x-px-1); (i > 0)&&(g[x-i][y] == 0); i--);
                                if(i == 0)
                                {
                                    g[px][py] = key;
                                    g[x][y] = 0;
                                    key = 1;
                                }
                            }
                        }
                        if((g[px][py]/17 != key/17)&&(g[px][py] != 0))
                        {

                            if(px > x)
                            {
                                int i, j;
                                for( i = 1; (i < px-x)&&(g[x+i][y] == 0); i++);
                                qWarning("%d %d",px, py);
                                qWarning("%d",i);
                                if(i != px-x)
                                {

                                    for(j = i+1; (j < px-x)&&(g[x+j][y] == 0);  j++);
                                    qWarning("%d",j);
                                    if(j == px-x)
                                    {

                                        g[px][py] = key;
                                        g[x][y] = 0;
                                        key = 1;
                                    }
                                 }

                            }
                            if(px < x)//向上吃子
                            {
                                int i, j;
                                for( i = 1; (i < x-px)&&(g[x-i][y] == 0); i++);
                                qWarning("%d %d", px, py);
                                qWarning("%d", i);
                                if(i != x-px)
                                {

                                    for( j = i+1; (j < x-px)&&(g[x-j][y] == 0); j++);
                                    qWarning("%d",j);
                                    if(j == x-px)
                                    {
                                        g[px][py] = key;
                                        g[x][y] = 0;
                                        key = 1;
                                    }
                                }
                            }
                        }
                    }

                    break;
                }
                case 28://卒
                case 29:
                case 30:
                case 31:
                case 32:
                {
                    //qWarning("%d %d", px, py);
                    if((px == 4)&&(px == (x+1))&&(py == y))
                    {
                        if(((g[px][py]/17 != key/17)&&(g[px][py] != 0))||(g[px][py] == 0))
                        {
                            g[px][py] = g[x][y];
                            g[x][y] = 0;
                            key = 1;
                        }
                    }
                    if(px > 4)
                    {
                        if(((px == x)&&(py == y+1))||((px == x)&&(py == y-1))
                                ||((px == x+1)&&(py == y)))
                        {
                            if((g[px][py]/17 != key/17)&&(g[px][py] != 0))
                            {
                                g[px][py] = g[x][y];
                                g[x][y] = 0;
                                key = 1;
                            }
                            if(g[px][py] == 0)
                            {
                                g[px][py] = g[x][y];
                                g[x][y] = 0;
                                key = 1;
                            }
                        }
                    }
                    break;
                }
                }
            }
            if((g[px][py] != 0)&&(key == 0))//第一次点击棋子
            {
                key = g[px][py];
            }
            if((key != 0)&&(key/17 == g[px][py]/17)&&(g[px][py] != 0))//再次点击的颜色与选中的颜色相同,框住点选的棋子。
            {
                key = g[px][py];
            }

        }
    }
    if( flag == 1)
    {
        check = min/(NUMX+2);
        if((e->pos().x() > check/2)&&(e->pos().x() < (min - check/2))&&(e->pos().y() > (max-(NUMY+1)*check)/2)&&(e->pos().y() < max-(max-(NUMY+1)*check)/2))
        {
            int px = (e->pos().y()-(max-(NUMY+1)*check)/2)/check;
            int py = (e->pos().x()-check/2)/check;
            //落子从flag==0完全复制
             if(key != 0)
             {
                 int x, y;
                 for(int i=0; i<NUMY+1; i++)
                     for(int j=0; j<NUMX+1; j++)
                     {
                         if( g[i][j] == key )
                         {
                             x = i;
                             y = j;
                         }
                     }
                 switch(key)
                 {//红方
                 case 1://帅
                 {
                     int x1, y1;
                     for(int i=0; i<NUMY+1; i++)
                         for(int j=0; j<NUMX+1; j++)
                         {
                             if(g[i][j] == 17)
                             {
                                 x1 = i;
                                 y1 = j;
                             }
                         }
                     qWarning("%d %d", x1, y1);
                     if((y1 == y))
                     {
                         int i;
                         for( i = 1; (i <= x-x1)&&(g[x-i][y] == 0); i++);
                         qWarning("%d", i);
                         if((i == x-x1)&&(g[px][py] == 17))
                         {
                             g[px][py] = key;
                             g[x][y] = 0;
                             key = 17;

                         }
                     }
                     if((((px == x+1)&&(py == y))||((px == x-1)&&(py == y))
                            ||((px == x)&&(py ==y+1))||((px == x)&&(py == y-1)))
                         &&((px >=7)&&(py >= 3)&&(py <= 5)))
                     {
                         if((g[px][py]/17 != key/17)&&(g[px][py] != 0))//吃子
                         {
                             g[px][py] = key;
                             g[x][y] = 0;
                             key = 17;
                         }
                         if(g[px][py] == 0)
                         {
                             g[px][py] = key;
                             g[x][y] = 0;
                             key = 17;
                         }

                     }
                     break;
                 }
                 case 2://仕
                 case 3:
                 {
                     if(((px >=7)&&(py >= 3)&&(py <= 5))
                             &&(((px == x+1)&&(py == y+1))||((px == x-1)&&(py == y-1))||((px == x+1)&&(py == y-1))||((px == x-1)&&(py == y+1))))
                     {
                         if((g[px][py]/17 != key/17)&&(g[px][py] != 0))
                         {
                             g[px][py] = key;
                             g[x][y] = 0;
                             key = 17;
                         }
                         if(g[px][py] == 0)
                         {
                             g[px][py] = key;
                             g[x][y] = 0;
                             key = 17;
                         }

                     }
                     break;
                 }
                 case 4://相
                 case 5:
                 {
                     if((((px == x+2)&&(py == y+2)&&(g[x+1][y+1] == 0))||((px == x-2)&&(py == y-2)&&(g[x-1][y-1] == 0))
                             ||((px == x+2)&&(py == y-2)&&(g[x+1][y-1] == 0))||((px ==x-2)&&(py == y+2)&&(g[x-1][y+1] == 0)))
                             &&(px >= 5))
                     {
                         if((g[px][py]/17 != key/17)&&(g[px][py] != 0))
                         {
                             g[px][py] = key;
                             g[x][y] = 0;
                             key = 17;
                         }
                         if(g[px][py] == 0)
                         {
                             g[px][py] = key;
                             g[x][y] = 0;
                             key = 17;
                         }

                     }
                     break;
                 }
                 case 6://马
                 case 7:
                 {
                     if(((px == x+2)&&(py == y+1)&&(g[x+1][y] == 0))||((px == x+2)&&(py == y-1)&&(g[x+1][y] == 0))
                             ||((px == x-2)&&(py == y+1)&&(g[x-1][y] == 0))||((px == x-2)&&(py == y-1)&&(g[x-1][y] == 0))
                             ||((px == x+1)&&(py == y+2)&&(g[x][y+1] == 0))||((px == x+1)&&(py == y-2)&&(g[x][y-1] == 0))
                             ||((px == x-1)&&(py == y+2)&&(g[x][y+1] == 0))||((px == x-1)&&(py == y-2)&&(g[x][y-1] == 0)))
                     {
                         if((g[px][py]/17 != key/17)&&(g[px][py] != 0))
                         {
                             g[px][py] = key;
                             g[x][y] = 0;
                             key = 17;
                         }
                         if(g[px][py] == 0)
                         {
                             g[px][py] = key;
                             g[x][y] = 0;
                             key = 17;
                         }

                     }
                     break;

                 }
                 case 8://车
                 case 9:
                 {
                     if(px == x)
                     {
                         if(py > y)
                         {
                             int i;
                             for( i=1; (i < (py-y))&&(g[x][y+i] == 0); i++);
                             if(i == (py-y))
                             {
                                 if((g[px][py]/17 != key/17)&&(g[px][py] != 0))
                                 {
                                     g[px][py] = key;
                                     g[x][y] = 0;
                                     key = 17;
                                 }
                                 if(g[px][py] == 0)
                                 {
                                     g[px][py] = key;
                                     g[x][y] = 0;
                                     key = 17;
                                 }

                             }
                         }
                         if(py < y)
                         {
                             int i;
                             for( i=y-py-1; (i > 0)&&(g[x][y-i] == 0); i--);
                             if(i == 0)
                             {
                                 if((g[px][py]/17 != key/17)&&(g[px][py] != 0))
                                 {
                                     g[px][py] = key;
                                     g[x][y] = 0;
                                     key = 17;
                                 }
                                 if(g[px][py] == 0)
                                 {
                                     g[px][py] = key;
                                     g[x][y] = 0;
                                     key = 17;
                                 }

                              }
                          }
 }
                     if(py == y)
                     {
                         if(px > x)
                         {
                             int i;
                             for( i=1; (i < (px-x))&&(g[x+i][y] == 0); i++);
                             if(i == (px-x))
                             {
                                 if((g[px][py]/17 != key/17)&&(g[px][py] != 0))
                                 {
                                     g[px][py] = key;
                                     g[x][y] = 0;
                                     key = 17;
                                 }
                                 if(g[px][py] == 0)
                                 {
                                     g[px][py] = key;
                                     g[x][y] = 0;
                                     key = 17;
                                 }

                             }
                         }
                         if(px < x)
                         {
                             int i;
                             for( i=x-px-1; (i > 0)&&(g[x-i][y] == 0); i--);
                             if(i == 0)
                             {
                                 if((g[px][py]/17 != key/17)&&(g[px][py] != 0))
                                 {
                                     g[px][py] = key;
                                     g[x][y] = 0;
                                     key = 17;
                                 }
                                 if(g[px][py] == 0)
                                 {
                                     g[px][py] = key;
                                     g[x][y] = 0;
                                     key = 17;
                                 }

                              }
                          }
                     }

                     break;
                 }
                 case 10://炮
                 case 11:
                 {
                     if(px == x)
                     {
                         if(g[px][py] == 0)
                         {

                             if(py > y)
                             {
                                 int i;

                                 for( i = 1; (i < (py-y))&&(g[x][y+i] == 0); i++);
                                 if(i == (py-y))
                                 {
                                     g[px][py] = key;
                                     g[x][y] = 0;
                                     key = 17;
                                 }
                             }
                             if(py < y)
                             {
                                 int i;
                                 for( i = (y-py-1); (i > 0)&&(g[x][y-i] == 0); i--);
                                 if(i == 0)
                                 {
                                     g[px][py] = key;
                                     g[x][y] = 0;
                                     key = 17;
                                 }
                             }
                         }
                         if((g[px][py]/17 != key/17)&&(g[px][py] != 0))
                         {//吃子
                             //qWarning("%d %d",px,py);
                             if(py > y)//向右吃子
                             {
                                 int i, j;
                                 for( i = 1; (i < py-y)&&(g[x][y+i] == 0); i++);
                                 qWarning("%d %d",px, py);
                                 qWarning("%d",i);
                                 if(i != py-y)
                                 {

                                     for(j = i+1; (j < py-y)&&(g[x][y+j] == 0);  j++);
                                     qWarning("%d",j);
                                     if(j == py-y)
                                     {

                                         g[px][py] = key;
                                         g[x][y] = 0;
                                         key = 17;
                                     }
                                  }

                             }
                             if(py < y)//向左吃子
                             {
                                 int i, j;
                                 for( i = 1; (i < y-py)&&(g[x][y-i] == 0); i++);
                                 qWarning("%d %d", px, py);
                                 qWarning("%d", i);
                                 if(i != y-py)
                                 {

                                     for( j = i+1; (j < y-py)&&(g[x][y-j] == 0); j++);
                                     qWarning("%d",j);
                                     if(j == y-py)
                                     {
                                         g[px][py] = key;
                                         g[x][y] = 0;
                                         key = 17;
                                     }
                                 }
                             }
                         }

                     }
                     if(py == y)
                     {
                         if(g[px][py] == 0)
                         {
                             if(px > x)
                             {
                                 int i;

                                 for( i = 1; (i < (px-x))&&(g[x+i][y] == 0); i++);
                                 if(i == (px-x))
                                 {
                                     g[px][py] = key;
                                     g[x][y] = 0;
                                     key = 17;
                                 }
                             }
                             if(px < x)
                             {
                                 int i;
                                 for( i = (x-px-1); (i > 0)&&(g[x-i][y] == 0); i--);
                                 if(i == 0)
                                 {
                                     g[px][py] = key;
                                     g[x][y] = 0;
                                     key = 17;
                                 }
                             }
                         }
                         if((g[px][py]/17 != key/17)&&(g[px][py] != 0))
                         {

                             if(px > x)
                             {
                                 int i, j;
                                 for( i = 1; (i < px-x)&&(g[x+i][y] == 0); i++);
                                 qWarning("%d %d",px, py);
                                 qWarning("%d",i);
                                 if(i != px-x)
                                 {

                                     for(j = i+1; (j < px-x)&&(g[x+j][y] == 0);  j++);
                                     qWarning("%d",j);
                                     if(j == px-x)
                                     {

                                         g[px][py] = key;
                                         g[x][y] = 0;
                                         key = 17;
                                     }
                                  }

                             }
                             if(px < x)//向上吃子
                             {
                                 int i, j;
                                 for( i = 1; (i < x-px)&&(g[x-i][y] == 0); i++);
                                 qWarning("%d %d", px, py);
                                 qWarning("%d", i);
                                 if(i != x-px)
                                 {

                                     for( j = i+1; (j < x-px)&&(g[x-j][y] == 0); j++);
                                     qWarning("%d",j);
                                     if(j == x-px)
                                     {
                                         g[px][py] = key;
                                         g[x][y] = 0;
                                         key = 17;
                                     }
                                 }
                             }
                         }
                     }

                     break;
                 }
                 case 12://兵
                 case 13:
                 case 14:
                 case 15:
                 case 16:
                 {
                     //qWarning("%d %d", px, py);
                     if((px == 5)&&(px == (x-1))&&(py == y))
                     {
                         if(((g[px][py]/17 != key/17)&&(g[px][py] != 0))||(g[px][py] == 0))
                         {
                             g[px][py] = key;
                             g[x][y] = 0;
                             key = 17;
                         }
                     }
                     if(px < 5)
                     {
                         if(((px == x)&&(py == y+1))||((px == x)&&(py == y-1))
                                 ||((px == x-1)&&(py == y)))
                         {
                             if((g[px][py]/17 != key/17)&&(g[px][py] != 0))
                             {
                                 g[px][py] = key;
                                 g[x][y] = 0;
                                 key = 17;
                             }
                             if(g[px][py] == 0)
                             {
                                 g[px][py] = key;
                                 g[x][y] = 0;
                                 key = 17;
                             }
                         }
                     }
                     break;
                 }
                 case 17://黑将
                 {
                     int x1, y1;
                     for(int i=0; i<NUMY+1; i++)
                         for(int j=0; j<NUMX+1; j++)
                         {
                             if(g[i][j] == 1)
                             {
                                 x1 = i;
                                 y1 = j;
                             }
                         }
                     qWarning("%d %d", x1, y1);
                     if(y1 == y)
                     {
                         int i;
                         for( i = 1; (i <= x1-x)&&(g[x+i][y] == 0); i++);
                         qWarning("%d", i);
                         if((i == x1-x)&&(g[px][py] == 1))
                         {
                             g[px][py] = g[x][y];
                             g[x][y] = 0;
                             key = 1;
                         }
                     }
                     if((((px == x+1)&&(py == y))||((px == x-1)&&(py == y))
                            ||((px == x)&&(py ==y+1))||((px == x)&&(py == y-1)))
                         &&((px <= 2)&&(py >= 3)&&(py <= 5)))
                     {
                         if((g[px][py]/17 != key/17)&&(g[px][py] != 0))//吃子
                         {
                             g[px][py] = g[x][y];
                             g[x][y] = 0;
                             key = 1;
                         }
                         if(g[px][py] == 0)
                         {
                             g[px][py] = g[x][y];
                             g[x][y] = 0;
                             key = 1;
                         }

                     }
                     break;
                 }
                 case 18://士
                 case 19:
                 {
                     if(((px <= 2)&&(py >= 3)&&(py <= 5))
                             &&(((px == x+1)&&(py == y+1))||((px == x-1)&&(py == y-1))||((px == x+1)&&(py == y-1))||((px == x-1)&&(py == y+1))))
                     {
                         if((g[px][py]/17 != key/17)&&(g[px][py] != 0))
                         {
                             g[px][py] = g[x][y];
                             g[x][y] = 0;
                             key = 1;
                         }
                         if(g[px][py] == 0)
                         {
                             g[px][py] = g[x][y];
                             g[x][y] = 0;
                             key = 1;
                         }

                     }
                     break;
                 }
                 case 20://象
                 case 21:
                 {
                     if((((px == x+2)&&(py == y+2)&&(g[x+1][y+1] == 0))||((px == x-2)&&(py == y-2)&&(g[x-1][y-1] == 0))
                             ||((px == x+2)&&(py == y-2)&&(g[x+1][y-1] == 0))||((px ==x-2)&&(py == y+2)&&(g[x-1][y+1] == 0)))
                             &&(px <= 4))
                     {
                         if((g[px][py]/17 != key/17)&&(g[px][py] != 0))
                         {
                             g[px][py] = key;
                             g[x][y] = 0;
                         }
                         if(g[px][py] == 0)
                         {
                             g[px][py] = key;
                             g[x][y] = 0;
                         }

                     }
                     break;
                 }
                 case 22://马
                 case 23:
                 {
                     if(((px == x+2)&&(py == y+1)&&(g[x+1][y] == 0))||((px == x+2)&&(py == y-1)&&(g[x+1][y] == 0))
                             ||((px == x-2)&&(py == y+1)&&(g[x-1][y] == 0))||((px == x-2)&&(py == y-1)&&(g[x-1][y] == 0))
                             ||((px == x+1)&&(py == y+2)&&(g[x][y+1] == 0))||((px == x+1)&&(py == y-2)&&(g[x][y-1] == 0))
                             ||((px == x-1)&&(py == y+2)&&(g[x][y+1] == 0))||((px == x-1)&&(py == y-2)&&(g[x][y-1] == 0)))
                     {
                         if((g[px][py]/17 != key/17)&&(g[px][py] != 0))
                         {
                             g[px][py] = g[x][y];
                             g[x][y] = 0;
                             key = 1;
                         }
                         if(g[px][py] == 0)
                         {
                             g[px][py] = g[x][y];
                             g[x][y] = 0;
                             key = 1;
                         }

                     }
                     break;
                 }
                 case 24://车
                 case 25:
                 {
                     if(px == x)
                     {
                         if(py > y)
                         {
                             int i;
                             for( i=1; (i < (py-y))&&(g[x][y+i] == 0); i++);
                             if(i == (py-y))
                             {
                                 if((g[px][py]/17 != key/17)&&(g[px][py] != 0))
                                 {
                                     g[px][py] = g[x][y];
                                     g[x][y] = 0;
                                     key = 1;
                                 }
                                 if(g[px][py] == 0)
                                 {
                                     g[px][py] = g[x][y];
                                     g[x][y] = 0;
                                     key = 1;
                                 }

                             }
                         }
                         if(py < y)
                         {
                             int i;
                             for( i=y-py-1; (i > 0)&&(g[x][y-i] == 0); i--);
                             if(i == 0)
                             {
                                 if((g[px][py]/17 != key/17)&&(g[px][py] != 0))
                                 {
                                     g[px][py] = g[x][y];
                                     g[x][y] = 0;
                                     key = 1;
                                 }
                                 if(g[px][py] == 0)
                                 {
                                     g[px][py] = g[x][y];
                                     g[x][y] = 0;
                                     key = 1;
                                 }

                              }
                          }
 }
                     if(py == y)
                     {
                         if(px > x)
                         {
                             int i;
                             for( i=1; (i < (px-x))&&(g[x+i][y] == 0); i++);
                             if(i == (px-x))
                             {
                                 if((g[px][py]/17 != key/17)&&(g[px][py] != 0))
                                 {
                                     g[px][py] = g[x][y];
                                     g[x][y] = 0;
                                     key = 1;
                                 }
                                 if(g[px][py] == 0)
                                 {
                                     g[px][py] = g[x][y];
                                     g[x][y] = 0;
                                     key = 1;
                                 }

                             }
                         }
                         if(px < x)
                         {
                             int i;
                             for( i=x-px-1; (i > 0)&&(g[x-i][y] == 0); i--);
                             if(i == 0)
                             {
                                 if((g[px][py]/17 != key/17)&&(g[px][py] != 0))
                                 {
                                     g[px][py] = g[x][y];
                                     g[x][y] = 0;
                                     key = 1;
                                 }
                                 if(g[px][py] == 0)
                                 {
                                     g[px][py] = g[x][y];
                                     g[x][y] = 0;
                                     key = 1;
                                 }

                              }
                          }
                     }

                     break;
                 }
                 case 26://炮
                 case 27:
                 {
                     if(px == x)
                     {
                         if(g[px][py] == 0)
                         {

                             if(py > y)
                             {
                                 int i;

                                 for( i = 1; (i < (py-y))&&(g[x][y+i] == 0); i++);
                                 if(i == (py-y))
                                 {
                                     g[px][py] = g[x][y];
                                     g[x][y] = 0;
                                     key = 1;
                                 }
                             }
                             if(py < y)
                             {
                                 int i;
                                 for( i = (y-py-1); (i > 0)&&(g[x][y-i] == 0); i--);
                                 if(i == 0)
                                 {
                                     g[px][py] = g[x][y];
                                     g[x][y] = 0;
                                     key = 1;
                                 }
                             }
                         }
                         if((g[px][py]/17 != key/17)&&(g[px][py] != 0))
                         {//吃子
                             //qWarning("%d %d",px,py);
                             if(py > y)//向右吃子
                             {
                                 int i, j;
                                 for( i = 1; (i < py-y)&&(g[x][y+i] == 0); i++);
                                 qWarning("%d %d",px, py);
                                 qWarning("%d",i);
                                 if(i != py-y)
                                 {

                                     for(j = i+1; (j < py-y)&&(g[x][y+j] == 0);  j++);
                                     qWarning("%d",j);
                                     if(j == py-y)
                                     {

                                         g[px][py] = g[x][y];
                                         g[x][y] = 0;
                                         key = 1;
                                     }
                                  }

                             }
                             if(py < y)//向左吃子
                             {
                                 int i, j;
                                 for( i = 1; (i < y-py)&&(g[x][y-i] == 0); i++);
                                 qWarning("%d %d", px, py);
                                 qWarning("%d", i);
                                 if(i != y-py)
                                 {

                                     for( j = i+1; (j < y-py)&&(g[x][y-j] == 0); j++);
                                     qWarning("%d",j);
                                     if(j == y-py)
                                     {
                                         g[px][py] = g[x][y];
                                         g[x][y] = 0;
                                         key = 1;
                                     }
                                 }
                             }
                         }

                     }
                     if(py == y)
                     {
                         if(g[px][py] == 0)
                         {
                             if(px > x)
                             {
                                 int i;

                                 for( i = 1; (i < (px-x))&&(g[x+i][y] == 0); i++);
                                 if(i == (px-x))
                                 {
                                     g[px][py] = g[x][y];
                                     g[x][y] = 0;
                                     key = 1;
                                 }
                             }
                             if(px < x)
                             {
                                 int i;
                                 for( i = (x-px-1); (i > 0)&&(g[x-i][y] == 0); i--);
                                 if(i == 0)
                                 {
                                     g[px][py] = g[x][y];
                                     g[x][y] = 0;
                                     key = 1;
                                 }
                             }
                         }
                         if((g[px][py]/17 != key/17)&&(g[px][py] != 0))
                         {

                             if(px > x)
                             {
                                 int i, j;
                                 for( i = 1; (i < px-x)&&(g[x+i][y] == 0); i++);
                                 qWarning("%d %d",px, py);
                                 qWarning("%d",i);
                                 if(i != px-x)
                                 {

                                     for(j = i+1; (j < px-x)&&(g[x+j][y] == 0);  j++);
                                     qWarning("%d",j);
                                     if(j == px-x)
                                     {

                                         g[px][py] = g[x][y];
                                         g[x][y] = 0;
                                         key = 1;
                                     }
                                  }

                             }
                             if(px < x)//向上吃子
                             {
                                 int i, j;
                                 for( i = 1; (i < x-px)&&(g[x-i][y] == 0); i++);
                                 qWarning("%d %d", px, py);
                                 qWarning("%d", i);
                                 if(i != x-px)
                                 {

                                     for( j = i+1; (j < x-px)&&(g[x-j][y] == 0); j++);
                                     qWarning("%d",j);
                                     if(j == x-px)
                                     {
                                         g[px][py] = g[x][y];
                                         g[x][y] = 0;
                                         key = 1;
                                     }
                                 }
                             }
                         }
                     }

                     break;
                 }
                 case 28://卒
                 case 29:
                 case 30:
                 case 31:
                 case 32:
                 {
                     //qWarning("%d %d", px, py);
                     if((px == 4)&&(px == (x+1))&&(py == y))
                     {
                         if(((g[px][py]/17 != key/17)&&(g[px][py] != 0))||(g[px][py] == 0))
                         {
                             g[px][py] = g[x][y];
                             g[x][y] = 0;
                             key = 1;
                         }
                     }
                     if(px > 4)
                     {
                         if(((px == x)&&(py == y+1))||((px == x)&&(py == y-1))
                                 ||((px == x+1)&&(py == y)))
                         {
                             if((g[px][py]/17 != key/17)&&(g[px][py] != 0))
                             {
                                 g[px][py] = g[x][y];
                                 g[x][y] = 0;
                                 key = 1;
                             }
                             if(g[px][py] == 0)
                             {
                                 g[px][py] = g[x][y];
                                 g[x][y] = 0;
                                 key = 1;
                             }
                         }
                     }
                     break;
                 }
                 }
             }//end落子
            if((g[px][py] != 0)&&(key == 0))
            {
                key = g[px][py];
            }
            if((key != 0)&&(key/17 == g[px][py]/17)&&(g[px][py] != 0))
            {
                key = g[px][py];
            }
        }
    }
    //for(int i = 0; i < NUMY+1; i++)
    //    for(int j = 0; j< NUMX+1; j++)
    //    {
    //        qWarning("%d", g[i][j]);
    //    }
    qWarning("%d",key);
    update();
}

ChessBroad::~ChessBroad()
{

}

猜你喜欢

转载自blog.csdn.net/woniupengpeng/article/details/79662222