亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
欧美精选一区二区| 国产精品二三区| 欧美性感一区二区三区| 国产一区在线观看麻豆| 久久97超碰色| 亚洲一区二区四区蜜桃| 亚洲女人小视频在线观看| 亚洲国产高清在线观看视频| 欧美一级夜夜爽| 欧美一区二区三区在| 精品久久久网站| 精品国产三级电影在线观看| 日韩一级高清毛片| 日韩欧美国产综合一区 | 国产精华液一区二区三区| 午夜av电影一区| 激情成人综合网| 国产成人夜色高潮福利影视| 国产v日产∨综合v精品视频| caoporen国产精品视频| 成人亚洲一区二区一| 日本精品一级二级| 91.xcao| 久久综合色一综合色88| 国产精品无遮挡| 亚洲国产日日夜夜| 日本午夜精品一区二区三区电影| 日韩精品1区2区3区| 国产一区二区免费看| 在线视频观看一区| 久久久综合视频| 丝袜a∨在线一区二区三区不卡| 美女一区二区三区| 在线观看av不卡| 久久久精品综合| 亚洲成人手机在线| 成人午夜免费av| 精品久久一区二区三区| 国产精品久久久久天堂| 看电视剧不卡顿的网站| 色噜噜狠狠成人中文综合| 国产偷国产偷亚洲高清人白洁| 亚洲电影在线免费观看| 91免费看`日韩一区二区| 日韩视频免费观看高清完整版在线观看 | 欧美亚洲另类激情小说| 亚洲欧美日韩综合aⅴ视频| 91福利国产精品| 欧美日韩国产一级| 日本韩国欧美三级| 亚洲免费电影在线| 欧美日韩中文国产| 免费的成人av| 中文字幕制服丝袜一区二区三区| 成人高清伦理免费影院在线观看| 综合久久综合久久| 欧美一区二区三区四区久久| 国产精品1区2区3区在线观看| 中文字幕第一区综合| 91精品国产手机| 成人av电影在线播放| 日本视频一区二区| 亚洲婷婷在线视频| 欧美r级电影在线观看| 91丨porny丨首页| 国产中文字幕一区| 日韩精品一区第一页| 国产精品久久久久久亚洲毛片| 欧美日韩日日骚| 91九色最新地址| 99在线热播精品免费| 国产一区二区三区| 美日韩一区二区| 日本欧美一区二区三区乱码| 夜夜精品视频一区二区 | 玉米视频成人免费看| 2023国产精品视频| 精品对白一区国产伦| 欧美高清视频在线高清观看mv色露露十八| 国产传媒一区在线| 懂色av一区二区三区免费观看| 免费精品视频最新在线| 婷婷丁香久久五月婷婷| 五月天网站亚洲| 国产麻豆精品视频| 国产精品18久久久久久久久 | 欧美大黄免费观看| 欧美r级在线观看| 久久免费偷拍视频| 国产夜色精品一区二区av| 国产精品欧美一区二区三区| 国产清纯白嫩初高生在线观看91| 精品国产免费视频| 日韩美女啊v在线免费观看| 国产精品久久影院| 亚洲国产精品影院| 韩国女主播一区二区三区| 国产成人亚洲综合a∨猫咪| 不卡电影免费在线播放一区| 91丨porny丨国产入口| 91精品黄色片免费大全| 日本一区二区在线不卡| 玉米视频成人免费看| 国产一区 二区 三区一级| 99这里只有久久精品视频| 日韩午夜电影在线观看| 中文字幕制服丝袜一区二区三区| 亚洲一区二区三区爽爽爽爽爽| 久久99久久99小草精品免视看| 99精品国产99久久久久久白柏| 欧美精品自拍偷拍动漫精品| 欧美极品aⅴ影院| 毛片基地黄久久久久久天堂| 日本高清免费不卡视频| 久久综合九色综合97婷婷女人| 亚洲国产一区二区三区青草影视| 国产成人一级电影| 日韩精品一区二区三区在线| 亚洲电影中文字幕在线观看| 毛片av中文字幕一区二区| 久久国产精品72免费观看| 久久国产乱子精品免费女| 色欧美片视频在线观看| 欧美国产日韩一二三区| 玖玖九九国产精品| 欧美一区二区三区在线看| 亚洲va韩国va欧美va精品 | 国产欧美一区二区精品忘忧草| 亚洲福利视频一区二区| 欧美婷婷六月丁香综合色| 亚洲男人的天堂av| 成人动漫av在线| 亚洲精品视频一区二区| 91在线免费播放| 亚洲一区在线电影| 欧美日本一区二区三区四区| 亚洲成年人影院| 日韩欧美精品在线| 国产一区二区网址| 国产精品视频yy9299一区| 成人18精品视频| 亚洲精品成a人| 欧美日本一区二区三区| 国产一二精品视频| 1024精品合集| 欧美一区二区三区啪啪| 国产精品一二一区| 亚洲香蕉伊在人在线观| 欧美videos中文字幕| 99久久婷婷国产综合精品电影| 亚洲男人天堂av| 日韩精品一区二区三区在线播放| 国产在线精品不卡| 一区二区三区成人| 久久亚洲精精品中文字幕早川悠里| 成人天堂资源www在线| 亚洲动漫第一页| 成人欧美一区二区三区黑人麻豆| 一道本成人在线| 国产伦精品一区二区三区免费迷| 一区二区三区四区激情| 国产午夜亚洲精品羞羞网站| 欧美唯美清纯偷拍| 成人毛片视频在线观看| 日韩专区中文字幕一区二区| 成人欧美一区二区三区白人| 日韩精品一区二区三区四区 | 日韩国产一区二| 亚洲精品国产无天堂网2021| 久久欧美中文字幕| 日韩精品一区二区三区中文精品| 在线视频综合导航| 91成人免费电影| 99精品国产视频| 日本韩国视频一区二区| 在线观看一区二区视频| 在线精品视频免费播放| 在线视频欧美区| 欧美专区在线观看一区| 欧美日韩一区二区三区高清| 欧美优质美女网站| 欧美浪妇xxxx高跟鞋交| 日韩一级视频免费观看在线| 欧美一区二区久久久| 久久久午夜精品理论片中文字幕| 久久精品综合网| 伊人婷婷欧美激情| 日韩电影网1区2区| 懂色av一区二区在线播放| 91免费观看国产| 91精品麻豆日日躁夜夜躁| 精品福利一区二区三区免费视频| 久久精品人人爽人人爽| 亚洲黄色小视频| 国产精品18久久久久久久久| 色狠狠综合天天综合综合| 欧美一区二区三区免费视频| 欧美国产激情二区三区| 亚洲高清免费视频| www.亚洲人|