效果图:
FIR.pro
#-------------------------------------------------
#
# Project created by QtCreator 2012-07-27T01:01:27
#
#-------------------------------------------------
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = FIR
TEMPLATE = app
SOURCES += main.cpp\
mainwindow.cpp
HEADERS += mainwindow.h
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QtGui>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
void paintEvent(QPaintEvent *);
void mouseReleaseEvent(QMouseEvent *);
private:
int a[15][15];
int isWin(int, int);
int f1(int, int);
int f2(int, int);
int f3(int, int);
int f4(int, int);
int player;
};
#endif // MAINWINDOW_H
man.cpp
#include <QApplication>
#include "mainwindow.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
mianwindow.cpp
#include "mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
resize(640, 640);
memset(a, 0, 15 * 15 * sizeof(int));
player = 0;
}
MainWindow::~MainWindow()
{
}
void MainWindow::paintEvent(QPaintEvent *)
{
QPainter p(this);
p.setRenderHint(QPainter::Antialiasing, true);
int i, j;
for (i = 0; i < 16; i++)
{
p.drawLine(20, 20 + i * 40, 620, 20 + i * 40);
p.drawLine(20 + i * 40, 20, 20 + i * 40, 620);
}
QBrush brush;
brush.setStyle(Qt::SolidPattern);
for (i = 0; i < 15; i++)
{
for (j = 0; j < 15; j++)
{
if (a[i][j] == 1)
{
brush.setColor(Qt::black);
p.setBrush(brush);
p.drawEllipse(QPoint((i + 1) * 40, (j + 1) * 40), 15, 15);
}
else if (a[i][j] == 2)
{
brush.setColor(Qt::white);
p.setBrush(brush);
p.drawEllipse(QPoint((i + 1) * 40, (j + 1) * 40), 15, 15);
}
}
}
}
void MainWindow::mouseReleaseEvent(QMouseEvent *e)
{
int x, y;
if(e->x() >= 20 && e->x() < 620 && e->y() >= 20 && e->y() < 620)
{
x = (e->x() - 20) / 40;
y = (e->y() - 20) / 40;
if (!a[x][y])
{
a[x][y] = player++ % 2 + 1;
}
if(isWin(x, y))
{
update();
setEnabled(false);
QMessageBox::information(this, "Win", "Win", QMessageBox::Ok);
}
}
update();
}
int MainWindow::isWin(int x, int y)
{
return f1(x, y) || f2(x, y) || f3(x, y) || f4(x ,y);
}
int MainWindow::f1(int x, int y)
{
int i;
for (i = 0; i < 5; i++)
{
if(y - i >= 0 &&
y + 4 - i <= 0xF &&
a[x][y - i] == a[x][y + 1 - i] &&
a[x][y - i] == a[x][y + 2 - i] &&
a[x][y - i] == a[x][y + 3 - i] &&
a[x][y - i] == a[x][y + 4 - i])
return 1;
}
return 0;
}
int MainWindow::f2(int x, int y)
{
int i;
for (i = 0; i < 5; i++)
{
if(x - i >= 0 &&
x + 4 - i <= 0xF &&
a[x - i][y] == a[x + 1 - i][y] &&
a[x - i][y] == a[x + 2 - i][y] &&
a[x - i][y] == a[x + 3 - i][y] &&
a[x - i][y] == a[x + 4 - i][y])
return 1;
}
return 0;
}
int MainWindow::f3(int x, int y)
{
int i;
for (i = 0; i < 5; i++)
{
if(x - i >= 0 &&
y - i >= 0 &&
x + 4 - i <= 0xF &&
y + 4 - i <= 0xF &&
a[x - i][y - i] == a[x + 1 - i][y + 1 - i] &&
a[x - i][y - i] == a[x + 2 - i][y + 2 - i] &&
a[x - i][y - i] == a[x + 3 - i][y + 3 - i] &&
a[x - i][y - i] == a[x + 4 - i][y + 4 - i])
return 1;
}
return 0;
}
int MainWindow::f4(int x, int y)
{
int i;
for (i = 0; i < 5; i++)
{
if(x + i <= 0xF &&
y - i >= 0 &&
x - 4 + i >= 0 &&
y + 4 - i <= 0xF &&
a[x + i][y - i] == a[x - 1 + i][y + 1 - i] &&
a[x + i][y - i] == a[x - 2 + i][y + 2 - i] &&
a[x + i][y - i] == a[x - 3 + i][y + 3 - i] &&
a[x + i][y - i] == a[x - 4 + i][y + 4 - i])
return 1;
}
return 0;
}