最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

QT實現(xiàn)五子棋游戲

 更新時間:2020年08月27日 14:07:46   作者:qq_46601543  
這篇文章主要為大家詳細(xì)介紹了QT實現(xiàn)五子棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了QT實現(xiàn)五子棋游戲的具體代碼,供大家參考,具體內(nèi)容如下

有點bug 但是能運(yùn)行

每次點擊右邊會出現(xiàn)提示圖標(biāo),表示是黑方落子還是白方并計時,不過不知道為什么點的次數(shù)多了 就不出現(xiàn)提示了 然后過一會又有了![Alt]

代碼片:

#include "widget.h"
#include "ui_widget.h"
#include <QPainter>
#include <QBrush>
#include <QMouseEvent>
#include <QPen>
#include <QDebug>
#include <QMessageBox>
#include <QTime>
#include <QMainWindow>
#include <QTimer>
#include <QDateTime>
#include <QDesktopWidget>
#include <QApplication>
#include <QCoreApplication>
#include <QEventLoop>
#include <QProcess>
#include <QString>
Widget::Widget(QWidget *parent)
  : QWidget(parent)
  , ui(new Ui::Widget)
{
  ui->setupUi(this);

    ui->label_2->hide();
  // resize(640, 640);
  memset(a, 0, 15 * 15 * sizeof(int));
  player = 0;
  ui->lcdNumber->setSegmentStyle(QLCDNumber::Flat);
  ui->lcdNumber->display(QDateTime::currentDateTime().toString("000"));
  ui->lcdNumber_2->setSegmentStyle(QLCDNumber::Flat);
  ui->lcdNumber_2->display(QDateTime::currentDateTime().toString("000"));
  timer1=new QTimer(this);
  connect(timer1,&QTimer::timeout,this,&Widget::handle_timeout);
  timer1->start(1000);
  timer2=new QTimer(this);
  connect(timer2,&QTimer::timeout,this,&Widget::handle_timeout);
  timer2->start(1000);



}

Widget::~Widget()
{
  delete ui;
}

 void Widget::handle_timeout()
{

  if(flag%2==0){
    for(sec=numb1;sec>0;sec--)
    {
      ui->lcdNumber->display(QDateTime::currentDateTime().toString(QString::number(sec)));
        Delay_MSec(1000);
        if(flag%2==1){
          numb1=sec;
          break;
        }
        if(sec<=0)
          QMessageBox::information(this, "Win", "White Win", QMessageBox::Ok);
    }
    // timer1->stop();
  }
  else if(flag%2==1)
  {
    for(sec=numb2;sec>0;sec--)
    {
      ui->lcdNumber_2->display(QDateTime::currentDateTime().toString(QString::number(sec)));
        Delay_MSec(1000);
        if(flag%2==0) {
          numb2=sec;
          break;}
        if(sec<=0)
          QMessageBox::information(this, "Win", "Black Win", QMessageBox::Ok);
    }
    // timer2->stop();
  }

}
void Widget::Delay_MSec(unsigned int msec)
{
  QTime _Timer=QTime::currentTime().addMSecs(msec);
  while(QTime::currentTime()<_Timer)
  {
    QCoreApplication::processEvents(QEventLoop::AllEvents,100);
  }
}
void Widget::paintEvent(QPaintEvent *)
{
  gridW = width()/19; //窗口寬度分18份
  gridH = height()/19; //窗口高度分18份
  //棋盤起點坐標(biāo)
  startX = gridW;
  startY = gridH;
  QPainter p(this);
  //背景圖
  p.drawPixmap(0,0, width(),height(),QPixmap(":/new/prefix1/C:/tupian/image/board1.jpg"));
  p.setRenderHint(QPainter::Antialiasing, true);

  int i, j;
  for (i = 0; i < 16; i++)
  {
    p.drawLine(startX, startY + i * gridH, startX+15*gridW, startY + i * gridH);
    p.drawLine(startX + i * gridW, startY, startX + i * gridW, startY+15*gridH);
  }

  QBrush brush;
  brush.setStyle(Qt::SolidPattern);
  for (i = 0; i < 15; i++)
  {
    for (j = 0; j < 15; j++)
    {
      if (a[i][j] == 1)
      {
        p.drawPixmap(startX+i*gridW, startY+j*gridH,
               gridW, gridH,
          QPixmap(":/new/prefix1/C:/tupian/image/white.png")
          );
        ui->label->hide();
        ui->label_2->show();

        /*brush.setColor(Qt::black);
        p.setBrush(brush);
        p.drawEllipse(QPoint((i + 1) * 40, (j + 1) * 40), 15, 15);*/
      }
      else if (a[i][j] == 2)
      {
        p.drawPixmap(startX+i*gridW, startY+j*gridH,
            gridW, gridH,
            QPixmap(":/new/prefix1/C:/tupian/image/black.png")
            );
        ui->label->show();
          ui->label_2->hide();

        /*brush.setColor(Qt::white);
        p.setBrush(brush);
        p.drawEllipse(QPoint((i + 1) * 40, (j + 1) * 40), 15, 15);*/
      }
    }
  }
}

void Widget::mouseReleaseEvent(QMouseEvent *e)
{
  int x, y;

   flag++;
  if(e->x() >= startX && e->x() < startX+15*gridW && e->y() >= startY && e->y() < startY+15*gridH)
  {
    x = (e->x() - startX) / gridW;
    y = (e->y() - startY) / gridH;
    if (!a[x][y])
    {
      a[x][y] = player++ % 2 + 1;
    }
    if(iswin(x, y))
    {
      update();
      setEnabled(false);
      if(flag%2==1)
         QMessageBox::information(this, "Win", "Black Win", QMessageBox::Ok);
      else
         QMessageBox::information(this, "Win", "White Win", QMessageBox::Ok);
     
    }
  }
  update();
}

int Widget::iswin(int x, int y)
{
   return f1(x, y) || f2(x, y) || f3(x, y) || f4(x ,y);
}

int 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 1;
  }
  return 0;
}

int 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 1;
  }
  return 0;
}

int 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 1;
  }
  return 0;
}

int 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 1;
  }
  return 0;
}

void Widget::on_pushButtonOver_clicked()
{
  this->close();
}


/*-------main.cpp----------------------------*/
#include

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
/*---------widget.h-----------*/
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
  Q_OBJECT

public:
  Widget(QWidget *parent = nullptr);
  ~Widget();
  void paintEvent(QPaintEvent *event);
  void mouseReleaseEvent(QMouseEvent *event);
  QTimer *timer1,*timer2;
  void handle_timeout(void);
  void Delay_MSec(unsigned int msec);
  int flag=3;
  int sec=0;
  int numb1=900;
  int numb2=900;
  int player;

private slots:
  void on_pushButtonOver_clicked();

private:
  Ui::Widget *ui;
  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 gridW; //棋盤水平方向一個格子的寬度
  int gridH; //棋盤水平方向一個格子的高度
  int startX; //棋盤起點x坐標(biāo)
  int startY; //棋盤起點y坐標(biāo)

  int chessX=-1, chessY=-1; //棋盤下標(biāo)



};
#endif // WIDGET_H

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C++ OpenCV單峰三角閾值法Thresh_Unimodal詳解

    C++ OpenCV單峰三角閾值法Thresh_Unimodal詳解

    本文主要介紹了適合當(dāng)圖像的直方圖具有明顯單峰特征時使用,結(jié)合了三角法的原理而設(shè)計的圖像分割方法,感興趣的小伙伴可以了解一下
    2021-12-12
  • C++11學(xué)習(xí)之包裝器解析

    C++11學(xué)習(xí)之包裝器解析

    function包裝器?也叫作適配器。C++中的function本質(zhì)是一個類模板,也是一個包裝器。本文就來和大家聊聊我們?yōu)槭裁葱枰猣unction呢
    2023-02-02
  • Qt基于TCP實現(xiàn)客戶端與服務(wù)端的連接

    Qt基于TCP實現(xiàn)客戶端與服務(wù)端的連接

    這篇文章主要為大家詳細(xì)介紹了Qt基于TCP實現(xiàn)客戶端與服務(wù)端的連接,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • C++靜態(tài)庫與動態(tài)庫文件的生成和使用教程

    C++靜態(tài)庫與動態(tài)庫文件的生成和使用教程

    庫文件是計算機(jī)上的一類文件,可以簡單的把庫文件看成一種代碼倉庫,它提供給使用者一些可以直接拿來用的變量、函數(shù)和類,下面這篇文章主要給大家介紹了關(guān)于C++靜態(tài)庫與動態(tài)庫文件的生成和使用的相關(guān)資料,需要的朋友可以參考下
    2023-03-03
  • vscode中配置LeetCode插件的教程(愉快刷題)

    vscode中配置LeetCode插件的教程(愉快刷題)

    這篇文章主要介紹了vscode中配置LeetCode插件的教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2020-03-03
  • C++中fstream,ifstream及ofstream用法淺析

    C++中fstream,ifstream及ofstream用法淺析

    這篇文章主要介紹了C++中fstream,ifstream及ofstream用法,適合C++初學(xué)者學(xué)習(xí)文件流的操作,需要的朋友可以參考下
    2014-08-08
  • C++學(xué)習(xí)之算術(shù)運(yùn)算符使用詳解

    C++學(xué)習(xí)之算術(shù)運(yùn)算符使用詳解

    運(yùn)算符是計算機(jī)語言提供的能對數(shù)據(jù)進(jìn)行基本運(yùn)算操作的功能體。而算術(shù)運(yùn)算符用來對數(shù)字型數(shù)據(jù)進(jìn)行數(shù)學(xué)語義上的加、減、乘、除。本文通過講解清楚算術(shù)運(yùn)算符,讓大家了解使用C++運(yùn)算符時應(yīng)該注意的事項
    2022-06-06
  • C++基于遞歸和非遞歸算法判定兩個二叉樹結(jié)構(gòu)是否完全相同(結(jié)構(gòu)和數(shù)據(jù)都相同)

    C++基于遞歸和非遞歸算法判定兩個二叉樹結(jié)構(gòu)是否完全相同(結(jié)構(gòu)和數(shù)據(jù)都相同)

    這篇文章主要介紹了C++基于遞歸和非遞歸算法判定兩個二叉樹結(jié)構(gòu)是否完全相同,若判斷二叉樹的結(jié)構(gòu)和數(shù)據(jù)都相同則為完全相同.涉及C++二叉樹的創(chuàng)建、遍歷、比較等相關(guān)操作技巧,需要的朋友可以參考下
    2017-05-05
  • opencv幀差法找出相差大的圖像

    opencv幀差法找出相差大的圖像

    這篇文章主要為大家詳細(xì)介紹了opencv幀差法找出相差大的圖像,包含訪問mat的像素值,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • C語言實現(xiàn)全排列算法模板的方法

    C語言實現(xiàn)全排列算法模板的方法

    這篇文章主要介紹了C語言實現(xiàn)全排列算法模板的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02

最新評論

佳木斯市| 万安县| 泌阳县| 寻乌县| 屯昌县| 来宾市| 姚安县| 青冈县| 青海省| 乡城县| 乌兰察布市| 淳安县| 石家庄市| 西青区| 中卫市| 兰溪市| 柯坪县| 永安市| 台山市| 沧州市| 稻城县| 广南县| 柘荣县| 紫阳县| 宁晋县| 河间市| 右玉县| 井陉县| 通河县| 石棉县| 香港| 郓城县| 玉门市| 通河县| 黑龙江省| 泗洪县| 泸州市| 绥宁县| 怀远县| 宜城市| 宾阳县|