Qt实现简单五子棋小游戏实现简单五子棋小游戏
C++代码简单实现五子棋功能,主要是分为窗口绘图的显示,横、纵、斜三个方面计算的功能代码实现,即能连续出现5个相
同棋子就为赢。在这里就简单讲解一下这三个方面的功能实现(主要是通过QT实现)。
下图为游戏主窗口页面:游戏主窗口页面:
第一步:第一步:窗口绘图的实现(QPaintEvent绘图事件 和 QMouseEvent鼠标事件)
①鼠标事件(这里我的是mouseDoubleClickEvent()双击事件)
void GamePage::mouseDoubleClickEvent(QMouseEvent *event)//鼠标双击事件
{
m_dx = event->x();
m_dy = event->y();
//避免乱点时存入坐标 需添加:标志符--》game状态 坐标的界限(点)
if(m_dx < POINT_X_MAX && m_dy < POINT_Y_MAX && m_bRunState == true)
{
//如果点在交叉点周围则设置点在交叉点上(判断点位置)
QPointF newPoint(gainPointPosition(QPointF(m_dx,m_dy)));
if(!m_VectorRedPoint.contains(newPoint) &&
!m_VectorBlackPoint.contains(newPoint))//判断点是否已经存在
{
if(m_iFlagWho == 0)//红棋
{
m_VectorRedPoint.append(newPoint);
m_iFlagWho = 1;
}
else//黑棋
{
m_VectorBlackPoint.append(newPoint);
m_iFlagWho = 0;
}
}
}
}
在这里窗口网格图是通过直接绘画以及鼠标双击选择坐标来存储棋子和绘画棋子,因此对点进行了一个设置位置函数以便处于
两线之间的交接处,代码如下:
QPointF GamePage::gainPointPosition(QPointF srcPoint)//返回一个处于格子两线交接处的坐标点
{
QPointF tmp;
for(int i = 0;i < 12;i++)
{
if(srcPoint.x() >= 50*i && srcPoint.x() <= (50*i+25))//X判断