#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <pd_shuying.h>
#include <button.h>
#include <painterqipan.h>
#include <mousevents.h>
#include <deal_jiemian.h>
#include <ai_simple.h>
#include <ai_medium.h>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
setWindowIcon(QIcon("tubiao.ico"));
resize(1400, 800);
this->setFixedSize( this->width (),this->height ());
memset(back_qipan, 20, sizeof(back_qipan));
memset(qipan, 0,sizeof (qipan));
deal_chushi();
}
MainWindow::~MainWindow()
{
delete this->socket1;
delete this->socket;
delete this->server;
delete ui;
}
void MainWindow::server_New_Connect()//服务端获得新的连接
{
socket = server->nextPendingConnection();
//连接QTcpSocket的信号槽,以读取新数据
QObject::connect(socket, &QTcpSocket::readyRead, this, &MainWindow::socket_Read_Data);
QObject::connect(socket, &QTcpSocket::disconnected, this, &MainWindow::socket_Disconnected);
ui->message->setText("玩家2(白棋):上线!");
qDebug() << "A Client connect!";
ui->ready->setStyleSheet("border-image: url(:/image/ready-1.png);");
ui->ready->setEnabled(true);
network_talk(3);
}
void MainWindow::socket_Read_Data()//服务端读取数据
{
QByteArray buffer;
//读取缓冲区数据
buffer = socket->readAll();
if(!buffer.isEmpty())
{
Dealnetworkmessage(buffer);
}
}
void MainWindow::socket_Disconnected()//服务端失去连接
{
//发送按键失能
ui->message->setText("玩家2(白棋):下线");
on_Flash_clicked();
qDebug() << "Disconnected!";
ui->ready->setStyleSheet("border-image: url(:/image/ready-3.png);");
ui->ready->setEnabled(false);
Killstart(false);
playeroneready=false;
playertwoready=false;
network_talk(4);
ui->talk_show->clear ();
}
void MainWindow::networkstart()//网络初始化
{
server = new QTcpServer();
socket1 = new QTcpSocket();
//连接信号槽
QObject::connect(socket1, &QTcpSocket::readyRead, this, &MainWindow::socket1_Read_Data);
QObject::connect(socket1, &QTcpSocket::disconnected, this, &MainWindow::socket1_Disconnected);
connect(server,&QTcpServer::newConnection,this,&MainWindow::server_New_Connect);
}
void MainWindow::socket1_Disconnected()//客户端断开连接
{
on_Flash_clicked();
qDebug() << "Disconnected!";
playeroneready=false;
playertwoready=false;
Killstart(false);
network_talk(4);
ui->message->setText("失去连接");
ui->talk_show->clear ();
if (ui->connect->text()=="断开连接")
on_connect_clicked();
}
void MainWindow::socket1_Read_Data()//客户端读取数据
{
QByteArray buffer;
//读取缓冲区数据
buffer = socket1->readAll();
if(!buffer.isEmpty())
{
Dealnetworkmessage(buffer);
}
}
void MainWindow::Dealnetworkmessage(QByteArray q)//处理事件函数
{
int a,b,c;
QString get;
get = QString (q);
qDebug(get.toLatin1());
if (get.contains("chess")==true)//收到棋子下棋
{
if (network_ready==1)
{
Killstart(true);
ui->message->setText("Game Start!");
}
get = get.section("chess:",1);
a = get.section(",",0,0).toInt();
b = get.section(",",1,1).toInt();
c = get.section(",",2,3).toInt();
back_number++;
back_number_use=back_number;
back_qipan[back_number][1]=a;
back_qipan[back_number][2]=b;
qipan[a][b]=c;
qizi_x=a;
qizi_y=b;
Haveddrop=true;
network_Isyou=true;
ui->Back->setStyleSheet("border-image: url(:/image/huiqi3.png);");
ui->Back->setEnabled(false);
network_talk(3);
Is_Win(a,b);
}
else if (get.contains("ineedBack")==true)//收到悔棋消息
{
QMessageBox back (QMessageBox::Information,tr("收到消息"),tr("对方想要悔棋是否同意?"));
back.setStandardButtons(QMessageBox::Yes|QMessageBox::No);
back.setButtonText(QMessageBox::Yes,QString("同意"));
back.setButtonText(QMessageBox::No,QString("拒绝"));
if (back.exec()==QMessageBox::Yes)
{
network_Isyou=false;
qipan[qizi_x][qizi_y]=0;
back_qipan[back_number_use][1]=20;
back_qipan[back_number_use][2]=20;
back_number_use--;
back_number=back_number_use;
qizi_x=back_qipan[back_number_use][1];
qizi_y=back_qipan[back_number_use][2];
ui->Back->setStyleSheet("border-image: url(:/image/huiqi1.png);");
ui->Back->setEnabled(true);
update();
if (network_player==1)
{
QString sent;
sent = "Back:1";
socket->write(qPrintable(sent));
}
else if (network_player==2)
{
QString sent;
sent = "Back:1";
socket1->write(qPrintable(sent));
}
}
else
{
if (network_player==1)
{
QString sent;
sent = "Back:2";
socket->write(qPrintable(sent));
}
else if (network_player==2)
{
QString sent;
sent = "Back:2";
socket1->write(qPrintable(sent));
}
}
}
else if (get.contains("Back:")==true)//悔棋成功
{
get = get.section("Back:",1);
if (get.toInt()==1)
{
qipan[qizi_x][qizi_y]=0;
network_Isyou=true;
back_qipan[back_number_use][1]=20;
back_qipan[back_number_use][2]=20;
back_number_use--;
back_number=back_number_use;
qizi_x=back_qipan[back_number_use][1];
qizi_y=back_qipan[back_number_use][2];
ui->Back->setStyleSheet("border-image: url(:/image/huiqi3.png);");
ui->Back->setEnabled(false);
ui->message->setText("对方同意悔棋");
update();
}
else if (get.toInt()==2)
{
ui->message->setText("对方拒绝悔棋");
}
}
else if (get.contains("player1isready")==true)//玩家1准备消息
{
ui->message->setText("玩家1(黑棋)已经准备");
deal_ready(1);
}
else if (get.contains("player2isready")==true)//玩家2准备消息
{
ui->message->setText("玩家2(白棋)已经准备");
ui->ready->setEnabled(true);
deal_ready(2);
}
else if (get.contains("player1isquit")==true)
{
ui->message->setText("玩家1(黑棋)退出游戏");
ui->ready->setStyleSheet("border-image: url(:/image/ready-1.png);");
ready_on=0;
playeroneready=false;
playertwoready=false;
network_talk(4);
ui->talk_show->clear ();
Killstart(false);
}
else if (get.contains("player2isquit")==true)
{
ui->message->setText("玩家2(白棋)退出游戏");
ui->ready->setStyleSheet("border-image: url(:/image/ready-1.png);");
ready_on=0;
playeroneready=false;
playertwoready=false;
network_talk(4);
ui->talk_show->clear ();
Killstart(false);
}
else if (get.contains("keyile")==true)
{ if (receive_number<=2)
{ if (network_player==1)
{
QString sent;
sent = "keyile";
socket->write(qPrintable(sent));
}
else if (network_player==2)
{
QString sent;
sent = "keyile";
socket1->write(qPrintable(sent));
}
ui->ready->setStyleSheet("border-image: url(:/image/ready-1.png);");
ui->ready->setEnabled(true);
network_talk(3);
ready_on=0;
}
receive_number++;
}
else if (get.contains("talk")==true)
{ QSt
没有合适的资源?快使用搜索试试~ 我知道了~
基于QT的五子棋游戏(带AI).zip
共80个文件
png:43个
psd:14个
h:8个
0 下载量 110 浏览量
2024-08-22
16:55:13
上传
评论
收藏 6.79MB ZIP 举报
温馨提示
项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松copy复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全栈开发),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助 【资源内容】:项目具体内容可查看/点击本页面下方的*资源详情*,包含完整源码+工程文件+说明(若有)等。【若无VIP,此资源可私信获取】 【本人专注IT领域】:有任何使用问题欢迎随时与我联系,我会及时解答,第一时间为您提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【适合场景】:相关项目设计中,皆可应用在项目开发、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面中 可借鉴此优质项目实现复刻,也可基于此项目来扩展开发出更多功能 #注 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担 2. 部分字体及插图等来自网络,若是侵权请联系删除,本人不对所涉及的版权问题或内容负法律责任。收取的费用仅用于整理和收集资料耗费时间的酬劳 3. 积分资源不提供使用问题指导/解答
资源推荐
资源详情
资源评论
收起资源包目录
基于QT的五子棋游戏(带AI).zip (80个子文件)
QTDSv6ff
start2.png 2KB
shownumber2.png 22KB
10款百年污损纸张图片素材_05_lanrentuku.com.jpg 1.04MB
home-3.png 23KB
wangluo.png 32KB
五子棋.psd 81KB
home-1.png 23KB
topic.png 7KB
huiqi1.png 2KB
mainwindow.h 6KB
FIVEQI.ico 4KB
qipanwenjian.qrc 1KB
renji_jiandan2.png 32KB
bendi_push.png 13KB
pd_shuying.h 7KB
painterqipan.h 7KB
start1.png 3KB
miaozhun.png 1001B
baiqi1.png 3KB
qipanbg.jpg 151KB
mainwindow.cpp 8KB
Qqipan2.jpg 280KB
shownumber1.png 23KB
renji.png 31KB
mousevents.h 4KB
hidenumber2.png 22KB
renji_putong2.png 32KB
ai_medium.h 16KB
home-2.png 22KB
main.cpp 175B
qipanss.png 428KB
deal_jiemian.h 8KB
huiqi2.png 2KB
renji_push.png 13KB
mainwindow.ui 13KB
icon.rc 27B
button.h 14KB
tubiao.ico 17KB
Xm_wuziqi.pro 1KB
start3.png 2KB
quit-1.png 2KB
Xm_wuziqi.pro.user 23KB
bendi.png 32KB
big_baiqi.png 8KB
ready-1.png 2KB
quit-2.png 3KB
ready-2.png 2KB
psd
菜单.psd 51KB
按钮_按下.psd 97KB
big_heiqi.psd 60KB
显数.psd 51KB
条幅.psd 189KB
开始.psd 62KB
tubiao.psd 223KB
悔棋.psd 52KB
big_baiqi.psd 56KB
miaozhun.psd 26KB
按钮.psd 159KB
10款百年污损纸张图片素材_05_lanrentuku.com.psd 6.96MB
point.psd 22KB
heiqi1.png 3KB
tiaofu.png 42KB
start.png 3KB
big_heiqi.png 8KB
shownumber3.png 23KB
beifen
home-3.png 2KB
home-1.png 2KB
home-2.png 2KB
renji_jiandan1.png 50KB
hidenumber1.png 23KB
wangluo_push.png 14KB
renji_putong1.png 50KB
123.bat 259B
point.png 307B
tubiao.qrc 100B
huiqi3.png 2KB
ai_simple.h 9KB
quit-3.png 3KB
wwww.qrc 102B
ready-3.png 2KB
共 80 条
- 1
资源评论
热爱技术。
- 粉丝: 2449
- 资源: 7862
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功