Gobang.rar

  • PUDN用户
    了解作者
  • QT
    开发工具
  • 347KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 4
    下载次数
  • 2014-03-19 11:18
    上传日期
五子棋遊戲原始碼,使用qt開發出來的小遊戲提供大家學習用
Gobang.rar
  • Gobang
  • dialog.ui
    1.2KB
  • mainwindow.cpp
    3.2KB
  • mainwindow.ui
    3.9KB
  • Data.h
    273B
  • Gobang.pro
    471B
  • Media-Player.ico
    448.1KB
  • mainwindow.h
    822B
  • dialog.cpp
    380B
  • Woods.jpg
    335.2KB
  • dialog.h
    388B
  • frame.cpp
    18.7KB
  • rc.qrc
    137B
  • main.cpp
    193B
  • Gobang.pro.user
    27.3KB
  • frame.h
    984B
  • frame.ui
    636B
内容介绍
#include "frame.h" #include "ui_frame.h" #include "Data.h" #include <QPainter> #include <cmath> #include <QTextItem> #include <QMessageBox> #include <QPaintEvent> #include <ctime> #include <QMouseEvent> #include <iostream> #include <QImage> using namespace std; Frame::Frame(QWidget *parent) : QFrame(parent), ui(new Ui::Frame) { ui->setupUi(this); com=false; this->setMouseTracking(true); d=new Data[400]; DnX=0; DnY=0; begin=false; MoveX=0; y=0; c=0; MoveY=0; turn=0; mDn=false; row=0; col=0; this->setCursor(Qt::CrossCursor); im=new QImage(":new/prefix1/Woods.jpg"); } Frame::~Frame() { delete ui; } void Frame::paintEvent(QPaintEvent *e) { QImage img(this->width(),this->height(),QImage::Format_ARGB32); QPainter p(&img); QPainter p1(this); p.setRenderHint(QPainter::Antialiasing,true); //p1.setRenderHint(QPainter::Antialiasing,true); char ary[5]={0}; this->map(); p.drawImage(0,0,*im); p.setPen(QPen(Qt::black,1,Qt::SolidLine)); p.setPen(QPen(Qt::black,2,Qt::SolidLine)); for (int i=30;i<=this->width()-30;i+=40) { p.drawLine(i,30,i,this->height()-30); for (int j=30;j<=this->height()-30;j+=40) { p.drawLine(30,j,this->width()-30,j); } } p.setBrush(QBrush(Qt::black)); p.drawRect(d[26].x-3,d[26].y-3,6,6); p.drawRect(d[110].x-3,d[110].y-3,6,6); p.drawRect(d[33].x-3,d[33].y-3,6,6); p.drawRect(d[117].x-3,d[117].y-3,6,6); int n=0; for (int i=30;i<=this->height()-30;i+=40) { itoa(n,ary,10); QString str(ary); p.setPen(QPen(Qt::black,2,Qt::SolidLine)); p.drawText(15,i,str); p.drawText(i,15,str); n++; } p1.drawImage(0,0,img); p.setPen(QPen(Qt::NoPen)); if (begin) { for (int i=0;i<row*col;i++) { if (d[i].color==1) //white { QRadialGradient radialGradient(d[i].x-20,d[i].y-20,40); radialGradient.setColorAt(0.2, Qt::white); radialGradient.setColorAt(1.0, Qt::gray); p.setBrush(radialGradient); p.drawEllipse(d[i].x-20,d[i].y-20,40,40); } else if (d[i].color==2) //black { QRadialGradient radialGradient(d[i].x-20,d[i].y-20,40); radialGradient.setColorAt(0.1, Qt::gray); radialGradient.setColorAt(1.0, Qt::black); p.setBrush(radialGradient); p.drawEllipse(d[i].x-20,d[i].y-20,40,40); } else if (abs(MoveX-d[i].x)<=15&&abs(MoveY-d[i].y)<=15&&d[i].color==0) { if (turn==1) { QRadialGradient radialGradient(d[i].x-20,d[i].y-20,40); radialGradient.setColorAt(0.2, Qt::white); radialGradient.setColorAt(1.0, Qt::gray); p.setBrush(radialGradient); } else { QRadialGradient radialGradient(d[i].x-20,d[i].y-20,40); radialGradient.setColorAt(0.1, Qt::gray); radialGradient.setColorAt(1.0, Qt::black); p.setBrush(radialGradient); } p.drawEllipse(d[i].x-20,d[i].y-20,40,40); } QString str(itoa(i,ary,10)); //p.drawText(d[i].x,d[i].y,str); } } p1.drawImage(0,0,img); if (this->judge()) { for (int i=0;i<row*col;i++) { d[i].color=0; } begin=false; if (win==2) { QMessageBox::about(NULL,"Game Over","Black Win"); if (!com) QMessageBox::about(NULL,"Game Over","Too Weak"); c++; } else if (win==1) { QMessageBox::about(NULL,"Game Over","White Win"); y++; } emit winner(y*10+c); win=0; } } void Frame::map() { int k=0; col=0; for (int i=30;i<=this->width()-30;i+=40) { col++; row=0; for (int j=30;j<=this->height()-30;j+=40) { d[k].x=i; d[k].y=j; k++; row++; } } } void Frame::mouseMoveEvent(QMouseEvent *e) { MoveX=e->x(); MoveY=e->y(); this->update(); } void Frame::mouseDoubleClickEvent(QMouseEvent *e) { DnX=e->x(); DnY=e->y(); for (int i=0;i<row*col;i++) { if (abs(DnX-d[i].x)<=10&&abs(DnY-d[i].y)<=10) { if (d[i].color==0) { d[i].color=turn; if (turn==1) { emit chessDown(i+2000); turn=2; } else if (turn==2) { emit chessDown(i+1000); turn=1; } if (com) this->computer(); } } } this->update(); } int Frame::getTurn() { return turn; } bool Frame::check(Data *dt,int i) { int td=0,tdr=0,tr=0,tur=0,k=0; for (int j=i;j<i+5;j++) { if (d[i].color==d[j].color) { td++; } if (d[i].color==d[i+row*k].color) { tr++; } if (d[i].color==d[i+k+row*k].color) { tdr++; } if (d[i].color==d[i-k+row*k].color) { tur++; } k++; } if (td==5||tdr==5||tr==5||tur==5) return true; return false; } bool Frame::judge() { for (int i=0;i<row*col;i++) { if (check(d,i)&&d[i].color!=0) { win=d[i].color; return true; } } return false; } void Frame::computer() { int c=0,co; char a[10]={0}; for (int i=0;i<row*col;i++) { cout<<i<<" "<<this->computerchoose(i)<<endl; if (this->computerchoose(i)>=c) { c=this->computerchoose(i); co=i; } } itoa(c,a,10); d[co].color=turn; emit chessDown(co+1000); if (turn==1) turn=2; else if (turn==2) turn=1; } int Frame::computerchoose(int i) { int ans=0; if (d[i].color==0) { if (d[i-4].color==d[i-3].color&&d[i-3].color==d[i-2].color&&d[i-2].color==d[i-1].color&&d[i-1].color==turn&&i>=4) { if (ans<=8) ans=8; } else if (d[i-4].color==d[i-3].color&&d[i-3].color==d[i-2].color&&d[i-2].color==d[i-1].color&&d[i-1].color!=turn&&d[i-1].color!=0&&i>=4) { if (ans<=7) ans=7; } else if (d[i-4].color==0&&d[i-3].color==d[i-2].color&&d[i-2].color==d[i-1].color&&d[i-1].color!=turn&&d[i-1].color!=0&&i>=4) { if (ans<=6) ans=6; } else if (d[i-4].color==0&&d[i-3].color==d[i-2].color&&d[i-2].color==d[i-1].color&&d[i-1].color==turn&&i>=3) { if (ans<=5) ans=5; } else if (d[i-3].color==0&&d[i-2].color==d[i-1].color&&d[i-1].color!=turn&&d[i-1].color!=0&&i>=4) { if (ans<=4) ans=4; } else if (d[i-3].color==0&&d[i-2].color==d[i-1].color&&d[i-1].color==turn&&i>=4) { if (ans<=3) ans=3; } else if (d[i-2].color==0&&d[i-1].color!=turn&&d[i-1].color!=0&&i>=4) { if (ans<=2) ans=2; } else if (d[
评论
    相关推荐
    • Gobang.zip
      一个Linux下的五子棋对战游戏,可以给学习Linux下Socket编程的初学者参考。分为客户端和服务器端,客户端界面用QT开发,所以也可作为初学者学习QT的参考。
    • gobang.tar.gz
      是一个用QT编写的网络五子棋的对战游戏,对于QT爱好者来说是个好东西
    • gobang.rar
      联网版五子棋程序,没有AI版本,采用QT与Winsocket
    • GoBang.zip
      这是一个使用qt开发的五子棋游戏,带有人机对战的ai功能
    • goBang.rar
      QT 5.6 实现的五子棋游戏,目前只实现了人机游戏,智能好玩!
    • goBang.rar
      Qt 开发的五子棋程序源码,stulen修改自适应屏幕版本
    • Gobang-ai:极大极小搜索和α-β剪枝的无禁手ai
      Gobang-ai 极大极小搜索和α-β剪枝的无禁手ai,深度可达8层。 添加了简单的算杀模块。 我写了较为详细的教程。算杀的思想我可能理解有点问题,还有一些小bug,后续应该还会修改。
    • Gobang:Linux 下QT 五子棋
      Gobang Linux 下QT 五子棋
    • Gobang.rar
      人工智能五子棋游戏,能够实现人机博弈,采用αβ剪枝实现
    • snowglobe-src-viewer-2.0.0-r0.tar.gz
      国外的开源游戏引擎,能够承载上千人,属于社交类的游戏