资源简介
Qt写的网络五子棋代码,使用了QTcpSocket类,进行网络通信。
代码片段和文件信息
#include “chessboard.h“
#include
#include
#include
#include
ChessBoard::ChessBoard(QWidget *parent) :
QWidget(parent)
{
isLocal = false;
isServer = false;
localImg = QImage(“:/images/local.png“).scaled(ZOOM ZOOM);
remoteImg = QImage(“:/images/remote.png“).scaled(ZOOM ZOOM);
localPoints.clear();
remotePoints.clear();
}
int ChessBoard::directionNumber(const QPoint &p
int xoffset
int yoffset
bool local)
{
QMap &points = local ? localPoints : remotePoints;
int num = 1;
int i;
for(i = 0; i < 5; i++)
{
if(-1 == points.key(p + QPoint(xoffset * i yoffset * i) -1))
break;
}
num += i -1;
for(i = 0; i < 5 - num + 1; i++)
{
if(-1 == points.key(p + QPoint(-xoffset * i -yoffset * i) -1))
break;
}
num += i -1;
return num;
}
void ChessBoard::start(bool s)
{
isLocal = s;
isServer = s;
}
bool ChessBoard::isVectory(const QPoint &p bool local)
{
if(directionNumber(p 0 1 local) >= 5) return true;
if(directionNumber(p 1 1 local) >= 5) return true;
if(directionNumber(p 1 0 local) >= 5) return true;
if(directionNumber(p -1 1 local) >= 5) return true;
return false;
}
QSize ChessBoard::sizeHint()const
{
return QSize(ZOOM * WIDTH + ZOOM
ZOOM * WIDTH + ZOOM);
}
void ChessBoard::paintEvent(QPaintEvent *)
{
QPainter painter(this);
//绘制棋盘网格
for(int i = 0; i <= WIDTH; i++)
{
painter.drawLine(i * ZOOM + ZOOM / 2
ZOOM / 2
i * ZOOM + ZOOM / 2
WIDTH * ZOOM + ZOOM / 2);
}
for(int i = 0; i <= HEIGHT; i++)
{
painter.drawLine(ZOOM / 2
i * ZOOM + ZOOM / 2
HEIGHT * ZOOM + ZOOM / 2
i * ZOOM + ZOOM / 2);
}
//绘制棋子
for(int i = 0; i < localPoints.count(); i++)
{
painter.drawImage(ZOOM * localPoints[i].x()
ZOOM * localPoints[i].y()
localImg);
}
for(int i = 0; i < remotePoints.count(); i++)
{
painter.drawImage(ZOOM * remotePoints[i].x()
ZOOM * remotePoints[i].y()
remoteImg);
}
}
void ChessBoard::mousePressEvent(QMouseEvent *e)
{
int x y;
QPoint p;
//是否为本方下棋
if(!isLocal) goto Ret;
//是否为左键点击
if(e->button() != Qt::LeftButton) goto Ret;
//是否在有效区域
x = e->pos().x() / ZOOM;
y = e->pos().y() / ZOOM;
if(x > WIDTH || y > HEIGHT) goto Ret;
//是否重复坐标
p = QPoint(x y);
if(-1 != localPoints.key(p -1)) goto Ret;
if(-1 != remotePoints.key(p -1)) goto Ret;
isLocal = false;
emit localDone(p);
localPoints[localPoints.count()] = p;
this->update();
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
I.A.... 3640 2013-04-21 11:40 netgobang\chessboard.cpp
I.A.... 928 2013-04-21 11:23 netgobang\chessboard.h
I.A.... 1630 2005-09-10 16:27 netgobang\images\local.png
I.A.... 1594 2005-09-10 16:27 netgobang\images\remote.png
I.A.... 134 2013-04-18 18:42 netgobang\images.qrc
I.A.... 1440 2013-04-18 18:29 netgobang\logindialog.cpp
I.A.... 638 2013-04-18 18:29 netgobang\logindialog.h
I.A.... 7392 2013-04-21 11:32 netgobang\logindialog.ui
I.A.... 798 2013-04-21 11:49 netgobang\main.cpp
I.A.... 2524 2013-04-21 12:53 netgobang\netgobang.cpp
I.A.... 677 2013-04-21 12:44 netgobang\netgobang.h
I.A.... 272 2013-04-21 09:31 netgobang\netgobang.pro
I.A.... 7970 2013-06-23 21:45 netgobang\netgobang.pro.user
I.A.... 427 2013-04-18 12:24 netgobang\tcpserver.cpp
I.A.... 406 2013-04-17 19:46 netgobang\tcpserver.h
I..D... 0 2013-07-03 20:20 netgobang\images
I..D... 0 2013-07-03 20:20 netgobang
----------- --------- ---------- ----- ----
30470 17
- 上一篇:labview模拟风扇
- 下一篇:mathcad 经典电路设计
相关资源
- 原创 qt 组播实现的屏幕共享程序
- PyQt5高阶界面控件
- QT读取Txt文件并显示在界面上完整版
- 用QT实现的表格编辑器
- Qt Quick自定义下拉框
- qt字符设备驱动,简单易学
- QT程序学生管理系统
- QT程序打地鼠源码,自己编写,测试无
- QT使用GSoap发布WebService的Demo
- QT不卡界面Demo V2
- 原创Qt 串口基础编程代码
- Qt全局热键 QtGlobalShortcut文档
- qt 5.9.1 调用周立功CAN卡第三方库
- 使用Qt实现可编辑的画图程序
- 使用Qt实现简单的画图程序
- Qt5.X的linuxfb平台源码补丁包
- Qt之QDoubleSlider 继承QSlider的双向滑块
- qt实现modbus
- 在QT中使用visp库来抓取pylon相机的测试
- 基于qt的闹钟
- QWebEngineView使用,点击链接,上一页,
- [QT]获取鼠标坐标以及按键响应
- 基于qt做的画板
- Qt 多线程访问同一个变量
- 基于QT图形界面的GPS导航软件系统的设
- Qt一步一步实现插件通信
- Qt4 百度地图 定位
- Qt绘制编辑移动矢量图形
- Qt5 qml TreeView 迄今为止功能最全的树控
- QML自定义菜单样式
评论
共有 条评论