📄 game.java
字号:
for(int i = 0; i < 4; i++)
{
for(int j = 0; j < 4; j++)
{
pTeamRemaps[((i + 0)* 4)+ j]= Basketball.pAwayRemaps[0][i][j];
pTeamRemaps[((i + 4)* 4)+ j]= Basketball.pHomeRemaps[0][i][j];
}
}
for(int l = 0; l < 4; l++)
{
pTeamRemaps[8 * 4 + l]= Basketball.pAwayRemaps[0][2][l];
pTeamRemaps[9 * 4 + l]= Basketball.pAwayRemaps[0][0][l];
pTeamRemaps[10 * 4 + l]= Basketball.pAwayRemaps[0][0][l];
}
for(int k = 0; k < 2; k++)
{
for(int clr = 0; clr < 3; clr++)
{
int tc =((int)pTeamRemaps[8 + k + clr])& 0xFF;
tc += 25;
if(tc > 255)
tc = 255;
pTeamRemaps[8 * 4 + k + clr]=(byte)tc;
}
}
for(int m = 0; m < 2; m++)
{
for(int clr = 0; clr < 3; clr++)
{
int tc =((int)pTeamRemaps[8 + m + clr])& 0xFF;
tc -= 25;
if(tc < 0)
tc = 0;
pTeamRemaps[8 * 4 + m + clr]=(byte)tc;
}
}
pTeamRemaps[0 * 4 + 0]=(byte)192;
pTeamRemaps[1 * 4 + 0]=(byte)1;
pTeamRemaps[2 * 4 + 0]=(byte)212;
pTeamRemaps[3 * 4 + 0]=(byte)194;
pTeamRemaps[4 * 4 + 0]=(byte)79;
pTeamRemaps[5 * 4 + 0]=(byte)78;
pTeamRemaps[6 * 4 + 0]=(byte)207;
pTeamRemaps[7 * 4 + 0]=(byte)111;
pTeamRemaps[8 * 4 + 0]=(byte)3;
pTeamRemaps[9 * 4 + 0]=(byte)2;
pTeamRemaps[10 * 4 + 0]=(byte)35;
{
if(m_pCourtImgL == null){
pTmpPng = new png("/fullcourtl.png", pTeamRemaps, 11);
m_pCourtImgL = pTmpPng.getImage();
pTmpPng = null;
}
if(m_pCourtImgR == null){
pTmpPng = new png("/fullcourtr.png", pTeamRemaps, 11);
m_pCourtImgR = pTmpPng.getImage();
pTmpPng = null;
}
}
if(m_pCourtImgL != null)
m_bCourtReady = true;
return true;
}
private void UnLoadCourtRes()
{
m_bCourtReady = false;
}
private void Render(Graphics g)
{
if(m_bCourtReady == false)
return;
int iPosX = -m_iOffsetX;
int iPosY = 11 - m_iOffsetY;
int iDestX = 24;
g.setClip(0,(11 - 2), 176,((208 -(11 - 2))-((Basketball.hGameWnd.m_iCommentaryTime > 0)? 10 : 0)));
g.drawImage(m_pCourtImgL, iPosX, iPosY - 48, 0);
g.drawImage(m_pCourtImgR, iPosX + 216, iPosY - 48, 0);
}
private void UpdateCourt(int iDeltaT)
{
int iFocusX = m_pFocusObj.GetPosX();
int iFocusY = m_pFocusObj.GetPosYNoZ();
int iBiasX =(m_iCameraDir * 90)- iFocusX;
int iBiasY =(m_iCameraDir * 25)- iFocusY;
iFocusX +=(Basketball.ABS(iBiasX)< 40)? iBiasX :(iBiasX > 0)? 40 : -40;
iFocusY -=(Basketball.ABS(iBiasY)< 60)? iBiasY :(iBiasY > 0)? 60 : -60;
if(m_iCameraState == 0)
{
m_iCameraX = iFocusX;
m_iCameraY = iFocusY - m_iCameraX / 5 * m_iCameraDir;
}
else if(m_iCameraState == 2)
{
int iDist =(m_iCameraX * m_iCameraX)+(m_iCameraY * m_iCameraY);
if(iDist < 500)
m_iCameraState = 0;
m_iCameraX =(((3 * m_iCameraX)+ iFocusX)/ 4);
m_iCameraY =(((3 * m_iCameraY)+ iFocusY)/ 4);
}
m_iOffsetX =((432 - 176)/ 2)+ m_iCameraX;
m_iOffsetY =((144 -(208 - 11))/ 2)+ m_iCameraY;
if(m_iOffsetX < 0)
m_iOffsetX = 0;
if(m_iOffsetX > 432 - 176)
m_iOffsetX = 432 - 176;
if(m_iOffsetY >(144 - 208)+ 11)
m_iOffsetY =(144 - 208)+ 11;
if(m_iOffsetY < - 36)
m_iOffsetY = - 36;
}
private void SetFocusOn(RenderObj pFocusObj)
{
m_pFocusObj = pFocusObj;
}
private void SetCameraState(int iState)
{
m_iCameraState = iState;
}
private void SetCameraDir(int iDir)
{
if(m_iCameraDir != iDir)
{
m_iCameraDir = iDir;
m_iCameraState = 2;
}
}
private int GetOffsetX()
{
return m_iOffsetX;
}
private int GetOffsetY()
{
return m_iOffsetY;
}
private boolean m_bShotGood;
private boolean m_bInbounds;
private boolean m_bSpecialShot;
private boolean m_bResetShotClock;
private int m_iShotVal;
private int m_iState;
private int m_fOutboundPos[];
private int m_fNextBouncePos[];
private int m_fPos[];
private int m_fVel[];
// public javax.microedition.media.Player m_pSndBrick;
// private javax.microedition.media.Player m_pSndSwish;
private RenderObj m_pBallObj;
private Player m_pPlayerLastTouch;
private Player m_pControlPlayer;
private int m_iControlTeam;
private int m_iLastKnownControlTeam;
public void Ball()
{
m_pBallObj = new RenderObj();
m_pBallObj.SetFrame(52, 0, 5, 5, 5 / 2, 5 / 2, 0);
// m_pSndSwish = Basketball.LoadSnd("/swish.wav", "audio/x-wav");
// m_pSndBrick = Basketball.LoadSnd("/brick.wav", "audio/x-wav");
m_fOutboundPos = new int[2];
m_fNextBouncePos = new int[2];
m_fPos = new int[3];
m_fVel = new int[3];
m_fPos[0]= 0;
m_fPos[1]= 0;
m_fPos[2]= 0;
m_iState = 0;
m_bInbounds = true;
m_bSpecialShot = false;
m_bResetShotClock = false;
}
private void SetBallImg(Image pObjImg, Image pIconImg)
{
m_pBallObj.SetImg(pObjImg, pIconImg);
}
int GetState()
{
return m_iState;
}
void TouchBall(Player pPlayer)
{
m_pPlayerLastTouch = pPlayer;
}
void SetVelocity(int fVelX, int fVelY, int fVelZ)
{
m_fVel[0]= fVelX;
m_fVel[1]= fVelY;
m_fVel[2]= fVelZ;
}
void SetPosition(int fPosX, int fPosY, int fPosZ)
{
m_fPos[0]= fPosX;
m_fPos[1]= fPosY;
m_fPos[2]= fPosZ;
}
void SetController(Player pPlayer)
{
if(pPlayer != null)
{
m_iState = 3;
m_iControlTeam = pPlayer.GetTeam();
}
m_pControlPlayer = pPlayer;
if(pPlayer != null)
{
TouchBall(pPlayer);
m_bResetShotClock = false;
}
}
void SetOutbound(int fOutboundX, int fOutboundY)
{
m_fOutboundPos[0]= fOutboundX;
m_fOutboundPos[1]= fOutboundY;
}
int GetOutbound(int iIndex)
{
return m_fOutboundPos[iIndex];
}
void SetState(int iState)
{
m_iState = iState;
}
private void SetControlTeam(int iTeamIndex)
{
m_iControlTeam = iTeamIndex;
}
private RenderObj GetObj()
{
return m_pBallObj;
}
int GetPosX()
{
return m_fPos[0];
}
int GetPosY()
{
return m_fPos[1];
}
int GetPosZ()
{
return m_fPos[2];
}
int GetVelZ()
{
return m_fVel[2];
}
int GetVelX()
{
return m_fVel[0];
}
int GetVelY()
{
return m_fVel[1];
}
int GetNextBounceX()
{
return m_fNextBouncePos[0];
}
int GetNextBounceY()
{
return m_fNextBouncePos[1];
}
private int GetControlTeam()
{
return m_iControlTeam;
}
void SetShotVal(int iVal)
{
m_iShotVal = iVal;
}
private int GetShotValue()
{
return m_iShotVal;
}
Player GetControlPlayer()
{
return m_pControlPlayer;
}
private void SetShooterGood()
{
if(m_pPlayerLastTouch != null)
m_pPlayerLastTouch.AddToShotStats(m_iShotVal);
}
private boolean GetSpecialShot()
{
return m_bSpecialShot;
}
void SetSpecialShot(boolean bSpecial)
{
m_bSpecialShot = bSpecial;
}
private void updateControlled(int iDeltaT)
{
m_fPos[0]= m_pControlPlayer.GetPosX();
m_fPos[1]= m_pControlPlayer.GetPosY();
m_fPos[2]= m_pControlPlayer.GetPosZ();
int iHandleX = m_pControlPlayer.GetBallHandleX();
int iHandleY = m_pControlPlayer.GetBallHandleY();
m_pBallObj.SetFrame(52, 0, 5, 5, iHandleX, iHandleY, 0);
}
void SetShotGood(boolean bGood)
{
m_bShotGood = bGood;
}
private void updateFree(int iDeltaT)
{
for(int i = 0; i < 3; i++)
{
m_fPos[i]+=(m_fVel[i]* iDeltaT)>> 10;
}
if(m_iState != 6)
AccountGravity(iDeltaT);
CheckBasket();
m_pBallObj.SetFrame(52, 0, 5, 5, 5 / 2, 5 / 2, 0);
}
void update(int iDeltaT)
{
ChkInbounds();
switch(m_iState)
{
case 3 :
updateControlled(iDeltaT);
m_pBallObj.SetIcon(- 99);
break;
case 4 :
m_pBallObj.SetIcon(2);
break;
case 5 :
case 0 :
case 2 :
case 8 :
case 1 :
case 6 :
case 7 :
default :
updateFree(iDeltaT);
m_pBallObj.SetIcon(2);
}
m_pBallObj.Transform(m_fPos[0], m_fPos[1], m_fPos[2]);
}
private boolean ChkInbounds()
{
if(Basketball.ABS(m_fPos[0])+(512)>(50 << 10)/ 2)
{
if(m_bInbounds)
{
m_fOutboundPos[0]= m_fPos[0];
m_fOutboundPos[1]= m_fPos[1];
}
m_bInbounds = false;
}
else if(Basketball.ABS(m_fPos[1])>(94 << 10)/ 2)
{
if(m_bInbounds)
{
m_fOutboundPos[0]= m_fPos[0];
m_fOutboundPos[1]= m_fPos[1];
}
m_bInbounds = false;
}
else
m_bInbounds = true;
return m_bInbounds;
}
private void CheckBasket()
{
int fABSPosX = Basketball.ABS(m_fPos[0]);
int fABSPosY = Basketball.ABS(m_fPos[1]);
int fABSPosZ = Basketball.ABS(m_fPos[2]);
if(ColBasket(fABSPosX, fABSPosY, fABSPosZ))
{
if(m_bShotGood)
{
int iRand = Basketball.GetRand()% 4;
switch(iRand)
{
case 0 :
Basketball.hGameWnd.SetCommentary("得分"/*"He scores"*/);
break;
case 1 :
Basketball.hGameWnd.SetCommentary("好球!"/*"Yes, its good!"*/);
break;
case 2 :
Basketball.hGameWnd.SetCommentary("得分"/*"He scores"*/);
break;
case 3 :
default :
Basketball.hGameWnd.SetCommentary("漂亮!"/*"Swish!"*/);
}
m_iState = 4;
m_fPos[2]=(- 99 << 10);
// Basketball.Play(m_pSndSwish, 0);
}
else
{
int iRand = Basketball.GetRand()% 5;
switch(iRand)
{
case 0 :
Basketball.hGameWnd.SetCommentary("差点!"/*"Brrrriccckkkk!"*/);
break;
case 1 :
Basketball.hGameWnd.SetCommentary("不好!"/*"No good!"*/);
break;
case 2 :
Basketball.hGameWnd.SetCommentary("不进!"/*"NO!"*/);
break;
case 3 :
Basketball.hGameWnd.SetCommentary("没进!"/*"Off the mark!"*/);
break;
case 4 :
default :
Basketball.hGameWnd.SetCommentary("弹出来了!"/*"In and out!"*/);
break;
}
m_fVel[2]= -((3 * m_fVel[2])/ 5);
m_iState = 1;
CalculateNextBouncePos();
// Basketball.Play(m_pSndBrick, 0);
}
m_bResetShotClock = true;
}
if(ColBackboard(fABSPosX, fABSPosY, fABSPosZ))
{
int iDir = 1;
if(m_fPos[1]< 0)
iDir = -1;
m_fVel[1]= -((3 * m_fVel[1])/ 5);
m_fPos[1]= iDir *((43 << 10)-(512));
CalculateNextBouncePos();
}
}
private boolean ColBackboard(int fABSPosX, int fABSPosY, int fABSPosZ)
{
if(fABSPosX >(0 << 10)-(26 << 10))
{
if(fABSPosX <(0 << 10)+(26 << 10))
{
if(fABSPosY >(43 << 10)-(512))
{
if(fABSPosZ >(29 << 10))
{
if(fABSPosZ <(29 << 10)+(33 << 10))
{
if(m_fPos[1]== -45258 || m_fPos[1]== 45257)
{
return false;
}
else
{
return true;
}
}
}
}
}
}
return false;
}
private boolean ColBasket(int fABSPosX, int fABSPosY, int fABSPosZ)
{
if(fABSPosX >(0 << 10)-(1 << 10))
{
if(fABSPosX <(0 << 10)+(1 << 10))
{
if(fABSPosY >(42 << 10)-(1 << 10))
{
if(fABSPosY <(42 << 10)+(1 << 10))
{
if(ColBasketZ(fABSPosZ))
{
return true;
}
}
}
}
}
return false;
}
private boolean ColBasketZ(int fABSPosZ)
{
int iFudgeFactor = Basketball.ABS(m_fVel[0])+ Basketball.ABS(m_fVel[1]);
if(fABSPosZ <(30 << 10)+ iFudgeFactor)
{
if(fABSPosZ >(30 << 10)- 5000)
{
return true;
}
}
return false;
}
private void CalculateNextBouncePos()
{
int iAirTime = Basketball.sqrtN(((30 << 10))/ 11000);
m_fNextBouncePos[0]= m_fPos[0]+((3 * m_fVel[0]* iAirTime)/ 4);
m_fNextBouncePos[1]= m_fPos[1]+((3 * m_fVel[1]* iAirTime)/ 4);
}
private void AccountGravity(int iDeltaT)
{
int iGravity = 11000 * 8;
if(m_fPos[2]> 0)
{
m_fVel[2]-=(iGravity * iDeltaT)>> 10;
}
if(m_fPos[2]< 0)
{
if(m_fVel[2]>= -(iGravity / 2))
{
m_fVel[2]= 0;
m_fVel[0]= 0;
m_fVel[1]= 0;
}
else
{
m_fVel[2]= -((3 * m_fVel[2])/ 5);
m_fVel[0]=(m_fVel[0]* 3)/ 5;
m_fVel[1]=(m_fVel[1]* 3)/ 5;
}
if(m_iState != 5)
m_iState = 0;
m_fPos[2]= 0;
}
}
boolean SaveBallState()
{
try
{
ByteArrayOutputStream pBS = new ByteArrayOutputStream(50);
DataOutputStream pDO = new DataOutputStream(pBS);
pDO.writeBoolean(m_bShotGood);
pDO.writeBoolean(m_bInbounds);
pDO.writeInt(m_iShotVal);
pDO.writeInt(m_iState);
pDO.writeInt(m_fOutboundPos[0]);
pDO.writeInt(m_fOutboundPos[1]);
pDO.writeInt(m_fNextBouncePos[0]);
pDO.writeInt(m_fNextBouncePos[1]);
pDO.writeInt(m_fPos[0]);
pDO.writeInt(m_fPos[
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -