📄 mycanvas.java
字号:
/*
GameName:老虎机
modfiy date:05-10-25
author:关文柏
*/
import javax.microedition.lcdui.*;
import javax.microedition.rms.*;
import java.io.*;
import java.util.*;
public class MyCanvas extends Canvas implements Runnable
{
private Thread thread; //a thread instance
private boolean pause; //control the pause stat
Image anjian;
Image anjian1;
Image exit;
Image back;
private Main main; //the Main class instance
private static int gameMode; //control the game state
private int modeTemp; //temp mode variabe
private Font font; //the font using in game
private Random ran = new Random(); //produce the random number
private Image[] img; //the image resourcele
private static Graphics g; //the game graphics object. draw picture
private static Image buffer; //a buffer image to show the game graphics
private int scX,scY; //the coordinate of the game screen
private int screenW = 128;
private int screenH = 160; //hold the game screen size
private int proInt; //the process indicate counter
private int helppages = 1; //help pages control variable
private int aboutpages=1;
private final int LEFT = 0; //set softlabel left or right
private final int RIGHT = 1;
private byte[] reelOffs; //
private boolean[] reelStop; //
private byte[][] reel; //
private boolean[] df; //
private boolean dSelect; //
private int mSelect; //in title menu control variable
private int mSelect1; // in game menu control variable
private int selectMenu; //in game menu control temp variable
private int lcBG; //in game top background color
private boolean sf; //SoundSwitch
private int sumGame;
private int sumBig;
private int sumReg;
private byte[] moveY; //
private byte[] charID; //
private byte[] moveFlg;
private int money; //
private int svmoney; //
private long smoney;
private boolean Auto; //control the automatic state
private boolean press; //control automatic temp variable
private long autotime;
//private int monsetup; //money temp;
private byte DlgFlg;
private boolean DrawFlg;
private int ngame;
private int reach;
private int reachCnt;
private byte Ltype;
private int AcNotice;
private int sstep;
private int ExInt;
private int BnsWnd;
private byte setup;
private byte frameCnt;
private int AcPrize;
private long LKeyTm;
private int[] share = { 300, 300, 100, 10, 8, 2, 3, 0, 4 };
//----------------------------gameMode introduce--------------------
//gameMode = 0; draw process indicate screen
//gameMode = 1; title screen
//gameMode = 2; help screen
//gameMode = 3; about screen
//gameMode = 4; gaming screen
//gameMode = 5; gaming menu
//gameMode = 6; gaming next screen
//gameMode = 7; exit game
//gameMode = 8; pause state
//------------------------------------------------------------------
//---------------------------key-------------------------------------
private int keySoft_1 = -6;
private int keySoft_2 = -7;
private int keySoft_select = -5;
private int key_up = -1;
private int key_down = -2;
private int key_left = -3;
private int key_right = -4;
private int key_1 = 49;
private int key_2 = 50;
private int key_3 = 51;
private int key_4 = 52;
private int key_5 = 53;
private int key_6 = 54;
private int key_7 = 55;
private int key_8 = 56;
private int key_9 = 57;
private int key_0 = 48;
private int key_star = 42;
private int key_pod = 35;
//-------------------------------------------------------------------
private String[] simg =
{
"reel_red7","reel_blue7","reel_bar","reel_orange","reel_bell",
"reel_cherry","reel_replay","corsol_r","corsol_u","corsol_d",
"icon_1_on","icon_1_off","icon_2_on","icon_2_off","icon_3_on",
"icon_3_off","base_2","kakuzou_up","kakuzou_u","kakuzou_n",
"kakuzou_d","num_0","num_1","num_2","num_3",
"num_4","num_5","num_6","num_7","num_8",
"num_9","info_bonus","title","lisence","puzou_n","risu_n"
}; //the image string array
public MyCanvas(Main main) //constructor
{
this.main = main;
init();
setFullScreenMode(true); //full screen
start();
}
public void start() //start the thread in this class
{
thread = new Thread(this);
thread.start();
}
public void run() //run of thread
{
int timecont = 0; //control the when automatic state press the key
if(gameMode == 0)
{
loadResource();
RMSaccess(0);
}
if(gameMode > 0)
{
for(;;)
{
//System.out.println(Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory() );
if(gameMode == 1) //title screen
{
}else if(gameMode == 2) //help screen
{
}else if(gameMode == 3) //about screen
{
}else if(gameMode == 4) //gaming screen
{
if(++timecont > 10)
{
timecont = 0;
press = !press;
}
long thisFrameTm;
long nextFrameTm = 0;
int i;
thisFrameTm = System.currentTimeMillis();
if( thisFrameTm < nextFrameTm ) continue;
if( gameMode == 4 ) nextFrameTm = thisFrameTm + 1000/20;
else nextFrameTm = thisFrameTm + 1000/60;
frameCnt++;
frameCnt &= 127;
if(Auto) //the auto state
{
autoState();
}
if( DlgFlg == 0 )
{
for( i=0; i<3; i++ )
{
if( !reelStop[i] )
{
df[1]=true;
if( --reelOffs[i] < 0 ) reelOffs[i] += 21;
}
if( moveFlg[i] <= sstep )
{
if( moveY[i] < 12 )
{ moveY[i] += 4; df[2]=true; }
else{ moveY[i] = 12; }
}
}
}
try
{
repaint();
serviceRepaints();
Thread.sleep(100);
}catch(Exception ex){ex.printStackTrace();}
}else if(gameMode == 5) //gaming menu
{
}
else if(gameMode == 6) //gaming next screen
{
}else if(gameMode == 7) //exit game
{
main.exit();
break;
}else if(gameMode == 8) //pause state
{
}
}
}
}
public void paint(Graphics gg) //paint method of Canvas class
{
if(gameMode == 0)
{
gg.setColor(0);
gg.fillRect(0,0,screenW,screenH);
drawProcess(gg);
if(proInt == 100)
gameMode++;
}
if(gameMode != 0 )
{
drawGame();
gg.drawImage(buffer,0,0,0); //draw the buffer image
}
}
public void drawGame() //draw game graphics
{
if(gameMode == 1) //title screen
{
g.setColor(getColorOfRGB(110,110,250) );
g.fillRect( 0, 0, 128, 160 );
g.setColor(getColorOfRGB(255,255,107) );
g.fillRect( scX, scY+30, 160, 10 );//zyy 老虎机上下的条
g.fillRect( scX, scY+72, 160, 10 );//zyy
drawImage(g, img[32], scX+28, scY+38 ); //title picture //zyy
drawImage(g, img[33], scX+22, scY+136); //hudson software logo
drawImage(g, img[7], scX+23, scY+80 + mSelect*20 ); //yellow arrowhead
drawStr(g, "开始游戏", scX+48+8, scY+81, getColorOfRGB(255,255,255), getColorOfRGB(64,64,64) );
drawStr(g, " 帮助", scX+53+8, scY+100, getColorOfRGB(255,255,255), getColorOfRGB(64,64,64) );
drawStr(g, " 关于", scX+53+8, scY+119,getColorOfRGB(255,255,255), getColorOfRGB(64,64,64) );
setSoftLabel(LEFT,"确定");
setSoftLabel(RIGHT,"退出");
}else if(gameMode == 2) //help screen
{
drawHelpScreen();
}else if(gameMode == 3) //about screen
{
drawAboutScreen();
}else if((gameMode == 4)||(gameMode == 5)||(gameMode == 6)) //in game or in gaming menu or the next screen
{
int i;
int tmp;
if( DrawFlg )
{
g.setColor(getColorOfRGB(0,0,0) );
g.fillRect( 0, 0, getWidth(), getHeight() );
DrawFlg = false;
df[0]=df[1]=df[2]=true;
}
if( df[0] )
{
if(DlgFlg == 0)
df[0]=false;
drawImage(g, img[16], scX, scY ); // base_2.png
for( i=0; i<3; i++ )
{
if(reelStop[i]){
drawImage(g, img[11 + i*2 ], scX+39 + i*32, scY+142 ); //icon_1_off.png icon_2_off.png icon_3_off.png
}
else {
drawImage(g, img[10 + i*2 ], scX+39 + i*32, scY+142 ); //icon_1_on.png icon_2_on.png icon_3_on.png
}
}
int dev;
dev = 1000;
for( i=0; i<4; i++ )
{
tmp = (ngame / dev) % 10;
drawImage(g, img[21 + tmp], scX+28 + i*6, scY+126 );//zyy 16
dev /= 10;
}
dev = 100000000;
for( i=0; i<9; i++ )
{
tmp = (money / dev) % 10;
drawImage(g, img[21 + tmp], scX+90 + i*6, scY+126 );//zyy 90
dev /= 10;
}
if( reach != 0 && reachCnt == 0 )
{
g.setColor( getColorOfRGB(255,168,84) );
g.fillRect( scX, scY+51, 9, 26 );
g.fillRect( scX+131, scY+50, 9, 27 );
}
}
if( df[1] )
{
df[1]=false;
for( i=0; i<3; i++ )
{
drawImage(g, img[ reel[ 0 ][ (reelOffs[0]+i)%21 ] ], scX+27, scY+56 + i*20 );
drawImage(g, img[ reel[ 1 ][ (reelOffs[1]+i)%21 ] ], scX+65, scY+56 + i*20 );
drawImage(g, img[ reel[ 2 ][ (reelOffs[2]+i)%21 ] ], scX+103, scY+56 + i*20 );
}
if( reelStop[0] == true && reelStop[1] == true && reelStop[2] == true )
{
g.setColor( getColorOfRGB(255,0,0) );
switch( Ltype )
{
case 7: Ltype = 1;
case 0:
case 1:
case 2:
g.drawLine( scX+30, scY+65 + Ltype*20, scX+128, scY+65 + Ltype*20 );
break;
case 5: g.drawLine( scX+30, scY+65, scX+128, scY+65 );
case 3: g.drawLine( scX+30, scY+61, scX+128, scY+112 ); break;
case 6: g.drawLine( scX+30, scY+108, scX+128, scY+108 );
case 4: g.drawLine( scX+30, scY+112, scX+128, scY+61 ); break;
}
}
}
if( df[2] && DlgFlg == 0 )
{
g.setColor( lcBG );
g.fillRect( scX+24, scY, 112, 40+8 );
switch( AcNotice )
{
case 1:
case 2:
if( sstep == 1 )
{
g.setColor( getColorOfRGB(107,105,115) );
g.fillRect( scX+24, scY , 112, 40 );
g.setColor( getColorOfRGB(132,134,148) );
g.fillRect( scX+24, scY+8 , 112, 24 );
g.setColor( getColorOfRGB(189,190,189) );
g.fillRect( scX+24, scY+16, 112, 8 );
drawImage(g, img[17], scX+55, scY+12 );//zyy 45 10
}
case 3:
case 30:
case 31:
case 32:
case 33:
case 4:
for( i=0; i<3; i++ )
{
if( moveFlg[i] <= sstep )
{
drawImage(g, img[ charID[i] ], scX+34+i*30, scY+moveY[i]+4 );
}
}
break;
case 0:
drawImage(g, img[19], scX+34, scY+moveY[0] );
drawImage(g, img[19], scX+64, scY+moveY[1] );
drawImage(g, img[19], scX+94, scY+moveY[2] );
break;
}
if( ExInt == 10 )
{
g.setColor( getColorOfRGB(0,0,0) );
g.fillRect( scX+24, scY, BnsWnd, 40 );
g.fillRect( scX+24 + 112-BnsWnd, scY, BnsWnd, 40 );
}else if( ExInt == 11 )
{
tmp = (frameCnt/4)%2;
g.setColor(getColorOfRGB(0,0,0) );
g.fillRect( scX+24, scY, 112, 40 );
drawImage(g, img[31], scX+35, scY );
drawImage(g, img[18+tmp], scX+28, scY+20 );
drawImage(g, img[18+tmp], scX+103, scY+20 );
if( BnsWnd != 0 )
{
g.fillRect( scX+24, scY, BnsWnd, 40 );
g.fillRect( scX+24 + 112-BnsWnd, scY, BnsWnd, 40 );
}
df[2]=true;
}
g.setColor(getColorOfRGB(0,0,0));
g.fillRect( scX+24, scY-20, 112, 20 );
df[2]=false;
if( gameMode == 6 ) //the next state
{
// drawStr(g, "倍数设定", scX+30, scY+25, getColorOfRGB(255,255,255), getColorOfRGB(64,64,64) );
drawStr(g, "倍数设定"+ " "+" " + (setup+1)+" 倍", scX+25, scY+30, getColorOfRGB(255,255,255), getColorOfRGB(64,64,64) );
return;
}
if( Auto ) //the auto state
{
//drawStr(g, "按#号键", scX+24, scY, getColorOfRGB(255,255,255), getColorOfRGB(64,64,64) );
// drawStr(g, "解除自动", scX+24, scY+15, getColorOfRGB(255,255,255), getColorOfRGB(64,64,64) );
drawImage(g, anjian1, scX+33, scY+35 );
}
else
{
//drawStr(g, "按#号键", scX+24, scY, getColorOfRGB(255,255,255), getColorOfRGB(64,64,64) );
//drawStr(g, "开始自动", scX+24, scY+15, getColorOfRGB(255,255,255), getColorOfRGB(64,64,64) );
drawImage(g, anjian, scX+33, scY+35 );
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -