嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们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