//
// cGame.java
//
// Project: Minesweeper
// Author(s): Gao Lei
// Create: 2007-10-12
packagecode;
importjava.util.Random;
importjavax.microedition.lcdui.*;
classcGameextendsCanvasimplementsRunnable
...{
privatestaticfinalintSTATEPLAY =0;
privatestaticfinalintSTATELOST =1;
privatestaticfinalintSTATEWIN =2;
privatestaticfinalintKEY_UP =1;
privatestaticfinalintKEY_DOWN =2;
privatestaticfinalintKEY_LEFT =3;
privatestaticfinalintKEY_RIGHT =4;
privatestaticfinalintKEY_FIRE =5;
publicstaticints_width =0;
publicstaticints_height =0;
publicstaticlongupdates =0;
publicstaticRandom rand;
privateintmaxRand =1000;
privateintmap_x =10;
privateintmap_y =10;
privateintmap_w =16;
privateintmap_h =16;
privateintkey_x = map_x /2;
privateintkey_y = map_y /2;
privateintsnake_w =8;
privateintsnake_h =8;
privateintpos_x = map_x /2;
privateintpos_y = map_y /2;
privateintaspect_x=0;
privateintaspect_y=1;
privateintsnake_max =50;
privateintsnake_min =5;
privateintsnake_n = snake_min;
privateintgameState = STATEPLAY;
privateintlevel =1;
privatelongsleepTime =300;
privateint[] snake_x =newint[ snake_max ];
privateint[] snake_y =newint[ snake_max ];
privateint[][] map;
privatebooleanisShowInfo =false;
privateFont font = Font.getFont( Font.FACE_SYSTEM, Font.STYLE_BOLD, Font.SIZE_LARGE );
privateThread thread;
privateImage[] imgGameBg =newImage[4];
privateImage[] imgItem =newImage[3];
privateGif[] gold =newGif[5];
privateGif[] dung =newGif[2];
privateGif fungus;
cGame()
...{
setFullScreenMode(true);
s_width = getWidth();
s_height= getHeight();
rand =newRandom( System.currentTimeMillis() );
try
...{
for(inti=0; i
...{
gold[i]=newGif("gold",5,19,15);
}
for(inti=0; i
...{
dung[i]=newGif("dung",6,21,30);
dung[i].life = -2;// --life
}
fungus =newGif("fungus",12,25,23);
fungus.setFormTime
(
newint[] ...{2000,150,150,150,
150,200,100,100,
200,150,200,200
}
);
fungus.life =5;// --life +5
fungus.isShow =false;
for(inti=0; i
...{
imgItem[i]=Image.createImage("/pics/item_16_"+i+".png");
}
Image temp = Image.createImage("/pics/bg_tile_0.png");
Graphics gn;
for(inti=0; i
...{
imgGameBg[i] = Image.createImage(16,16);
gn = imgGameBg[i].getGraphics();
gn.drawImage(temp, -i*16,0, gn.LEFT|gn.TOP);
}
gn =null;
temp =null;
System.gc();
}catch(Exception e)...{ e.printStackTrace(); }
rePlay( level );
thread =newThread(this);
thread.start();
}
publicvoidrun()
...{
while(true)
...{
try
...{
updates++;
repaint();
serviceRepaints();
thread.sleep(sleepTime);
}catch(Exception e)
...{
e.printStackTrace();
}
}
}
publicvoidpaint(Graphics g)
...{
g.setClip(0,0, s_width, s_height);
g.setColor(0x000000);
g.fillRect(0,0, s_width, s_height);
for(inti=0; i
...{
for(intj=0; j
...{
g.drawImage(imgGameBg[ map[i][j] ], j*map_h, i*map_w, g.LEFT|g.TOP);
}
}
for(inti=0; i
...{
gold[i].paint(g);
}
for(inti=0; i
...{
dung[i].paint(g);
}
if( snake_n>20)
...{
fungus.isShow =true;
fungus.paint( g );
}
paintSnake( g );
if( isShowInfo || gameState != STATEPLAY )
...{
g.setColor(0xFFFFFF);
for(inti=0; i<=map_y; i++ )// |||
...{
g.drawLine(i*map_w,0, i*map_w, map_h*map_x);
}
for(inti=0; i<=map_x; i++ )// ===
...{
g.drawLine(0, i*map_h, map_y*map_w, i*map_h);
}
g.setFont( font );
}
g.setColor(0xff0000);
g.setFont( font );
g.drawString("life:"+snake_n,2,2,0);
g.drawString("level:"+level,2,18,0);
}
voidpaintSnake( Graphics g )
...{
g.setColor(0x0000FF);
for(inti=snake_n; i>0; i-- )
...{
snake_x[i] = snake_x[i-1];
snake_y[i] = snake_y[i-1];
g.fillRect(snake_x[i]-snake_w/2, snake_y[i]-snake_h/2, snake_w, snake_h);
}
snake_x[0] += aspect_x*8;
snake_y[0] += aspect_y*8;
g.setColor(0x6666FF);
g.fillRect(snake_x[0]-snake_w/2, snake_y[0]-snake_h/2, snake_w, snake_h);
if( snake_x[0]<0|| snake_x[0]>s_width || snake_y[0]<0||snake_y[0]>s_height )
...{
rePlay(level);
}
for(inti=snake_min; i
...{
if( isIntersect(snake_x[0], snake_y[0], snake_w, snake_h,
snake_x[i], snake_y[i], snake_w, snake_h )
)
...{
rePlay(level);
}
}
for(inti=0; i
...{
if( isIntersect(snake_x[0], snake_y[0], snake_w, snake_h,
gold[i].pos_x, gold[i].pos_y, gold[i].w, gold[i].h )
)
...{
addSnake( gold[i].life );
gold[i].setPos();
}
}
for(inti=0; i
...{
if( isIntersect(snake_x[0], snake_y[0], snake_w, snake_h,
dung[i].pos_x, dung[i].pos_y, dung[i].w, dung[i].h )
)
...{
addSnake( dung[i].life );
dung[i].setPos();
}
}
if( fungus.isShow && isIntersect(snake_x[0], snake_y[0], snake_w, snake_h,
fungus.pos_x, fungus.pos_y, fungus.w, fungus.h )
)
...{
addSnake( fungus.life );
fungus.setPos();
}
}
booleanisIntersect(intx1,inty1,intw1,inth1,intx2,inty2,intw2,inth2)
...{
if( Math.abs(x2-x1)
...{
returntrue;
}
else
returnfalse;
}
publicvoidkeyPressed(intkey)
...{
key = Math.abs(key);
System.out.println("key="+key);
switch( key )
...{
caseKEY_NUM2:
caseKEY_UP:
if( gameState != STATEPLAY )
break;
else
...{
if( aspect_y <=0)
...{
aspect_x =0;
aspect_y = -1;
}
}
break;
caseKEY_NUM8:
caseKEY_DOWN:
if( gameState != STATEPLAY )
break;
else
...{
if( aspect_y >=0)
...{
aspect_x =0;
aspect_y = +1;
}
}
break;
caseKEY_NUM4:
caseKEY_LEFT:
if( gameState != STATEPLAY )
break;
else
...{
if( aspect_x <=0)
...{
aspect_y =0;
aspect_x = -1;
}
}
break;
caseKEY_NUM6:
caseKEY_RIGHT:
if( gameState != STATEPLAY )
break;
else
...{
if( aspect_x >=0)
...{
aspect_y =0;
aspect_x = +1;
}
}
break;
caseKEY_FIRE:
caseKEY_NUM5:
if( gameState == STATEPLAY )
...{
// addSnake();
// System.out.println("snake_n="+snake_n);
}
break;
caseKEY_NUM1:
break;
caseKEY_NUM3:
isShowInfo = !isShowInfo;
break;
caseKEY_NUM0:
rePlay( level );
break;
}
repaint();
}
privatevoidaddSnake(intlife)
...{
ints_n = snake_n;
snake_n += life;
if( snake_n >= snake_max )
...{
level++;
rePlay(level);
}
elseif( snake_n
...{
rePlay(level);
}
elseif( life>0)
...{
for(inti=s_n; i
...{
snake_x[i] = -snake_w;
snake_y[i] = -snake_h;
}
}
}
publicvoidrePlay(intlevel )
...{
sleepTime =300-level*20;
map_x = s_height/16;
map_y = s_width/16;
key_x = map_x>>1;
key_y = map_y>>1;
gameState = STATEPLAY;
map =newint[map_x][map_y];
isShowInfo =false;
snake_n = snake_min;
aspect_x =0;
aspect_y =0;
try
...{
Image temp = Image.createImage("/pics/bg_tile_"+(level%2)+".png");
Graphics gn;
for(inti=0; i
...{
imgGameBg[i] = Image.createImage(16,16);
gn = imgGameBg[i].getGraphics();
gn.drawImage(temp, -i*16,0, gn.LEFT|gn.TOP);
}
gn =null;
temp =null;
System.gc();
}catch(Exception e)...{ e.printStackTrace(); }
for(inti=0; i
...{
for(intj=0; j
...{
intr = rand.nextInt(maxRand);
for(intk=0; k
...{
if( r >(k+1)) )
...{
map[i][j] = k;
}
}
}
}
for(inti=0; i
...{
snake_x[i] = s_width >>1;
snake_y[i] = s_height>>1;//-(i*snake_h);
}
}
}