📄 netbattlecanvas.java
字号:
import javax.microedition.lcdui.*;import javax.microedition.lcdui.game.*;import java.io.*; public class NetBattleCanvas extends GameCanvas implements Runnable,CommandListener{ //网络 private boolean isServer; //private boolean coned;//已连接 private boolean recieve=false;//接收到客户端(服务器要接收到,才能发送) private Connection conn; //基本属性 public static int level=1; private boolean win = false; private boolean lose = false; public static boolean gameover=false;//游戏结束 public static boolean interrupt;//控制kingSprite public static void setInterrupt(boolean interrupt) { NetBattleCanvas.interrupt = interrupt; } public boolean pressStop=false; private Command listCommand = new Command("Sound Setting",Command.ITEM,1); private Command pauseCommand = new Command("Pause",Command.STOP,1); private Command resumeCommand = new Command("Continue",Command.STOP,1); private Command exitCommand = new Command("Exit",Command.ITEM,2); private Command nextCommand = new Command("NextLevel",Command.BACK,1); private GameDesign gameDesign; //平铺层,Base,Tree,Water,Things private TiledLayer base; private TiledLayer water; private TiledLayer trees; private TiledLayer things; //绘图者,LayerManager private LayerManager layerManager; //精灵 private NetKingSprite kingSprite; private NetTentSprite tentSprite; public NetTentSprite getTentSprite() { return tentSprite; } private NetUserSprite userSprite[]; private NetEnemySprite enemySprite[]; private NetBulletSprite userBulletSprite[]; private NetBulletSprite enemyBulletSprite[]; private NetPetSprite petSprite[]; private int UserNum=2; private int UserBulletNum=2; private int EnemyNum=6; //total enemy number private int EnemyBulletNum=6; private int PetNum=4; //实用引用 private GameMidlet gameMidlet; //wait Sprite waitSprite = null; public NetBattleCanvas(GameMidlet gameMidlet,boolean isServer){ super(true); //启动网络 this.isServer = isServer; conn = new Connection(isServer); conn.start(); this.gameMidlet = gameMidlet; try { //Sound.instance.gamestartPlayer(); Sound.instance.resumeBack(); this.addCommand(pauseCommand); this.addCommand(listCommand); this.addCommand(exitCommand); this.setCommandListener(this); this.init(); } catch (IOException ex) { ex.printStackTrace(); } } public void init()throws IOException{ //绘图者添加平铺层 gameDesign = new GameDesign(); layerManager = new LayerManager(); switch(NetBattleCanvas.level){ case 1:gameDesign.updateLayerManagerForSchool(layerManager);break; case 2:gameDesign.updateLayerManagerForSchool1(layerManager);break; //case 3:gameDesign.updateLayerManagerForSchool2(layerManager);break; } //添加king Image kingImage = null; try{ kingImage = Image.createImage("/tank/king.png"); }catch(IOException e){ e.printStackTrace(); } kingSprite = new NetKingSprite(kingImage,layerManager,this); //帐篷 Image tentImage = null; try{ tentImage = Image.createImage("/tank/tent.png"); }catch(IOException e){ e.printStackTrace(); } tentSprite = new NetTentSprite(tentImage,layerManager,this); //1辆玩家坦克,1发玩家子弹;6辆敌人坦克,6发敌人子弹,4只Pet Image bulletImage = null; Image userImage = null; Image enemyImageNomal=null; Image enemyImageGreen=null; Image enemyImageRed=null; Image octImage = null; Image dogImage = null; Image catImage = null; Image spookImage = null; try{ bulletImage = Image.createImage("/tank/bullet.png"); userImage = Image.createImage("/tank/user.png"); enemyImageNomal = Image.createImage("/tank/enemyNomal.png"); enemyImageGreen = Image.createImage("/tank/enemyGreen.png"); enemyImageRed = Image.createImage("/tank/enemyRed.png"); octImage = Image.createImage("/tank/oct.png"); dogImage = Image.createImage("/tank/dog.png"); catImage = Image.createImage("/tank/cat.png"); spookImage = Image.createImage("/tank/spook.png"); }catch(IOException e){ e.printStackTrace(); } userBulletSprite = new NetBulletSprite[UserBulletNum]; userSprite = new NetUserSprite[UserNum]; enemyBulletSprite = new NetBulletSprite[EnemyBulletNum]; enemySprite = new NetEnemySprite[EnemyNum]; petSprite = new NetPetSprite[PetNum];//玩家初始化 for(int i=0;i<UserNum;i++){ userBulletSprite[i] = new NetBulletSprite(bulletImage,layerManager,100,true,this,gameDesign,kingSprite,tentSprite);//true表示玩家子弹; userSprite[i] = new NetUserSprite(userImage,layerManager,userBulletSprite[i],this,gameDesign,kingSprite,tentSprite,i); } userBulletSprite[1].nextFrame();//蓝色子弹 //服务器先暂停,有连接再开始 if(isServer){ stop(); Image waitImage = null; try{ waitImage = Image.createImage("/tank/wait.png"); }catch(IOException e){ e.printStackTrace(); } waitSprite = new Sprite(waitImage); waitSprite.defineReferencePixel(waitImage.getWidth()/2,waitImage.getHeight()/2); waitSprite.setRefPixelPosition(this.getWidth()/2, this.getHeight()/2); waitSprite.setVisible(true); layerManager.insert(waitSprite,0); this.removeCommand(this.pauseCommand); this.removeCommand(listCommand); }else{ this.removeCommand(this.pauseCommand); this.removeCommand(listCommand); }//敌人初始化 for(int i=0;i<EnemyNum;i++){ int t = i%4; if(t==0||t==1){ enemyBulletSprite[i] = new NetBulletSprite(bulletImage,layerManager,100,false,this,gameDesign,kingSprite,tentSprite);//false表示敌人子弹; enemySprite[i] = new NetEnemySprite(enemyImageNomal,layerManager,enemyBulletSprite[i],1,this,gameDesign,kingSprite,tentSprite); }else if(t == 2){ enemyBulletSprite[i] = new NetBulletSprite(bulletImage,layerManager,100,false,this,gameDesign,kingSprite,tentSprite);//false表示敌人子弹; enemySprite[i] = new NetEnemySprite(enemyImageGreen,layerManager,enemyBulletSprite[i],2,this,gameDesign,kingSprite,tentSprite); }else{ enemyBulletSprite[i] = new NetBulletSprite(bulletImage,layerManager,100,false,this,gameDesign,kingSprite,tentSprite);//false表示敌人子弹; enemySprite[i] = new NetEnemySprite(enemyImageRed,layerManager,enemyBulletSprite[i],3,this,gameDesign,kingSprite,tentSprite); } } //pet初始化 petSprite[0] = new NetPetSprite(octImage,200,30,1,layerManager,this,gameDesign); petSprite[1] = new NetPetSprite(dogImage,30,70,2,layerManager,this,gameDesign); petSprite[2] = new NetPetSprite(catImage,15,50,3,layerManager,this,gameDesign); petSprite[3] = new NetPetSprite(spookImage,15,90,4,layerManager,this,gameDesign); //敌人坦克启动 //new NetEnemyManager222(this); } public void run(){ Graphics g = getGraphics(); while(!gameover){ if(isServer){//收到,才发送给客户端 //(1)对本玩家操作(操作本机,发送对机) int keyStates = this.getKeyStates(); if(recieve&&conn!=null){//如果有接收到客户,则发送 if(this.interrupt){layerManager.remove(waitSprite);resume();}//有连接了才开始 conn.sentMessage(String.valueOf(keyStates)); input0(keyStates);//发送了才改变本机 recieve=false; } //(2)对方玩家操作(接收对机,操作本机) int keyStatesNet; if(conn != null){ keyStatesNet = conn.getMessage();//接收信息 if(keyStatesNet!= -1){//收到信息 recieve=true; input1(keyStatesNet); conn.setMessage(-1);//清除按键信息 } } } else{//不断发送给服务器
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -