?? my_gamecanvas.java
字號(hào):
import javax.microedition.lcdui.game.GameCanvas;
import javax.microedition.lcdui.game.LayerManager;
import javax.microedition.lcdui.game.TiledLayer;
import javax.microedition.lcdui.*;
import java.io.IOException;
import java.util.*;
public class My_GameCanvas extends GameCanvas implements Runnable,CommandListener
{
boolean exit_bz=false; //退出標(biāo)志
boolean isGamePaused=false; //暫停標(biāo)志
boolean isGameOver=false; //暫停標(biāo)志
boolean JiXubz=false; //繼續(xù)標(biāo)志
boolean csh_bz=true ; //初始化標(biāo)志
int sj_gan; //隨機(jī)桿變量
int x2,y2;; //菜單坐標(biāo)
private int action = -2,jsq2=0,js=1; //分支條件變量
int jsq=0; //記錄下的層數(shù)
int by=0;
int gan_x=60,gan_y=158;
int i,i2; //桿序號(hào)
;
private Image sp1_Image; //閃屏圖片
private Image sp2_Image; //閃屏圖片
private Image img; //菜單背景圖片
private Image shezhi_img; //設(shè)置圖片
private Image help_img; //幫助圖片
private Image win_Image; //勝利圖片
private Image over_Image; //失敗圖片
private Image allbutton; //按鈕圖片
private Image laba; //喇叭圖片
private Image yxbj; //游戲背景
// private Image gan_5;
// private int[] f2={0,1,2};
// private int[] f5={0,0,1,1,2,2,3,3,2,2,1,1};
private Graphics g; //畫(huà)筆
private Command back; //按鈕對(duì)象
private zouzou_MIDlet w;
MySprite man;
MySprite []gan=new MySprite[5] ;
MySprite touci ;
Random rdm = new Random(); //隨機(jī)數(shù)對(duì)象
private LayerManager mLayerManager; //層管理類(lèi)對(duì)象
protected My_GameCanvas(zouzou_MIDlet w) throws IOException
{
super(true); //不調(diào)用keyPress等,提高速度和性能
g=getGraphics();
this.w=w;
back = new Command("返回",Command.SCREEN,1);
setCommandListener(this);
mLayerManager = new LayerManager();
game_init();
ShanPing();
zr_Image();
x2=65;
y2=60;
}
// 載入閃屏圖片
void ShanPing()
{
try
{
sp1_Image = Image.createImage("/monternet_logo.png");
sp2_Image = Image.createImage("/logo1.png");
}
catch (Exception e)
{
}
}
void zr_Image() //載入菜單等圖片
{
try
{
img=Image.createImage("/MainMenu_new.png");
shezhi_img=Image.createImage("/shezhi.png");
help_img=Image.createImage("/help.png");
win_Image=Image.createImage("/win.png");
over_Image=Image.createImage("/over.png");
allbutton=Image.createImage("/allbutton.png");
laba=Image.createImage("/laba.png");
yxbj=Image.createImage("/bg.png");
}
catch (Exception e)
{
}
}
// 畫(huà)菜單
public void Paint_Menu(Graphics g)
{
g.drawImage(img, 0, 0, 0);
g.setClip(x2,y2,52,20);
if (js==1)
g.drawImage(allbutton,x2-52,y2,0);
else
g.drawImage(allbutton,x2,y2,0);
g.setClip(x2,y2+23*1,52,20);
if (js==2)
g.drawImage(allbutton,x2-52*3,y2+23*1,0);
else
g.drawImage(allbutton,x2-52*2,y2+23*1,0);
g.setClip(x2,y2+23*2,52,20);
if (js==3)
g.drawImage(allbutton,x2-52*5,y2+23*2,0);
else
g.drawImage(allbutton,x2-52*4,y2+23*2,0);
if (JiXubz==true)
{
g.setClip(x2,y2+23*3,52,20);
if (js==4)
g.drawImage(allbutton,x2-52*7,y2+23*3,0);
else
g.drawImage(allbutton,x2-52*6,y2+23*3,0);
g.setClip(x2,y2+23*4,52,20);
if (js==5)
g.drawImage(allbutton,x2-52*9,y2+23*4,0);
else
g.drawImage(allbutton,x2-52*8,y2+23*4,0);
g.setClip(0,0,getWidth(),getHeight());
}
else
{
g.setClip(x2,y2+23*4,52,20);
if (js==4)
g.drawImage(allbutton,x2-52*9,y2+23*4,0);
else
g.drawImage(allbutton,x2-52*8,y2+23*4,0);
g.setClip(0,0,getWidth(),getHeight());
}
}
private void Print_Item(Graphics g,int n)
{
if(n==-2)//畫(huà)閃屏1 (移動(dòng)logo)
g.drawImage(sp1_Image,getWidth()/2,getHeight()/2,Graphics.VCENTER|Graphics.HCENTER);
if(n==-1)//畫(huà)閃屏2 (游戲?qū)W院logo)
g.drawImage(sp2_Image,0,0,0);
if(n==2)//畫(huà)幫助圖片
{
g.drawImage(help_img,0,0,0);
addCommand(back);
}
if(n==3)//畫(huà)設(shè)置圖片
{
g.drawImage(shezhi_img,0,0,0);
g.setClip(100,75,16,14);
// if (labaBz==true)
// g.drawImage(laba,100,75,Graphics.LEFT|Graphics.TOP);
// else
// g.drawImage(laba,100-16,75,Graphics.LEFT|Graphics.TOP);
addCommand(back);
}
if(n==4)//畫(huà)失敗圖片
{
this.addCommand(back);
g.drawImage(over_Image,0,0,0);
}
if(n==5)//畫(huà)勝利圖片
{
addCommand(back);
g.drawImage(win_Image,0,0,0);
}
}
// 角色開(kāi)始 ---定位
void dingWei() throws IOException
{
man.setPosition(60,135); //人物的初始位置
man.setXY(60,135);
gan[0].setPosition(60,158);
gan[0].setXY(60,158);
gan[0].setVisible(true);
int j,k=gan_y;
for(int i=1;i<5;i++)
{
k=k+50;
j=Math.abs(rdm.nextInt()) % 106 +10;
gan[i].setPosition(j,k);
gan[i].setXY(j,k);
}
touci.setPosition(0,0);
touci.setXY(0,0);
}
//循環(huán)刷桿
void shuagan(int g)
{
int j=Math.abs(rdm.nextInt()) % 106 +10,k;
k=g-1;
if(k<1) k=4;
gan[g].setPosition(j,gan[k].getY()+50);
gan[g].setXY(j,gan[k].getY()+50);
mLayerManager.append(gan[g]);
}
//開(kāi)始刷屏
void game_init() throws IOException
{
man = createman(); //創(chuàng)建人物
gan[0]= creategan(); //第一個(gè)桿坐標(biāo)位置
for(int i=1;i<5;i++)
{
gan[i]= creategan();
gan[i].fenzhen(sj_gan);
}
touci= createtouci(); //頭刺的坐標(biāo)位置
dingWei(); //定位
mLayerManager.append(gan[0]); //綁定桿
mLayerManager.append(gan[1]);
mLayerManager.append(gan[2]);
mLayerManager.append(gan[3]);
mLayerManager.append(gan[4]);
mLayerManager.append(man); //綁定人物
mLayerManager.append(touci); //綁定頭刺
man.setVisible(false); //不可見(jiàn)
gan[0].setVisible(false);
gan[1].setVisible(false);
gan[2].setVisible(false);
gan[3].setVisible(false);
gan[4].setVisible(false);
touci.setVisible(false);
}
//產(chǎn)生主角對(duì)象方法
private MySprite createman() throws IOException
{
Image image = Image.createImage("/char.png");
return new MySprite(image, 16, 17);
}
// 產(chǎn)生頭刺對(duì)象方法
private MySprite createtouci() throws IOException
{
Image image = Image.createImage("/teeth.png");
return new MySprite(image, 176, 23);
}
// 產(chǎn)生桿對(duì)象方法
private MySprite creategan() throws IOException
{
Image image=null;
if(csh_bz)
{
image = Image.createImage("/flat0.png");
csh_bz=false;
}else
{
sj_gan=Math.abs(rdm.nextInt()) % 6 ;
switch(sj_gan)
{
case 0:
image = Image.createImage("/flat0.png");
break;
case 1:
image = Image.createImage("/flat1.png");
break;
case 2:
image = Image.createImage("/flat2.png");
break;
case 3:
image = Image.createImage("/flat3.png");
break;
case 4:
image = Image.createImage("/flat4.png");
break;
case 5:
image = Image.createImage("/flat5.png");
break;
}
}
return new MySprite(image, 50, 8);
}
//人與頭刺碰撞
public boolean pengzhuang_1()
{
if (man.collidesWith(touci,false))// true象素碰撞 false
{
siwang();
return true;
}else
return false;
}
// 人與桿碰撞
public boolean pengzhuang_2()
{
for(i=0;i<5;i++)
{
if (man.collidesWith(gan[i],false))// true象素碰撞 false
{
return true;
}
}
return false;
}
//// 人與道具碰撞
// public boolean pengzhuang_3()
// {
// if (man.collidesWith(daoju,false))// true象素碰撞 false
// return true;
// else
// return false;
// }
//桿與頭刺碰撞
public boolean pengzhuang_4()
{
for(i2=0;i2<5;i2++)
{
if (gan[i2].collidesWith(touci,false))// true象素碰撞 false
{
gan[i2].setVisible(false);
return true;
}
}
return false;
}
//產(chǎn)生線程并執(zhí)行線程方法
public void start()
{
Thread t = new Thread(this);
t.start();
}
// 游戲動(dòng)作
void game_act()
{
g.drawImage(yxbj, 0, -240+by, Graphics.TOP | Graphics.LEFT);
g.drawImage(yxbj, 0, by, Graphics.TOP | Graphics.LEFT);
by+=5;
if(by>=240) by=0;
man.setVisible(true);
for(int i=0;i<5;i++)
{
gan[i].setVisible(true);
gan[i].nextFrame();
}
touci.setVisible(true);
if (pengzhuang_2())
{
man.setPosition(man.getX(),gan[i].getY()-17); //人物的初始位置
man.setXY(man.getX(),gan[i].getY()-17);
}else
{
man.DOWN_MOVE();
}
if (pengzhuang_4())
{
if(i2==0)
{
gan[0].setPosition(-100,-100);
gan[0].setXY(-100,-100);
}else
{
try
{
gan[i2]=creategan();
}
catch(Exception e)
{
}
shuagan(i2) ;
}
}
// man.setFrame(0);
gan[0].AUTO_MOVE();
gan[1].AUTO_MOVE();
gan[2].AUTO_MOVE();
gan[3].AUTO_MOVE();
gan[4].AUTO_MOVE();
g.setColor(0x000000);
g.fillRect(0,158,176,19);
}
// 實(shí)施
private void render(Graphics g)
{
g.setColor(0xffffff);
g.fillRect(0, 0, getWidth(),getHeight());
jsq2++;
if (jsq2 == 10 )
{
action++;
}
else if(jsq2 == 15)
{
action++;
//jsq2=100;
}
}
// 死亡
public void siwang()
{
action=4;
man.setVisible(false);
gan[0].setVisible(false);
gan[1].setVisible(false);
gan[2].setVisible(false);
gan[3].setVisible(false);
gan[4].setVisible(false);
touci.setVisible(false);
}
// 主線程
public void run()
{
while (!exit_bz)
{
if (!isGamePaused)
{
//碰撞判斷3---(人與頭刺)
pengzhuang_1();
//鍵盤(pán)操作選擇
KeyOS();
render(g);
try
{
Thread.sleep(50);
}
catch (InterruptedException ie)
{
}
// 分支情況
switch(action)
{
case -2: //如果action=-2,畫(huà)閃屏1
Print_Item(g,-2);
break;
case -1: //如果action=-1,畫(huà)閃屏2
Print_Item(g,-1);
break;
case 0: //如果action=0,畫(huà)菜單
Paint_Menu(g);
break;
case 1: //如果action=1,畫(huà)游戲
game_act(); //游戲動(dòng)作
break;
case 2: //如果action=2,畫(huà)幫助
Print_Item(g,2);
break;
case 3: //如果action=3,畫(huà)設(shè)置圖片
Print_Item(g,3);
break;
case 4: //如果action=4,畫(huà)失敗
Print_Item(g,4);
break;
case 5: //如果action=5,畫(huà)勝利
Print_Item(g,5);
break;
}
mLayerManager.paint(g, 0, 0);
flushGraphics(); //刷新屏幕
}
else
{
try
{
Thread.sleep(100);
}
catch (InterruptedException ie)
{
}
}
}
}
// 鍵盤(pán)操作選擇
private void KeyOS()
{
if (action==1) input_1();
if (action==0) input_2();
// if (action==3) input_3();
//占位 容錯(cuò)
if (action==2) input_4();
if (action==4) input_4();
if (action==5) input_4();
if (action==-1) input_4();
if (action==-2) input_4();
}
//占位 容錯(cuò)
private void input_4()
{
int keyStates = getKeyStates();
}
//鍵盤(pán)輸入處理方法1 主角控制
private void input_1()
{
int keyStates = getKeyStates();
if ((keyStates & LEFT_PRESSED) != 0)
man.LEFT_MOVE();
else if ((keyStates & RIGHT_PRESSED) != 0)
man.RIGHT_MOVE();
}
//鍵盤(pán)輸入處理方法2 菜單選擇
private void input_2()
{
int keyStates = getKeyStates();
if (JiXubz==true)
{
if ((keyStates & UP_PRESSED) != 0)
{
js--;
if (js<1)
{
js=5;
}
}
if ((keyStates & DOWN_PRESSED) != 0)
{
js++;
if (js>5)
{
js=1;
}
}
if ((keyStates & FIRE_PRESSED) != 0)
{
if (js==1)
{
action=1;
jsq=0;
isGamePaused=false;
try
{
dingWei(); //新開(kāi)始
}
catch(Exception e)
{
}
this.addCommand(back);
}
if (js==2) action=2;
if (js==3) action=3;
if (js==4 && JiXubz==true)
{
action=1;
JiXubz=false;
this.addCommand(back);
}
if (js==5) w.destroyApp(false);
}
}
else
{
if ((keyStates & UP_PRESSED) != 0)
{
js--;
if (js<1)
{
js=4;
}
}
if ((keyStates & DOWN_PRESSED) != 0)
{
js++;
if (js>4)
{
js=1;
}
}
if ((keyStates & FIRE_PRESSED) != 0)
{
if (js==1)
{
action=1;
jsq=0;
isGamePaused=false;
try
{
dingWei(); //新開(kāi)始
}
catch(Exception e)
{
}
this.addCommand(back);
}
if (js==2) action=2;
if (js==3) action=3;
if (js==4) w.destroyApp(false);
}
}
}
//按鈕監(jiān)聽(tīng)
public void commandAction(Command c,Displayable d)
{
if (c == back)
{
if (action==1)
{
JiXubz=true;
js=4;
}
else
js=1;
action=0;
removeCommand(back);
man.setVisible(false);
gan[0].setVisible(false);
gan[1].setVisible(false);
gan[2].setVisible(false);
gan[3].setVisible(false);
gan[4].setVisible(false);
touci.setVisible(false);
}
}
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -