1、4void CMyDlgDlg:OnBnClickedHp() /说明按钮命令响应5void CMyDlgDlg:OnBnClickedPause() /暂停按钮命令响应6void CMyDlgDlg:OnClose() /关闭7void CMyDlgDlg:OnGameDe() /说明8void CMyDlgDlg:OnLoad() /载入游戏9void CMyDlgDlg:OnPaint() /背景画面添加10void CMyDlgDlg:OnPause()/暂停11void CMyDlgDlg:OnRange()/等级12void CMyDlgDlg:OnRestart() /重新开始1
2、3void CMyDlgDlg:OnSave()/保存14void CMyDlgDlg:OnSound() /声音15BOOL CMyDlgDlg:PreTranslateMessage(MSG* pMsg) 16void CMyDlgDlg:OnTimer(UINT nIDEvent) 17void CMyDlgDlg:OnSysCommand(UINT nID, LPARAM lParam)18void CMyDlgDlg:DoDataExchange(CDataExchange* pDX)(2)CManager /管理整个游戏区1void InitGame(int Level,int r
3、esult,int lineNumber);/初始化游戏 2void DrawScene();/画整个界面 3Void OnTimer(UINT &nIDEvent);4void OnKeyDown(UINT &nChar);5void OnKeyUp(UINT &6bool WhetherLoss();/判断游戏是否结束 7void SetFree();/重新开始 8void HeroWrite();(3)CBlock /用于画游戏障碍物void AddBlock();void DrawBlock(CDC *pDC);bool BlockPanel3080;COLORREF BlockCol
4、or;(4)CMill /用于产生和画出下一个将要出现的方块void MadeDiamond();/用于随机生成游戏方块 void DrawPrepare(CDC* pDC); int PreDiamondType;/7种方块类型 int PreDiamondState;/每种方块的4个状态 RECT MillRect;/用显示下一个方块的矩形 CSize GridSize;/格子的大小 COLORREF MillColor;/显示下一个方块的矩形颜色 COLORREF PreColor;/下一个方块的颜色 int probabilityCake;/田子 int probabilityHook
5、;/钩子 int probabilitySeven;/七的形状 int probabilityHeave;/凸起 int probabilityBar;/一条 int probabilityTwo;/2字 int probabilitySpade;/铲子(5)CPanel /画游戏区和的得分区void DrawPanel(CDC* pDC);void PanelPosToPos(POINT &PanelPos);void PosToPanelPos(POINT &Pos); public:RECT PanelRect;/游戏区的矩形COLORREF PanelColor;/游戏区的背景颜色 i
6、nt nHGridNum;/列数 int nVGridNum;/行数 CRect TextRect;/输出得分的矩形(6)Diamond /用于下落的方块bool MoveDiamondLeft();/方块向左移 bool MoveDiamondRight();/方块向右移 bool MoveDiamondDown();/方块加速下 bool RollDiamond();/方块变状态 void DrawDiamond(CDC* pDC);void DimDiamond();/初始化方块的类型,bool DiamondStruct7444; /第一维:方块类型,第二维:状态,第三、四维:方 块结
7、构;POINT DiamondPos;/游戏中方块的坐标 COLORREF DiamondColor;/游戏中方块的颜色 int DiamondType;/方块的7种类型 int DiamondState;/每种类型的4种状态 bool FullLine();/满了一行 bool overlap();/判断左边,右边或者到到底下了详细设计建立一个一对话框为基础的MFC.项目,添加菜单和菜单项给对话框添加时钟,即添加消息响应函数OnTimer()。重写函数PreTranslateMessage(MSG* pMsg);为各个菜单项添加响应的事件响应处理函数为对话框添加四个控件按钮,并分别添加事件处
8、理函数声明一个bool 型的变量,用于判断是否暂停游戏接着添加几个对话框,分别是游戏设置对话框,游戏结束对话框和英雄榜对话框第一个对话框,游戏设计对话框,Caption为“游戏设置”,ID为“IDD_NAME”,为对话框添加相应的控件 编辑控件的ID为IDC_NAME,三个单选钮的ID分别为:简单(IDC_LEVEL),一般(IDC_LEVEL2),困难(IDC_LEVEL3)给编辑控件添加CString类型的变量,变量名为:m_Name, 给第一个单选钮添加变量int level; 添加消息响应函数OnPaint(),给确定按钮添加事件处理函数void CMyDlgDlg:OnPaint()
9、 if (IsIconic() CPaintDC dc(this); / device context for painting SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); / Center icon in client rectangle int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width()
10、- cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; / Draw the icon dc.DrawIcon(x, y, m_hIcon); elseCPaintDC dc(this);CRect rect;GetClientRect(&CDC dcMem;dcMem.CreateCompatibleDC(&dc);CBitmap bmpBackground;bmpBackground.LoadBitmap(IDB_BJ1); /IDB_BITMAP是你自己的图对应的ID BITMAP bitmap;bmpBackground
11、.GetBitmap(&bitmap);CBitmap*pbmpOld=dcMem.SelectObject(&bmpBackground);dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,bitmap.bmWidth,bitmap.bmHeight,SRCCOPY); /CDialog:OnPaint();游戏结束,添加消息响应函数void CGameV: CPaintDC dc(this); CRect rect; GetClientRect(& CDC dcMem; dcMem.CreateCompatibleDC(& CB
12、itmap bmpBackground; bmpBackground.LoadBitmap(IDB_GV); BITMAP bitmap; bmpBackground.GetBitmap(& CBitmap *pbmpOld=dcMem.SelectObject(& dc.StretchBlt(0,0,rect.Width(),rect.Height(),&第三个对话框,排行榜,ID为“IDD_HERO”,添加控件IDC_NAME_EDIT IDC_SCORE_EDIT IDC_LEVEL_EDIT,并把三个编辑控件的Read Only 属性选为“true”。为对话框添加类,类名为CHeroD
13、lg,基类为CDialog。为三个编辑控件分别添加变量,变量名为m_name,m_level,m_score;手动添加一个void SetWriteFlg(BOOL bflg);函数,用于写如英雄榜,添加重写型OnInitDialog()和DoModal(),添加消息响应函数OnPaint(),再手动添加一个BOOL m_bWriteflg,用于判断是否是写入英雄榜,在构造函数中初始化为m_bWriteflg = FALSE;接下来添加类第一个类名为“CManager”,用于管理整个游戏区,第二个类是“CBlock”,用于画游戏障碍物,也就是已经落下的俄罗斯方块;第三个类是“CMill”,是“
14、工场”是用于产生和画出下一个将要下落的方块,第四个类是“CPanel”,用于在游戏区域画游戏区和得分区,第五个类是“Diamond”,用于下落的方块。CManager:void DrawScene();/画整个界面void OnTimer(UINT &void OnKeyDown(UINT &void OnKeyUp(UINT?&?bool WhetherLoss();/判断游戏是否结束void SetFree();/重新开始void HeroWrite();private:void PassLevel();/升级bool KeyLeft,KeyDown,KeyRight,KeySpace;/
15、几个游戏操作public:CRect ClientRect;/客户区矩形UINTTimer1;/为什么要设两个时钟?一个用来控制左右移动的速度,一个用来控制下落的速度UINT Timer2;/是下落的速度UINT FallTimer;int Level;/等级int Result;/得分int m_nHighScore;/当前游戏最高分int m_nHighLevel;/当前游戏最高级?int LineNumber;/消灭的总行数int SeriesLine;/每一次消灭的行数bool Sound;/音效CString Name;/玩家名字;/定义的方块的7种类型const int DIAMO
16、NDCAKE=0;const int DIAMONDHOOK =1;const int DIAMONDSEVEN =2;const int DIAMONDHEAVE =3;const int DIAMONDBAR =4;const int DIAMONDTWO=5;const int DIAMONDSPADE =6;CDiamond:class CDiamond CDiamond(); virtual CDiamond(); bool MoveDiamondLeft(); bool MoveDiamondRight(); bool MoveDiamondDown(); bool RollDia
17、mond(); void DrawDiamond(CDC* pDC); private: void DimDiamond();/初始化方块的类型,状态 bool DiamondStruct7444; POINT DiamondPos; COLORREF DiamondColor; int DiamondType; int DiamondState; bool FullLine(); bool overlap();/判断左边,右边或者到到底下了 ;CBlock:class CBlock CBlock();virtual CBlock();CMill:class CMill CMill(); vi
18、rtual CMill(); void MadeDiamond(); void DrawPrepare(CDC* pDC); int PreDiamondType;/7种方块类型 int PreDiamondState; RECT MillRect;/铲子 CPanel: CPanel CPanel(); virtual CPanel(); void DrawPanel(CDC* pDC); void PanelPosToPos(POINT & void PosToPanelPos(POINT & RECT PanelRect;/输出得分的矩形 功能测试1.进入游戏,输入姓名并选择难度2.图形的变换3.图形的移动4.载入游戏,保存游戏,重新开始,关闭游戏5.游戏设置6.游戏规则7.排行榜8游戏结束实验小结(出现问题,解决方案,收获和体会,不少于300字)附:完成的代码(打印版无需此部分,电子版报告必须包括此部分,要求代码具有良好的编程规范和适当注释)
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1