📄 maincanvas2.java
字号:
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
import javax.microedition.media.*;
import javax.microedition.media.control.*;
import java.io.*;
public class MainCanvas2 extends GameCanvas implements Runnable,CommandListener{
public GameMIDlet game;
private HPImage hpg;
private Command back;
private int dir=0;
private Graphics g;
private LayerManager lm;
private int viewX;
private int viewY;
public Player player;
private VolumeControl vc;
private InputStream is;
private HeroSprite hero1;
private HeroSprite hero2;
private Sprite texiao1;
private Sprite texiao2;
private Sprite dan;
private Sprite daniao;
private BossOne bs;
private TiledLayer backtl;//back2;
private int[] backtile={1,1};
public int weight=0;
private Monster[] monster1Array=new Monster[6];
private Monster2[] monster2Array=new Monster2[6];
public MainCanvas2(GameMIDlet game){
super(true);
this.game=game;
back=new Command("back",Command.BACK,1);
addCommand(back);
setCommandListener(this);
setFullScreenMode(true);
if(Configure.shero==0){
hero1=new HeroSprite(ImageTools.creatImage("/juese/mingren/4mingrenchuchang44x53x10.png"),44,53);
} else{
hero1=new HeroSprite(ImageTools.creatImage("/juese/xiaoying/2putonggongji54X45X5.png"),54,45);
}
bs=new BossOne(ImageTools.creatImage("/juese/boss/3gongji62x51x9.png"),62,51,hero1);
dan=new Sprite(ImageTools.creatImage("/juese/boss/tiexiao42x40x7.png"),42,40);
daniao=new Sprite(ImageTools.creatImage("/juese/daduzi.png"),28,22);
Image manster1Img=ImageTools.creatImage("/juese/manster1.png");
Image manster2Img=ImageTools.creatImage("/juese/monster2.png");
for(int i=0;i<monster1Array.length;i++){
monster1Array[i]=new Monster(manster1Img,80,56,hero1);
}
for(int i=0;i<monster2Array.length;i++){
monster2Array[i]=new Monster2(manster2Img,55,51,hero1);
}
g=getGraphics();
lm=new LayerManager();
hero1.setPosition(10,95);
bs.setPosition(1500,95);
dan.setPosition(1500,75);
daniao.setPosition(0,0);
for(int i=0;i<monster1Array.length;i++){
monster1Array[i].setPosition(i*200+200,95);
}
for(int i=0;i<monster2Array.length;i++){
monster2Array[i].setPosition(i*200+100,95);
}
backtl=new TiledLayer(2,1,ImageTools.creatImage("/back/yinghua799x208.png"),799,208);
for(int i=0;i<2;i++){
backtl.setCell(i,0,backtile[i]);
}
lm.append(hero1);
lm.append(bs);
lm.append(dan);
lm.append(daniao);
for(int i=0;i<monster1Array.length;i++){
lm.append(monster1Array[i]);
}
for(int i=0;i<monster2Array.length;i++){
lm.append(monster2Array[i]);
}
lm.append(backtl);
hpg=new HPImage(g);
new Thread(this).start();//启动线程
}
public void run(){
while(true){
try{
Thread.sleep(78);
}catch(Exception e){e.printStackTrace();}
render();
gameLogic();
if(hero1.lifenum==0&&hero1.currentHp<=0){//判断主角死亡;
lm.remove(hero1);
game.show(game.OVER);
try{
Music.player.stop();
is = (this.getClass()).getResourceAsStream("/music/over.mid");
player = Manager.createPlayer(is,"audio/midi");
player.realize();
player.prefetch();
vc = (VolumeControl)player.getControl("VolumeControl");
vc.setLevel(Configure.volume);
player.start();
}catch(Exception e){e.printStackTrace();}
hero1=null;
break;
}
if(bs.mhp<=0){
lm.remove(bs);
lm.remove(dan);
dan.setPosition(-100,-100);
game.show(game.VICTORY);
Configure.score+=1500;
bs.mhp=100;
try{
Music.player.stop();
is = (this.getClass()).getResourceAsStream("/music/win.mid");
player = Manager.createPlayer(is,"audio/midi");
player.realize();
player.prefetch();
vc = (VolumeControl)player.getControl("VolumeControl");
vc.setLevel(Configure.volume);
player.start();
}catch(Exception e){e.printStackTrace();}
break;
}
}
}
public void render(){
g.setColor(0xffffff);
g.fillRect(0,0,getWidth(),getHeight());
lm.setViewWindow(viewX,viewY,getWidth(),getHeight());
lm.paint(g,0,0);
hpg.showHP(hero1);//显示角色的血量和生命数。
flushGraphics();
}
public void gameLogic(){//游戏逻辑
daniao.move(3,0);
dan.move(-3,0);
if(dan.getX()<1350){
dan.setPosition(1480,80);
}
if(hero1.collidesWith(dan,false)){
hero1.currentHp-=2;
}
if(hero1.currentHp<=0&&hero1.lifenum>=1){//生命与血量的转换;
hero1.lifenum-=1;
hero1.currentHp=100;
}
for(int i=0;i<monster1Array.length;i++){
if(monster1Array[i]!=null&&monster1Array[i].mhp<=0){
monster1Array[i].setPosition(-100,-200);
lm.remove(monster1Array[i]);
Configure.score+=100;
monster1Array[i].mhp=60;
}
}
for(int i=0;i<monster2Array.length;i++){
if(monster2Array[i]!=null&&monster2Array[i].mhp<=0){
lm.remove(monster2Array[i]);
monster2Array[i].setPosition(-100,-200);
Configure.score+=100;
monster2Array[i].mhp=60;
}
}
weight=weight+3;
hero1.move(0,weight);
int key=getKeyStates();
if(hero1.getY()>95){//落地
hero1.move(0,-weight);
weight=0;
}
if(key==0){//不按键状态
if(hero1.herostate!=hero1.STAND_RIGHT){
//hero1.setFrameSequence(hero1.stand1);
hero1.herostate=hero1.STAND_RIGHT;
if(Configure.shero==0){
hero1.setImage(ImageTools.creatImage("/juese/mingren/xiaoying29x51x2.png"),29,51);
}else{
hero1.setImage(ImageTools.creatImage("/juese/xiaoying/zhanli.png"),21,48);
}
}
}
if((key&GameCanvas.RIGHT_PRESSED)!=0){//往前走
hero1. rightwalk();
viewX=viewX+3;
if(hero1.getX()>(backtl.getWidth()-hero1.getWidth())){
hero1.move(-3,0);
}
if(viewX>backtl.getWidth()-getWidth()){
viewX=viewX-3;
}
if(hero1.getX()<getWidth()/2-hero1.getWidth()){
viewX=viewX-3;
}
}
if((key&GameCanvas.LEFT_PRESSED)!=0){//往后走
hero1.leftwalk();
viewX=viewX-3;
if(hero1.getX()<0){
hero1.move(3,0);
}
if(viewX<0){
viewX=viewX+3;
}
if(hero1.getX()>viewX+getWidth()/2){
viewX=viewX+3;
}
}
if((key&GameCanvas.FIRE_PRESSED)!=0 ){//攻击
hero1.kit();
/* 攻击怪物,怪物掉血; */
for(int i=0;i<monster1Array.length;i++){
if(hero1.collidesWith(monster1Array[i],false)){
monster1Array[i].mhp-=6;
}
}
for(int i=0;i<monster2Array.length;i++){
if(hero1.collidesWith(monster2Array[i],false)){
monster2Array[i].mhp-=5;
}
}
if(hero1.collidesWith(bs,false)){
bs.mhp-=5;
}
}
if((key&GameCanvas.UP_PRESSED)!=0){//往上跳。
hero1.jumpup(weight);
}
if((key&GameCanvas.UP_PRESSED)!=0&&(key&GameCanvas.RIGHT_PRESSED)!=0){//前斜跳
hero1.jumpright(weight);
viewX=viewX+3;
if(hero1.getX()>(backtl.getWidth()-hero1.getWidth())){
hero1.move(-3,0);
}
if(viewX>backtl.getWidth()-getWidth()){
viewX=viewX-3;
}
if(hero1.getX()<getWidth()/2-hero1.getWidth()){
viewX=viewX-3;
}
}
if((key&GameCanvas.UP_PRESSED)!=0&&(key&GameCanvas.LEFT_PRESSED)!=0){//后跳
hero1.jumpleft(weight);
viewX=viewX-3;
if(hero1.getX()<0){
hero1.move(3,0);
}
if(viewX<0){
viewX=viewX+3;
}
if(hero1.getX()>viewX+getWidth()/2){
viewX=viewX+3;
}
}
if((key&GameCanvas.GAME_A_PRESSED)!=0){//前跑
hero1.runright();
viewX=viewX+7;
if(hero1.getX()>(backtl.getWidth()-hero1.getWidth())){
hero1.move(-7,0);
}
if(viewX>backtl.getWidth()-getWidth()){
viewX=viewX-7;
}
if(hero1.getX()<getWidth()/2-hero1.getWidth()){
viewX=viewX-7;
}
}
/* if((key&GameCanvas.GAME_B_PRESSED)!=0){
hero1.die();
}
if((key&GameCanvas.GAME_C_PRESSED)!=0){
hero1.beikit();//被打
}
if((key&GameCanvas.GAME_D_PRESSED)!=0){//技能攻击
hero1.jineng(weight);
lm.append(texiao2);
texiao2.setPosition(hero1.getX()+33,hero1.getY());
viewX=viewX+3;
if(hero1.getX()>(backtl.getWidth()-hero1.getWidth())){
hero1.move(-3,0);
}
if(viewX>backtl.getWidth()-getWidth()){
viewX=viewX-3;
}
if(hero1.getX()<getWidth()/2-hero1.getWidth()){
viewX=viewX-3;
}
}
//daniao.nextFrame();
*/
hero1.nextFrame();
bs.nextFrame();
dan.nextFrame();
daniao.nextFrame();
for(int i=0;i<monster1Array.length;i++){
monster1Array[i].act();
monster1Array[i].nextFrame();
}
for(int i=0;i<monster2Array.length;i++){
monster2Array[i].act();
monster2Array[i].nextFrame();
}
}
public void commandAction(Command c,Displayable d){//软件接口方法
if(c==back){
game.show(game.MENU);
try{
Music.player.stop();}catch(Exception e){e.printStackTrace();}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -