亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? subcanvas.java

?? 一款手機游戲
?? JAVA
?? 第 1 頁 / 共 2 頁
字號:
/* 
 * Author: Huang ye(www.hyweb.net)
 * 代碼開源, 引用請注明出處
 * 
 * 創建日期 2005-2-24
 *
 * TODO 要更改此生成的文件的模板,請轉至
 * 窗口 - 首選項 - Java - 代碼樣式 - 代碼模板
 */
package net.hyweb;

import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.GameCanvas;
import javax.microedition.lcdui.game.*;
import javax.microedition.lcdui.game.LayerManager;


import java.util.*;

/** * @author user
 * 
 * TODO 要更改此生成的類型注釋的模板,請轉至
 * 窗口 - 首選項 - Java - 代碼樣式 - 代碼模板 */

public class SubCanvas extends GameCanvas implements Runnable, CommandListener {

    /**
     * 
     * @uml.property name="subMIDlet"
     * @uml.associationEnd multiplicity="(0 1)"
     */
    
    private Controller controller;
    
	private Graphics  graphics;
	private Thread    thread;
	private boolean   threadAlive = false;
	
	private Command startCommand;
	private Command exitCommand;
	private Command pauseCommand;
	
    //圖層數據
	private LayerManager layerManager;
	private TiledLayer   layerSeaback;
	
	private Sprite       spriteMap;
	
	public final int GAME_INIT  = 0;              //游戲初始狀態
	public final int GAME_RUN   = 1;              //游戲運行狀態
	public final int GAME_OVER  = 4;              //游戲結束狀態
	public final int GAME_PAUSE = 5;
	public final int GAME_SUSPEND      = 9;       //暫停狀態
	public   boolean COMMAND_ADD_FLAG  = false;   //是否已經添加Command標識
	
	public static final int TROOP_PLAYER  = 0;   //敵我標識
    public static final int TROOP_ENEMY   = 1;
    
    public static       int PLAYER_LEVEL        = 1;                    //當前玩家水平
    public static       int ENEMY_MAX           = PLAYER_LEVEL * 10;    //最大敵人數量
    public static       int ENEMY_CURRENT       = 0;                    //當前敵人數量
    public static       int ENEMY_CURRENT_LIMIT = 0;                    //當前敵人數量限制
    
	protected           int     TRIGGER_COUNT = 0;                //拖延標識,避免敵人新潛艇同一時刻全部產生
	protected           int     TICK_COUNT    = 0;
	
	public  static int mainWidth;                 //屏幕寬度
	public  static int mainHeight;                //屏幕高度
	public         int gameState;                 //游戲狀態
	
	public final static int TILE_WIDTH  = 10;     //背景 單元寬度 10px
	public final static int TILE_HEIGHT = 10;     //背景 單元高度 10px
	
	/** 動畫變化頻率(200ms)
	 * <code>MILLIS_PER_TICK</code> 的注釋
	 */
	public  final static int MILLIS_PER_TICK = 200;
	
	private final static int WIDTH_IN_TILES  = 45;     //游戲域寬度(以單元寬度計算) 16 .. N
	private final static int HEIGHT_IN_TILES = 24;     //游戲域高度(以單元高度計算)
	private final static int NUM_DENSITY_LAYERS = 4;   //海面密度(背景圖層)
	
	private int[] rotations = {
			Sprite.TRANS_NONE,
			Sprite.TRANS_MIRROR, 
			Sprite.TRANS_MIRROR_ROT90, 
			Sprite.TRANS_MIRROR_ROT180, 
			Sprite.TRANS_MIRROR_ROT270, 
			Sprite.TRANS_ROT90, 
			Sprite.TRANS_ROT180, 
			Sprite.TRANS_ROT270
	};

	/** 整個游戲背景寬度(以象素計算 : 寬度單元數 * 寬度單元象素)
	 * <code>WORLD_WIDTH</code> 的注釋
	 */
	public final static int WORLD_WIDTH = WIDTH_IN_TILES * TILE_WIDTH;   
	
	
	/** 整個游戲背景高度(以象素計算 : 高度單元數 * 高度單元象素)
	 * <code>WORLD_HEIGHTH</code> 的注釋
	 */
	public  final static int WORLD_HEIGHT = HEIGHT_IN_TILES * TILE_HEIGHT;
	
	private final static int NUM_DENSITY_LAYER_TILES     = 4;   //每一個密度層的TILE單元數
	private final static int FRACT_DENSITY_LAYER_ANIMATE = 20;
	
	private int   SEABACK_DENSITY;                          //游戲初始海水密度為0
	
	
    //private final  Vector oceanLayersVector       = new Vector();
    private        Vector fishCollectionVector    = new Vector();
    public         Vector enemyCollectionVector   = new Vector();
    public         Vector tinfishCollectionVector = new Vector();

    /**
     * 
     * @uml.property name="mySub"
     * @uml.associationEnd multiplicity="(0 1)"
     */
    private Sub mySub  = null;
    private Runtime rt = null;
    
    //初始化為不使用窗口區域視野
    private boolean userViewWindow = false;
    
    //創建不穩定的動畫線程
    private volatile Thread animationThread = null;
    
    //LayerManager的偏移坐標
    private int xViewWindow;
    private int yViewWindow;
    private int wViewWindow;
    private int hViewWindow;
    

	public SubCanvas(Controller controller){
		//不屏蔽鍵盤事件(潛艇運動采用主動輪詢,而開火則采用捕獲方式)
		super(false);
		
		this.controller   = controller;
		this.graphics     = getGraphics();
		this.layerManager = new LayerManager();
		
		//決定圖層顯示方式
		init();
		
		//畫布構造即建立玩家潛艇
		//初始位置為屏幕的(1/3, 1/3)位置
		mySub = new Sub(this, SubMIDlet.createImage("/res/sub.png"), mainWidth / 3, mainHeight / 3, layerManager);
		
		
		//監測運行時,以便及時運行垃圾回收
		rt = Runtime.getRuntime();
		
		startCommand = new Command("Start", Command.OK, 1);
		pauseCommand = new Command("Pause", Command.OK, 1);
		exitCommand  = new Command("Exit", Command.EXIT, 2);
		
		
		//初始化其它類及圖層
		
	    //初始化游戲狀態
		this.gameState = this.GAME_INIT;      //游戲處于demo畫面狀態
		
		
		//啟動應用程序
		threadAlive = true;
		thread = new Thread(this);
		thread.start();
		
	}

	/**
	 * 初始化地圖數據 和 地圖窗口顯示方式
	 */
	private void init(){
	    //清理數據
	    this.clearData();
	    
		mainWidth  = getWidth();
		mainHeight = getHeight();
		
		//判斷是否使用預覽模式窗口
		//根據顯示設備,設置合適的最大區和顯示視野
		this.xViewWindow = 0;
		if(WORLD_WIDTH > mainWidth){
			//現有設備不能容納所有游戲區域
			userViewWindow = true;
			this.wViewWindow = mainWidth;
		}else{
			//現有設備可以容納所有游戲區域
			this.wViewWindow = WORLD_WIDTH;
		}
		
		this.yViewWindow = 0;
		if(WORLD_HEIGHT > mainHeight){
			userViewWindow = true;
			this.hViewWindow = mainHeight;
		}else{
			this.hViewWindow = WORLD_HEIGHT;
		}
		
		//設定圖層顯示方式
		if(userViewWindow){
			this.layerManager.setViewWindow(xViewWindow, yViewWindow, wViewWindow, hViewWindow);
		}
	}
	
	protected void clearData(){
	    
	    PLAYER_LEVEL    = 1;
	    ENEMY_MAX       = PLAYER_LEVEL * 10;  
	    ENEMY_CURRENT   = 0;
	    TRIGGER_COUNT   = 0;
	    SEABACK_DENSITY = 0;
	    ENEMY_CURRENT_LIMIT = PLAYER_LEVEL * 2;
	}
	
	/**
	 *  程序作為線程, 每50ms運行刷新一次
	 */
	public void run() {
		//利用條件驅動線程
		while(threadAlive){
			try {
				Thread.sleep(25);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			
			//分離對玩家潛艇和普通物體的響應速度(一倍)
			if(gameState == GAME_RUN){
			    mySub.movePosition(getKeyStates());
			}
			
			if((TICK_COUNT % 2) == 0){
			    // 重畫事件
				this.paintCanvas(graphics);
				this.tick();
			}
			
			TICK_COUNT ++;
		}
		
	}
	
	protected synchronized void keyPressed(int keyCode){
		int action = getGameAction(keyCode);
		
		if(action == Canvas.FIRE && gameState == GAME_RUN){
			//玩家潛艇開火
		    if(mySub != null){
		        mySub.fire();
		    }
		}
	}
	
	/**
	 *  秒觸發器
	 */
	public synchronized void tick(){
		//主動查詢狀態
		int keyState = getKeyStates();
		
		if(gameState != GAME_OVER){
		    //執行魚類圖形運動
		    this.tickFishes();
		    
		    //執行魚雷觸發
		    this.tickTinfish();
		    
		    if(gameState == GAME_RUN){
		        //替代Canvas中的KeyPressed()捕獲事件
		        //mySub.movePosition(keyState);
		        
		        //創建并執行敵人潛艇行為
		        this.tickSub();
		        this.tickEnemySub();
		        
		        if(ENEMY_CURRENT ==0 && ENEMY_MAX == 0){
		            gameState = GAME_SUSPEND;
		        }
		        
		    }
		}
	}


    /**
     * 魚類圖形運動
     */
    private void tickFishes() {
		for(int i = 0; i < fishCollectionVector.size(); i++){
		    FishCollection collection = (FishCollection)fishCollectionVector.elementAt(i);
		    collection.tick();
		}
    }


    /**
     * 執行魚雷觸發
     */
    protected void tickTinfish() {
        //魚雷 圖形運動
		//如果某個魚雷元素已經結束生命周期, 則置null, 并從數組中刪除
		for(int j = 0; j < tinfishCollectionVector.size(); j++){
		    Tinfish tinfish = (Tinfish)tinfishCollectionVector.elementAt(j);
		    
		    //當生命周期結束
		    if(!tinfish.isLifeState()){
		        tinfishCollectionVector.removeElementAt(j);
		        this.layerManager.remove(tinfish);
		        tinfish = null;
		    }else{
		        tinfish.tick();
		    }
		}
    }
    

    /**
     * 玩家潛艇運動及生命狀態
     */
    private void tickSub() {
        if(!mySub.isLifeState()){       
            gameState = GAME_OVER;
        }
    }

    
    /**
	 * 創建并執行敵人潛艇的運行操作
	 */
	protected void tickEnemySub(){
	     
	    //當敵人剩余最大數量大于0,并且敵人當前數量小于并行敵人上限時
	    //可以添加新的敵人潛艇
	    if(ENEMY_MAX >= 0 && ENEMY_CURRENT <= ENEMY_CURRENT_LIMIT && ENEMY_CURRENT < 10){
	        int iLeft = ENEMY_MAX - ENEMY_CURRENT;
	        
	        //當剩余敵人量(最大量 - 當前量)大于0的時候
	        if(iLeft > 0){
	            int n = SubMIDlet.createRandom(iLeft) + 1;
	            Image image = SubMIDlet.createImage("/res/enemysub_f.png");

	            int xPosition = 0;
                int yPosition = (SubMIDlet.createRandom(5) * WORLD_HEIGHT) / 5;
	            for(int i = 0; i < n; i++){
	                
	                //拖延標識,避免敵人新潛艇同一時刻全部產生
	                if(TRIGGER_COUNT >= 20){
	                    
	                    yPosition = (WORLD_HEIGHT * (i % 5)) / 5;
	                    
	                    if(i % 2 == 0){
	                        xPosition = 0;
	                    }else{
	                        xPosition = WORLD_WIDTH - image.getWidth();
	                    }
	                    
	                    //創建一艘敵人潛艇, 同時更新監聽數組
	                    EnemySub enemySub = new EnemySub(this, image, xPosition, yPosition, PLAYER_LEVEL);

	                    ENEMY_CURRENT++;
	                    
	                    layerManager.insert(enemySub, 0);
	                    this.enemyCollectionVector.addElement(enemySub);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲图片激情小说| 国产成人亚洲综合a∨婷婷| 久久超碰97人人做人人爱| 99久久伊人网影院| 日韩精品一区二区三区在线| 亚洲另类一区二区| 成人永久免费视频| 精品理论电影在线| 免费在线观看一区| 欧美亚洲禁片免费| 1024成人网色www| 国产成人鲁色资源国产91色综| 欧美日韩一二三| 亚洲人成小说网站色在线| 国产精品影音先锋| 日韩精品中文字幕在线不卡尤物| 亚洲最新在线观看| 色哟哟欧美精品| 国产精品美女久久久久久久 | 欧美v日韩v国产v| 性感美女久久精品| 欧洲精品在线观看| 亚洲色图清纯唯美| 色综合激情五月| 亚洲免费在线视频| 91啪亚洲精品| 亚洲精品国久久99热| 97se亚洲国产综合自在线不卡| 国产日产欧美精品一区二区三区| 九九精品视频在线看| 日韩精品一区二区在线| 污片在线观看一区二区| 在线播放91灌醉迷j高跟美女 | 精东粉嫩av免费一区二区三区| 3751色影院一区二区三区| 午夜视黄欧洲亚洲| 91麻豆精品国产91久久久 | 91丝袜美腿高跟国产极品老师 | 精品粉嫩超白一线天av| 国产资源在线一区| 欧美经典一区二区| 暴力调教一区二区三区| 国产精品久久久久久福利一牛影视| 成人深夜在线观看| 成人免费在线播放视频| 日本道精品一区二区三区| 夜夜精品视频一区二区 | 中文字幕不卡在线观看| 97久久久精品综合88久久| 亚洲一区欧美一区| 精品剧情v国产在线观看在线| 国产成人在线免费观看| 综合在线观看色| 精品视频在线视频| 精品伊人久久久久7777人| 中文字幕高清不卡| 欧美日韩视频在线第一区| 日本vs亚洲vs韩国一区三区二区 | 国产婷婷色一区二区三区四区| 成人免费视频app| 一区二区三区鲁丝不卡| 日韩色视频在线观看| 福利一区福利二区| 一区二区三区91| 久久综合狠狠综合久久综合88 | 欧美大片在线观看| 99在线精品免费| 日韩avvvv在线播放| 国产精品免费人成网站| 欧美精品久久一区二区三区| 国产在线精品一区二区不卡了 | 亚洲免费在线播放| 欧美tickling挠脚心丨vk| 99国产精品99久久久久久| 美女精品一区二区| 18涩涩午夜精品.www| 精品日韩99亚洲| 欧美日韩中文精品| 99久久精品国产一区二区三区 | 久久毛片高清国产| 在线观看一区二区精品视频| 国产一区不卡在线| 亚洲狠狠爱一区二区三区| 国产欧美一区视频| 欧美电影免费观看高清完整版在线| 北条麻妃一区二区三区| 久久99久久久欧美国产| 亚洲综合色在线| 中文字幕电影一区| 欧美精品一区二区三区四区 | aaa亚洲精品一二三区| 另类小说色综合网站| 亚洲韩国一区二区三区| 国产欧美日韩亚州综合| 欧美mv日韩mv| 欧美一级搡bbbb搡bbbb| 欧美日韩精品专区| 色综合一区二区| 成人亚洲一区二区一| 久久机这里只有精品| 日日夜夜免费精品视频| 一区二区高清视频在线观看| 国产精品二三区| 中文字幕高清不卡| 中文字幕免费在线观看视频一区| 日韩欧美一区二区三区在线| 91精品国产综合久久蜜臀| 欧美在线观看18| 日本久久电影网| 色欧美片视频在线观看| 91亚洲精品乱码久久久久久蜜桃| 成人涩涩免费视频| 成人动漫av在线| 成人福利视频网站| 91蜜桃免费观看视频| 91毛片在线观看| 色噜噜久久综合| 91久久国产最好的精华液| 欧美中文字幕亚洲一区二区va在线 | 中文字幕一区不卡| 国产精品久久久久久久久图文区| 国产日产亚洲精品系列| 欧美激情综合在线| 国产精品成人免费精品自在线观看| 欧美激情一区不卡| 亚洲综合久久久久| 青青草国产精品亚洲专区无| 免费看欧美女人艹b| 国产露脸91国语对白| 国产成人精品在线看| 91免费在线视频观看| 欧美日韩高清影院| 2020国产成人综合网| 国产精品久久福利| 一区二区三区小说| 麻豆久久久久久| 国产乱人伦偷精品视频不卡| av网站免费线看精品| 欧美色图第一页| 精品久久久影院| 中文字幕一区二区三区在线观看| 亚洲免费观看高清完整版在线观看熊| 亚洲一区二区精品视频| 久久国产三级精品| 色婷婷综合久色| 日韩精品一区二区三区蜜臀| 国产精品免费aⅴ片在线观看| 性做久久久久久免费观看欧美| 久久精品国产一区二区| 91免费视频大全| 精品播放一区二区| 一区二区三区四区亚洲| 精品夜夜嗨av一区二区三区| 91网站在线观看视频| 日韩欧美一级二级| 一二三区精品福利视频| 国产一区在线观看麻豆| 在线一区二区三区| 久久影院视频免费| 亚洲v精品v日韩v欧美v专区| 国产成人小视频| 日韩精品一区国产麻豆| 亚洲精品久久久蜜桃| 国产精品一区二区在线播放| 欧美三级韩国三级日本三斤| 国产欧美日韩另类一区| 免费成人美女在线观看| 色88888久久久久久影院野外| 久久久久久久久久久久电影| 天天av天天翘天天综合网| 成人福利视频网站| 337p日本欧洲亚洲大胆色噜噜| 亚洲精品高清视频在线观看| 国产成人精品免费网站| 日韩一卡二卡三卡四卡| 亚洲综合色区另类av| 99久久精品久久久久久清纯| 久久影院视频免费| 久久精品国产第一区二区三区| 欧美少妇xxx| 亚洲影视在线播放| 波多野结衣一区二区三区| 久久久久99精品一区| 久久97超碰色| 日韩欧美国产综合| 免费人成在线不卡| 日韩一级黄色大片| 视频一区二区三区入口| 欧美视频一区在线观看| 亚洲欧美日韩国产综合| www.欧美精品一二区| 日本一区二区三区免费乱视频| 国产精品91一区二区| 久久精品人人做人人综合 | 欧美性色欧美a在线播放| 亚洲欧美电影院| 99久久精品国产毛片| 亚洲精品一二三| 日本韩国精品在线| 亚洲一区电影777|