基于VC6的俄罗斯方块代码学习版源码(1)
◆源代码下载链接:
http://upload.programfan.com/upfile/200610120711419.rar
◆本写代码的目的:
1.想以此小软件的开发示例演示面向对象软件工程方法的基本开发过程:
(我欲将随后将公开全部过程的UML图及相关思路。欢迎大家提出意见,进行讨论,以达共同进步的目的。)
2.对该游戏程序软件架构的一次探索:
本游戏特点是界面与逻辑有紧密的关系,如何将逻辑与界面实现相分离也是本代码的探索之处。努力实现面向对象的设计思路,代码所追求的目标是:整体结构合理,减小各功能类之间的耦合度,力求相关问题局部化,做到容易维护代码(如易于修正BUG和功能的扩展升级)。
3.本程序是对MFC对话框框架学习后的一次总结:
实现了由控制类控制下多个对话框之间切换的面向对象代码示例。本程序包含一个框架窗口,用以容纳子窗口。子窗口有三个:主界面窗口、设置窗口、游戏play窗口。这些窗口都是由对话框组成,框架窗口是一模态对话框,其它各窗口为非模态对话框。
4.对关卡类游戏的一次实践:
本游戏与我之前扫雷游戏的一个不同是它由一关一关游戏组成,所以不仅仅是一局游戏的实现,还要实现由一关进入另一关之间的游戏流程,本设计演示了此类游戏进行面向对象方法设计的一个示例。
5.对有定时需求游戏实现的一次探索:
本游戏与扫雷游戏的另一个不同是它有定时要求,对于游戏有定时要求的面向对象软件设计不是直觉感觉的那么简单,如何看待定时器这个对象,如何实现与它相关的代码动作也是本设计想要探讨的问题。
◆类说明:
1.游戏界面类:
IView:抽象类,作为各对话框的公共接口,提供接受控制类的通知响应管理。
TView:实现了IView接口的界面基础类。
CRussiaDmdDlg:向导生成的模态对话框,作为各其它对话框的容器。继承了TView类。
TMainDlg:主界面对话框,程序进入的初始界面。同样继承了TView类。
TSetDlg:游戏设置对话框。同样继承了TView类。
TPlayDlg:游戏Play界面对话框。同样继承了TView类。
TReadyDmdImg:从Static类中派生。实现TPlayDlg窗口中的右上角预备方块的显示。
2. 游戏主控制逻辑:
IGameCtrl:为游戏主控制逻辑接口,程序所有流程控制操作都通知这个接口。与IView对应工作。
TCtrl:实现了其中的通知管理的代码。
TGameCtrl:实现所有的逻辑控制操作。
3.游戏一关逻辑:
TLevelInf:一关的游戏的操作实现,每一个实例代表游戏的一个关卡。
TGride:游戏空间一格的信息。
IDiamond:一个方块的操作接口。
TDiamond:实现了各类方块的相同操作的部分。派生自IDiamond。
TBarDmd:条形方块,实现了与自身形状有关的操作。派生自TDiamand。
TFieldDmd:田形方块,实现了与自身形状有关的操作。派生自TDiamand。
TLHoeDmd:左锄形方块,实现了与自身形状有关的操作。派生自TDiamand。
TLSnakeDmd:左蛇形方块,实现了与自身形状有关的操作。派生自TDiamand。
TSoilDmd:土形方块,实现了与自身形状有关的操作。派生自TDiamand。
4.其它类(略)
◆一处BUG修定:(见加粗部分)
void TPlayDlg::Proccess()
{
……
//游戏初始状态
else if(false == m_pCtrl->GetCurrStatusOK()
&& EGAME_IN == m_pCtrl->GetCurrStatus())
{
this->GetDlgItem(IDC_TMP)->ShowWindow(SW_HIDE);
if(EPLAY_READY == m_pCtrl->GetPlayResult())
{//游戏预备期的初始状态
this->ShowWindow(SW_MAXIMIZE);
this->GetDlgItem(IDC_TMP)->ShowWindow(SW_NORMAL);
m_LevelID.Format("第%d关",m_pCtrl->GetCurrLevelID());
this->SetFocus();
this->UpdateData(FALSE);
this->StartReadyTimer();
this->Invalidate(TRUE); //补上此句
}
……
}
}
基于VC6的俄罗斯方块代码学习版源码(2)_用例图
评论