📄 maincanvas.java
字号:
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
import javax.microedition.media.*;
import javax.microedition.media.control.*;
import java.io.*;
/*
*主游戏类1;
*
*/
public class MainCanvas 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;
private Sprite qingting;
private Sprite huan;
private Sprite die;
private HeroSprite hero1;
private HeroSprite hero2;
private Sprite texiao1;
private Sprite texiao2;
public Player player;
private VolumeControl vc;
private InputStream is;
private TiledLayer backtl;//背景。
private int[] backtile={1,1};
private static final int STAND=1;
private static final int LIFT=2;
private static final int RIGHT=3;
private static final int UP=4;
private static final int DOWN=5;
public int weight=0;
private Monster[] monster1Array=new Monster[6];
private Monster2[] monster2Array=new Monster2[6];
private BossOne bs;
private Sprite huo;
public MainCanvas(GameMIDlet game){
super(true);
this.game=game;
Configure.score=0;
back=new Command("back",Command.BACK,1);
addCommand(back);
setCommandListener(this);
setFullScreenMode(true);
Music mc=new Music();
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);
}
qingting=new Sprite(ImageTools.creatImage("/juese/qingting.png"),35,24);
texiao1=new Sprite(ImageTools.creatImage("/juese/mingren/4mingrenchuchang370x23x5.png"),74,23);
texiao2=new Sprite(ImageTools.creatImage("/juese/mingren/1mingrengongji.png"),29,41);
huan=new Sprite(ImageTools.creatImage("/back/huan.png"),22,23);
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);
}
bs=new BossOne(ImageTools.creatImage("/juese/boss/guaiwugengji45x60x5.png"),45,60,hero1);
huo=new Sprite(ImageTools.creatImage("/juese/boss/hand.png"),48,22);
die=new Sprite(ImageTools.creatImage("/juese/boss/dao62x55x5.png"),62,55);
g=getGraphics();
lm=new LayerManager();
hero1.setPosition(10,95);
texiao1.setPosition(0,125);
huan.setPosition(1920,90);
bs.setPosition(1800,95);
die.setPosition(1800,95);
huo.setPosition(1800,88);
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/tianyuan971x176.png"),971,176);
for(int i=0;i<2;i++){
backtl.setCell(i,0,backtile[i]);
}
/* 向管理器里加东西 */
lm.append(qingting);
lm.append(hero1);
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(texiao1);
lm.append(bs);
lm.append(huo);
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);
hero1=null;
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();}
game.show(game.OVER);
break;
}
if(hero1.collidesWith(huan,false)){//切换场景;
game.show(game.MAIN2);
game.main=null;
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(){
huo.move(-4,0);//怪物子弹;
if(huo.getX()<1650){
huo.setPosition(1800,98);
}
if(hero1.collidesWith(huo,false)){
hero1.currentHp-=2;
}
if(bs.mhp<=0){//判断怪物死亡;
lm.remove(bs);
lm.remove(huo);
huo.setPosition(-100,-100);
lm.insert(die,2);
lm.insert(huan,2);
Configure.score+=1000;
bs.mhp=100;
}
qingting.move(2,0);//背景蜻蜓;
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.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){//往前走
lm.remove(texiao1);
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-=5;
}
}
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-=4;
}
}
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;
}
} */
qingting.nextFrame();
hero1.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();
}
texiao1.nextFrame();
texiao2.nextFrame();
bs.nextFrame();
huo.nextFrame();
huan.nextFrame();
die.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 + -