嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 2 元微信扫码支付:2 元
请留下您的邮箱,我们将在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