专栏首页用户2442861的专栏C/C++用QT写的五子棋源码

C/C++用QT写的五子棋源码

效果图:

FIR.pro

[cpp] view plaincopy

  1. #-------------------------------------------------
  2. #
  3. # Project created by QtCreator 2012-07-27T01:01:27
  4. #
  5. #-------------------------------------------------
  6. QT       += core gui  
  7. greaterThan(QT_MAJOR_VERSION, 4): QT += widgets  
  8. TARGET = FIR  
  9. TEMPLATE = app  
  10. SOURCES += main.cpp\  
  11.         mainwindow.cpp  
  12. HEADERS  += mainwindow.h  

mainwindow.h

[cpp] view plaincopy

  1. #ifndef MAINWINDOW_H
  2. #define MAINWINDOW_H
  3. #include <QtGui>
  4. class MainWindow : public QMainWindow  
  5. {  
  6.     Q_OBJECT  
  7. public:  
  8.     MainWindow(QWidget *parent = 0);  
  9.     ~MainWindow();  
  10. void paintEvent(QPaintEvent *);  
  11. void mouseReleaseEvent(QMouseEvent *);  
  12. private:  
  13. int a[15][15];  
  14. int isWin(intint);  
  15. int f1(intint);  
  16. int f2(intint);  
  17. int f3(intint);  
  18. int f4(intint);  
  19. int player;  
  20. };  
  21. #endif // MAINWINDOW_H

man.cpp

[cpp] view plaincopy

  1. #include <QApplication>
  2. #include "mainwindow.h"
  3. int main(int argc, char *argv[])  
  4. {  
  5.     QApplication a(argc, argv);  
  6.     MainWindow w;  
  7.     w.show();  
  8. return a.exec();  
  9. }  

mianwindow.cpp

[cpp] view plaincopy

  1. #include "mainwindow.h"
  2. MainWindow::MainWindow(QWidget *parent)  
  3.     : QMainWindow(parent)  
  4. {  
  5.     resize(640, 640);  
  6.     memset(a, 0, 15 * 15 * sizeof(int));  
  7.     player = 0;  
  8. }  
  9. MainWindow::~MainWindow()  
  10. {  
  11. }  
  12. void MainWindow::paintEvent(QPaintEvent *)  
  13. {  
  14.     QPainter p(this);  
  15.     p.setRenderHint(QPainter::Antialiasing, true);  
  16. int i, j;  
  17. for (i = 0; i < 16; i++)  
  18.     {  
  19.         p.drawLine(20, 20 + i * 40, 620, 20 + i * 40);  
  20.         p.drawLine(20 + i * 40, 20, 20 + i * 40, 620);  
  21.     }  
  22.     QBrush brush;  
  23.     brush.setStyle(Qt::SolidPattern);  
  24. for (i = 0; i < 15; i++)  
  25.     {  
  26. for (j = 0; j < 15; j++)  
  27.         {  
  28. if (a[i][j] == 1)  
  29.             {  
  30.                 brush.setColor(Qt::black);  
  31.                 p.setBrush(brush);  
  32.                 p.drawEllipse(QPoint((i + 1) * 40, (j + 1) * 40), 15, 15);  
  33.             }  
  34. else if (a[i][j] == 2)  
  35.             {  
  36.                 brush.setColor(Qt::white);  
  37.                 p.setBrush(brush);  
  38.                 p.drawEllipse(QPoint((i + 1) * 40, (j + 1) * 40), 15, 15);  
  39.             }  
  40.         }  
  41.     }  
  42. }  
  43. void MainWindow::mouseReleaseEvent(QMouseEvent *e)  
  44. {  
  45. int x, y;  
  46. if(e->x() >= 20 && e->x() < 620 && e->y() >= 20 && e->y() < 620)  
  47.     {  
  48.         x = (e->x() - 20) / 40;  
  49.         y = (e->y() - 20) / 40;  
  50. if (!a[x][y])  
  51.         {  
  52.             a[x][y] = player++ % 2 + 1;  
  53.         }  
  54. if(isWin(x, y))  
  55.         {  
  56.             update();  
  57.             setEnabled(false);  
  58.             QMessageBox::information(this, "Win", "Win", QMessageBox::Ok);  
  59.         }  
  60.     }  
  61.     update();  
  62. }  
  63. int MainWindow::isWin(int x, int y)  
  64. {  
  65. return f1(x, y) || f2(x, y) || f3(x, y) || f4(x ,y);  
  66. }  
  67. int MainWindow::f1(int x, int y)  
  68. {  
  69. int i;  
  70. for (i = 0; i < 5; i++)  
  71.     {  
  72. if(y - i >= 0 &&  
  73.            y + 4 - i <= 0xF &&  
  74.            a[x][y - i] == a[x][y + 1 - i] &&  
  75.            a[x][y - i] == a[x][y + 2 - i] &&  
  76.            a[x][y - i] == a[x][y + 3 - i] &&  
  77.            a[x][y - i] == a[x][y + 4 - i])  
  78. return 1;  
  79.     }  
  80. return 0;  
  81. }  
  82. int MainWindow::f2(int x, int y)  
  83. {  
  84. int i;  
  85. for (i = 0; i < 5; i++)  
  86.     {  
  87. if(x - i >= 0 &&  
  88.            x + 4 - i <= 0xF &&  
  89.            a[x - i][y] == a[x + 1 - i][y] &&  
  90.            a[x - i][y] == a[x + 2 - i][y] &&  
  91.            a[x - i][y] == a[x + 3 - i][y] &&  
  92.            a[x - i][y] == a[x + 4 - i][y])  
  93. return 1;  
  94.     }  
  95. return 0;  
  96. }  
  97. int MainWindow::f3(int x, int y)  
  98. {  
  99. int i;  
  100. for (i = 0; i < 5; i++)  
  101.     {  
  102. if(x - i >= 0 &&  
  103.            y - i >= 0 &&  
  104.            x + 4 - i <= 0xF &&  
  105.            y + 4 - i <= 0xF &&  
  106.            a[x - i][y - i] == a[x + 1 - i][y + 1 - i] &&  
  107.            a[x - i][y - i] == a[x + 2 - i][y + 2 - i] &&  
  108.            a[x - i][y - i] == a[x + 3 - i][y + 3 - i] &&  
  109.            a[x - i][y - i] == a[x + 4 - i][y + 4 - i])  
  110. return 1;  
  111.     }  
  112. return 0;  
  113. }  
  114. int MainWindow::f4(int x, int y)  
  115. {  
  116. int i;  
  117. for (i = 0; i < 5; i++)  
  118.     {  
  119. if(x + i <= 0xF &&  
  120.            y - i >= 0 &&  
  121.            x - 4 + i >= 0 &&  
  122.            y + 4 - i <= 0xF &&  
  123.            a[x + i][y - i] == a[x - 1 + i][y + 1 - i] &&  
  124.            a[x + i][y - i] == a[x - 2 + i][y + 2 - i] &&  
  125.            a[x + i][y - i] == a[x - 3 + i][y + 3 - i] &&  
  126.            a[x + i][y - i] == a[x - 4 + i][y + 4 - i])  
  127. return 1;  
  128.     }  
  129. return 0;  
  130. }  

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 网易2013校园招聘笔试题详解

    http://blog.csdn.net/silangquan/article/details/18142651

    bear_fish
  • 网易游戏2013年校园招聘笔试题) -- 动态规划

    http://blog.csdn.net/jdplus/article/details/20203641

    bear_fish
  • epoll()函数总结

    http://www.cnblogs.com/Anker/archive/2013/08/17/3263780.html

    bear_fish
  • BZOJ2115: [Wc2011] Xor(线性基)

    第一行包含两个整数N和 M, 表示该无向图中点的数目与边的数目。 接下来M 行描述 M 条边,每行三个整数Si,Ti ,Di,表示 Si 与Ti之间存在 一条权...

    attack
  • LeetCode Contest 179

    题解:遍历数组,维护一个最大值,当最大值等于当前的下标+1的时候,就是blue的时候

    ShenduCC
  • codeforces415D. Glad to see you!

    交互库会返回$|x - a| <= |y - b| ? "TAK" : "NIE"$

    attack
  • 2017.5.20欢(bei)乐(ju)赛解题报告

    预计分数:100+20+50=first 实际分数:20+0+10=gg 水灾(sliker.cpp/c/pas) 1000MS  64MB 大雨应经下了几天雨...

    attack
  • LeetCode 323. 无向图中连通分量的数目(并查集)

    给定编号从 0 到 n-1 的 n 个节点和一个无向边列表(每条边都是一对节点),请编写一个函数来计算无向图中连通分量的数目。

    Michael阿明
  • cf449D. Jzzhu and Numbers(容斥原理 高维前缀和)

    答案=任意一种方案 - 至少有\(1\)位为\(1\)的方案 + 至少有两位为\(1\)的方案 - 至少有三位为\(1\)的方案

    attack
  • codeforces329B(bfs)

    由于猎人事先知道我们行走的路线,所以猎人们可以先走到终点前等待,可以使用bfs预处理出终点到各个点之间的距离,如果猎人到终点的距离小于等于我们从起点到终点的距离...

    dejavu1zz

扫码关注云+社区

领取腾讯云代金券