📄 xiyou.java
字号:
drawImageString(s_g, "" +(char) ('A' + i),
MS_CHAR_OFFSET_X + (i % MS_CHAR_NUM_LINE) * MS_CHAR_STEP, MS_OPTION_BG_Y + MS_CHAR_OFFSET_Y + (i / MS_CHAR_NUM_LINE) * MS_CHAR_STEP, FONT_MEDIUM, IMG_FONT_CENTER,
1);
}
if(s_namePos != 0 && s_name != null)
{
String temp = new String(s_name , 0 , s_namePos);
drawImageString(s_g, temp,
MS_CHAR_OFFSET_X , MS_OPTION_BG_Y + MS_CHAR_OFFSET_Y + 4* MS_CHAR_STEP + 10, FONT_MEDIUM, IMG_FONT_LEFT,
1);
}
//indicator
s_g.setClip(s_enterNameX - 7 , s_enterNameY , 13, 13);
s_g.drawImage(s_menuArrow , s_enterNameX - 29 - 7, s_enterNameY - 36 , 0);
if (IsKeyPressed(GK_RIGHT) || IsKeyHold(GK_RIGHT) )
{
s_enterNameX++;
}
else if(IsKeyPressed(GK_LEFT )|| IsKeyHold(GK_LEFT) )
{
s_enterNameX--;
}
else if(IsKeyPressed(GK_UP )|| IsKeyHold(GK_UP) )
{
s_enterNameY--;
}
else if(IsKeyPressed(GK_DOWN)|| IsKeyHold(GK_DOWN) )
{
s_enterNameY++;
}
else if (IsKeyPressed(GK_A | GK_SOFT_RIGHT) )
{
int charoffset = CalChar(s_enterNameX , s_enterNameY , MS_OPTION_BG_Y + MS_CHAR_OFFSET_Y );
if(charoffset != NO_CHAR)
{
if (charoffset == 27 || s_namePos == NAME_LEN)
{
if(s_namePos != 0)
{
String tmp = new String(s_name, 0, s_namePos);
InsertName(tmp, Rand(100, 1000));
SaveOrLoad(true);
}
SetMenuStatus(MS_HIGHSCORE);
}
else if(charoffset == 26)
{
if(s_namePos > 0)s_namePos--;
s_name[s_namePos] = 0;
}
else
{
s_name[s_namePos] = (byte) ('A'+charoffset);
s_namePos++;
}
}
}
else if (IsKeyPressed(GK_SOFT_LEFT) )
{
SetMenuStatus(MS_MAINMENU);
}
break;
case MS_SOUND_ON_OFF:
break;
}
}
public static void SetMenuStatus(int newMenuStatus)
{
s_menuStatus = newMenuStatus;
s_selectedIndex = 0;
s_ctrMenu = 0;
s_beginIndex = 0;
if(newMenuStatus == MS_ENTER_NAME)
{
InitHighCursor();
}
if(newMenuStatus == MS_MAINMENU)
{
s_selectedIndex = s_lastMainMenuSelect ;
s_beginIndex = s_lastBeginIndex;
}
if(newMenuStatus == MS_HIGHSCORE)
{
s_enterNameX = RESET_X + (RESET_W >> 1);
s_enterNameY = RESET_Y+ (RESET_H >> 1) - 7;
}
if(newMenuStatus == MS_ABOUT)
{
s_scrollY = MS_ABOUT_CLIP_TOP + (MS_ABOUT_CLIP_H >> 1);
}
if(newMenuStatus == MS_HELP)
{
s_scrollY = MS_ABOUT_CLIP_TOP ;
}
}
public static void FILLSCREEN(int color)
{
s_g.setClip(PINGMUDDD.sssCHUANNN_LEFT, PINGMUDDD.sssCHUANNN_TOP , PINGMUDDD.sssCHUANNN_WIDTH , PINGMUDDD.sssCHUANNN_HEIGHT);
s_g.setColor(color);
s_g.fillRect(PINGMUDDD.sssCHUANNN_LEFT, PINGMUDDD.sssCHUANNN_TOP , PINGMUDDD.sssCHUANNN_WIDTH , PINGMUDDD.sssCHUANNN_HEIGHT);
}
/**
* draw the select list background in the mainmenu and some other used the button image
* @param g Graphics
* @param x int
* @param y int
* @param totalLines int
* @param selectId int
* @param txtStartId int
* @param wordMove int
*/
public static void drawSelectListBg(Graphics g, int x, int y, int totalLines, int selectId ,int txtStartId, int wordMove)
{
for (int i = s_beginIndex ; i < s_beginIndex + MAINMENU_LEN_SHOW ; i++)
{
g.setClip(x, y, MENU_MAIN_CENTER_W, MENU_BAR_SELECT_H);
drawImageString(g, GetString(txtStartId + i ),
x+wordMove, y + 5, FONT_HUGE, IMG_FONT_CENTER,
i == selectId ?1: 0);
y += CHAR_H[0] + 2;
}
}
public static final int NO_CHAR = -1;
public static int CalChar(int x , int y , int RELATIVE_Y)
{
int tmp = ((y + 7 - RELATIVE_Y) / MS_CHAR_STEP) * MS_CHAR_NUM_LINE + ((x + 7 - MS_CHAR_OFFSET_X) / MS_CHAR_STEP) % MS_CHAR_NUM_LINE;
return tmp < 28 && tmp >=0 ? tmp : NO_CHAR;
}
//init highscore cursor
public static void InitHighCursor()
{
s_namePos = 0;
s_name = null;
s_name = new byte[NAME_LEN];
s_enterNameX = MS_CHAR_OFFSET_X;
s_enterNameY = INGAME_HIGHSCORE_Y + MS_CHAR_OFFSET_Y;
}
//for move indicator
public static void MoveIndicator(int limitX , int limitY , int limitW , int limitH)
{
/*
if (IsKeyPressed(GK_RIGHT) || IsKeyHold(GK_RIGHT) )
{
s_enterNameX+= MS_CHAR_STEP;
}
else if(IsKeyPressed(GK_LEFT )|| IsKeyHold(GK_LEFT) )
{
s_enterNameX-= MS_CHAR_STEP;
}
else if(IsKeyPressed(GK_UP )|| IsKeyHold(GK_UP) )
{
s_enterNameY-= MS_CHAR_STEP;
}
else if(IsKeyPressed(GK_DOWN)|| IsKeyHold(GK_DOWN) )
{
s_enterNameY+= MS_CHAR_STEP;
}
//*/
if (IsKeyPressed(GK_RIGHT) )
{
if(s_enterNameX>= limitX + limitW)
{
s_enterNameX = limitX;
}
else
{
s_enterNameX+= MS_CHAR_STEP;
}
}
else if(IsKeyPressed(GK_LEFT ))
{
if(s_enterNameX <= limitX)
{
s_enterNameX = limitX + limitW;
}
else
{
s_enterNameX-= MS_CHAR_STEP;
}
}
else if(IsKeyPressed(GK_UP ) )
{
if(s_enterNameY <= limitY)
{
s_enterNameY = limitY + limitH;
}
else
{
s_enterNameY-= MS_CHAR_STEP;
}
}
else if(IsKeyPressed(GK_DOWN))
{
if(s_enterNameY >= limitY + limitH)
{
s_enterNameY = limitY;
}
else
{
s_enterNameY+= MS_CHAR_STEP;
}
}
}
// draw buttons
public static void DrawButtons(boolean haveBack , boolean haveNext)
{
if(haveBack)
{
s_g.setClip(2, PINGMUDDD.sssCHUANNN_HEIGHT - 15, 13 , 13);
s_g.drawImage(s_menuArrow , 2, PINGMUDDD.sssCHUANNN_HEIGHT - 15 , 0);
}
}
//draw text
public static void DrawTxtButton()
{
drawImageString(s_g, GetString(DWorld.STR_ID_SKIP),
PINGMUDDD.sssCHUANNN_WIDTH - 5, PINGMUDDD.sssCHUANNN_HEIGHT - CHAR_H[0] - 1, FONT_HUGE, IMG_FONT_RIGHT,
0);
}
//draw general bg
public static void DrawMenuBg(String str)
{
FILLSCREEN(COLOR_BLUE_WALL);
s_g.setColor(COLOR_YELLOW_BG);
s_g.fillRoundRect( MS_OPTION_BG_X , MS_OPTION_BG_Y, MS_OPTION_BG_W, MS_OPTION_BG_H, MS_OPTION_BG_ARC_W, MS_OPTION_BG_ARC_W);
s_g.setColor(COLOR_BLUE_WALL);
//text about bg
s_g.fillRoundRect( PINGMUDDD.sssCHUANNN_WIDTH - MS_OPTION_TITLE_W >> 1 , MS_OPTION_BG_Y + MS_TITLE_BG_OFFSET_Y ,MS_OPTION_TITLE_W, MS_OPTION_TITLE_H, 10, 10);
drawImageString(s_g, str,
PINGMUDDD.sssCHUANNN_WIDTH >> 1, MS_OPTION_BG_Y + MS_TITLE_BG_OFFSET_Y + MS_TITLE_OFFSET_Y, FONT_HUGE, IMG_FONT_CENTER,
0);
}
// menu inter face arrow
public static final int ARROW_TO_LEFT = 0;
public static final int ARROW_TO_DOWN = 1;
public static final int ARROW_TO_UP = 2;
public static final int ARROW_INDICATOR = 3;
public static final int ARROW_CONFIRM = 4;
public static int s_arrowTick = 0 ;
public static void DrawArrow(int x , int y , int arrowID , boolean isFlip)
{
if(arrowID == ARROW_TO_LEFT)
{
s_g.setClip(x + s_arrowTick , y , 7 , 7);
s_g.drawImage(s_menuArrow , x + s_arrowTick - 9 , y - 14, 0);
}
else if(arrowID == ARROW_TO_DOWN)
{
}
else if(arrowID == ARROW_TO_UP)
{
}
else if(arrowID == ARROW_INDICATOR)
{
s_g.setClip(x + s_arrowTick , y , 9 , 9);
s_g.drawImage(s_menuArrow , x + s_arrowTick , y -14 , 0);
}
else if(arrowID == ARROW_CONFIRM)
{
s_g.setClip(x + s_arrowTick , y , 11 , 11);
s_g.drawImage(s_menuArrow , x + s_arrowTick , y -23 , 0);
}
if(isFlip)
{
s_arrowTick = s_arrowTick < 2 ? ++s_arrowTick : 0;
}
}
//drawGameLoad
public static void DrawResLoad(int frameLen)
{
if(s_gameStatus == DGameStatus.GS_LOAD_PRELUDE_RES)
{
FILLSCREEN(0XFFFFFF);
s_g.setClip(0 , 0 , PINGMUDDD.PINGMUKUAN, PINGMUDDD.PINGMUGAO);
s_g.drawImage(s_splash , PINGMUDDD.PINGMUKUAN >> 1 , PINGMUDDD.PINGMUGAO - 60>> 1 , Graphics.VCENTER | Graphics.HCENTER);
s_g.setColor(0x0);
s_g.fillRect(PINGMUDDD.PINGMUKUAN - SPLASH_LOADING_WIDTH >> 1, PINGMUDDD.PINGMUGAO - 30, SPLASH_LOADING_WIDTH, 8);
s_g.setColor(COLOR_YELLOW_BG);
s_g.fillRect(PINGMUDDD.PINGMUKUAN - SPLASH_LOADING_WIDTH >> 1, PINGMUDDD.PINGMUGAO - 30, s_ctrGameStatus * SPLASH_LOADING_WIDTH / frameLen, 8);
s_g.setColor(COLOR_BLUE_WALL);
s_g.drawRect(PINGMUDDD.PINGMUKUAN - SPLASH_LOADING_WIDTH >> 1, PINGMUDDD.PINGMUGAO - 30, SPLASH_LOADING_WIDTH, 8);
}
else
{
FILLSCREEN(COLOR_BLUE_WALL);
s_g.setColor(0xFFFFFF);
s_g.fillRect(0, PINGMUDDD.PINGMUGAO - 20, s_ctrGameStatus * PINGMUDDD.PINGMUKUAN / frameLen, 1);
drawImageString(s_g, GetString(DWorld.STR_ID_LOADING),
(PINGMUDDD.PINGMUKUAN >> 1), PINGMUDDD.PINGMUGAO - 40, FONT_HUGE, IMG_FONT_CENTER,
0);
}
}
public static final int NAME_NUM = 5; //the total record num;
public static String[] s_names = new String[NAME_NUM];
public static int[] s_scores = new int[NAME_NUM];
public static final int DATA_LEN = 1 + NAME_LEN + 4; // 1 is for level ; NAME_LEN is the name; 4 is for score
static void SaveOrLoad(boolean save)
{
RecordStore rs;
byte[] buf = new byte[(DATA_LEN) * NAME_NUM + 1];
try
{
rs = RecordStore.openRecordStore("htfsav", true);
if (save)
{
SaveStringsToBytes(buf , s_names);
SaveIntsToBytes(buf , s_scores);
buf[(DATA_LEN) * NAME_NUM] = (byte)Jiaose.s_levelSaved;
if (rs.getNumRecords() == 0)
rs.addRecord(buf, 0, buf.length);
else
rs.setRecord(1, buf, 0, buf.length);
}
else
{
if (rs.getNumRecords() > 0)
{
rs.getRecord(1, buf, 0);
GetStringsFromBytes(buf , s_names);
GetIntsFromToBytes(buf , s_scores);
Jiaose.s_levelSaved = buf[(DATA_LEN) * NAME_NUM] ;
}
else
{
for(int i = 0;i < NAME_NUM ; i++ )
{
s_names[i] = "";
s_scores[i] = 0;
}
SaveStringsToBytes(buf , s_names);
SaveIntsToBytes(buf , s_scores);
buf[(DATA_LEN) * NAME_NUM] = 0;
rs.addRecord(buf, 0, buf.length);
}
}
rs.closeRecordStore();
}
catch (Exception e)
{
}
}
public static void SaveStringsToBytes(byte[] byteBuf , String[] string)
{
int arraylen = string.length;
for(int i = 0 ; i < arraylen ; i++)
{
byteBuf[i * (DATA_LEN)] = (byte)string[i].length();
System.arraycopy( string[i].getBytes() , 0 ,byteBuf , i * (DATA_LEN) + 1 , string[i].length() );
}
}
public static void SaveIntsToBytes(byte[] byteBuf , int[] score)
{
int arraylen = score.length;
for(int i = 0 ; i < arraylen ; i++)
{
byte[] temp = new byte[4];
temp[0] = (byte)(score[i] & 0xFF);
temp[1] = (byte)((score[i] >> 8)& 0xFF);
temp[2] = (byte)((score[i] >> 16)& 0xFF);
temp[3] = (byte)((score[i] >> 24)& 0xFF);
System.arraycop
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -