一、游戏的概述
移动“球板”来驱动“小球”碰撞“砖块”。
游戏进行中采用幂函数积分,Y2。玩家将体验量变和质变的过程。
x二、游戏的元素
“玩家”、“小球”、“球板”、“砖块”、“Level”、“对白”、“积分”、“Timer”
由此设计的类图:
三、游戏的机制
1、积分规则:
一个回合之内,“小球”碰撞第1个“砖块”得1分,再碰撞第2个“砖块”得2分,第3个“砖块”得3分,第4
个得8分,以此类推……,当积分超过一亿时,“小球”的个数加“1”。
m_iDestoryOnce++; // 碰撞到“砖块”,即“++”
m_iDestoryOnce =0; // 一个回合结束,碰撞到“球板”
m_dwScore +=pow( (int)2,(float)m_iDestoryOnce -1 );
if ( m_dwScore >=100000000 )
{
if( m_bIsStart ==TRUE )
::SendMessage( m_hWnd, WM_KEYDOWN, VK_SPACE, NULL );
char str[128];
sprintf_s( str, \"积分 “Score = %d”过亿。\\n\\n %d 亿+ +\", m_dwScore, m_dwHundredMillion );
MessageBox( str, \"恭喜 恭喜\" );
m_dwScore =m_dwScore %100000000;
int add =m_dwScore /100000000;
m_ball.m_iCounter +=add;
m_dwHundredMillion +=add;
m_iDestoryOnce =0;
}
CString strScore;
strScore.Format( \" Score : %d + %d 亿\" ,m_dwScore, m_dwHundredMillion );
( ( CMainFrame* )GetParent() )->m_wndStatusBar.SetPaneText( 2, strScore );
2、玩家
开始游戏时玩家有3个“小球”,积分为“0”。玩家应当维护“小球”的数量,因为当“小球”为“0”时,就游戏结束了。
3、Level(关卡)
关卡一个10个,Lv 1到Lv 10。
4、Timer(时间)
每一关开始时Timer =99。玩家应当在99秒内打破所有“砖块”。Timer 为“0”时,游戏结束。
/* 1,000(毫秒)= 1(秒)
m_dwTimer(定时器)初始为“99,000”(毫秒)*/
m_dwTimer =99000;
/* DWORD WINAPI GetTickCount(void);
取得Windows 从启动开始经过的时间,单位为毫秒 */
if (m_bIsStart ==FALSE) // 启动游戏
{
SetTimer(1,10,NULL); // 设置“触发器1”,每隔“10”毫秒触发一次 OnTimer() 函数
m_dwStartTime =::GetTickCount(); // 设置开始的时间
m_dwEndTime =m_dwStartTime +m_dwTimer; // 计算结束的时间
m_bIsStart =TRUE; // 游戏当前状态为“启动”
}
else // 暂停游戏
{
KillTimer(1); // 关闭“触发器1”
m_dwCurTime =::GetTickCount(); // 设置当前时间
DWORD stepTime;
stepTime =m_dwCurTime -m_dwStartTime; // 计算 “计时器1”if( stepTime <=m_dwTimer ) // 确保定时器的值大于“0”
m_dwTimer -=stepTime; // 更新m_dwTimer(定时器)
else
{
MessageBox(\"Timer Out!\");
m_dwTimer =99000;
}
m_bIsStart =FALSE; // 游戏当前状态为“暂停”
的运行时间
}
void Cmfc_PlayBallView::OnTimer(UINT_PTR nIDEvent)
{
m_dwCurTime =::GetTickCount(); // 设置当前时间
CString strTimer;
strTimer.Format(\" Timer : %2d\",( m_dwTimer – ( m_dwCurTime - m_dwStartTime ) )/1000 );
((CMainFrame*)GetParent())->m_wndStatusBar.SetPaneText(4,strTimer);
}
因篇幅问题不能全部显示,请点此查看更多更全内容