📄 game.java
字号:
m_iMoveMomentum = 2;
break;
case Canvas.KEY_NUM7 :
m_iDownLeft = 3;
m_iMoveMomentum = 2;
break;
case Canvas.KEY_NUM9 :
m_iDownRight = 3;
m_iMoveMomentum = 2;
break;
case Canvas.KEY_NUM5 :
m_pUserPlayer.Action1();
break;
case Canvas.KEY_NUM0 :
if(m_pUserPlayer.GetHasBall())
m_pUserPlayer.Action2();
else
SwitchUserPlayers();
break;
case Canvas.KEY_POUND :
ClrInput();
if(ChkOBPlay(m_iUserTeamIndex)== false)
{
m_iPositionTextTimer = 6000;
SetTeamPositionText(m_iUserTeamIndex, true);
if(m_pUserPlayer.GetHasBall())
CreateOverlay(40);
else
CreateOverlay(41);
}
return 1;
case Canvas.KEY_STAR :
if(m_iPositionTextTimer > 0)
{
m_bTogglePositionIcons = false;
m_iPositionTextTimer = 0;
}
else
m_bTogglePositionIcons = !m_bTogglePositionIcons;
SetTeamPositionText(m_iUserTeamIndex, m_bTogglePositionIcons);
return 1;
default :
break;
}
if(!ChkDblTapDown(param1))
ChkDblTapDown(param2);
return 1;
case 0x0202 :
switch(param1)
{
case Canvas.LEFT :
m_iLeft &= ~2;
break;
case Canvas.RIGHT :
m_iRight &= ~2;
break;
case Canvas.UP :
m_iUp &= ~2;
break;
case Canvas.DOWN :
m_iDown &= ~2;
break;
default :
break;
}
switch(param2)
{
case Canvas.KEY_NUM4 :
m_iLeft &= ~2;
break;
case Canvas.KEY_NUM6 :
m_iRight &= ~2;
break;
case Canvas.KEY_NUM2 :
m_iUp &= ~2;
break;
case Canvas.KEY_NUM8 :
m_iDown &= ~2;
break;
case Canvas.KEY_NUM3 :
m_iUpRight &= ~2;
break;
case Canvas.KEY_NUM1 :
m_iUpLeft &= ~2;
break;
case Canvas.KEY_NUM7 :
m_iDownLeft &= ~2;
break;
case Canvas.KEY_NUM9 :
m_iDownRight &= ~2;
break;
default :
break;
}
ChkDblTapUp(param1, param2);
return 1;
}
return super.message(msg, param1, param2);
}
boolean ChkDblTapDown(int param1)
{
if(m_iDblTapTime > 0 && m_iDblTapDir == param1 && m_iDblTap == 2)
{
m_iDblTap = 3;
}
else
{
switch(param1)
{
case Canvas.KEY_NUM4 :
case Canvas.LEFT :
case Canvas.KEY_NUM6 :
case Canvas.RIGHT :
case Canvas.KEY_NUM2 :
case Canvas.UP :
case Canvas.KEY_NUM8 :
case Canvas.DOWN :
case Canvas.KEY_NUM3 :
case Canvas.KEY_NUM1 :
case Canvas.KEY_NUM7 :
case Canvas.KEY_NUM9 :
break;
default :
return false;
}
m_iDblTap = 1;
m_iDblTapTime = 500;
m_iDblTapDir = param1;
}
return true;
}
void ChkDblTapUp(int param1, int param2)
{
if(m_iDblTapTime > 0 && m_iDblTap == 1 &&(m_iDblTapDir == param1 || m_iDblTapDir == param2))
{
m_iDblTap = 2;
}
else
{
m_iDblTap = 0;
m_iDblTapTime = 0;
m_iDblTapDir = 0;
}
}
private void AcknowledgeInput()
{
if(m_pUserPlayer.GetAnimLock())
{
return;
}
if(m_iDblTap == 3 && m_pUserPlayer.GetHasBall()== true && m_pUserPlayer.ChkUserLockPlay()== false)
{
m_pUserPlayer.SetDir(GetKeyDir(m_iDblTapDir), true);
m_pUserPlayer.AttemptJuke();
m_iDblTap = 0;
m_iDblTapTime = 0;
m_iDblTapDir = 0;
return;
}
boolean bMove = false;
if(m_iLeft > 0)
{
m_pUserPlayer.SetDir(0, true);
m_iLeft &= ~1;
bMove = true;
}
if(m_iUpLeft > 0)
{
m_pUserPlayer.SetDir(1, true);
m_iUpLeft &= ~1;
bMove = true;
}
if(m_iUp > 0)
{
m_pUserPlayer.SetDir(2, true);
m_iUp &= ~1;
bMove = true;
}
if(m_iUpRight > 0)
{
m_pUserPlayer.SetDir(3, true);
m_iUpRight &= ~1;
bMove = true;
}
if(m_iRight > 0)
{
m_pUserPlayer.SetDir(4, true);
m_iRight &= ~1;
bMove = true;
}
if(m_iDownRight > 0)
{
m_pUserPlayer.SetDir(5, true);
m_iDownRight &= ~1;
bMove = true;
}
if(m_iDown > 0)
{
m_pUserPlayer.SetDir(6, true);
m_iDown &= ~1;
bMove = true;
}
if(m_iDownLeft > 0)
{
m_pUserPlayer.SetDir(7, true);
m_iDownLeft &= ~1;
bMove = true;
}
if((m_iMoveMomentum > 0 || bMove == true)&& m_pUserPlayer.ChkUserLockPlay()== false)
{
m_pUserPlayer.SetAnimState(1);
}
m_iMoveMomentum =(m_iMoveMomentum > 0)? m_iMoveMomentum - 1 : 0;
}
private void SwitchUserPlayers()
{
int iBallState = GetState();
switch(iBallState)
{
case 0 :
default :
m_pUserPlayer.SetUser(false);
m_pUserPlayer = GetPlayerBetweenBallAndBasket(GetTeamOffset(m_iUserTeamIndex), m_pUserPlayer);
m_pUserPlayer.SetUser(true);
break;
}
}
Player GetPlayerBetweenBallAndBasket(int iTeamOffset, Player pUserPlayer)
{
int iPlayersBack = 0;
Player pPlayersBack[]= new Player[4];
int fBallX = GetPosX();
int fBallY = GetPosY();
for(int i = 0; i < 5; i++)
{
if(m_pPlayers[iTeamOffset + i]!= pUserPlayer && m_pPlayers[iTeamOffset + i].GetPosY()* m_iOffenseDir > fBallY * m_iOffenseDir)
{
pPlayersBack[iPlayersBack]= m_pPlayers[iTeamOffset + i];
iPlayersBack++;
}
}
Player pClosestBack = pUserPlayer.CalcClosestTeamMateAI(false, 0, fBallX, fBallY);
int iShortestDist = 100000;
for(int j = 0; j < iPlayersBack; j++)
{
int iDistX =(pPlayersBack[j].GetPosX()- fBallX)>> 10;
int iDistY =(pPlayersBack[j].GetPosY()- fBallY)>> 10;
int iDist =(iDistX * iDistX)+(iDistY * iDistY);
if(iDist < iShortestDist)
{
pClosestBack = pPlayersBack[j];
iShortestDist = iDist;
}
}
return pClosestBack;
}
private int GetOffenseTeam(int iOffenseDir)
{
if(GetTeamOffenseDir(m_iHomeTeamIndex)== iOffenseDir)
{
return m_iHomeTeamIndex;
}
else
{
return m_iAwayTeamIndex;
}
}
private void SortObjsY()
{
int i, j, k;
for(i = 1; i < 17; i++)
{
k = m_pDrawOrder[i];
j = i;
while((j > 0)&&(m_pObjList[m_pDrawOrder[j - 1]].GetWorldY()<= m_pObjList[k].GetWorldY()))
{
if(m_pObjList[m_pDrawOrder[j - 1]].GetWorldY()== m_pObjList[k].GetWorldY())
{
SortObjsType(j - 1, k);
}
m_pDrawOrder[j]= m_pDrawOrder[j - 1];
j = j - 1;
}
m_pDrawOrder[j]= k;
}
}
private void SortObjsType(int iObjA, int iObjB)
{
int iTypeA = m_pObjList[m_pDrawOrder[iObjA]].GetType();
int iTypeB = m_pObjList[m_pDrawOrder[iObjB]].GetType();
}
public void SetCommentary(String pMsg)
{
if(pMsg == null)
{
m_iCommentaryTime = 0;
return;
}
m_pCommentaryMsg = pMsg;
m_iCommentaryTime = 2000;
Graphics g = m_pImgCommentary.getGraphics();
int iDestX = 176 * 2;
int idesty = 10;
int iPosX = 0;
int iPosY = 0;
g.setClip(0, 0, m_pImgCommentary.getWidth(), m_pImgCommentary.getHeight());
g.setColor(0x000000);
g.fillRect(0, 0, m_pImgCommentary.getWidth(), m_pImgCommentary.getHeight());
if(m_pFont.getStringWidth(m_pCommentaryMsg, - 1)> 176)
{
m_pFont.stringChar(g, 0, iPosY + 1, m_pCommentaryMsg, - 1, 0);
m_bCenterCommentary = false;
}
else
{
iPosX = 176 / 2;
m_pFont.stringChar(g, iPosX, iPosY + 1, m_pCommentaryMsg, - 1, 0x02);
m_bCenterCommentary = true;
}
}
int uCount = 10;
int gcCount = 0;
void update(int time, int freq)
{
if(m_bReady == false || m_bPause == true)
return;
Basketball.bUpdate = false;
int iTime = time;
if(iTime >(125 + 25))
iTime =(125 + 25);
if(m_iTippOffDelay > 0)
{
updateTippOff(iTime);
}
else
{
updatePlayers(iTime);
ChkTurnOvers();
updateBall(iTime);
updateGameCourt(iTime);
updateBackBoard(iTime);
if(updateClock(iTime)== true)
return;
updateUser();
updateCommentary(iTime);
}
AcknowledgeInput();
}
void updateTippOff(int iDeltaT)
{
m_iTippOffDelay -= iDeltaT;
String pTmp;
pTmp = "倒计时: " + m_iTippOffDelay / 1000;
SetCommentary(pTmp);
updateGameCourt(iDeltaT);
updateCommentary(iDeltaT);
for(int i = 0; i < 10; i++)
{
m_pPlayers[i].PostUpdate();
m_pPlayers[i].FaceDir(0, 0, true);
m_pPlayers[i].SetReboundBall(false);
}
ClrInput();
}
void updateUser()
{
if(GetControlTeam()== m_iUserTeamIndex && GetState()== 3)
{
m_pUserPlayer.SetUser(false);
m_pUserPlayer = GetControlPlayer();
m_pUserPlayer.SetUser(true);
}
updateOffscreenIndicators();
}
void updateGameCourt(int iDeltaT)
{
switch(GetState())
{
case 3 :
SetFocusOn(GetControlPlayer().GetObj());
break;
case 2 :
case 8 :
case 4 :
case 0 :
case 1 :
case 6 :
case 7 :
default :
SetFocusOn(GetObj());
SetCameraState(2);
break;
}
UpdateCourt(iDeltaT);
}
void updateBall(int iDeltaT)
{
update(iDeltaT);
m_bBallOB = false;
if(GetPosY()* m_iOffenseDir < 0)
{
if(m_bBallBackCourt == false)
DoAfterBackCourtViolation();
}
else
{
if(GetState()== 3 && m_iOffenseTeamIndex != - 99 && ChkOBPlay(m_iOffenseTeamIndex)== false)
m_bBallBackCourt = false;
}
if(m_bInbounds == false)
{
DoResetShotClock();
m_bBallOB = true;
if(m_iOffenseTeamIndex == - 99 || ChkOBPlay(m_iOffenseTeamIndex)== false)
{
DoAfterOB();
return;
}
}
ChkCrowdRoar();
if(GetState()== 1 || GetState()== 7)
{
m_bBallBackCourt = true;
CalcRebounders();
CalcRebound();
}
m_iOffenseTeamIndex = GetControlTeam();
m_iOffenseDir =(m_iOffenseTeamIndex != - 99)? GetTeamOffenseDir(m_iOffenseTeamIndex): 0;
SetCameraDir(m_iOffenseDir);
}
boolean ChkCrowdRoar()
{
if(GetState()== 5)
{
if(m_iOffenseTeamIndex == m_iAwayTeamIndex)
{
if(m_bPlayCrowd == true)
{
int iScoreDif = Basketball.ABS(GetTotalScore(m_iHomeTeamIndex)- GetTotalScore(m_iAwayTeamIndex));
if(m_iQtrTime > 120000)
iScoreDif += 15;
if(GetSpecialShot()|| iScoreDif <= 3)
{
return true;
}
}
}
}
m_bPlayCrowd = false;
return false;
}
boolean ChkInbndClockCondition()
{
if(m_bBallOB && GetState()== 3)
return true;
return false;
}
boolean ChkHfcrtClockCondition()
{
if(m_bBallBackCourt == true && m_bBallOB == false && GetState()== 3 && ChkOBPlay(m_iOffenseTeamIndex)== false)
return true;
return false;
}
boolean ChkShtClockCondition()
{
if(m_iOffenseTeamIndex != - 99 && ChkOBPlay(m_iOffenseTeamIndex)== false)
return true;
return false;
}
boolean ChkGameClockCondition()
{
if(m_iOffenseTeamIndex != - 99 && ChkOBPlay(m_iOffenseTeamIndex)== true)
{
if(m_iClockState == 1 || m_iQtrTime < 120000)
{
return false;
}
}
return true;
}
void DecrementClock(int iDeltaT, boolean bQtrNotOver)
{
m_iQtrTime -= iDeltaT;
m_iPositionTextTimer -=(m_iPositionTextTimer > 0)? iDeltaT : 0;
if(m_iPositionTextTimer <= 0)
{
if(m_bTogglePositionIcons == false)
SetTeamPositionText(m_iUserTeamIndex, false);
m_iPositionTextTimer = 0;
}
if(bQtrNotOver && m_iQtrTime < 750)
{
/*if(Basketball.GetState()!= 0x0001)
Basketball.Play(m_pSndHorn, 0);*/
}
}
boolean updateClock(int iDeltaT)
{
boolean bQtrNotOver =(m_iQtrTime > 0)? true : false;
if(ChkGameClockCondition()== true)
{
m_iQtrTime -= iDeltaT;
m_iPositionTextTimer -=(m_iPositionTextTimer > 0)? iDeltaT : 0;
if(m_iPositionTextTimer < 0)
{
if(m_bTogglePositionIcons == false)
SetTeamPositionText(m_iUserTeamIndex, false);
m_iPositionTextTimer = 0;
}
if(bQtrNotOver == true && m_iQtrTime < 750)
{
}
}
m_iDblTapTime -= iDeltaT;
int iSecs =(m_iQtrTime % 60000)/ 1000;
if(m_iQtrSecs != iSecs)
{
m_iQtrSecs = iSecs;
m_iPaintFlags |= 0x04;
}
m_iShotSecs -=(ChkShtClockCondition())? iDeltaT : 0;
m_iBkCrtSecs -=(ChkHfcrtClockCondition())? iDeltaT : 0;
m_iInbndSecs -=(ChkInbndClockCondition())? iDeltaT : 0;
m_iLaneSecs -= iDeltaT;
iSecs = m_iShotSecs / 1000;
if(iSecs < 0)
iSecs = 0;
String pTmp;
if(m_iShotSecs < m_iQtrTime)
pTmp = "" +(iSecs / 10)+(iSecs % 10);
else
pTmp = " ";
m_pObjList[16].SetText(pTmp, false);
m_pObjList[15].SetText(pTmp, false);
ChkInbndClock();
ChkBkCrtClock();
ChkShotClock();
if(ChkGameClock()== true)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -