📄 game.java
字号:
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
import java.util.*;
import java.lang.*;
import java.io.*;
//import javax.microedition.media.*;
public class Game extends win
{
private static final int RIM_ANIM[]= { 0, 1, 1, 1, 2, 2, 3, 3, 3, 4, 4, 4, 3, 3, 3, 4, 4, 4 };
private static final int RIM_FRAMES[][]=
{
{ 26, 49, 9, 13, 4, 11 },
{ 35, 49, 9, 13, 4, 11 },
{ 44, 49, 9, 13, 4, 11 },
{ 26, 24, 9, 13, 4, 11 },
{ 37, 24, 9, 13, 4, 11 },
};
private static final int OFFSCREENIND_FRAMES[][]=
{
{ 0, 0, 8, 12 },
{ 8, 0, 10, 10 },
{ 18, 0, 12, 9 },
{ 30, 0, 10, 10 },
{ 0, 12, 8, 12 },
{ 8, 12, 10, 11 },
{ 18, 12, 12, 8 },
{ 30, 12, 10, 10 },
};
private boolean m_bCenterCommentary;
private boolean m_bReady;
private boolean m_bUserHome;
private boolean m_bDrawOffscreenIndicators;
private boolean m_bUserLock;
private boolean m_bPause;
private boolean m_bGameOver;
private boolean m_bBallOB;
private boolean m_bBallBackCourt;
private boolean m_bPlayCrowd;
private boolean m_bTogglePositionIcons;
private boolean m_bQtrOverlaySet;
private long m_iLastTime;
private int m_iClockState;
private int m_iPositionTextTimer;
private int m_iCommentaryOffsetX;
private int m_iIndicatorX;
private int m_iIndicatorY;
private int m_iIndicatorDir;
private int m_iRimAnim;
private int m_iRimState;
public int m_iCommentaryTime;
private int m_iLeft;
private int m_iUpLeft;
private int m_iUp;
private int m_iUpRight;
private int m_iRight;
private int m_iDownRight;
private int m_iDown;
private int m_iDownLeft;
private int m_iDblTap;
private int m_iDblTapDir;
private int m_iDblTapTime;
private int m_iTippOffDelay;
private int m_iMoveMomentum;
public int m_iQtrNum;
public int m_iQtrTime;
public int m_iQtrSecs;
public int m_iShotSecs;
public int m_iBkCrtSecs;
public int m_iInbndSecs;
public int m_iLaneSecs;
private int m_iShotClock;
private int m_iPaintFlags;
private int m_iOffenseDir;
private int m_iHomeScore;
private int m_iAwayScore;
private int m_iHomeTeamColor;
private int m_pDrawOrder[];
private int m_iTeamThatWonTippOff;
public String m_pCommentaryMsg;
private String m_pHomeTeamName;
private String m_pAwayTeamName;
private RenderObj m_pObjList[];
private Player m_pUserPlayer;
private Player m_pPlayers[];
private int m_iHomeTeamIndex;
private int m_iAwayTeamIndex;
private int m_iOffenseTeamIndex;
private int m_iUserTeamIndex;
private bhFont m_pFont;
private static Image m_pImgHomeTeam;
private static Image m_pImgAwayTeam;
private static Image m_pImgGameRes;
private static Image m_pImgCommentary;
private static png pTmpPng = null;
// static javax.microedition.media.Player m_pSndHorn;
Game(boolean bHome)
{
m_bReady = false;
m_iPaintFlags = 0;
m_iQtrNum = 0;
m_iRimAnim = 0;
m_iRimState = 0;
m_bUserHome = bHome;
m_bUserLock = false;
m_pObjList = new RenderObj[17];
m_pDrawOrder = new int[17];
m_pPlayers = new Player[10];
ready = true;
topWinList.addElement((Object)this);
}
public static void Touch()
{
}
static int LastiHomeTeamID, LastiAwayTeamID;
public boolean LoadGameRes(int iHomeTeamID, int iAwayTeamID)
{
if(LastiHomeTeamID != iHomeTeamID || LastiAwayTeamID != iAwayTeamID){
m_pImgHomeTeam = null;
m_pImgAwayTeam = null;
}
for(int i = 11; i < 17; i++)
{
m_pObjList[i]= null;
}
for(int j = 0; j < 10; j++)
{
m_pPlayers[j]= null;
}
LastiHomeTeamID = iHomeTeamID;
LastiAwayTeamID = iAwayTeamID;
System.gc();
FrontEnd.LoadTeamStats(iHomeTeamID, 0);
FrontEnd.LoadTeamStats(iAwayTeamID, 1);
for(int i = 0; i < 10; i++)
{
if(i < 5){
if(m_pPlayers[i]== null){
m_pPlayers[i]= new Player(m_pImgHomeTeam, m_pImgGameRes, true, m_bUserHome);
} else {
m_pPlayers[i].reassignData(m_pImgHomeTeam, m_pImgGameRes, true, m_bUserHome);
}
} else {
if(m_pPlayers[i]== null){
m_pPlayers[i]= new Player(m_pImgAwayTeam, m_pImgGameRes, false, !m_bUserHome);
} else {
m_pPlayers[i].reassignData(m_pImgAwayTeam, m_pImgGameRes, false, !m_bUserHome);
}
}
if(m_pPlayers[i]== null)
return false;
m_pObjList[i]= m_pPlayers[i].GetObj();
}
m_iHomeTeamIndex = 0;
m_iAwayTeamIndex = 1;
AllocStaticTeamArrays();
Team(m_iHomeTeamIndex, 0, 0, m_pPlayers);
Team(m_iAwayTeamIndex, 5, 1, m_pPlayers);
if(m_bUserHome)
m_iUserTeamIndex = m_iHomeTeamIndex;
else
m_iUserTeamIndex = m_iAwayTeamIndex;
Ball();
m_pObjList[10]= m_pBallObj;
m_pObjList[11]= new RenderObj();
m_pObjList[11].SetFrame(0, 24, 26, 33, 26 / 2, 33, 0);
m_pObjList[11].Transform((0 << 10), -(43 << 10),(29 << 10));
m_pObjList[12]= new RenderObj();
m_pObjList[12].SetFrame(0, 24, 26, 33, 26 / 2, 33, 0);
m_pObjList[12].Transform((0 << 10),(43 << 10),(29 << 10));
m_pObjList[13]= new RenderObj();
m_pObjList[13].SetFrame(RIM_FRAMES[0][0], RIM_FRAMES[0][1], RIM_FRAMES[0][2], RIM_FRAMES[0][3], RIM_FRAMES[0][4], RIM_FRAMES[0][5], 0);
m_pObjList[13].Transform((0 << 10), -(42 << 10),(30 << 10));
m_pObjList[14]= new RenderObj();
m_pObjList[14].SetFrame(RIM_FRAMES[0][0], RIM_FRAMES[0][1], RIM_FRAMES[0][2], RIM_FRAMES[0][3], RIM_FRAMES[0][4], RIM_FRAMES[0][5], 0);
m_pObjList[14].Transform((0 << 10),(42 << 10),(30 << 10));
m_pObjList[15]= new RenderObj();
m_pObjList[15].SetFrame(46, 23, 11, 14, 7, 0, 0);
m_pObjList[15].Transform((0 << 10), -(42 << 10),(30 << 10)+(30 << 10)+ 10000);
m_pObjList[16]= new RenderObj();
m_pObjList[16].SetFrame(46, 23, 11, 14, 0, 0, 0);
m_pObjList[16].Transform((0 << 10),(42 << 10),(30 << 10)+(30 << 10)+ 11264);
for(int j = 0; j < 5; j++)
{
int index1 = 0;
int index2 = 0;
for(int k = 0; k < 5; k++)
{
if(k == j)
continue;
m_pPlayers[j + 0].SetTeamate(index1, m_pPlayers[k + 0]);
m_pPlayers[j + 5].SetTeamate(index1, m_pPlayers[k + 5]);
index1++;
}
for(int m = 0; m < 5; m++)
{
m_pPlayers[j + 0].SetOpponent(index2, m_pPlayers[m + 5]);
m_pPlayers[j + 5].SetOpponent(index2, m_pPlayers[m + 0]);
index2++;
}
m_pPlayers[j + 0].SetOffenseDir(1);
m_pPlayers[j + 5].SetOffenseDir(- 1);
}
for(int n = 0; n < 17; n++)
{
m_pDrawOrder[n]= n;
}
m_bTogglePositionIcons = false;
m_iPositionTextTimer = 6000;
SetTeamPositionText(m_iUserTeamIndex, true);
return true;
}
boolean LoadGameResLarge()
{
if(LoadCourtRes()== false)
return false;
if(Basketball.pTeamName[0].equals("Nuggets"))
{
m_iHomeTeamColor = 0x004040FF;
}
else
{
byte iRed = Basketball.pAwayRemaps[0][0][1];
byte iGreen = Basketball.pAwayRemaps[0][0][2];
byte iBlue = Basketball.pAwayRemaps[0][0][3];
m_iHomeTeamColor =((iRed << 16)& 0x00ff0000)+((iGreen << 8)& 0x0000ff00)+((iBlue)& 0x000000ff);
}
byte pHomeTeamRemaps[]= new byte[4 * 4];
byte pAwayTeamRemaps[]= new byte[4 * 4];
for(int i = 0; i < 4; i++)
{
for(int j = 0; j < 4; j++)
{
pHomeTeamRemaps[i * 4 + j]= Basketball.pHomeRemaps[0][i][j];
pAwayTeamRemaps[i * 4 + j]= Basketball.pAwayRemaps[1][i][j];
}
}
if(m_pImgHomeTeam == null){
pTmpPng = new png("/player.png", pHomeTeamRemaps, 4);
m_pImgHomeTeam = pTmpPng.getImage();
pTmpPng = null;
}
if(m_pImgHomeTeam == null)
return false;
if(m_pImgAwayTeam == null){
pTmpPng = new png("/player.png", pAwayTeamRemaps, 4);
m_pImgAwayTeam = pTmpPng.getImage();
pTmpPng = null;
}
if(m_pImgAwayTeam == null)
return false;
return true;
}
boolean LoadGameResSmall()
{
m_pFont = getColoredFont(0xFFFFFF, false);
/*if(m_pSndHorn == null)
m_pSndHorn = Basketball.LoadSnd("/horn.wav", "audio/x-wav");*/
byte pBackBoardRemaps[]= new byte[2 * 4];
for(int i = 0; i < 2; i++)
{
for(int j = 0; j < 4; j++)
{
pBackBoardRemaps[i * 4 + j]= Basketball.pAwayRemaps[0][2][j];
}
}
for(int clr = 0; clr < 3; clr++)
{
int tc =((int)pBackBoardRemaps[1 * 4 + clr])& 0xFF;
tc += 25;
if(tc > 255)
tc = 255;
pBackBoardRemaps[1 * 4 + clr]=(byte)tc;
}
for(int clr = 0; clr < 3; clr++)
{
int tc =((int)pBackBoardRemaps[0 * 4 + clr])& 0xFF;
tc -= 25;
if(tc < 0)
tc = 0;
pBackBoardRemaps[0 * 4 + clr]=(byte)tc;
}
pBackBoardRemaps[0 * 4 + 0]= 5;
pBackBoardRemaps[1 * 4 + 0]= 6;
if(m_pImgGameRes == null){
pTmpPng = new png("/courtstuff.png", pBackBoardRemaps, 2);
m_pImgGameRes = pTmpPng.getImage();
pTmpPng = null;
}
if(m_pImgCommentary == null){
m_pImgCommentary = Image.createImage(176 * 2, 11+5);
}
Graphics g = m_pImgCommentary.getGraphics();
g.setColor(0x000000);
g.fillRect(0, 0, m_pImgCommentary.getWidth(), m_pImgCommentary.getHeight());
return true;
}
void SetImages()
{
for(int i = 0; i < 5; i++)
{
m_pPlayers[i + 0].SetPlayerImg(m_pImgHomeTeam, m_pImgGameRes);
m_pPlayers[i + 5].SetPlayerImg(m_pImgAwayTeam, m_pImgGameRes);
}
SetBallImg(m_pImgGameRes, m_pImgGameRes);
for(int i = 11; i < 17; i++)
m_pObjList[i].SetImg(m_pImgGameRes, m_pImgGameRes);
m_iPaintFlags |= 0x02 | 0x01 | 0x04;
}
public boolean ChkGameReady()
{
return m_bReady;
}
void UnLoadGameRes()
{
m_bReady = false;
Basketball.myCanvas.setUpdate(false);
System.gc();
}
void UnLoadGameResLarge()
{
System.gc();
}
void UnLoadGameResSmall()
{
m_iPaintFlags = 0;
System.gc();
}
boolean GetGameOver()
{
return m_bGameOver;
}
public int GetHomeTeam()
{
return m_iHomeTeamIndex;
}
public int GetAwayTeam()
{
return m_iAwayTeamIndex;
}
public void StartGame()
{
StartHalf();
m_iQtrNum = 1;
m_iOffenseDir = 1;
CreateOverlay(33);
m_bQtrOverlaySet = false;
}
void StartHalf()
{
DoTippOff();
if(m_bUserHome)
m_pUserPlayer = m_pPlayers[4];
else
m_pUserPlayer = m_pPlayers[9];
m_pUserPlayer.SetUser(true);
for(int i = 0; i < 5; i++)
{
m_pPlayers[i + 0].SetOffenseDir(1);
m_pPlayers[i + 5].SetOffenseDir(- 1);
}
for(int j = 0; j < 10; j++)
{
m_pPlayers[j].ResetPlay();
m_pPlayers[j].SetTeamHasBall(false);
m_pPlayers[j].SetTippoffPos();
m_pPlayers[j].SetAnim(j % 4);
}
SetScoreQtr(m_iQtrNum);
SetControlTeam(m_iAwayTeamIndex);
DoResetShotClock();
m_iQtrTime = Basketball.iQuarterlength;
}
void StartQtr()
{
m_iClockState = 1;
int iTeamThatWonTippOff = m_iTeamThatWonTippOff;
if(m_iQtrNum == 3 || m_iQtrNum == 5 || m_iQtrNum == 7 || m_iQtrNum == 9 || m_iQtrNum == 11 || m_iQtrNum == 13 || m_iQtrNum == 15)
{
iTeamThatWonTippOff =(iTeamThatWonTippOff == 5)? 0 : 5;
}
if(iTeamThatWonTippOff == 0)
m_iOffenseTeamIndex = m_iAwayTeamIndex;
else
m_iOffenseTeamIndex = m_iHomeTeamIndex;
for(int j = 0; j < 10; j++)
{
m_pPlayers[j].ResetPlay();
m_pPlayers[j].SetTeamHasBall(false);
m_pPlayers[j].SetHasBall(false);
m_pPlayers[j].SetTippoffPos();
}
int iTeamOffset = GetTeamOffset(m_iOffenseTeamIndex);
for(int k = iTeamOffset; k < iTeamOffset + 5; k++)
{
m_pPlayers[k].SetTeamHasBall(true);
}
m_iOffenseDir = GetTeamOffenseDir(m_iOffenseTeamIndex);
SetVelocity(0, 0, 0);
SetPosition(8 << 10, - m_iOffenseDir *((50)<< 10), 0);
SetController(null);
SetState(5);
m_bBallBackCourt = true;
SetControlTeam(m_iOffenseTeamIndex);
if(m_iOffenseTeamIndex == m_iUserTeamIndex)
SetNextOffensePlay(m_iOffenseTeamIndex, 15);
else
SetNextOffensePlay(m_iOffenseTeamIndex, 11);
SetPlayNum(m_iOffenseTeamIndex, 1);
SetScoreQtr(m_iQtrNum);
DoResetBkCourClock();
DoResetInbndsClock();
DoResetShotClock();
System.out.println("THREEMIN" + 180000);
if(Basketball.iQuarterlength > 180000)
{
if(m_iQtrNum > 4)
m_iQtrTime = 300000;
else
m_iQtrTime = Basketball.iQuarterlength;
}
else
{
m_iQtrTime = Basketball.iQuarterlength;
}
}
void ResumeGame()
{
if(m_bQtrOverlaySet == false)
{
Basketball.iSelType = -99;
//Basketball.myCanvas.setLeftCommandText("暂停");
Basketball.myCanvas.setLeftCommandText("");
Basketball.myCanvas.setRightCommandText("");
Basketball.myCanvas.setUpdate(true);
setFocus(this);
m_bReady = true;
m_bPause = false;
}
else
{
m_bReady = false;
m_bPause = true;
CreateOverlay(34);
m_bQtrOverlaySet = false;
}
}
public void EndGame()
{
m_iPaintFlags = 0;
UnLoadGameRes();
endDialog();
Basketball.hGameWnd = null;
System.out.println("EndGame() GC");
System.gc();
}
public void PauseGame()
{
m_iPaintFlags = 0;
m_bReady = false;
m_bPause = true;
Basketball.myCanvas.setUpdate(false);
UnLoadGameResSmall();
FrontEnd.LoadFrontEndOnlyArt();
CreateOverlay(7);
ClrInput();
}
void SetQtrOverlaySet(boolean bQtrOverlaySet)
{
m_bQtrOverlaySet = bQtrOverlaySet;
}
public int message(int msg, int param1, int param2)
{
switch(msg)
{
case 0x0205 :
return message(0x0109, 99, 0);
case 0x0206 :
return message(0x0201, Canvas.FIRE, 0);
case 0x0109 :
switch(param1)
{
case 99 :
// Basketball.StopAllSounds();
PauseGame();
return 1;
default :
break;
}
return 1;
case 0x0201 :
switch(param1)
{
case Canvas.LEFT :
m_iLeft = 3;
m_iMoveMomentum = 2;
break;
case Canvas.RIGHT :
m_iRight = 3;
m_iMoveMomentum = 2;
break;
case Canvas.UP :
m_iUp = 3;
m_iMoveMomentum = 2;
break;
case Canvas.DOWN :
m_iDown = 3;
m_iMoveMomentum = 2;
break;
case Canvas.FIRE :
m_pUserPlayer.Action1();
break;
default :
break;
}
switch(param2)
{
case Canvas.KEY_NUM4 :
m_iLeft = 3;
m_iMoveMomentum = 2;
break;
case Canvas.KEY_NUM6 :
m_iRight = 3;
m_iMoveMomentum = 2;
break;
case Canvas.KEY_NUM2 :
m_iUp = 3;
m_iMoveMomentum = 2;
break;
case Canvas.KEY_NUM8 :
m_iDown = 3;
m_iMoveMomentum = 2;
break;
case Canvas.KEY_NUM3 :
m_iUpRight = 3;
m_iMoveMomentum = 2;
break;
case Canvas.KEY_NUM1 :
m_iUpLeft = 3;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -