背景
else
russia.DrawJiemian(pDC);
}
开始时我们是设start为假,它就会在OnDraw()函数中画封面,而当我们开始游戏,start为真,那么,它干什么呢?画背景!其函数如下:
界面函数:
还是那个道理,当有一些客户区生效(被挡住或最小化)时,它必须重画,而如果游戏只是玩了一半,它必然在重画时必须把原先已经出现的方块、分数等也显示出来,怎么办?就必须在画封面的同时也画出它们。当然,刚开始时它们是不会符合条件的。
void CRussia::DrawJiemian(CDC*pDC)
{
CDC Dc;
if(Dc.CreateCompatibleDC(pDC)==FALSE)
AfxMessageBox("Can't create DC");
//画背景
Dc.SelectObject(jiemian);
pDC->BitBlt(0,0,500,550,&;Dc,0,0,SRCCOPY);
//画分数,
速度,难度
DrawScore(pDC);
//如果有方块,显示方块
//游戏区
for(int i=0;i
for(int j=0;j if(Russia[i][j]==1)
{
Dc.SelectObject(fangkuai);
pDC->BitBlt(j*30,i*30,30,30,&;Dc,0,0,SRCCOPY);
}
//预先图形方块
for(int n=0;n<4;n++)
for(int m=0;m<4;m++)
if(Will[n][m]==1)
{
Dc.SelectObject(fangkuai);
pDC->BitBlt(365+m*30,240+n*30,30,30,&;Dc,0,0,SRCCOPY);
}
}
信息函数:
其中还涉及另外一个函数DrawScore(pDC),它是画分数、速度、难度(本程序省略)的。由于它的代码不是太少,另外用了一个函数,这样有利于理解。
void CRussia::DrawScore(CDC*pDC)
{
int nOldDC=pDC->SaveDC();
//设置字体
CFont font;
if(0==font.CreatePointFont(300,"Comic Sans MS"))
{
AfxMessageBox("Can't Create Font");
}
pDC->SelectObject(&;font);
//设置字体颜色及其背景颜色
CString str;
pDC->SetTextColor(RGB(39,244,10));
pDC->SetBkColor(RGB(255,255,0));
//输出数字
str.Format("%d",m_Level);
if(m_Level>=0)
pDC->TextOut(440,120,str);
str.Format("%d",m_Speed);
if(m_Speed>=0)
pDC->TextOut(440,64,str);
str.Format("%d",m_Score);
if(m_Score>=0)
pDC->TextOut(440,2,str);
pDC->RestoreDC(nOldDC);
}
至此,可以看的都画完了。程序一般都是会先处理图形界面,因为这样在编核心内容时能够让人有一个检查的机会。
菜单开始函数:
现在,游戏总该开始了吧。添加菜单开始函数:ID_MENU_START
其函数如下:
void CMy4_1View::OnMenuStart()
{
// TODO: Add your command handler code here
start=true;
russia.Start();
SetTimer(1,50*(11-ru