#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
this->xPressed = 0;
this->yPressed = 0;
this->numCounts = 0;
for(int i=0;i<9;i++)
{
for(int j=0;j<9;j++)
{
checkBoard[i][j] = 0;
}
}
this->setMaximumHeight(600);
this->setMinimumHeight(600);
this->setMaximumSize(600,600);
this->setMinimumSize(600,600);
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::paintEvent(QPaintEvent *)
{
QPainter painter(this);
QPen pen;
pen.setColor(Qt::red);
painter.setPen(pen);
//画线
for(int i=60;i<600;)
{
QPoint pointOne(0,i);
QPoint pointTwo(600,i);
painter.drawLine(pointOne,pointTwo);
i = i + 60;
}
for(int i=60;i<600;)
{
QPoint pointOne(i,0);
QPoint pointTwo(i,600);
painter.drawLine(pointOne,pointTwo);
i = i + 60;
}
QBrush brush;
brush.setStyle(Qt::SolidPattern);
for(int i=0;i<this->numCounts;i++)
{
if(i%2 == 0)
{
brush.setColor(Qt::black);
}
else
{
brush.setColor(Qt::white);
}
painter.setBrush(brush);
painter.drawEllipse(this->counts[i][0]-20,this->counts[i][1]-20,40,40);
}
}
void MainWindow::mousePressEvent(QMouseEvent *mouseEvent)
{
int x = int(float(mouseEvent->x())/60+0.5)*60;
int y = int(float(mouseEvent->y())/60+0.5)*60;
//按下的位置在棋盘内
if(x>0&&x<600&&y>0&&y<600&&this->checkBoard[y/60-1][x/60-1]==0)//当前按键位置在棋盘内并且当前位置没有棋子
{
this->numCounts += 1;//棋子数目加一
if(this->numCounts%2 != 0)//棋局矩阵构造
{
this->checkBoard[y/60-1][x/60-1] = 1; //1表示黑色
}
else
{
this->checkBoard[y/60-1][x/60-1] = -1;//-1表示白色
}
this->counts[this->numCounts-1][0] = x;
this->counts[this->numCounts-1][1] = y;
this->counts[this->numCounts-1][2] = this->numCounts%2;
checkWin(x,y);
this->update(); //用于绘图
}
}
void MainWindow::checkWin(int x, int y)
{
int row = y/60-1; //显示第几行
int col = x/60-1; //显示第几列
int colorCenter = this->checkBoard[row][col];//中间点的颜色
///////////列
if(row>=4&&this->checkBoard[row-4][col]==colorCenter&&this->checkBoard[row-3][col]==colorCenter&&this->checkBoard[row-2][col]==colorCenter&&this->checkBoard[row-1][col]==colorCenter)
{//该点上面
winShow(colorCenter);
}
else if(row>=3&&row<=7&&this->checkBoard[row+1][col]==colorCenter&&this->checkBoard[row-3][col]==colorCenter&&this->checkBoard[row-2][col]==colorCenter&&this->checkBoard[row-1][col]==colorCenter)
{
winShow(colorCenter);
}
else if(row>=2&&row<=6&&this->checkBoard[row+2][col]==colorCenter&&this->checkBoard[row+1][col]==colorCenter&&this->checkBoard[row-2][col]==colorCenter&&this->checkBoard[row-1][col]==colorCenter)
{
winShow(colorCenter);
}
else if(row>=1&&row<=5&&this->checkBoard[row+3][col]==colorCenter&&this->checkBoard[row+2][col]==colorCenter&&this->checkBoard[row+1][col]==colorCenter&&this->checkBoard[row-1][col]==colorCenter)
{
winShow(colorCenter);
}
else if(row<=4&&this->checkBoard[row+4][col]==colorCenter&&this->checkBoard[row+3][col]==colorCenter&&this->checkBoard[row+2][col]==colorCenter&&this->checkBoard[row+1][col]==colorCenter)
{//该点下面
winShow(colorCenter);
}
//////////行
else if(col>=4&&this->checkBoard[row][col-4]==colorCenter&&this->checkBoard[row][col-3]==colorCenter&&this->checkBoard[row][col-2]==colorCenter&&this->checkBoard[row][col-1]==colorCenter)
{//该点左边
winShow(colorCenter);
}
else if(col>=3&&col<=7&&this->checkBoard[row][col+1]==colorCenter&&this->checkBoard[row][col-3]==colorCenter&&this->checkBoard[row][col-2]==colorCenter&&this->checkBoard[row][col-1]==colorCenter)
{
winShow(colorCenter);
}
else if(col>=2&&col<=6&&this->checkBoard[row][col+2]==colorCenter&&this->checkBoard[row][col+1]==colorCenter&&this->checkBoard[row][col-2]==colorCenter&&this->checkBoard[row][col-1]==colorCenter)
{
winShow(colorCenter);
}
else if(col>=1&&col<=5&&this->checkBoard[row][col+3]==colorCenter&&this->checkBoard[row][col+2]==colorCenter&&this->checkBoard[row][col+1]==colorCenter&&this->checkBoard[row][col-1]==colorCenter)
{
winShow(colorCenter);
}
else if(col<=4&&this->checkBoard[row][col+4]==colorCenter&&this->checkBoard[row][col+3]==colorCenter&&this->checkBoard[row][col+2]==colorCenter&&this->checkBoard[row][col+1]==colorCenter)
{//该点右边
winShow(colorCenter);
}
//////////左上到右下
else if(row>=4&&col>=4&&this->checkBoard[row-4][col-4]==colorCenter&&this->checkBoard[row-3][col-3]==colorCenter&&this->checkBoard[row-2][col-2]==colorCenter&&this->checkBoard[row-1][col-1]==colorCenter)
{//该点左上
winShow(colorCenter);
}
else if(row>=3&&col>=3&&row<=7&&col<=7&&this->checkBoard[row+1][col+1]==colorCenter&&this->checkBoard[row-3][col-3]==colorCenter&&this->checkBoard[row-2][col-2]==colorCenter&&this->checkBoard[row-1][col-1]==colorCenter)
{
winShow(colorCenter);
}
else if(row>=2&&col>=2&&row<=6&&col<=6&&this->checkBoard[row+2][col+2]==colorCenter&&this->checkBoard[row+1][col+1]==colorCenter&&this->checkBoard[row-2][col-2]==colorCenter&&this->checkBoard[row-1][col-1]==colorCenter)
{
winShow(colorCenter);
}
else if(row>=1&&col>=1&&row<=5&&col<=5&&this->checkBoard[row+3][col+3]==colorCenter&&this->checkBoard[row+2][col+2]==colorCenter&&this->checkBoard[row+1][col+1]==colorCenter&&this->checkBoard[row-1][col-1]==colorCenter)
{
winShow(colorCenter);
}
else if(row<=4&&col<=4&&this->checkBoard[row+4][col+4]==colorCenter&&this->checkBoard[row+3][col+3]==colorCenter&&this->checkBoard[row+2][col+2]==colorCenter&&this->checkBoard[row+1][col+1]==colorCenter)
{//该点右下
winShow(colorCenter);
}
/////////右上到左下
else if(row>=4&&col<=4&&this->checkBoard[row-4][col+4]==colorCenter&&this->checkBoard[row-3][col+3]==colorCenter&&this->checkBoard[row-2][col+2]==colorCenter&&this->checkBoard[row-1][col+1]==colorCenter)
{//该点左下
winShow(colorCenter);
}
else if(row>=3&&col<=5&&row<=7&&col>=1&&this->checkBoard[row+1][col-1]==colorCenter&&this->checkBoard[row-3][col+3]==colorCenter&&this->checkBoard[row-2][col+2]==colorCenter&&this->checkBoard[row-1][col+1]==colorCenter)
{
winShow(colorCenter);
}
else if(row>=2&&col<=6&&row<=6&&col>=2&&this->checkBoard[row+2][col-2]==colorCenter&&this->checkBoard[row+1][col-1]==colorCenter&&this->checkBoard[row-2][col+2]==colorCenter&&this->checkBoard[row-1][col+1]==colorCenter)
{
winShow(colorCenter);
}
else if(row>=1&&col<=7&&row<=5&&col>=3&&this->checkBoard[row+3][col-3]==colorCenter&&this->checkBoard[row+2][col-2]==colorCenter&&this->checkBoard[row+1][col-1]==colorCenter&&this->checkBoard[row-1][col+1]==colorCenter)
{
winShow(colorCenter);
}
else if(row<=4&&col>=4&&this->checkBoard[row+4][col-4]==colorCenter&&this->checkBoard[row+3][col-3]==colorCenter&&this->checkBoard[row+2][col-2]==colorCenter&&this->checkBoard[row+1][col-1]==colorCenter)
{//该点右上
winShow(colorCenter);
}
else if(numCounts==81)
{
tie();
}
}
void MainWindow::winShow(int colorCenter)
{
QString infoShow;
if(colorCenter == 1)//中心点是黑
- 1
- 2
- 3
前往页