📄 tetrisgame.java
字号:
int cnt ;
int nx = x * 3 + x_ofset ;
int ny = DISPLAY_HEIGHT - y_ofset - y * 3 ;
//System.out.println(" nx = "+nx+", ny = "+ny);
g.setColor(lineColor);
for ( cnt = 0 ; cnt < 2 ; cnt ++ )
{
g.drawLine ( ( int ) ( nx + cnt ) , ( int ) ny , ( int ) ( nx + cnt ) , ( int ) ny ) ;
g.drawLine ( ( int ) ( nx + squareSize ) , ( int ) ( ny + cnt ) , ( int ) ( nx + squareSize ) , ( int ) ( ny + cnt ) ) ;
g.drawLine ( ( int ) ( nx + squareSize - cnt ) , ( int ) ( ny + squareSize ) , ( int ) ( nx + squareSize - cnt ) , ( int ) ( ny + squareSize ) ) ;
g.drawLine ( ( int ) ( nx ) , ( int ) ( ny + squareSize - cnt ) , ( int ) ( nx ) , ( int ) ( ny + squareSize - cnt ) ) ;
}
}
void
TEDrawSplashBlock ( int cnt1 ,
int cnt2 )
{
//System.out.println("TEDrawSplashBlock");
int chCt ;
/* uns */ int count ;
final /* uns */ int splash_left_border = 128 ;
int square_ofset = 0 ;
final int [] letterOfset /* expr */ = { 6 , 6 , 6 , 6 , 2 , 6 } ;
int letterOfsetSum = 1 ;
int tempLine ;
for ( chCt = 0 ; chCt < cnt1 ; chCt ++ )
{
letterOfsetSum += letterOfset [ chCt ] ;
}
for ( chCt = 0 ; chCt < 4 ; chCt ++ )
{
tempLine = g_Shapes [ ( g_screen [ cnt1 ] ) . shape [ cnt2 ] ] [ ( g_screen [ cnt1 ] ) . rotation [ cnt2 ] ] [ chCt ] ;
tempLine <<= - ( g_screen [ cnt1 ] ) . x_pos [ cnt2 ] ;
for ( square_ofset = 0 , count = splash_left_border ; count > 0 ; square_ofset ++ , count >>= 1 )
{
if ( ( count & tempLine ) > 0 )
{
if ( ( g_screen [ cnt1 ] . y_pos [ cnt2 ] - ( TEGlobal_p . splash_cnt ) ) > ( g_screen [ cnt1 ] . y_stop [ cnt2 ] ) )
{
TEDrawSplashSquare ( ( int ) ( letterOfsetSum + square_ofset ) , ( int ) ( ( g_screen [ cnt1 ] . y_pos [ cnt2 ] ) - ( TEGlobal_p . splash_cnt ) - chCt ) ) ;
}
else
{
TEDrawSplashSquare ( ( int ) ( letterOfsetSum + square_ofset ) , ( ( int ) ( g_screen [ cnt1 ] . y_stop [ cnt2 ] - chCt ) ) ) ;
}
}
}
}
if ( TEGlobal_p . splash_cnt >= 60 )
{
g.setColor(lineColor);
g.drawString ( "R" , DISPLAY_WIDTH - 7 , ( DISPLAY_HEIGHT - 20 - 8 * 4 + 5 ) , Graphics.TOP|Graphics.LEFT ) ;
g.drawArc ( ( int ) ( DISPLAY_WIDTH - 9 ) , ( int ) ( ( DISPLAY_HEIGHT - 20 - 8 * 4 + 5 ) - 2 ) ,
( int ) ( GAGetCurrfontWidth ( ) + 3 ) , ( int ) ( GAGetCurrfontWidth ( ) + 3 ) , 0 , 180 ) ;
}
}
void
TETickScreen ( )
{
//System.out.println("TETickScreen");
final int nbrOfLetters = 6 ;
int cnt1 ;
int cnt2 ;
;
TEFillRect ( 0 , 0 , DISPLAY_WIDTH , DISPLAY_HEIGHT - 7 , GACOLOR_WHITE ) ;
for ( cnt1 = 0 ; cnt1 < nbrOfLetters ; cnt1 ++ )
{
for ( cnt2 = 0 ; cnt2 < g_blocks [ cnt1 ] ; cnt2 ++ )
{
//System.out.println("cnt1 = "+cnt1+". cnt2 = "+cnt2);
if ( ( g_screen [ cnt1 ] . y_pos [ cnt2 ] - TEGlobal_p . splash_cnt ) < 16 )
{
TEDrawSplashBlock ( cnt1 , cnt2 ) ;
}
}
}
if ( TEGlobal_p . splash_cnt > 80 )
{
if ( TEGlobal_p . splash_cnt != 100 )
{
GAKillTimer ( GATimer1 ) ;
TEGlobal_p . splash_cnt = 0 ;
}
}
;
}
void
IniTEMenu ( )
{
//System.out.println("IniTEMenu");
;
TEGlobal_p . mwait = false ;
TEGlobal_p . splash_cnt = 0 ;
TEGlobal_p . infoShown = false ;
TEGlobal_p . mchMenu = 0 ;
TEGlobal_p . mchSelection = 0 ;
TEGlobal_p . state = TMenuState ;
TETickScreen ( ) ;
GASetCurrColour ( GACOLOR_BLACK ) ;
GASetFillColour ( GACOLOR_BLACK ) ;
GASetBackgroundColour ( GACOLOR_WHITE ) ;
g.setColor(clearColor);
g.fillRect ( 0 , 0 , DISPLAY_WIDTH , DISPLAY_HEIGHT ) ;
;
}
void
TerminateGameMain ( )
{
//System.out.println("TerminateGameMain");
;
if ( TEGlobal_p != null )
{
if ( !TEGlobal_p . bGameOver )
{
TE_SaveData_p . chInfo = 2 ;
MenuObject . AllowStartMode = GAM_START_NEW | GAM_START_RESUME ;
MenuObject . SelStartMode = GAM_START_RESUME ;
}
else
{
TE_SaveData_p . chInfo = 1 ;
MenuObject . AllowStartMode = GAM_START_NEW ;
MenuObject . SelStartMode = GAM_START_NEW ;
}
TE_SaveData_p . sgSaveGame . BackGroundPicSelection = TEGlobal_p . BackGroundPicSelection ;
TEPostEE ( ) ;
GASaveNVData ( TE_SaveData_p ) ;
}
TetrisKillGame ( ) ;
;
}
boolean
TEMenu ( GAEvent event )
{
//System.out.println("TEMenu");
;
switch ( event . type )
{
case GATimerEvent :
if ( TEGlobal_p . NormalSplash )
{
TEGlobal_p . splash_cnt ++ ;
TETickScreen ( ) ;
}
else
{
TEEasterSplash ( ) ;
}
break ;
case GAKeyboardEvent :
if ( event . press )
{
switch ( event . key )
{
case KeyNo :
if ( TEGlobal_p . mchMenu == 3 )
{
IniTEMenu ( ) ;
GASetTimer ( GATimer1 , 100 ) ;
}
else
{
TEGlobal_p . state = TTerminateState ;
}
break ;
case KeyThree :
if ( TEGlobal_p . mchMenu == 0 )
{
TEGlobal_p . mchMenu = 1 ;
}
else
{
TEGlobal_p . mchMenu = 0 ;
}
break ;
case KeyNine :
if ( TEGlobal_p . mchMenu == 1 )
{
TEGlobal_p . mchMenu = 2 ;
}
else
{
TEGlobal_p . mchMenu = 0 ;
}
break ;
case KeySeven :
if ( TEGlobal_p . mchMenu == 2 )
{
TEGlobal_p . mchMenu = 3 ;
TEInitEasterSplash ( ) ;
TEGlobal_p . NormalSplash = false ;
}
else
{
TEGlobal_p . mchMenu = 0 ;
}
break ;
default :
GAKillTimer ( GATimerAll ) ;
TEGlobal_p . splash_cnt = 100 ;
if ( ( MenuObject . SelStartMode & GAM_START_RESUME ) != 0 )
{
IniTEGame ( true ) ;
}
else
{
IniTEGame ( false ) ;
}
TERedraw ( ) ;
break ;
}
}
break ;
default :
TEGlobal_p . state = TTerminateState ;
}
;
return ( true ) ;
}
void
TEPrepEE ( )
{
//System.out.println("TetrisGame.TEPrepEE()");
;
;
;
}
void
InitiateGameMain ( )
{
//System.out.println("TetrisGame.InitiateGameMain()");
int x ;
;
GASoundEffectPlay ( "tetris_start" ) ;
TEGlobal_p = new TEGlobals_t ();
TE_SaveData_p = new TE_EEArray_t ();
TE_HighScoreList_p = new GAPI_HighscoreList_t () ;
// TEGlobal_p = ( TEGlobals_t ) GAAlloc ( sizeof ( TEGlobals_t ) ) ;
//TE_SaveData_p = ( TE_EEArray_t ) GAAlloc ( sizeof ( TE_EEArray_t ) ) ;
//TE_HighScoreList_p = ( GAPI_HighscoreList_t ) GAAlloc ( sizeof ( GAPI_HighscoreList_t ) ) ;
TEGlobal_p . state = TStartState ;
TEGlobal_p . GameState = TGameStartInit ;
TEGlobal_p . bTerminate = false ;
TEGlobal_p . chBlockCnt = 0 ;
TEGlobal_p . bGameOver = true ;
GAHighScoreListInit ( TE_HighScoreList_p , TE_SaveData_p . HighScoreListEntries ) ;
TE_HighScoreList_p . DifficultType = false ;
GALoadNVData ( TE_SaveData_p ) ;
if ( TE_SaveData_p . chInfo != 1 && TE_SaveData_p . chInfo != 2 )
{
GAHighScoreListClear ( TE_HighScoreList_p , TE_SaveData_p . HighScoreListEntries ) ;
}
GAHighScoreEntryCheck ( TE_HighScoreList_p , TE_SaveData_p . HighScoreListEntries ) ;
TEPrepEE ( ) ;
TEGlobal_p . NormalSplash = true ;
TEGlobal_p . Yoffset = 0 ;
TEGlobal_p . Yoffset = - 5 ;
TEGlobal_p . BlockSize = ( ( DISPLAY_HEIGHT - TEGlobal_p . Yoffset ) - 2 ) / 16 ;
x = TEGlobal_p . BlockSize * 8 ;
TEGlobal_p . LINE_POS = ( DISPLAY_WIDTH - x ) / 2 + 20 ;
if ( TEGlobal_p . LINE_POS < ( 7 * GAGetCurrfontWidth ( ) ) )
{
TEGlobal_p . LINE_POS = 7 * GAGetCurrfontWidth ( ) + 20 ;
}
TEGlobal_p . LINE_POS_DY = TEGlobal_p . LINE_POS + x + 1 ;
TEGlobal_p . BackGroundPicSelection = TE_SaveData_p . sgSaveGame . BackGroundPicSelection ;
TE_SaveData_p . SoundOn = false ;
if ( ( MenuObject . SelOptions & GAM_OPT_SOUND ) == GAM_OPT_SOUND )
{
TE_SaveData_p . SoundOn = true ;
}
GASetTimer ( GATimer1 , 100 ) ;
;
}
boolean
TetrisGetSetting ( )
{
//System.out.println("TetrisGetSetting");
boolean Result = true ;
TE_EEArray_t SaveData = new TE_EEArray_t () ;
/* uns */ int t ;
;
MenuObject = GAGetMenuSetting ( ) ;
GALoadNVData ( SaveData ) ;
if ( SaveData . chInfo == 2 )
{
MenuObject . AllowStartMode = GAM_START_NEW | GAM_START_RESUME ;
MenuObject . SelStartMode = GAM_START_RESUME ;
}
else
{
MenuObject . AllowStartMode = GAM_START_NEW ;
MenuObject . SelStartMode = GAM_START_NEW ;
}
MenuObject . AllowOpponents = GAM_OPP_PHONE ;
MenuObject . SelOpponents = GAM_OPP_PHONE ;
MenuObject . AllowSingleLevels = GAM_LEVEL_EASY | GAM_LEVEL_MEDIUM | GAM_LEVEL_HARD ;
MenuObject . SelLevel = GAM_LEVEL_EASY ;
MenuObject . AllowOptions = GAM_OPT_NONE ;
MenuObject . SelOptions = GAM_OPT_NONE ;
if ( SaveData . SoundOn )
{
MenuObject . SelOptions |= GAM_OPT_SOUND ;
}
t = SaveData . sgSaveGame . BackGroundPicSelection & ( GAM_OPT_BACKGROUND_PIC_NONE | GAM_OPT_BACKGROUND_PIC_TILE | GAM_OPT_BACKGROUND_PIC_CENTER ) ;
if ( t == 0 )
{
t = GAM_OPT_BACKGROUND_PIC_NONE ;
}
if ( GAGetImageId ( "bkg_pic" ) < 1 )
{
SaveData . sgSaveGame . BackGroundPicSelection =
SaveData . sgSaveGame . BackGroundPicSelection & ( GAM_OPT_ALL - ( GAM_OPT_BACKGROUND_PIC_TILE | GAM_OPT_BACKGROUND_PIC_CENTER ) ) ;
t = GAM_OPT_BACKGROUND_PIC_NONE ;
}
MenuObject . SelOptions |= t ;
MenuObject . AllowOptions = GAM_OPT_SOUND ;
MenuObject . AllowOptions |= GAM_OPT_BACKGROUND_PIC_NONE ;
MenuObject . AllowOptions |= GAM_OPT_BACKGROUND_PIC_TILE ;
MenuObject . AllowOptions |= GAM_OPT_BACKGROUND_PIC_CENTER ;
MenuObject . AllowOptions |= GAM_OPT_BACKGROUND_PIC_FILE ;
MenuObject . AllowHighScore = GAHighScoreCheckMenues ( SaveData . HighScoreListEntries ) ;
;
return ( Result ) ;
}
public boolean
gameMain ( GAEvent event )
{
//System.out.println("TetrisGame.gameMain(): received new event of type "+event.type.toString());
boolean Result = true ;
switch ( event . type )
{
case GAStartEvent :
g_screen[0] = new Letter();
g_screen[1] = new Letter();
g_screen[2] = new Letter();
g_screen[3] = new Letter();
g_screen[4] = new Letter();
g_screen[5] = new Letter();
InitiateGameMain ( ) ;
break ;
case GARedrawEvent :
if ( TEGlobal_p != null )
{
if ( ( TEGlobal_p . GameState == TGamePaused ) || ( TEGlobal_p . GameState == TGameRunning ) || ( TEGlobal_p . GameState == TGameOverWait ) )
{
TERedraw ( ) ;
}
}
else if ( TE_HighScoreList_p != null && TE_SaveData_p != null )
{
g.setColor(clearColor);
g.fillRect ( 0 , 0 , DISPLAY_WIDTH , DISPLAY_HEIGHT ) ;
GAHighScoreListShow ( TE_HighScoreList_p , TE_SaveData_p . HighScoreListEntries ) ;
}
break ;
case GAMenuSettingsEvent :
TetrisGetSetting ( ) ;
break ;
case GAHighScoreEvent :
//System.out.println("TetrisGame.gameMain received a new HIGHSCORE event.");
if ( TE_HighScoreList_p == null && TE_SaveData_p == null )
{
TE_SaveData_p = new TE_EEArray_t ();
TE_HighScoreList_p = new GAPI_HighscoreList_t () ;
//TE_HighScoreList_p = ( GAPI_HighscoreList_t ) GAAlloc ( sizeof ( GAPI_HighscoreList_t ) ) ;
//TE_SaveData_p = ( TE_EEArray_t ) GAAlloc ( sizeof ( TE_EEArray_t ) ) ;
if ( GALoadNVData ( TE_SaveData_p ) == false )
{
return false ;
}
GAHighScoreListInit ( TE_HighScoreList_p , TE_SaveData_p . HighScoreListEntries ) ;
if ( TE_SaveData_p . chInfo != 1 && TE_SaveData_p
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -