#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "qmessagebox.h"
#include "qpainter.h"
#include "qevent.h"
#define RECT_WIDTH 55
#define RECT_HEIGHT 56
#define START_X (230+36-RECT_WIDTH/2) //棋盘左上定点像素值(35,45),棋盘的格子大小(96,96)
#define START_Y (45-RECT_HEIGHT/2)
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
m_mebermap=NULL;
m_key=QPixmap(":/img/items.png");
m_chessboard.load(":/img/ChessBoard.png");
m_back.load(":/img/back.jpg");
setFixedSize(m_back.size());
m_keywidth=m_key.width()/COLOR_MAX;
m_keyheigth=m_key.height()/KEY_MAX;
initlize();
QPalette palette;
palette.setBrush(QPalette::Window,QBrush(m_back));
setPalette(palette);
NewGame();
startTimer(500);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::initlize()
{
QRect rc=this->rect();
m_mebermap=new QPixmap(0,0);
m_mebermap->fill(qRgb(255,255,255));
this->setWindowFlags(windowFlags()&~Qt::WindowContextHelpButtonHint);
}
void MainWindow::InitKey()
{
m_keys.clear();
Key key1(KEY_CHE,COLOR_BLACK,QPoint(0,0));
Key key2(KEY_MA,COLOR_BLACK,QPoint(1,0));
Key key3(KEY_XIANG,COLOR_BLACK,QPoint(2,0));
Key key4(KEY_SHI,COLOR_BLACK,QPoint(3,0));
Key key5(KEY_SHUAI,COLOR_BLACK,QPoint(4,0));
Key key6(KEY_SHI,COLOR_BLACK,QPoint(5,0));
Key key7(KEY_XIANG,COLOR_BLACK,QPoint(6,0));
Key key8(KEY_MA,COLOR_BLACK,QPoint(7,0));
Key key9(KEY_CHE,COLOR_BLACK,QPoint(8,0));
Key key10(KEY_PAO,COLOR_BLACK,QPoint(1,2));
Key key11(KEY_PAO,COLOR_BLACK,QPoint(7,2));
Key key12(KEY_BING,COLOR_BLACK,QPoint(0,3));
Key key13(KEY_BING,COLOR_BLACK,QPoint(2,3));
Key key14(KEY_BING,COLOR_BLACK,QPoint(4,3));
Key key15(KEY_BING,COLOR_BLACK,QPoint(6,3));
Key key16(KEY_BING,COLOR_BLACK,QPoint(8,3));
Key key_1(KEY_CHE,COLOR_RED,QPoint(0,9));
Key key_2(KEY_MA,COLOR_RED,QPoint(1,9));
Key key_3(KEY_XIANG,COLOR_RED,QPoint(2,9));
Key key_4(KEY_SHI,COLOR_RED,QPoint(3,9));
Key key_5(KEY_SHUAI,COLOR_RED,QPoint(4,9));
Key key_6(KEY_SHI,COLOR_RED,QPoint(5,9));
Key key_7(KEY_XIANG,COLOR_RED,QPoint(6,9));
Key key_8(KEY_MA,COLOR_RED,QPoint(7,9));
Key key_9(KEY_CHE,COLOR_RED,QPoint(8,9));
Key key_10(KEY_PAO,COLOR_RED,QPoint(1,7));
Key key_11(KEY_PAO,COLOR_RED,QPoint(7,7));
Key key_12(KEY_BING,COLOR_RED,QPoint(0,6));
Key key_13(KEY_BING,COLOR_RED,QPoint(2,6));
Key key_14(KEY_BING,COLOR_RED,QPoint(4,6));
Key key_15(KEY_BING,COLOR_RED,QPoint(6,6));
Key key_16(KEY_BING,COLOR_RED,QPoint(8,6));
m_keys.push_back(key1);
m_keys.push_back(key2);
m_keys.push_back(key3);
m_keys.push_back(key4);
m_keys.push_back(key5);
m_keys.push_back(key6);
m_keys.push_back(key7);
m_keys.push_back(key8);
m_keys.push_back(key9);
m_keys.push_back(key10);
m_keys.push_back(key11);
m_keys.push_back(key12);
m_keys.push_back(key13);
m_keys.push_back(key14);
m_keys.push_back(key15);
m_keys.push_back(key16);
m_keys.push_back(key_1);
m_keys.push_back(key_2);
m_keys.push_back(key_3);
m_keys.push_back(key_4);
m_keys.push_back(key_5);
m_keys.push_back(key_6);
m_keys.push_back(key_7);
m_keys.push_back(key_8);
m_keys.push_back(key_9);
m_keys.push_back(key_10);
m_keys.push_back(key_11);
m_keys.push_back(key_12);
m_keys.push_back(key_13);
m_keys.push_back(key_14);
m_keys.push_back(key_15);
m_keys.push_back(key_16);
}
void MainWindow::NewGame()
{
InitKey();
m_selectedkey.m_pt=QPoint(-1,-1);
m_isredset=true;
m_beselected=false;
}
void MainWindow::draw(QPainter& painter,Key key1)
{
if (!key1.m_show)
{
return;
}
QRect rcSrc(m_keywidth*key1.m_color,m_keyheigth*key1.m_type,m_keywidth,m_keyheigth);
QRect rcTarget( START_X+key1.m_pt.rx()*RECT_WIDTH,
START_Y +key1.m_pt.ry()*RECT_HEIGHT,
RECT_WIDTH,RECT_HEIGHT);
painter.drawPixmap(rcTarget,m_key,rcSrc);
}
bool MainWindow::FindKeyAtPoint(QPoint pt, Key &key)
{
int i=0;
for(i=0;i<m_keys.size();i++)
{
if(pt==m_keys[i].m_pt)
{
key=m_keys[i];
return true;
}
}
return false;
}
bool MainWindow::DeleteKeyAtPoint(QPoint pt, bool &bDeleteShuai)
{
for(int i=0;i<m_keys.size();i++)
{
if(m_keys[i].m_pt==pt)
{
bDeleteShuai=(m_keys[i].m_type==KEY_SHUAI);
m_keys.erase(m_keys.begin()+i);
return true;
}
}
return false;
}
void MainWindow::SetKeyShow(Key key, bool bshow)
{
for(int i=0;i<m_keys.size();i++)
{
if(m_keys[i].m_pt==key.m_pt)
{
m_keys[i].m_show=bshow;
return ;
}
}
}
void MainWindow::MOveKey(Key key, bool bshow)
{
}
void MainWindow::ChangeKeyPoint(QPoint ptItem, QPoint pt)
{
for(int i=0;i<m_keys.size();i++)
{
if(m_keys[i].m_pt==ptItem)
{
m_selectedkey.m_pt=QPoint(-1,-1);
m_keys[i].m_pt=pt;
m_keys[i].m_show=true;
return ;
}
}
}
void MainWindow::GetMoveArea(Key key, QVector<QPoint> &area)
{
switch (key.m_type)
{
case KEY_CHE:
{
GetMoveArea_JU(key,area);
break;
}
case KEY_MA:
{
GetMoveArea_MA(key,area);
break;
}
case KEY_XIANG:
{
GetMoveArea_XIANG(key,area);
break;
}
case KEY_SHI:
{
GetMoveArea_SHI(key,area);
break;
}
case KEY_SHUAI:
{
GetMoveArea_SHUAI(key,area);
break;
}
case KEY_PAO:
{
GetMoveArea_PAO(key,area);
break;
}
case KEY_BING:
{
GetMoveArea_BING(key,area);
break;
}
default:
break;
}
}
void MainWindow::GetMoveArea_JU(Key key, QVector<QPoint> &area)
{
int x=key.m_pt.x()-1;
while(x>=0)
{
QPoint ptnew=QPoint(x,key.m_pt.y());
Key findkey;
if(FindKeyAtPoint(ptnew,findkey))
{
if(m_selectedkey.m_color!=findkey.m_color)
{
area.append(ptnew);
}
break;
}
area.append(ptnew);
x--;
}
x=key.m_pt.x()+1;
while(x<=8)
{
QPoint ptnew=QPoint(x,key.m_pt.y());
Key findkey;
if(FindKeyAtPoint(ptnew,findkey))
{
if(m_selectedkey.m_color!=findkey.m_color)
{
area.append(ptnew);
}
break;
}
area.append(ptnew);
x++;
}
int y=key.m_pt.y()-1;
while(y>=0)
{
QPoint ptnew=QPoint(key.m_pt.x(),y);
Key findkey;
if(FindKeyAtPoint(ptnew,findkey))
{
if(m_selectedkey.m_color!=findkey.m_color)
{
area.append(ptnew);
}
break;
}
area.append(ptnew);
y--;
}
y=key.m_pt.y()+1;
while(y<=9)
{
QPoint ptnew=QPoint(key.m_pt.x(),y);
Key findkey;
if(FindKeyAtPoint(ptnew,findkey))
{
if(m_selectedkey.m_color!=findkey.m_color)
{
area.append(ptnew);
}
break;
}
area.append(ptnew);
y++;
}
}
void MainWindow::GetMoveArea_MA(Key key, QVector<QPoint> &area)
{
Key findkey;
for(int i=-2;i<=2;i++)
{
for(int j=-2;j<=2;j++)
{
if(qAbs(i)+qAbs(j)==3)