QT實(shí)現(xiàn)簡單五子棋游戲
本文實(shí)例為大家分享了QT實(shí)現(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); } //判斷四個(gè)邊界: 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++編程中基類與基類的繼承的相關(guān)知識(shí)
這篇文章主要介紹了C++編程中基類與基類的繼承的相關(guān)知識(shí),包括多個(gè)基類繼承與虛擬基類等重要知識(shí),需要的朋友可以參考下2016-01-01詳解C語言的exp()函數(shù)和ldexp()函數(shù)以及frexp()函數(shù)
這篇文章主要介紹了詳解C語言的exp()函數(shù)和ldexp()函數(shù)以及frexp()函數(shù),注意這三個(gè)函數(shù)雖然看起來相似但實(shí)際功能卻大相徑庭!需要的朋友可以參考下2015-08-08C++實(shí)現(xiàn)管理系統(tǒng)的示例代碼
這篇文章主要介紹了C++實(shí)現(xiàn)管理系統(tǒng)的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10Matlab實(shí)現(xiàn)簡易紀(jì)念碑谷游戲的示例代碼
《紀(jì)念碑谷》是USTWO公司開發(fā)制作的解謎類手機(jī)游戲,在游戲中,通過探索隱藏小路、發(fā)現(xiàn)視力錯(cuò)覺以及躲避神秘的烏鴉人來幫助沉默公主艾達(dá)走出紀(jì)念碑迷陣。本文將用Matlab編寫簡易版的紀(jì)念碑谷游戲,感興趣的可以了解一下2022-03-03Qt實(shí)現(xiàn)數(shù)據(jù)進(jìn)行加密、解密的步驟
本文主要介紹了Qt實(shí)現(xiàn)數(shù)據(jù)進(jìn)行加密、解密的步驟,包含QCryptographicHash和Qt-AES兩種庫的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2024-03-03MySQL系列教程之使用C語言來連接數(shù)據(jù)庫
c語言操作Mysql數(shù)據(jù)庫,主要就是為了實(shí)現(xiàn)對數(shù)據(jù)庫的增、刪、改、查等操作,下面這篇文章主要給大家介紹了關(guān)于MySQL系列教程之使用C語言來連接數(shù)據(jù)庫的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-09-09C++中指針的數(shù)據(jù)類型和運(yùn)算相關(guān)知識(shí)小結(jié)
這篇文章主要介紹了C++中指針的數(shù)據(jù)類型和運(yùn)算相關(guān)知識(shí)小結(jié),是C++入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-09-09