?? control.cpp
字號:
/*********************************************
程序設計:羅穆峰 2008-11-20
http://lmf.biaotian.com
E-mail: lmf@biaotian.com
QQ: 16324942 [模范英雄]
*********************************************/
#include "Control.h"
void CControl::Clock()
{
/*
執行一次時序信號動作。
*/
//使游戲動作一次
m_pGame->Clock();
//刷新圖像顯示
m_pGraphMan->Update();
}
void CControl::SetGraph(CGraphMan *Graph)
{
/*
設置圖像處理對象。
參數:
[i]Game 將要受CControl控制的CGraphMan對象。
*/
m_pGraphMan=Graph;
}
void CControl::KeyChanged(int KeyState)
{
/*
按鍵狀態發生改變。
參數:
[i]KeyState 按鈕狀態,是一個位段值。相應的位值為1,表式該鍵是按下狀態,為0表示該鍵是彈起狀態。
從最低位開始,各位依次表示如下按鍵:上方向、下方向、左方向、右方向、跳躍鍵、發射鍵、開始鍵。
*/
if(!(m_LastKeyState&(1<<6))&&(KeyState&(1<<6)))
{//上次沒按下開始鍵,這次按下了,則開始游戲
m_pGame->Start();
}
if(!(KeyState&0xf)&&(m_LastKeyState&0xf))
{//上次有方向鍵被按下,這次沒有,則停止移動
m_pGame->Move(0,false);
}
else
{
bool Acc=(KeyState&(1<<5))!=0;//按了發射鍵,則加速移動
bool AccChanged=(KeyState&(1<<5))!=(m_LastKeyState&(1<<5));//加速鍵的狀態和上次不同,則表示加速狀態有改變
if((KeyState&(1<<0))&&(!(m_LastKeyState&(1<<0))||AccChanged))
{//這次按下了向上鍵,而上次沒按下或者加速狀態改變,則向上移動
m_pGame->Move(1,Acc);
}
else if((KeyState&(1<<1))&&(!(m_LastKeyState&(1<<1))||AccChanged))
{//這次按下了向下鍵,而上次沒按下或者加速狀態改變,則向下移動
m_pGame->Move(2,Acc);
}
else if((KeyState&(1<<2))&&(!(m_LastKeyState&(1<<2))||AccChanged))
{//這次按下了向左鍵,而上次沒按下或者加速狀態改變,則向左移動
m_pGame->Move(3,Acc);
}
else if((KeyState&(1<<3))&&(!(m_LastKeyState&(1<<3))||AccChanged))
{//這次按下了向右鍵,而上次沒按下或者加速狀態改變,則向右移動
m_pGame->Move(4,Acc);
}
}
if(!(m_LastKeyState&(1<<4))&&(KeyState&(1<<4)))
{//上次沒按下跳躍鍵,這次按下了,則跳躍一次
m_pGame->Jump();
}
if(!(m_LastKeyState&(1<<5))&&(KeyState&(1<<5)))
{//上次沒按下發射鍵,這次按下了,則發射一次
m_pGame->Fire();
}
m_LastKeyState=KeyState;
}
void CControl::SetGame(CGame *Game)
{
/*
設置游戲對象。
參數:
[i]Game 將要受CControl控制的CGame對象。
*/
m_pGame=Game;
}
CControl::CControl()
{
m_LastKeyState=0;//最開始時沒有任何鍵按下
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -