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

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

?? tetriscanvas.java

?? 一個有關游戲方面的應用程序,希望大家指點啊,呵呵.
?? JAVA
?? 第 1 頁 / 共 2 頁
字號:
package game.tetris;



//Work Canvas
import game.bluetooth.*;
import game.tetris.*;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import javax.microedition.lcdui.*;

/**
 * <p>Title: </p>
 * <p>Description: 該類為游戲畫布</p>
 * <p>Copyright: Copyright (c) 2004</p>
 * <p>Company: www.jagie.com</p>
 * @author: an unknown Japanese,Jagie
 * @version 1.0
 */

public class TetrisCanvas
    extends Canvas
    implements CommandListener, Runnable {

  //Midlet
  protected MainMIDlet midlet;
  protected Command exitCmd;
  protected Command startCmd;
  

  protected int gameState; /* 游戲運行狀態 */

  protected TetrisBlock block; /* 當前下墜物*/
  protected TetrisMap map; /*游戲地圖*/
  
  protected TetrisBlock blockOther;
  protected TetrisMap mapOther;

  protected Thread thread; /* 重畫線程,該線程實現游戲畫布重畫機制 */

  /*counter,maxCount這2個變量是用來控制游戲速度 */
  protected int counter;
  protected int maxCount;


  
  boolean GAME_CLEAR_SCREEN = false;

  protected boolean startDemoFlag; /*是否已經顯示過開始畫面*/

  public  static int mainWidth; /*屏幕寬度,在sun gray emulator上=180*/
  public  static int mainHeight; /*屏幕高度,在sun gray emulator上=177*/

  public static int GAMEAREA_X; //游戲區域左上角x坐標,游戲區域為左邊的游戲容器區域和右邊的下一個下墜物顯示區域組成
  public static int GAMEAREA_Y; //游戲區域左上角y坐標
  public static int BRICK_WIDTH; //小磚塊的邊長

  public static final int BACKGROUND = 0x00000000; //背景顏色


  
  //edit wts 20060910
  private BluetoothConnection[] btConnections;
  private String role;
  

    
//  protected static final int PRESSED_KEY = 99; 		  
//  protected static final int PRESSED_STARTCOMMAND = 100; /* 傳輸給遠端玩家,自己按了開始鍵 */  
//  protected static final int PRESSED_EXITCOMMAND = 101;  /* 傳輸給遠端玩家,自己按了退出鍵 */  
//  protected static final int REMOTE_GAME_EXIT = 102;  
  protected static final int SEND_PN = 103;/*傳送和接收ketrisBlock的pattern和next值*/  
  protected static final int GAME_WAIT = 104; /*自身先按了,等待遠程用戶,主屏顯示等待*/  
  protected static final int GAME_WAIT_REMOTE = 105;/*遠程用戶先按了,等待本榿用戶,附屏顯示等待*/  
  protected static final int GAME_INIT = 106; /* 游戲初始狀態 */
  protected static final int GAME_RUN = 107; /* 游戲運行狀態 */
  protected static final int GAME_OVER = 108; /* 游戲結束狀態 */
  protected static final int GAME_START_DEMO = 109; /* demo狀態,顯示demo的畫面 */
  protected static final int GAME_SUSPEND = 110; /* 掛起狀態,值與demo狀態同 */
  protected static final int GAME_EXIT = 111;
  protected static final int GAME_WIN = 112;
  protected static final int GAME_DISCONNECTED = 113; /* 斷開狀態,為gameState_Remote所獨有 */
  protected static final int SEND_MAPDATA = 114;
  
  
  
  //edit wts 20060911
  public static int GAMEAREA_X_REMOTE;//附屏的X坐標
  public static int GAMEAREA_Y_REMOTE;//附屏的Y坐標  
  public static int BRICK_WIDTH_REMOTE;
  public static int mainWidth_Remote;
  public static int mainHeight_Remote;
  
  protected int gameState_Remote; /* 游戲運行狀態 */
  protected TetrisBlock block_Remote; /* 當前下墜物*/
  protected TetrisMap map_Remote; /*游戲地圖*/
  protected boolean startDemoFlag_Remote;
  
  /*counter_2,maxCount_2這2個變量是用來控制遠端用戶的游戲速度 */
  protected int counter_Remote;
  //protected int maxCount_Remote;  masCount_Remote不需要它
  
  public static int offSet ; //計算主屏位置的偏移值
  protected byte[] data;
  
  protected int pattern_Remote;
  protected int next_Remote;
  
  //聯機版
  public TetrisCanvas( MainMIDlet _midlet, BluetoothConnection[] btConns , String _role )
  {
	  midlet = _midlet;
	  
	  btConnections = btConns;
	  
	  role = _role;
	  
	  bug.println(role); 
	  
	  if( !( Role.ROLE_SINGLE == role ))
	  {
		  setCanvas();
		  
		  setReceiveThread();
	  }else
	  {
		  setSingleCanvas();
	  }
  }
  
//  public TetrisCanvas( MainMIDlet _midlet, String _role)
//  {
//	  midlet = _midlet;
//	  
//	  role = _role;
//	  
//	  setSingleCanvas();	  
//	  
//  }
  
  public void setSingleCanvas()
  {
	  mainHeight = getHeight();
	  mainWidth = getWidth();
	  offSet = 0;
	  
	  //	計算小磚塊寬度
	  int min = mainWidth;
	    
	    
	  //比較,使用高和寬中最小一個來計算
	    if (mainHeight < min) {
	      min = mainHeight;
	    }
	    
	    //游戲區域應該能被16整除
	    for (; min >= 0; min--) {
	      if (min % 16 == 0) {
	        break;
	      }
	    }

	    //游戲區域為min的方形,且min為16的倍數
	    BRICK_WIDTH = min / 16; //磚塊厚度
	    
	    GAMEAREA_X = (mainWidth - min) / 2 ;    
	    GAMEAREA_Y = (mainHeight - min) / 2;
	    
	    startDemoFlag = false; //還沒有顯示開始畫面
	    gameState = GAME_START_DEMO; //游戲處于demo畫面狀態
	    
	    map = new TetrisMap(this,true);
	    block = new TetrisBlock(map,true);
	    map.setTetrisBlock(block);
	    
	    addCommand();
	    thread = new Thread(this);
	    thread.start();	    
  }

  public void setCanvas( )
  {  	

	    init();

	    //true設置的是主屏,false設置的是附屏
	    map = new TetrisMap(this , true);
	    block = new TetrisBlock(map ,true);
	    map.setTetrisBlock(block);
	    
        //edit wts 20060911 
	    
	    map_Remote = new TetrisMap(this,false);
	    block_Remote = new TetrisBlock(map_Remote,false);
	    map_Remote.setTetrisBlock(block_Remote);
	    
	    addCommand();
	    
//	    startCmd = new Command("開始", Command.OK, 0);
//	    exitCmd = new Command("退出", Command.EXIT, 0);
//	    addCommand(startCmd);
//	    addCommand(exitCmd);
//	    setCommandListener(this);

	    thread = new Thread(this);
	    thread.start();
	    
	    bug.println(role);
  }
  
  private void addCommand()
  {
	    startCmd = new Command("開始", Command.OK, 0);
	    exitCmd = new Command("退出", Command.EXIT, 0);
	    addCommand(startCmd);
	    addCommand(exitCmd);
	    setCommandListener(this);
	  
  }
  
  
  /* 初始化,顯示demo畫面所需的設置 */
  protected void init() {

	  //假設主屏所占用的是屏幕的2/3(下部),則寬度不變,高度取2/3,再加一個高度1/3的偏移值即可!!
    mainHeight = getHeight() * 2 / 3;
    offSet = mainHeight / 3 + mainHeight * 2 / 15;
    mainWidth = getWidth() ;
    
    //計算小磚塊寬度
    int min = mainWidth;
    
    
    //比較,使用高和寬中最小一個來計算
    if (mainHeight < min) {
      min = mainHeight;
    }
    
    //游戲區域應該能被16整除
    for (; min >= 0; min--) {
      if (min % 16 == 0) {
        break;
      }
    }

    //游戲區域為min的方形,且min為16的倍數
    BRICK_WIDTH = min / 16; //磚塊厚度
    
    GAMEAREA_X = (mainWidth - min) / 2 ;    
    GAMEAREA_Y = (mainHeight - min) / 2 + offSet;
    
    startDemoFlag = false; //還沒有顯示開始畫面
    gameState = GAME_START_DEMO; //游戲處于demo畫面狀態
    
    initRemote();
  }
  
  public void initRemote()
  {

	  //附屏占用的是屏幕的1/5(上部),則寬度不變,高度取1/5
	     mainHeight_Remote = getHeight() * 1 / 5;
	     mainWidth_Remote = getWidth() ;
	    
	    //	  計算小磚塊寬度
	    int min_2 = mainWidth_Remote;	    
	    
	    if (mainHeight_Remote < min_2) {
	      min_2 = mainHeight_Remote;
	    }	    

	    //游戲區域應該能被16整除
	    for (; min_2 >= 0; min_2--) {
	      if (min_2 % 16 == 0) {
	        break;
	      }
	    }

	    //游戲區域為min的方形,且min為16的倍數
	    BRICK_WIDTH_REMOTE = min_2 / 16; //磚塊厚度
	   
	    
	    GAMEAREA_X_REMOTE = (mainWidth_Remote - min_2) / 2 ;  
	    GAMEAREA_Y_REMOTE = (mainHeight_Remote - min_2) / 2;	    
	    
	    startDemoFlag_Remote = false;
	    gameState_Remote = GAME_START_DEMO;
	    
	    
	    outputParameters();
  }
  
  public void outputParameters()
  {
	  bug.println("mainWidth = " + mainWidth);
	  bug.println("mainHeight = " + mainHeight);			  
	  bug.println("BRICK_WIDTH = "+ BRICK_WIDTH);
	  bug.println("GAMEAREA_X = "+ GAMEAREA_X);
	  bug.println("GAMEAREA_Y = "+ GAMEAREA_Y);
	  
	  bug.println("mainWidth_2 = " + mainWidth_Remote);
	  bug.println("mainHeight_2 = " + mainHeight_Remote);
	  bug.println("BRICK_WIDTH_2 = "+BRICK_WIDTH_REMOTE);
	  bug.println("GAMEAREA_X_2 = "+ GAMEAREA_X_REMOTE);
	  bug.println("GAMEAREA_Y_2 = "+ GAMEAREA_Y_REMOTE);
  }

  
  public void setReceiveThread()
  {
      for( int i=0; i<btConnections.length; i++ )
      {   // loop through all connections
          ReceiveThread rt = new ReceiveThread( i );
          rt.start();
      }
  }
  
  public void run() {
    while (true) {
      try {
        thread.sleep(50);
      }
      catch (InterruptedException e) {
        break;
      }
      repaint();

    }
  }

  public synchronized void commandAction(Command c, Displayable d) {
	  
	  
    if (c == exitCmd) {
      midlet.destroyApp(false);
      midlet.notifyDestroyed();
      transmitMsg( GAME_EXIT );
      
      bug.println("send GAME_EXIT state!" );
      
      // add by wts 20060912
      //transmitMsg( PRESSED_EXITCOMMAND );
    }
    else if (c == startCmd) {
      //還沒有開始游戲或者游戲已結束
      if (startDemoFlag == false||gameState == GAME_OVER|| gameState == GAME_WIN) {
        startDemoFlag = true;
        //game = GAME_INIT;
        gameState = GAME_WAIT;
        
        //如果遠端主機己經在等待,則不必顯示等待畫面,直接進入游戲
        if( gameState_Remote == GAME_WAIT_REMOTE || Role.ROLE_SINGLE == role)
        {
        	gameState = GAME_INIT;
        	gameState_Remote = GAME_INIT;
        	transmitMsg( GAME_INIT );
        }
        else
        {
        	transmitMsg( GAME_WAIT );
        }

        sendPN();

      }      
      else if( gameState == GAME_WAIT )
      {
    	  if( gameState_Remote == GAME_WAIT_REMOTE )
          {
          	gameState = GAME_INIT;
          	gameState_Remote = GAME_INIT;
          	transmitMsg( GAME_INIT );
          }
      }
      else {

        //處于游戲中

        if (gameState == GAME_SUSPEND) {
          //如果處于掛起狀態,則進入運行狀態        	
          gameState = GAME_RUN;          
          transmitMsg( GAME_RUN );
        }
        else if (gameState == GAME_RUN) {
          gameState = GAME_SUSPEND;
          transmitMsg( GAME_SUSPEND );
        }
      }
    }//end else if : 按下的是startCmd

  }

  protected synchronized void keyPressed(int keyCode) {
    int action = getGameAction(keyCode);
    
    bug.println(" key action code = " + action);    
    
    if (action == Canvas.LEFT && gameState == GAME_RUN) { /* 左移 */
      if (block.checkMove(1)) {
        block.move(1);
      }
    }
    else if (action == Canvas.RIGHT && gameState == GAME_RUN) { /* 右移 */
      if (block.checkMove(2)) {
        block.move(2);
      }
    }
    else if (action == Canvas.UP && gameState == GAME_RUN) { /* 下墜塊變化 */
      if (block.checkRot()) {
        block.rotBlock();
      }
    }
    else if (action == Canvas.DOWN && gameState == GAME_RUN) { /* 下移 */
      if (block.checkDown()) {
        block.down();
      }
    }
    else if (action == Canvas.FIRE && gameState == GAME_RUN) { /* 下墜塊變化 */
      if (block.checkRot()) {
        block.rotBlock();
      }
    }    
    //將信息傳給遠端用戶
    transmitMsg(action);    
    
  }  

  
  //繪制主屏的任務全部放這里
  public void paint(Graphics g) {

	if ( ! GAME_CLEAR_SCREEN )
	{
		GAME_CLEAR_SCREEN = true;
		
		g.setColor(BACKGROUND);
		
		g.fillRect(0,offSet,getWidth(), getHeight());
		
		return;
	}
    if (gameState == GAME_START_DEMO) { /* 游戲處于demo畫面狀態 */
        if (!startDemoFlag) {
          //游戲還沒開始,顯示demo畫面
          g.setColor(BACKGROUND);
          
          g.fillRect(0, 0, this.mainWidth, this.mainHeight);

          g.setColor(0, 255, 0);
          
          g.setFont(Font.getFont(Font.FACE_SYSTEM, Font.STYLE_BOLD,
                                 Font.SIZE_LARGE));

          g.drawString("m俄羅斯方塊", mainWidth / 2, this.mainHeight / 4 + offSet,
                       g.BASELINE | g.HCENTER);
          
          Font f2 = Font.getFont(Font.FACE_PROPORTIONAL, Font.STYLE_PLAIN,
                                 Font.SIZE_MEDIUM);
        }

        /* 游戲第一次啟動 */
        //第一次啟動顯示開始畫面,
        //之后都是直接顯示(直接開始),
        
      }
    else if ( gameState == GAME_WAIT )
    {
    	if( gameState_Remote == GAME_WAIT_REMOTE)
    	{
    		gameState = GAME_INIT;
    		
    		gameState_Remote = GAME_INIT;
    	}else
    	{

        	g.setColor(BACKGROUND);
        	
        	g.fillRect(0, 0, this.mainWidth, this.mainHeight+ offSet);

            g.setColor(0, 255, 0);
            
            g.setFont(Font.getFont(Font.FACE_SYSTEM, Font.STYLE_BOLD,
                                   Font.SIZE_LARGE));
            
            g.drawString("m等待", mainWidth / 2, mainHeight / 4 + offSet,
                         g.BASELINE | g.HCENTER);
            
            Font f2 = Font.getFont(Font.FACE_PROPORTIONAL, Font.STYLE_PLAIN,
                                   Font.SIZE_MEDIUM);
    	}        
        
    }
      else if (gameState == GAME_INIT) {
    	  
        g.setColor(BACKGROUND);
        
        g.fillRect(0,0, getWidth(), getHeight());
    	  
        //畫出游戲地圖(容器部分)
        map.init();
        
        map.paint(g);

        block.init();
        
        block.drawBlock(g);
        
        block.drawNextBlock(g);

        counter = 0;
        
        maxCount = 8;

        gameState = GAME_RUN;
      }
      else if (gameState == GAME_RUN) {

        counter++;
        
        if (counter >= maxCount) {
          if (block.checkDown()) {
            block.down();
            block.paint(g);
          }
          else {
            int y = block.getY();
            block.paint(g);
            block.fixBlock();
            if (map.check(g, y)) {
              map.repaintMap(g);              
            }
            
            //無論是否有行被消,均要傳送
            //將map數據傳遞給遠程用戶,在遠程用戶的附屏上顯示它.            
            //實現serialize接口
            sendMapdata();            
            
            block.generatePN();
            
            sendPN();
            
            block.init();
            
            y = block.getY();

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线不卡中文字幕| 色综合久久六月婷婷中文字幕| 国产精品色哟哟网站| 久久久久久久电影| 久久亚洲二区三区| 久久青草欧美一区二区三区| 日韩精品一区在线| 久久久综合网站| 中文子幕无线码一区tr| 国产精品久久久久久久久免费桃花 | 国产成人在线免费| 国产精品一级在线| 成人va在线观看| 欧美亚洲综合色| 91精品婷婷国产综合久久竹菊| 欧美一区二区三区在线观看| 26uuu精品一区二区在线观看| 337p粉嫩大胆色噜噜噜噜亚洲| 国产无一区二区| 亚洲美女免费在线| 奇米影视在线99精品| 国内不卡的二区三区中文字幕| 国产成人免费视频网站| 色狠狠色噜噜噜综合网| 欧美一区二区三区男人的天堂| 欧美大肚乱孕交hd孕妇| 欧美韩国一区二区| 亚洲一区二区在线观看视频| 99久久久国产精品| 色菇凉天天综合网| 91精品国产综合久久久久| 26uuu亚洲| 亚洲卡通欧美制服中文| 免费成人在线观看视频| 99久久久国产精品| 欧美成人性战久久| 亚洲精品乱码久久久久久| 三级欧美在线一区| 成人av电影在线网| 日韩免费观看2025年上映的电影| 国产精品拍天天在线| 青青草原综合久久大伊人精品 | 91精品国产aⅴ一区二区| 国产日韩亚洲欧美综合| 亚洲不卡av一区二区三区| 国产精品一区二区在线观看网站| 欧美亚洲国产一区二区三区va| 精品捆绑美女sm三区| 亚洲国产乱码最新视频 | 蜜臀av一区二区| 色综合色狠狠天天综合色| 欧美精品一区二区在线播放| 亚洲国产视频a| 成人的网站免费观看| 日韩精品一区二区三区中文精品| 一区二区三区在线观看视频 | 亚洲另类一区二区| 丁香激情综合五月| 精品国产自在久精品国产| 亚洲亚洲精品在线观看| eeuss鲁片一区二区三区在线看| 亚洲精品一线二线三线| 日韩电影免费在线观看网站| 在线视频国产一区| 成人欧美一区二区三区1314| 国产成人免费网站| 亚洲精品一区二区三区影院| 日本欧美一区二区在线观看| 欧美高清视频不卡网| 一区二区三区蜜桃| 91视频你懂的| 亚洲色图制服诱惑 | 久久网这里都是精品| 免费观看日韩av| 日韩欧美黄色影院| 美腿丝袜一区二区三区| 欧美一级理论片| 日韩av在线发布| 911精品国产一区二区在线| 亚洲第一会所有码转帖| 欧美日韩夫妻久久| 日韩黄色免费网站| 日韩欧美国产一区二区三区 | 自拍偷拍欧美激情| 91一区二区三区在线播放| 亚洲欧洲日本在线| 在线观看日产精品| 日韩精品91亚洲二区在线观看| 日韩欧美卡一卡二| 国产成人aaaa| 亚洲欧美国产高清| 在线播放国产精品二区一二区四区| 人人精品人人爱| 精品国产乱码久久久久久久久| 国产一区二区看久久| 中文乱码免费一区二区| 91免费看视频| 青娱乐精品视频| 亚洲国产成人在线| 欧美午夜电影网| 久久99在线观看| 亚洲私人影院在线观看| 日韩亚洲欧美高清| 国产一区二区三区av电影 | 欧美乱妇23p| 国产在线麻豆精品观看| 日韩一区中文字幕| 日韩欧美你懂的| 色综合激情五月| 蜜臀va亚洲va欧美va天堂| 日本一区二区免费在线观看视频| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 中文字幕在线不卡一区二区三区| 91久久免费观看| 久久aⅴ国产欧美74aaa| 亚洲人一二三区| 日韩美女天天操| 在线免费av一区| 国产一区二区在线免费观看| 亚洲丝袜精品丝袜在线| 欧美一区二区三区视频| 99久久精品免费看国产| 精品一区二区免费视频| 亚洲免费观看高清完整版在线观看熊 | 欧美三区在线观看| 国产精品亚洲人在线观看| 亚洲一二三四区不卡| 国产欧美日韩三区| 日韩欧美国产一区二区三区| 在线观看视频一区二区| 国产99久久久久| 蜜臀av性久久久久蜜臀aⅴ流畅| 亚洲色图制服诱惑| 日本一区二区三区免费乱视频| 91精品久久久久久久99蜜桃| jvid福利写真一区二区三区| 国产精品亚洲专一区二区三区| 丝袜诱惑亚洲看片| 亚洲图片欧美一区| 成人免费在线观看入口| 国产精品美女久久久久久久 | aaa欧美日韩| 国产福利一区在线| 久久69国产一区二区蜜臀| 日韩精品成人一区二区三区| 亚洲第一主播视频| 一区二区三区加勒比av| 综合久久久久久久| 中文字幕在线播放不卡一区| 国产欧美日韩精品a在线观看| 久久免费的精品国产v∧| 日韩视频中午一区| 欧美大胆一级视频| 日韩欧美视频在线| 精品成人一区二区三区四区| 精品国产在天天线2019| 久久久久久久久久久久久女国产乱| 日韩三级视频在线观看| 精品国产免费视频| 久久综合久久综合九色| 精品国一区二区三区| 国产日韩av一区二区| 国产人伦精品一区二区| 国产精品久久影院| 亚洲免费三区一区二区| 亚洲国产欧美日韩另类综合| 亚洲成在人线免费| 免费久久精品视频| 国产成人免费在线观看不卡| 播五月开心婷婷综合| 欧美在线短视频| 91精品国产综合久久精品图片 | 91精品一区二区三区在线观看| 91麻豆精品国产91久久久使用方法 | 日本三级亚洲精品| 视频一区视频二区中文| 欧美一区三区二区| 亚洲一区二区三区免费视频| 成人激情小说乱人伦| 欧美电视剧在线看免费| 五月综合激情日本mⅴ| 99久久99精品久久久久久 | 狠狠色丁香婷婷综合久久片| 欧美日韩国产高清一区二区三区| 亚洲欧美日韩在线| 成人网男人的天堂| 久久亚洲免费视频| 久草精品在线观看| 日韩视频一区二区在线观看| 亚洲一区二区三区中文字幕在线| 成人免费看片app下载| 久久亚洲综合色| 精品无码三级在线观看视频| 欧美日韩一区二区三区在线看 | 欧美日韩一区国产| 亚洲一区免费观看| 91久久精品国产91性色tv| 一区二区中文视频| 色婷婷综合在线| 亚洲人亚洲人成电影网站色|