C课程设计打砖块游戏.doc
文本预览下载声明
MFC课程设计说明书
●设计题目: 打砖块游戏
●所属系部: 计算机工程系
●专 业: 计算机科学与技术
●学 号: XXXX XXX
●姓 名: XXXX
●指导教师: XXXX
●设计日期: 12-26
设计任务
任务描述
使用MFC框架设计一个打砖块游戏。在客户区内显示砖块分布,小球和托盘。按空格键开始游戏,Esc键结束游戏。开始游戏小球可以跳起来打砖块,移动鼠标实现托盘的移动,打到的砖块消失。如果托盘没有接到小球,那么生命值减一,共有三次生命,生命都用完时,可以继续或结束。
设计要求
自定义屏幕二维坐标系:x轴水平向右为正,y轴垂直向上为正,坐标系原点位于客户区中心。
新加上两个类Brick类和Baffle类,分别用来定义并绘制砖块和托盘。
使用定时器函数控制小球的运动。
使用双缓冲技术实现动画。
在TestView类中实现砖块的分布
添加函数实现小球各种的碰撞速度大小和方向的改变。
添加函数实现鼠标移动控制托盘。
效果图
设计效果图如图1所示。
图1 小球打砖块效果图
设计思路
本设计首先构建双缓冲框架,小球和砖块、客户区边界发生碰撞后,改变运动方向。设置游戏关卡并绘制砖块分布。鼠标移动控制托盘。托盘没有接住小球,生命值则减一。游戏结束时显示对话框以便继续或退出游戏。
关键源代码及注释
3.1 关于窗口外观设计的代码:
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
SetMenu(NULL);//去掉菜单栏
CMenu* p=GetSystemMenu(FALSE);
p-RemoveMenu(SC_SIZE,MF_BYCOMMAND);//禁止改变窗口大小
return 0;
}
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT cs)
{
if( !CFrameWnd::PreCreateWindow(cs) )
return FALSE;
the CREATESTRUCT cs
cs.style =~(WS_MAXIMIZEBOX); //过滤最大化
cs.x = 100;
cs.y = 100;
cs.cx = 809;
cs.cy = 610;
return TRUE;
}
3.2 Baffle类中的各种定义
CBaffle::CBaffle(double x,double y,double w,double h,double s)
{
m_XPos=x,m_YPos=y;
m_Width=w,m_Height=h,m_HalfW=w/2.0,m_HalfH=h/2.0;
m_Speed=s,m_PreXPos=x;
}
void CBaffle::SetPositionX(double x)//设置x方向位置
{
m_PreXPos=m_XPos;
m_XPos=x;
}
void CBaffle::SetPositionY(double y)//设置y方向位置
{
m_YPos=y;
}
void CBaffle::SetWidth(double w)//设置宽度
{
m_Width=w;
m_HalfW=w/2.0;
}
void CBaffle::SetHeight(double h)//设置高度
{
m_Height=h;
m_HalfH=h/2.0;
}
void CBaffle::CalculateSpeed()//速度计算
{
m_Speed=(m_XPos-m_PreXPos);
}
void CBaffle::DrawBaffle(CDC* pDC)//绘制托盘
{
CDC MemDC;
MemDC.CreateCompatibleDC(pDC);
CBitmap NewBitmap,*pOldBitmap;
NewBitmap.LoadBitmap(IDB_BAFFLE);
pOldBitmap=MemDC.SelectObject(NewBitmap);
pDC-BitBlt(int(m_XPos-m_HalfW),int(m_YPos-m_HalfH+2),int(m_Width),int(m_Hei
显示全部