📄 my_gamecanvas.java
字号:
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; //退出标志
boolean isGamePaused=false; //暂停标志
boolean isGameOver=false; //暂停标志
boolean JiXubz=false; //继续标志
boolean csh_bz=true ; //初始化标志
int sj_gan; //随机杆变量
int x2,y2;; //菜单坐标
private int action = -2,jsq2=0,js=1; //分支条件变量
int jsq=0; //记录下的层数
int by=0;
int gan_x=60,gan_y=158;
int i,i2; //杆序号
;
private Image sp1_Image; //闪屏图片
private Image sp2_Image; //闪屏图片
private Image img; //菜单背景图片
private Image shezhi_img; //设置图片
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; //画笔
private Command back; //按钮对象
private zouzou_MIDlet w;
MySprite man;
MySprite []gan=new MySprite[5] ;
MySprite touci ;
Random rdm = new Random(); //随机数对象
private LayerManager mLayerManager; //层管理类对象
protected My_GameCanvas(zouzou_MIDlet w) throws IOException
{
super(true); //不调用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)
{
}
}
// 画菜单
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)//画闪屏1 (移动logo)
g.drawImage(sp1_Image,getWidth()/2,getHeight()/2,Graphics.VCENTER|Graphics.HCENTER);
if(n==-1)//画闪屏2 (游戏学院logo)
g.drawImage(sp2_Image,0,0,0);
if(n==2)//画帮助图片
{
g.drawImage(help_img,0,0,0);
addCommand(back);
}
if(n==3)//画设置图片
{
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)//画失败图片
{
this.addCommand(back);
g.drawImage(over_Image,0,0,0);
}
if(n==5)//画胜利图片
{
addCommand(back);
g.drawImage(win_Image,0,0,0);
}
}
// 角色开始 ---定位
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);
}
//循环刷杆
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]);
}
//开始刷屏
void game_init() throws IOException
{
man = createman(); //创建人物
gan[0]= creategan(); //第一个杆坐标位置
for(int i=1;i<5;i++)
{
gan[i]= creategan();
gan[i].fenzhen(sj_gan);
}
touci= createtouci(); //头刺的坐标位置
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); //不可见
gan[0].setVisible(false);
gan[1].setVisible(false);
gan[2].setVisible(false);
gan[3].setVisible(false);
gan[4].setVisible(false);
touci.setVisible(false);
}
//产生主角对象方法
private MySprite createman() throws IOException
{
Image image = Image.createImage("/char.png");
return new MySprite(image, 16, 17);
}
// 产生头刺对象方法
private MySprite createtouci() throws IOException
{
Image image = Image.createImage("/teeth.png");
return new MySprite(image, 176, 23);
}
// 产生杆对象方法
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;
}
//产生线程并执行线程方法
public void start()
{
Thread t = new Thread(this);
t.start();
}
// 游戏动作
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);
}
// 实施
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();
//键盘操作选择
KeyOS();
render(g);
try
{
Thread.sleep(50);
}
catch (InterruptedException ie)
{
}
// 分支情况
switch(action)
{
case -2: //如果action=-2,画闪屏1
Print_Item(g,-2);
break;
case -1: //如果action=-1,画闪屏2
Print_Item(g,-1);
break;
case 0: //如果action=0,画菜单
Paint_Menu(g);
break;
case 1: //如果action=1,画游戏
game_act(); //游戏动作
break;
case 2: //如果action=2,画帮助
Print_Item(g,2);
break;
case 3: //如果action=3,画设置图片
Print_Item(g,3);
break;
case 4: //如果action=4,画失败
Print_Item(g,4);
break;
case 5: //如果action=5,画胜利
Print_Item(g,5);
break;
}
mLayerManager.paint(g, 0, 0);
flushGraphics(); //刷新屏幕
}
else
{
try
{
Thread.sleep(100);
}
catch (InterruptedException ie)
{
}
}
}
}
// 键盘操作选择
private void KeyOS()
{
if (action==1) input_1();
if (action==0) input_2();
// if (action==3) input_3();
//占位 容错
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();
}
//占位 容错
private void input_4()
{
int keyStates = getKeyStates();
}
//键盘输入处理方法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();
}
//键盘输入处理方法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(); //新开始
}
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(); //新开始
}
catch(Exception e)
{
}
this.addCommand(back);
}
if (js==2) action=2;
if (js==3) action=3;
if (js==4) w.destroyApp(false);
}
}
}
//按钮监听
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);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -