当前位置:文档之家› 扫雷游戏设计报告

扫雷游戏设计报告

二 、概要设计
1.基本功能
扫雷游戏
















图 1 程序基本功能
类名 CMy2_ew
成员函数 leizero( ) Onchuji( )
Onzhongji( ) Ongaoji( ) OnLButtonDown( )
OnRButtonDown( )
OnLButtonUp( ) OnStart() OnTimer( )
{ ······ } pDC->SelectObject(myoldPen2);
CDC Dc; if(Dc.CreateCompatibleDC(pDC)==FALSE) AfxMessageBox("Can't create DC"); Dc.SelectObject(m_anniu[0]); pDC->BitBlt(180,10,160,160,&Dc,0,0,SRCCOPY); for(int a=0;a<m_RowCount;a++) for(int b=0;b<m_ColCount;b++) { if(lei[a][b].weitu==1) { ······ } if(lei[a][b].weitu==2) { ······ } if(lei[a][b].weitu==3) { ······ } if(jieshu==1&&lei[a][b].shumu==-1) { ······ }
如果是雷,按右键时,显示旗子,并减少一个剩下
雷数;如果我们认为那旗子的格子不是雷,按右键,显
示问号,并在剩下雷数加上 1。 松开左键时,显示按钮没有按下的位图;再判断,
如果结束,就要显示失败的位图;如果是在按钮上松开 按钮,即表示我们已经按下了重新开始的按钮,必须调 用重新开始函数 OnStart()。
位的数字在前面加 0.
4.定义新类及添加变量和函数
(1)对于雷,我们是单独定义一个类,这样有利于程序的操作。 class Lei { public:
int weitu; int shumu; }; 上述代码声明了以下变量:int weitu 显示哪一个位图,int shumu 相应位置相应的值 (2)在类 CMy2_1View 中添加变量及函数: class CMy2_1View : public CView { ······ public: int leftnum; int leinum; int jieshu; short second; int secondstart; CBitmap m_Bitmap[12]; CBitmap m_anniu[4]; int m_RowCount; int m_ColCount; Lei lei[50][50]; virtual ~CMy2_1View(); void leizero(); ······ protected: //{{AFX_MSG(CMy2_1View) afx_msg void OnTimer(UINT nIDEvent); afx_msg void OnLButtonDown(UINT nFlags, CPoint point); afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnStart();
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
afx_msg void Onchuji();
初始化游戏
记录游戏所用时间
表 1 类及其函数功能
三、详细设计
1.添加位图 前十二幅是在雷区的,后四幅是按钮。为了便于加载,必须各自保证其连续性。另外,
为什么不添加一个按钮而用位图呢?是因为即使我们添加了按钮也要添加四幅位图! 位图的 ID 号: 按扭位图:30*30 IDB_ANNIU1、IDB_ANNIU 2、IDB_ANNIU3、 IDB_ANNIU4 雷区位图:14*14 ID 号按下图依次为:IDB_BITMAP14。。。。。。IDB_BITMAP25
cs.cy=400; return TRUE;
}
3.画游戏界面 为了用户框重画的需要,当我们的游戏玩了一半后最小化,或是把部分窗口移出屏幕,
或是执行了新的应用程序覆盖了原来的程序时,必须重画。我们调用重画函数,它都要重新 执行 OnDraw(CDC* pDC)函数,那么,此时它就必须把已经显示出来的位图也显示出来。而 开始时雷区位图是不可见的,并不影响界面的初始化。
设计时间 2011/6/27-2011/7/8
设计地点
国际交流中心 212 机房
培养学生综合运用理论知识来分析和解决实际问题的能力、 设计目的 及严谨的科学态度和良好的课程设计习惯。
指导教师评 语
系部教研室 意见
一、调研材料
扫雷游戏是 Windows 操作系统自带的一个小游戏,过去的几年里 Windows 操作系统历经数 次换代,变得越来越庞大、复杂,但扫雷游戏在任何版本的 Windows 操作系统里却依然保持 原貌,而且几乎每个电脑使用者都接触过它,并且深爱着这款小游戏。
} int nOldDC=pDC->SaveDC(); pDC->SetTextColor(RGB(255,0,0)); pDC->SetBkColor(RGB(0,0,0)); CFont font; if(0==font.CreatePointFont(160,"Comic Sans MS")) { AfxMessageBox("Can't Create Font"); } ······
2.调整窗口大小
在类 CMainFrame 中的 PreCreateWindow( )添加代码: BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) {
······· cs.dwExStyle=cs.dwExStyle|WS_EX_TOPMOST; // cs.style=WS_SYSMENU|WS_OVERLAPPED|WS_MINIMIZEBOX;//; cs.cx=440;
afx_msg void Onzhongji();
afx_msg void Ongaoji();
//}}AFX_MSG DECLARE_MESSAGE_MAP()
}; 上述代码声明了以下变量及函数:int leftnum 剩余雷数,int leinum 雷的数目,short
second 计时,int secondstart 开始计时,CBitmap m_Bitmap[12]位图数组,CBitmap m_anniu[4] 按扭位图数组,int m_RowCount 雷区行数,int m_ColCount 雷区列数,Lei lei[50][50]最大雷 区 , void leizero() 显 示 一 个 位 置 周 围 雷 数 为 0 的 区 域 , void OnTimer() 计 时 器 函 数 , void OnLButtonDown( ) 鼠 标 按 下 左 键 函 数 , void OnRButtonDown( ) 鼠 标 按 下 右 键 函 数 , void OnLButtonUp( )鼠标左键松开函数,int OnCreate( )初始化游戏框架函数,void OnStart( )开始 化游戏函数,int OnCreate( )初始化函数。 (3)由于构造函数是程序运行时就执行的,所以,除了对变量赋值之外,我们还可以把游戏的 核心结构即内部数组赋值:先是把全部格子的位图和雷数赋值为0,然后调用随机函数按指定 雷 数 赋 值 为 -1, 最 后 把 不 是 雷 的 格 子 的 雷 数 赋 值 为 相 应 的 值 。 以 下 代 码 中 CTime time=GetCurrentTime( )是获取当前时间,s=time.GetSecond( )是获取秒数,while 循环是以当前 秒数为产生随机算法,同时为了避免一个位置同时算两个雷,只允许当前位置不是雷时赋值 为雷,接着 for 循环是给方格赋值,计算雷数。 CMy2_1View::CMy2_1View() {
}
画 背 景 时 , pDC->FillRect(myrect1,&mybrush1); 取 得 颜 色 刷 并 在 区 域 CRect
myrect1(0,0,1200,800)内填充该颜色;画黑框时,mybrush.CreateSolidBrush(RGB(0,0,0))黑色刷,
pDC->FillRect(myrect,&mybrush)、pDC->FillRect(myrect2,&mybrush)分别取得黑色刷在不同区
CPen mypen2; CPen*myoldPen2; mypen2.CreatePen(PS_SOLID,1,RGB(0,0,0)); myoldPen2=pDC->SelectObject(&mypen2); for(int ii=0;ii<m_RowCount;ii++) for(int jj=0;jj<m_ColCount;jj++)
域涂刷,形成黑框,接着在画黑框右下两边画白线是黑框有立体感;画雷区时,左上角是白
线,右下角是黑线,以显示立体感,然后在两黑框中间位置显示人物脸图按钮,接着是判断
雷区显示什么位图,如果 weitu=1 显示已按下的数字区,如果 weitu=2 显示旗,如果 weitu=3 显示问号,如果 jieshu==1&&lei[a][b].shumu==-1 则结束,最后是显示黑框中的数字,不够三
相关主题