QT實現(xiàn)簡單五子棋游戲
更新時間:2021年05月25日 11:09:07 作者:影帝sunny
這篇文章主要為大家詳細介紹了QT實現(xiàn)簡單五子棋游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
本文實例為大家分享了QT實現(xiàn)簡單五子棋游戲的具體代碼,供大家參考,具體內(nèi)容如下
FIR.pro
#-------------------------------------------------
#
# Project created by QtCreator 2012-09-01T15:09:11
#
#-------------------------------------------------
QT += core gui
TARGET = FIR
TEMPLATE = app
SOURCES += main.cpp\
widget.cpp
HEADERS += widget.h
/******************************/
wight.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QtGui>
class Widget : public QWidget
{
Q_OBJECT
private:
int a[15][15];
int player;
bool isWin(int, int);
bool f1(int, int);
bool f2(int, int);
bool f3(int, int);
bool f4(int, int);
public:
Widget(QWidget *parent = 0);
~Widget();
void paintEvent(QPaintEvent *);
void mousePressEvent(QMouseEvent * e);
};
#endif // WIDGET_H
/****************************************/
widget.cpp
#include "widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
resize(640, 640);
player = 0;
memset(a, 0, 15 * 15 * sizeof(int));
}
Widget::~Widget()
{
}
//畫方格:
void Widget::paintEvent(QPaintEvent *)
{
QPainter p(this);
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);
}
int m = 5;
int n = 0;
while(1)
{
QBrush brush(Qt::SolidPattern);
brush.setColor(Qt::blue);
p.setBrush(brush);
// p.drawRect((i+1)*20,(j+1)*20,80,80);//zheng fang xing
// p.drawRect((i+1)*20,(j+1)*20,40,160);//chang fang xing
p.drawRect((m+1)*20,(n+1)*20,80,40);
p.drawRect((m+3)*20,(n+3)*20,80,40);
//p.drawRect();
//p.drawEllipse(QPoint((i + 1) * 40, (j + 1) * 40), 15, 15);
}
}
//鼠標(biāo)響應(yīng):
void Widget::mousePressEvent(QMouseEvent * e)
{
/*
setWindowTitle(QString::number(e->x()) +
" " +
QString::number(e->y()));
*/
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);
}
}
update();
}
//判斷輸贏:
bool Widget::isWin(int x, int y)
{
return f1(x, y) || f2(x, y) || f3(x, y) || f4(x ,y);
}
//判斷四個邊界:
bool Widget::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 true;
}
return false;
}
bool Widget::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 true;
}
return false;
}
bool Widget::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 true;
}
return false;
}
bool Widget::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 true;
}
return false;
}
main.cpp
#include <QtGui/QApplication>
#include "widget.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
您可能感興趣的文章:
相關(guān)文章
C語言編程內(nèi)存分配通訊錄靜態(tài)實現(xiàn)示例代碼教程
這篇文章主要為大家介紹了C語言編程實現(xiàn)靜態(tài)的通訊錄示例代碼教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2021-10-10
C++簡明圖解分析靜態(tài)成員與單例設(shè)計模式
與靜態(tài)數(shù)據(jù)成員不同,靜態(tài)成員函數(shù)的作用不是為了對象之間的溝通,而是為了能處理靜態(tài)數(shù)據(jù)成員,靜態(tài)成員函數(shù)沒有this指針。既然它沒有指向某一對象,也就無法對一個對象中的非靜態(tài)成員進行默認訪問2022-06-06
Qt5+QMediaPlayer實現(xiàn)音樂播放器的示例代碼
這篇文章主要為大家詳細介紹了如何利用Qt5和QMediaPlayer實現(xiàn)簡易的音樂播放器,文中的示例代碼講解詳細,具有一定的借鑒價值,需要的可以參考一下2022-12-12
使用C語言中的time函數(shù)獲取系統(tǒng)時間
在C語言中可以使用time函數(shù)來獲取系統(tǒng)時間,以下對time函數(shù)進行了介紹,需要的朋友可以過來參考下2013-07-07
C++中的類成員函數(shù)當(dāng)線程函數(shù)
這篇文章主要介紹了C++中的類成員函數(shù)當(dāng)線程函數(shù),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-11-11

