c++俄罗斯方块报告推荐文档Word格式文档下载.docx
《c++俄罗斯方块报告推荐文档Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《c++俄罗斯方块报告推荐文档Word格式文档下载.docx(17页珍藏版)》请在冰豆网上搜索。
![c++俄罗斯方块报告推荐文档Word格式文档下载.docx](https://file1.bdocx.com/fileroot1/2022-12/30/6cb494d5-5d69-40dc-b576-1a97802d5d55/6cb494d5-5d69-40dc-b576-1a97802d5d551.gif)
4voidCMyDlgDlg:
OnBnClickedHp()//说明按钮命令响应
5voidCMyDlgDlg:
OnBnClickedPause()//暂停按钮命令响应
6voidCMyDlgDlg:
OnClose()//关闭
7voidCMyDlgDlg:
OnGameDe()//说明
8voidCMyDlgDlg:
OnLoad()//载入游戏
9voidCMyDlgDlg:
OnPaint()//背景画面添加
10voidCMyDlgDlg:
OnPause()//暂停
11voidCMyDlgDlg:
OnRange()//等级
12voidCMyDlgDlg:
OnRestart()//重新开始
13voidCMyDlgDlg:
OnSave()//保存
14voidCMyDlgDlg:
OnSound()//声音
15BOOLCMyDlgDlg:
PreTranslateMessage(MSG*pMsg)
16voidCMyDlgDlg:
OnTimer(UINTnIDEvent)
17voidCMyDlgDlg:
OnSysCommand(UINTnID,LPARAMlParam)
18voidCMyDlgDlg:
DoDataExchange(CDataExchange*pDX)
(2)CManager//管理整个游戏区
1voidInitGame(intLevel,intresult,intlineNumber);
//初始化游戏
2voidDrawScene();
//画整个界面
3VoidOnTimer(UINT&
nIDEvent);
4voidOnKeyDown(UINT&
nChar);
5voidOnKeyUp(UINT&
6boolWhetherLoss();
//判断游戏是否结束
7voidSetFree();
//重新开始
8voidHeroWrite();
(3)CBlock//用于画游戏障碍物
voidAddBlock();
voidDrawBlock(CDC*pDC);
boolBlockPanel[30][80];
COLORREFBlockColor;
(4)CMill//用于产生和画出下一个将要出现的方块
voidMadeDiamond();
//用于随机生成游戏方块
voidDrawPrepare(CDC*pDC);
i
ntPreDiamondType;
//7种方块类型intPreDiamondState;
//每种方块的4个状态
RECTMillRect;
//用显示下一个方块的矩形
CSizeGridSize;
//格子的大小
COLORREFMillColor;
//显示下一个方块的矩形颜色
COLORREFPreColor;
//下一个方块的颜色
intprobabilityCake;
//田子
intprobabilityHook;
//钩子
intprobabilitySeven;
//七的形状
intprobabilityHeave;
//凸起
intprobabilityBar;
//一条
intprobabilityTwo;
//2字
intprobabilitySpade;
//铲子
(5)CPanel//画游戏区和的得分区
voidDrawPanel(CDC*pDC);
voidPanelPosToPos(POINT&
PanelPos);
voidPosToPanelPos(POINT&
Pos);
public:
RECTPanelRect;
//游戏区的矩形
COLORREFPanelColor;
//游戏区的背景颜色
intnHGridNum;
//列数
intnVGridNum;
//行数
CRectTextRect;
//输出得分的矩形
(6)Diamond//用于下落的方块
boolMoveDiamondLeft();
//方块向左移
boolMoveDiamondRight();
//方块向右移
boolMoveDiamondDown();
//方块加速下
boolRollDiamond();
//方块变状态
voidDrawDiamond(CDC*pDC);
voidDimDiamond();
//初始化方块的类型,
boolDiamondStruct[7][4][4][4];
//第一维:
方块类型,第二维:
状态,第三、四维:
方块结构;
POINTDiamondPos;
//游戏中方块的坐标
COLORREFDiamondColor;
//游戏中方块的颜色
intDiamondType;
//方块的7种类型
intDiamondState;
//每种类型的4种状态
boolFullLine();
//满了一行
booloverlap();
//判断左边,右边或者到到底下了
详细设计
建立一个一对话框为基础的MFC.项目,添加菜单和菜单项
给对话框添加时钟,即添加消息响应函数OnTimer()。
重写函数PreTranslateMessage(MSG*pMsg);
为各个菜单项添加响应的事件响应处理函数
为对话框添加四个控件按钮,并分别添加事件处理函数
声明一个bool型的变量,用于判断是否暂停游戏
接着添加几个对话框,分别是游戏设置对话框,游戏结束对话框和英雄榜对话框
第一个对话框,游戏设计对话框,Caption为“游戏设置”,ID为“IDD_NAME”,为对话框添加相应的控件
编辑控件的ID为IDC_NAME,三个单选钮的ID分别为:
简单(IDC_LEVEL),一般(IDC_LEVEL2),困难(IDC_LEVEL3)
给编辑控件添加CString类型的变量,变量名为:
m_Name,给第一个单选钮添加变量intlevel;
添加消息响应函数OnPaint(),给确定按钮添加事件处理函数
voidCMyDlgDlg:
OnPaint()
{
if(IsIconic())
{
CPaintDCdc(this);
//devicecontextforpainting
SendMessage(WM_ICONERASEBKGND,(WPARAM)dc.GetSafeHdc(),0);
//Centericoninclientrectangle
intcxIcon=GetSystemMetrics(SM_CXICON);
intcyIcon=GetSystemMetrics(SM_CYICON);
CRectrect;
GetClientRect(&
rect);
intx=(rect.Width()-cxIcon+1)/2;
inty=(rect.Height()-cyIcon+1)/2;
//Drawtheicon
dc.DrawIcon(x,y,m_hIcon);
}
else
CPaintDCdc(this);
CRectrect;
GetClientRect(&
CDCdcMem;
dcMem.CreateCompatibleDC(&
dc);
CBitmapbmpBackground;
bmpBackground.LoadBitmap(IDB_BJ1);
//IDB_BITMAP是你自己的图对应的ID
BITMAPbitmap;
bmpBackground.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();
}
游戏结束,添加消息响应函数
voidCGameV:
CPaintDCdc(this);
CRectrect;
GetClientRect(&
CDCdcMem;
dcMem.CreateCompatibleDC(&
CBitmapbmpBackground;
bmpBackground.LoadBitmap(IDB_GV);
BITMAPbitmap;
bmpBackground.GetBitmap(&
CBitmap*pbmpOld=dcMem.SelectObject(&
dc.StretchBlt(0,0,rect.Width(),rect.Height(),&
第三个对话框,排行榜,ID为“IDD_HERO”,添加控件IDC_NAME_EDITIDC_SCORE_EDITIDC_LEVEL_EDIT,并把三个编辑控件的ReadOnly属性选为“true”。
为对话框添加类,类名为CHeroDlg,基类为CDialog。
为三个编辑控件分别添加变量,变量名为m_name,m_level,m_score;
手动添加一个voidSetWriteFlg(BOOLbflg);
函数,用于写如英雄榜,添加重写型OnInitDialog()和DoModal(),添加消息响应函数OnPaint(),再手动添加一个BOOLm_bWriteflg,用于判断是否是写入英雄榜,在构造函数中初始化为m_bWriteflg=FALSE;
接下来添加类
第一个类名为“CManager”,用于管理整个游戏区,第二个类是“CBlock”,用于画游戏障碍物,也就是已经落下的俄罗斯方块;
第三个类是“CMill”,是“工场”是用于产生和画出下一个将要下落的方块,第四个类是“CPanel”,用于在游戏区域画游戏区和得分区,第五个类是“Diamond”,用于下落的方块。
CManager:
voidDrawScene();
//画整个界面
voidOnTimer(UINT&
voidOnKeyDown(UINT&
voidOnKeyUp(UINT?
&
?
boolWhetherLoss();
//判断游戏是否结束
voidSetFree();
//重新开始
voidHeroWrite();
private:
voidPassLevel();
//升级
boolKeyLeft,KeyDown,KeyRight,KeySpace;
//几个游戏操作
public:
CRectClientRect;
//客户区矩形
UINTTimer1;
//为什么要设两个时钟?
一个用来控制左右移动的速度,一个用来控制下落的速度
UINTTimer2;
//是下落的速度
UINTFallTimer;
intLevel;
//等级
intResult;
//得分
intm_nHighScore;
//当前游戏最高分
intm_nHighLevel;
//当前游戏最高级?
intLineNumber;
//消灭的总行数
intSeriesLine;
//每一次消灭的行数
boolSound;
//音效
CStringName;
//玩家名字
};
//定义的方块的7种类型
constintDIAMONDCAKE=0;
constintDIAMONDHOOK=1;
constintDIAMONDSEVEN=2;
constintDIAMONDHEAVE=3;
constintDIAMONDBAR=4;
constintDIAMONDTWO=5;
constintDIAMONDSPADE=6;
CDiamond:
classCDiamond
{
CDiamond();
virtual~CDiamond();
boolMoveDiamondLeft();
boolMoveDiamondRight();
boolMoveDiamondDown();
boolRollDiamond();
voidDrawDiamond(CDC*pDC);
private:
voidDimDiamond();
//初始化方块的类型,状态
boolDiamondStruct[7][4][4][4];
POINTDiamondPos;
COLORREFDiamondColor;
intDiamondType;
intDiamondState;
boolFullLine();
booloverlap();
//判断左边,右边或者到到底下了
};
CBlock:
classCBlock{
CBlock();
virtual~CBlock();
CMill:
class
CMill{
CMill();
virtual~CMill();
voidMadeDiamond();
voidDrawPrepare(CDC*pDC);
intPreDiamondType;
//7种方块类型
intPreDiamondState;
RECTMillRect;
//铲子
CPanel:
CPanel{
CPanel();
virtual~CPanel();
voidDrawPanel(CDC*pDC);
voidPanelPosToPos(POINT&
voidPosToPanelPos(POINT&
RECTPanelRect;
//输出得分的矩形
功能测试
1.进入游戏,输入姓名并选择难度
2.图形的变换
3.图形的移动
4.载入游戏,保存游戏,重新开始,关闭游戏
5.游戏设置
6.游戏规则
7.排行榜
8游戏结束
实验小结
(出现问题,解决方案,收获和体会,不少于300字)
附:
完成的代码
(打印版无需此部分,电子版报告必须包括此部分,要求代码具有良好的编程规范和适当注释)