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

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

?? playerscreen.java

?? 資源類別:Delphi控件所屬子類:數據庫相關 開發語言:Java 相關標簽:網絡 Java 格斗游戲 源碼 詳細描述: 一款JAVA網絡格斗游戲
?? JAVA
字號:
/**
   游戲玩家顯示類
   Download by http://www.codefans.net
 **/

package game.multiplayer;

import java.io.*;
import javax.microedition.io.*;
import javax.microedition.lcdui.*;

public class PlayerScreen
    extends Canvas
    implements CommandListener {

  //UDP服務器連接串
  String url = "datagram://bji18nln1:5188";

  //加入游戲命令對象
  Command attendGame = null;

  //當前玩家命令信息變量
  String playerCmd = null;
  String playerInfo = null;
  String currentPlayer = null;

  //游戲圖片對象
  Image boxBody = null;
  Image enemy = null;
  Image effect = null;
  Image backGround = null;
  Image winImage = null;
  Image titleImage = null;

  SoundPlayer soundPlayer = new SoundPlayer();


  //游戲圖片長度與寬度變量
  int width = 24, height = 41;
  //游戲圖片顯示區域的索引值
  int widthIndex = 1, heightIndex = 1;

  //判斷是否為搏擊狀態
  boolean isPressedHitKey = false;

  // 構造器
  public PlayerScreen(PlayerMIDlet playerMIDlet) {

    this.playerMIDlet = playerMIDlet;
    try {
      jbInit();
    }
    catch (Exception e) {
      e.printStackTrace();
    }
  }

  //組件初始化

  private void jbInit() throws Exception {
    setCommandListener(this);
    //添加命令對象
    addCommand(new Command("退出游戲", Command.EXIT, 1));
    attendGame = new Command("加入游戲", Command.OK, 1);
    addCommand(attendGame);

    //創建裝載圖片
    try {

      boxBody = Image.createImage("/imgs/charac.png");
      enemy = Image.createImage("/imgs/enemy.png");
      effect = Image.createImage("/imgs/effect.png");
      backGround = Image.createImage("/imgs/bg.png");
      winImage = Image.createImage("/imgs/win.png");
      titleImage = Image.createImage("/imgs/title.png");
    }
    catch (IOException ex) {
      ex.printStackTrace();
    }

    //啟動查詢線程
    start();

  }

  //啟動查詢線程方法
  public void start() {
    new java.lang.Thread(new UDPListener()).start();
  }

  //繪圖方法
  public void paint(Graphics g) {
    //清除屏幕
    ScreenDrawer.clearScreen(g, getWidth(), getHeight());

    //是否擊中標志
    boolean hitedFlag = false;
    //是否出擊標志
    boolean isHit = false;
    //是否為當前用戶出擊標志
    boolean isCurrentUserHit = false;

    if (playerInfo != null) {

      //繪制背景圖片
      drawBackGround(g);

      //獲取積分信息串
      int scopeIndex = playerInfo.indexOf("?");
      String scopeString = playerInfo.substring(scopeIndex + 1);
      int scope = scopeString.indexOf(",");
      String player1Scope = scopeString.substring(0, scope);
      String player2Scope = scopeString.substring(scope + 1);

      //獲取命令信息串
      String playerInfoandCmd = playerInfo.substring(0, scopeIndex);
      int cmdIndex = playerInfoandCmd.indexOf(":");
      String playerMsg = playerInfoandCmd.substring(0, cmdIndex);
      String cmdInfo = playerInfoandCmd.substring(cmdIndex + 1);

      //獲取player的當前坐標
      int index1 = playerMsg.indexOf(",");
      int index2 = cmdInfo.indexOf(",");
      int player1X = Integer.parseInt(playerMsg.substring(0, index1));
      int player2X = Integer.parseInt(playerMsg.substring(index1 + 1));

      //繪制player1
      if (cmdInfo.substring(0, index2).equals("go")) {

        ScreenDrawer.drawImage(g, boxBody,
                               player1X,
                               97, width, height, widthIndex, heightIndex, true);

      }
      else if (cmdInfo.substring(0, index2).equals("hit")) {
        ScreenDrawer.drawImage(g, boxBody,
                               player1X,
                               97, 39, 41, 4, 2, true);
        isHit = true;

        if ( (player1X + 34) >= player2X) {
          hitedFlag = true;
          //判斷是當前用戶擊中對方
          if (currentPlayer.equals("player1")) {
            isCurrentUserHit = true;
          }
        }
      }

      //繪制player2
      if (cmdInfo.substring(index2 + 1).equals("go")) {
        ScreenDrawer.drawImage(g, enemy,
                               player2X,
                               97, width, height, widthIndex, heightIndex, true);
      }
      else if (cmdInfo.substring(index2 + 1).equals("hit")) {
        ScreenDrawer.drawImage(g, enemy,
                               player2X-10,
                               97, 37, 41, 1,3, true);
        isHit = true;

        if ( (player1X + 34) >= player2X) {
          //判斷是當前用戶擊中對方
          if (currentPlayer.equals("player2")) {
            isCurrentUserHit = true;
          }
          hitedFlag = true;
        }
      }

     //如果擊中對方則繪制效果圖片
     if (hitedFlag) {
        ScreenDrawer.drawImage(g, effect, (player2X - effect.getWidth() / 2),
                               102);
        if (isCurrentUserHit) {
           if (isPressedHitKey) {
             sendCmd("info", "scope");
             isPressedHitKey = false;
           }
        }
        //播放擊中音樂
        soundPlayer.play("hited");
        delay(50);
      }
      else if (isHit) {
        delay(50);
        sendCmd("info", "pause");
      }

      //顯示玩家積分
      drawScope(g,cmdInfo.substring(0, index2), cmdInfo.substring(index2 + 1),player1Scope, player2Scope);

      if (player1Scope.equals("100") && currentPlayer.equals("player1")) {
        showWinInfo(g, "你贏了!");
      }

      if (player1Scope.equals("100") && currentPlayer.equals("player2")) {
        showFailureInfo(g, "你輸了!");
      }

      if (player2Scope.equals("100") && currentPlayer.equals("player2")) {
        showWinInfo(g, "你贏了!");
      }

      if (player2Scope.equals("100") && currentPlayer.equals("player1")) {
        showFailureInfo(g, "你輸了!");
      }

      //回收系統垃圾內存
      System.gc();

    }else {
      //繪制標題
      ScreenDrawer.drawImage(g, titleImage, (getWidth() - titleImage.getWidth()) / 2,
                           (getHeight()-titleImage.getHeight())/2);
    }
  }

  //顯示最終獲勝信息
  private void showWinInfo(Graphics g, String winString) {

    ScreenDrawer.clearScreen(g, getWidth(), getHeight());
    drawBackGround(g);
    ScreenDrawer.drawString(g,
                            (getWidth() - winString.length() * Font.SIZE_LARGE) /
                            2, 80, winString);
    ScreenDrawer.drawImage(g, winImage, (getWidth() - winImage.getWidth()) / 2,
                           100);
    delay(3000);
    reset();
  }

  //顯示失敗信息
  private void showFailureInfo(Graphics g, String failureString) {

    ScreenDrawer.clearScreen(g, getWidth(), getHeight());
    drawBackGround(g);
    ScreenDrawer.drawString(g,
                            (getWidth() - failureString.length() * Font.SIZE_LARGE) /
                            2, 80, failureString);
    delay(3000);
    reset();
  }

  //繪制積分
  private void drawScope(Graphics g,String player1State,String player2State, String player1Scope, String player2Scope) {

    if (!player1State.equals("null")) {
      ScreenDrawer.drawString(g, 10, 80, "積分: " + player1Scope);
    }
    if (!player2State.equals("null")) {
      ScreenDrawer.drawString(g, 140, 80, "積分: " + player2Scope);
    }

  }

  //繪制背景
  private void drawBackGround(Graphics g) {
    if (backGround != null) {
      ScreenDrawer.drawImage(g, backGround,
                             (getWidth() - backGround.getWidth()) / 2, 0);

      ScreenDrawer.drawImage(g, backGround,
                             (getWidth() - backGround.getWidth()) / 2,
                             getHeight() - 12,
                             backGround.getWidth(), backGround.getHeight() - 12,
                             1, 2, true);
    }

  }

  //延時方法
  private void delay(int i) {
    try {
      Thread.sleep(i);
    }
    catch (InterruptedException ex) {
    }

  }

  //UDP數據發送器
  class UDPSender
      implements java.lang.Runnable {
    public UDPSender(String cmdType, String cmd) {
      this.cmd = cmd;
      this.cmdType = cmdType;
    }

    //UDP數據發送器線程主方法
    public void run() {
      if (cmdType.equals("info")) {
        sendPlayerInfoToServer(currentPlayer + ":" + cmd);
      }
      else if (cmdType.equals("attend")) {
        attend();
      }
    }

    private String cmdType, cmd;
  }

  //處理按健事件
  public void keyPressed(int keyCode) {

    int gameAction = getGameAction(keyCode);

    //按下數字鍵1時我們認為是player前進命令,按下數字鍵3時我們認為是player搏擊命令,
    //按下數字鍵7時我們認為是player后退命令,按下數字鍵1時我們認為是player前進命令
    if (gameAction == 9 && currentPlayer != null) {
      go();
    }
    else if (gameAction == 10 && currentPlayer != null) {
      //這里可以添加其它功能
      hit();
    }
    else if (gameAction == 11) {
      back();
    }

  }

  //處理出擊命令方法
  private void hit() {
    sendCmd("info", "hit");
    isPressedHitKey = true;
    //播放出擊音樂
     soundPlayer.play("hit");
  }

  //處理后退命令方法
  private void back() {
    sendCmd("info", "back");
  }

  //處理前進命令方法
  private void go() {
    sendCmd("info", "go");
  }

  //處理重置命令方法
  private void reset() {
    sendCmd("info", "reset");
  }

  private void logout () {
     sendCmd("info", "logout");
  }

  //發送命令方法
  private void sendCmd(String cmdType, String cmd) {
    new java.lang.Thread(new UDPSender(cmdType, cmd)).start();
  }

 //加入游戲方法
  private void attend() {

    Datagram revData = null;
    Datagram sendData = null;
    String sendMsg = "attend";
    try {
      UDPDatagramConnection connection = (UDPDatagramConnection) Connector.open(
          url);
      sendData = connection.newDatagram(sendMsg.getBytes(), sendMsg.length());
      connection.send(sendData);
      revData = connection.newDatagram(connection.getMaximumLength());
      connection.receive(revData);
      currentPlayer = new String(revData.getData(), 0, revData.getLength());
      connection.close();
      repaint();
    }
    catch (IOException ex) {
      ex.printStackTrace();
    }

  }

  //發送player信息給服務器
  private void sendPlayerInfoToServer(String info) {
    Datagram revData = null;
    Datagram sendData = null;
    try {
      UDPDatagramConnection connection = (UDPDatagramConnection) Connector.open(
          url);
      sendData = connection.newDatagram(info.getBytes(), info.length());
      connection.send(sendData);
      connection.close();
    }
    catch (IOException ex) {
      ex.printStackTrace();
    }
  }

  //處理命令事件方法
  public void commandAction(Command command, Displayable displayable) {

    if (command.getCommandType() == Command.EXIT) {

      logout();
      // 退出MIDlet
      PlayerMIDlet.quitApp();

    }//登錄游戲
    else if (command == attendGame) {
      sendCmd("attend", "attend");
      removeCommand(attendGame);

    }

  }

  //UDP客戶端監聽器類,主要負責查詢游戲服務器的當前狀態信息
  class UDPListener
      implements java.lang.Runnable {

    //UDP客戶端監聽器線程方法
    public void run() {
      while (true) {

        try {

          if (currentPlayer != null) {
            listenGameServer();
          }
        }
        catch (Exception ex) {
          ex.printStackTrace();
        }
      }
    }

    //監聽游戲服務器方法
    void listenGameServer() {

      try {
        Datagram revData = null;
        Datagram sendData = null;
        UDPDatagramConnection connection = (UDPDatagramConnection) Connector.
            open(url);
        String queryMsg = "query";
        sendData = connection.newDatagram(queryMsg.getBytes(), queryMsg.length());
        //發送查詢命令給服務器端
        connection.send(sendData);
        revData = connection.newDatagram(connection.getMaximumLength());
        //接受服務器端的狀態信息
        connection.receive(revData);
        String revMsg = new String(revData.getData(), 0, revData.getLength());
        playerInfo = revMsg;
        connection.close();
        repaint();
      }
      catch (IOException ex) {
        ex.printStackTrace();
      }
    }

  }

  //MIDlet實例對象
  private PlayerMIDlet playerMIDlet = null;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产农村妇女毛片精品久久麻豆| 色婷婷综合中文久久一本| 欧美一区二区三区免费观看视频| 亚洲国产日韩综合久久精品| 91福利视频久久久久| 亚洲午夜久久久久久久久电影网| 欧美乱熟臀69xxxxxx| 美腿丝袜在线亚洲一区| 久久久精品欧美丰满| 成人av网站在线观看免费| 亚洲精品国产一区二区精华液| 欧美午夜寂寞影院| 蜜桃视频第一区免费观看| 久久久久久电影| 99国内精品久久| 午夜精品一区二区三区电影天堂 | 国产日韩欧美高清| 成人99免费视频| 亚洲国产视频直播| 久久久久久免费网| 色综合天天综合网天天看片| 午夜日韩在线电影| 久久久久久久久久看片| 色吊一区二区三区| 麻豆精品视频在线观看免费| 国产精品热久久久久夜色精品三区| 91麻豆精品秘密| 免费美女久久99| 国产精品全国免费观看高清 | 国产sm精品调教视频网站| 亚洲免费观看高清在线观看| 91精品国产入口在线| 成人av网在线| 日韩高清一区二区| 国产精品久久夜| 日韩一区二区免费电影| 91亚洲精品一区二区乱码| 久久99久久99| 亚洲va欧美va国产va天堂影院| 久久综合资源网| 欧美亚洲综合另类| 成人av网站免费| 久久99久久精品| 香蕉成人伊视频在线观看| 国产日韩v精品一区二区| 欧美电视剧免费观看| 99热99精品| 国产精品18久久久久久vr| 婷婷久久综合九色综合伊人色| 国产精品午夜春色av| 精品久久一二三区| 欧美日本一区二区在线观看| 99久久精品国产导航| 国产精品白丝jk黑袜喷水| 蜜臀av性久久久久蜜臀aⅴ| 一区二区三区日本| 中文字幕日韩av资源站| 国产欧美一区二区三区在线老狼| 51精品视频一区二区三区| 在线中文字幕一区二区| 成av人片一区二区| 国产成人啪午夜精品网站男同| 美腿丝袜亚洲一区| 免费成人在线影院| 亚洲aaa精品| 亚洲国产一区二区三区| 一区二区三区在线视频免费 | 六月丁香婷婷色狠狠久久| 亚洲国产日韩在线一区模特| 亚洲男女一区二区三区| 国产精品色呦呦| 国产日本欧美一区二区| 久久亚洲精品国产精品紫薇| 欧美不卡一二三| 久久综合色之久久综合| 久久综合成人精品亚洲另类欧美| 精品久久久久久最新网址| 日韩美女天天操| 久久综合九色欧美综合狠狠| 久久影视一区二区| 久久久三级国产网站| 国产婷婷精品av在线| 欧美激情在线一区二区三区| 国产午夜精品久久久久久免费视| 国产无人区一区二区三区| 日韩高清在线一区| 天天做天天摸天天爽国产一区| 亚洲国产人成综合网站| 日韩在线一二三区| 久久精品国产久精国产| 国产精品中文有码| 成人黄色免费短视频| 色域天天综合网| 欧美日韩免费高清一区色橹橹| 欧美日韩免费一区二区三区| 欧美一区二区精美| 久久美女艺术照精彩视频福利播放| www国产精品av| 中文字幕 久热精品 视频在线 | 久久成人免费电影| 国产精品一区二区在线观看不卡| 成人丝袜高跟foot| 精品污污网站免费看| 日韩视频123| 国产精品丝袜久久久久久app| 亚洲视频一区在线观看| 性做久久久久久免费观看| 韩国精品主播一区二区在线观看| 成人午夜私人影院| 欧美午夜精品一区二区三区| 日韩女优电影在线观看| 中文字幕一区免费在线观看| 亚洲777理论| 国产成人在线视频网站| 欧美写真视频网站| 久久影音资源网| 亚洲一区二区欧美日韩| 韩国女主播一区| 欧美无砖砖区免费| 国产午夜久久久久| 五月天精品一区二区三区| 国产成人亚洲精品狼色在线| 欧美色窝79yyyycom| 国产午夜精品一区二区三区嫩草| 亚洲国产欧美日韩另类综合| 欧美日韩一区二区三区高清| 国产亚洲制服色| 石原莉奈在线亚洲三区| 99免费精品在线| 久久久欧美精品sm网站| 午夜在线电影亚洲一区| thepron国产精品| 精品理论电影在线| 亚洲国产另类av| www.欧美日韩国产在线| 欧美成人国产一区二区| 亚洲国产美女搞黄色| kk眼镜猥琐国模调教系列一区二区| 日韩欧美国产一二三区| 亚洲一级片在线观看| 成人h版在线观看| 久久久久久久久久久久久女国产乱| 亚洲午夜电影网| 91麻豆精品一区二区三区| 中文字幕乱码一区二区免费| 美女诱惑一区二区| 欧美高清www午色夜在线视频| 中文字幕一区二区三区四区不卡| 国产在线视视频有精品| 日韩欧美亚洲一区二区| 亚欧色一区w666天堂| 欧美午夜电影网| 亚洲已满18点击进入久久| 99天天综合性| 国产日韩精品久久久| 国产福利一区二区三区视频在线 | 久久这里只有精品视频网| 日韩福利视频导航| 欧美日韩国产首页在线观看| 亚洲靠逼com| 91啪在线观看| 亚洲欧美激情插| 91农村精品一区二区在线| 日韩一区日韩二区| 99国产精品国产精品久久| 国产精品毛片大码女人| 成人激情黄色小说| 国产精品大尺度| 色综合天天在线| 一区二区视频在线| 欧美性受极品xxxx喷水| 亚洲国产视频一区二区| 中文字幕av一区二区三区免费看| 国产福利一区二区三区| 国产精品女人毛片| 93久久精品日日躁夜夜躁欧美| 亚洲欧美二区三区| 一本大道久久a久久精品综合| 悠悠色在线精品| 欧美日韩高清不卡| 捆绑调教美女网站视频一区| 亚洲精品一区二区三区在线观看| 经典一区二区三区| 国产女同性恋一区二区| 成人久久18免费网站麻豆| 亚洲色图都市小说| 欧美日韩亚洲综合一区| 青青草97国产精品免费观看无弹窗版 | 99久久国产综合精品麻豆| 亚洲精品美国一| 制服.丝袜.亚洲.另类.中文 | 成人激情校园春色| 亚洲精品中文在线影院| 欧美高清视频不卡网| 国产一区二区精品久久91| 欧美国产欧美综合| 欧亚洲嫩模精品一区三区| 美脚の诱脚舐め脚责91| 国产女人aaa级久久久级| 欧美亚洲图片小说|