基本信息
源码名称:模拟一个模类游戏-棋盘游戏
源码大小:6.54M
文件格式:.rar
开发语言:C/C++
更新时间:2020-02-26
   友情提示:(无需注册或充值,赞助后即可获取资源下载链接)

     嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300

本次赞助数额为: 2 元 
   源码介绍

模拟一个模类游戏: 1. 角色 (红棋,蓝棋) 

2. 模盘 4x4 

3. 走位 (规则:红棋橫走,蓝棋斜走)

设计 架构 
GameView: 游戏UI,负责界面显示 GameModel: 游戏数据,记录角色、每个角色 的位置。 GameRole: 角色定义。 GamePosition: 模盘位置坐标 

GameModel 
负责存储游戏相关的数据。 (1)角色(即棋子) (2)角色的位置 
如何定义角色的位置?   描述4x4共16个单元格,描述每个单元格里 有没有角色对象。 
规则:走位前做出判断 canMoveTo(from, to)     能否将from移至to位置 
moveTo(from, to)    将from移至to位置

负责具体的显示: 
paintEvent() 里画出棋盘 mouse/drag event来实现拖动操作 

#ifndef GAMEVIEW_H
#define GAMEVIEW_H

#include <QFrame>
#include <QtGui>

#include "GameModel.h"

class GameView : public QFrame
{
Q_OBJECT

public:
GameView(QWidget *parent);
~GameView();

private:
virtual void paintEvent ( QPaintEvent * event );
virtual void resizeEvent ( QResizeEvent * event );

// 鼠标支持
void mouseDoubleClickEvent ( QMouseEvent * event );
void mouseMoveEvent ( QMouseEvent * event );
void mousePressEvent ( QMouseEvent * event );
void mouseReleaseEvent ( QMouseEvent * event );

// 拖放支持
void dragEnterEvent(QDragEnterEvent *event);
void dragLeaveEvent (QDragLeaveEvent * event );
void dragMoveEvent (QDragMoveEvent * event );
void dropEvent(QDropEvent *event);


private:
// 重置游戏
void reset();

// 当窗口改变大小时,重新计算单元格大小
void caculate();

// 从鼠标位置换算出单元格坐标
GamePosition getPostion(QPoint pt);

// 单元格中心的热点区域
QRect hotArea(GamePosition pos);

// 单元格区域
QRect selectedArea(GamePosition pos);

private:
QRect m_cells[4][4] ; // 4x4方格,每个单元的具体位置
GameModel m_gameModel;// 游戏数据

private:
/* 拖放操作 */
bool m_mousePressed; // 鼠标按下时,开始拖动
QPoint m_dragPosition;  // 拖动操作的起点
GamePosition m_posFrom; // 被拖动的那个起始坐标
GameRole* m_draggedIem; // 被拖动的那个单元格里的对象

bool m_allowDrop; // 拖放探测:允许drop在这里
GamePosition m_allowDropPos; // 目标单元格位置
};

#endif // GAMEVIEW_H