您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關(guān)使用QT如何實現(xiàn)一個五子棋游戲,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
FIR.pro
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)容,你們對使用QT如何實現(xiàn)一個五子棋游戲有進一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。