您的位置:首页 > 编程语言 > Qt开发

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

2018-03-23 05:12 351 查看
#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("象");

4000
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]
18838
= 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()
{

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: