⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gamemanager.java

📁 手机游戏
💻 JAVA
字号:
package cardclient;

import javax.microedition.io.SocketConnection;
import java.io.InputStream;
import javax.microedition.io.Connector;
import java.io.OutputStream;

/**
 * <p>Title: CardClient</p>
 *
 * <p>Description: lizhenpeng</p>
 *
 * <p>Copyright: Copyright (c) 2005</p>
 *
 * <p>Company: LP&P</p>
 *
 * @author lipeng
 * @version 1.0
 */
import lipeng.*;
import javax.microedition.lcdui.*;

public class GameManager
  implements Runnable
{
  public GameManager()
  {
    inst=this;
    gameState=0;
    for(int i=0;i<30;i++)
    {
      userCard[i]=new Card();
      oppoCard[i]=new Card();
      userPostCard[i]=new Card();
      oppoPostCard[i]=new Card();
    }
  }

  public void run()
  {
    while(networkEnable)
    {
      try
      {
        in.read(recvHeadBuffer,0,4);
        recvDataHead.FillData(recvHeadBuffer,0);
        if(recvDataHead.size!=0)
        {
          recvBuffer=new byte[recvDataHead.size];
          in.read(recvBuffer,0,recvDataHead.size);
          //处理数据
          ProcessData();
        } else
        {
          //处理信息
          ProcessData();
        }
      } catch(Exception e)
      {
        System.out.println(e);
      }
    }
  }

  public void openSocket()
  {
    try
    {
      conn=(SocketConnection)Connector.open("socket://localhost:8070");
      in=conn.openInputStream();
      out=conn.openOutputStream();
      networkEnable=true;
      sendDataHead.command=NetProtocol.LOGIN;
      //16X2
      sendDataHead.size=32;
      byte[] buffer=userName.getBytes();
      byte[] buffer2=new byte[32];
      System.arraycopy(buffer,0,buffer2,0,buffer.length);
      this.sendBuffer=sendDataHead.getBytes();
      out.write(sendBuffer,0,sendBuffer.length);
      out.write(buffer2,0,buffer2.length);
      gameState=2;

    } catch(Exception e)
    {
      System.out.print(e);
    }
    networkThread=new Thread(this);
    networkThread.start();
  }

  private void hasControl()
  {
    this.keyAction=0;
    this.iControl=true;
    cursorX=0;
    cursorY=MainGame.inst.h-22*3;
    cardSelect=0;
    currentCard=0;
    isSelect=false;
  }

  public void ProcessData()
  {
    switch(recvDataHead.command)
    {
      case NetProtocol.HASLOGIN:
      {
        userList=new String[recvDataHead.size/32];
        int i;
        int place=0;
        for(i=0;i<userList.length;i++)
        {
          userList[i]=new String(this.recvBuffer,place,32);
          place+=32;
        }
        MainGame.inst.userList=new UserList();
        Display.getDisplay(CardClientMIDlet.instance).setCurrent(MainGame.inst.
          userList);
      }
      break;

      case NetProtocol.STARTGAME_FIRST:
      {
        Display.getDisplay(CardClientMIDlet.instance).setCurrent(MainGame.inst);
        int place = 0;
        this.userCardNum = 54/2;
        this.oppoCardNum = 54/2;
        for(int i=0;i<27;i++)
        {
          this.userCard[i].fillData(this.recvBuffer,place);
          place += 4;
        }
        for(int i=0;i<27;i++)
        {
          this.oppoCard[i].fillData(this.recvBuffer,place);
          place +=4;
        }
        gameState = 3;
        hasControl();

      }
        break;
        case NetProtocol.STARTGAME_LAST:
        {
          Display.getDisplay(CardClientMIDlet.instance).setCurrent(MainGame.inst);
          int place=0;
          this.iControl=false;
          this.userCardNum=54/2;
          this.oppoCardNum=54/2;
          for(int i=0;i<27;i++)
          {
            this.userCard[i].fillData(this.recvBuffer,place);
            place+=4;
          }
          for(int i=0;i<27;i++)
          {
            this.oppoCard[i].fillData(this.recvBuffer,place);
            place+=4;
          }
          this.gameState=3;
        }
      break;
      case NetProtocol.OPPO_REJECT:
      {
        this.userPostCardNum = 0;
        hasControl();
      }
      break;
      case NetProtocol.OPPO_POSTCARD:
      {
        this.oppoPostCard[0].fillData(recvBuffer,0);
        userPostCardNum = 0;
        oppoPostCardNum=1;
        hasControl();
      }
      break;
    }
  }

  public void keyPressd(int keyCode,int gameKeyCode)
  {
    switch(gameKeyCode)
    {
      case Canvas.UP:
        keyAction|=LPKeyMask.MASK_KEY_UP;
        break;
      case Canvas.DOWN:
        keyAction|=LPKeyMask.MASK_KEY_DOWN;
        break;
      case Canvas.FIRE:
        keyAction|=LPKeyMask.MASK_KEY_OK;
        break;
      case Canvas.LEFT:
        keyAction|=LPKeyMask.MASK_KEY_LEFT;
        break;
      case Canvas.RIGHT:
        keyAction|=LPKeyMask.MASK_KEY_RIGHT;
      break;
    }
  }

  public void keyReleased(int keyCode,int gameKeyCode)
  {
    switch(gameKeyCode)
    {
      case Canvas.FIRE:
        keyAction&=~LPKeyMask.MASK_KEY_OK;
        break;
      case Canvas.UP:
        keyAction&=~LPKeyMask.MASK_KEY_UP;
        break;
      case Canvas.DOWN:
        keyAction&=~LPKeyMask.MASK_KEY_DOWN;
        break;
      case Canvas.LEFT:
        keyAction&=~LPKeyMask.MASK_KEY_LEFT;
        break;
      case Canvas.RIGHT:
        keyAction&=~LPKeyMask.MASK_KEY_RIGHT;
      break;
    }
  }

  public void menuAction()
  {
    if((keyAction&LPKeyMask.MASK_KEY_UP)!=0)
    {
      keyAction&=~LPKeyMask.MASK_KEY_UP;
      if(this.menuWhichActive>0)
      {
        --menuWhichActive;
      } else
      {
        menuWhichActive=2;
      }
    } else if((keyAction&LPKeyMask.MASK_KEY_DOWN)!=0)
    {
      keyAction&=~LPKeyMask.MASK_KEY_DOWN;
      if(this.menuWhichActive<2)
      {
        ++menuWhichActive;
      } else
      {
        menuWhichActive=0;
      }
    } else if((keyAction&LPKeyMask.MASK_KEY_OK)!=0)
    {
      keyAction&=~LPKeyMask.MASK_KEY_OK;
      switch(menuWhichActive)
      {
        case 0:
          //登陆游戏
          //openSocket();
          gameState = 1;
          Display.getDisplay(CardClientMIDlet.instance).setCurrent(MainGame.inst.input);
          break;
        case 1:
          //帮助
          break;
        case 2:
          //退出
        break;
      }
    }
  }

  public void gameAction()
  {
    if(iControl)
    {
      int intern=MainGame.inst.w/14;
      if((keyAction&LPKeyMask.MASK_KEY_OK)!=0)
      {
        keyAction&=~LPKeyMask.MASK_KEY_OK;
        if(this.isSelect)
        {
          try
          {
            byte[] buffer=this.userCard[this.cardSelect].getBytes();
            this.sendDataHead.command=NetProtocol.POST_CARD;
            this.sendDataHead.size=(char)buffer.length;
            this.sendBuffer=this.sendDataHead.getBytes();
            this.out.write(sendBuffer,0,sendBuffer.length);
            this.out.write(buffer,0,buffer.length);
            this.iControl = false;
            //出牌
            this.userPostCard[0]= this.userCard[cardSelect];
            this.userPostCardNum = 1;
            //整理牌
            for(int i=cardSelect;i<this.userCardNum-1;i++)
            {
              userCard[i] = userCard[i+1];
            }
            isSelect = false;
            --userCardNum;
          }
          catch(Exception e)
          {
            System.out.print(e);
          }
        }
        else
        {
          try
          {
            this.sendDataHead.command=NetProtocol.REJECT_CARD;
            this.sendDataHead.size=0;
            this.sendBuffer=this.sendDataHead.getBytes();
            this.out.write(sendBuffer,0,sendBuffer.length);
          }
          catch(Exception e)
          {
            System.out.print(e);
          }
        }

      } else if((keyAction&LPKeyMask.MASK_KEY_UP)!=0)
      {
        keyAction&=~LPKeyMask.MASK_KEY_UP;
        this.isSelect = true;
        this.cardSelect = currentCard;

      } else if((keyAction&LPKeyMask.MASK_KEY_DOWN)!=0)
      {
        keyAction&=~LPKeyMask.MASK_KEY_DOWN;
        this.isSelect = false;
      } else if((keyAction&LPKeyMask.MASK_KEY_LEFT)!=0)
      {
        keyAction&=~LPKeyMask.MASK_KEY_LEFT;
        if(this.userCardNum<=14)
        {
          if(cursorX!=0)
          {
            cursorX-=intern;
            currentCard--;
          }
          else
          {
            cursorX = (userCardNum-1)*intern;
            currentCard = userCardNum-1;
          }
          cursorY = MainGame.inst.h-22*2;
        }
        else
        {
          if(cursorX!=0)
          {
            cursorX-=intern;
            currentCard--;
          } else
          {
            if(cursorY ==MainGame.inst.h-22*2)
            {
              cursorX=intern*13;
              cursorY = MainGame.inst.h-22*3;
              currentCard = 13;
            }
            else if(cursorY ==MainGame.inst.h-22*3)
            {
              cursorX=intern*(userCardNum-15);
              currentCard = userCardNum-1;
              cursorY = MainGame.inst.h-22*2;
            }
          }
        }
      } else if((keyAction&LPKeyMask.MASK_KEY_RIGHT)!=0)
      {
        keyAction&=~LPKeyMask.MASK_KEY_RIGHT;
        if(this.userCardNum<=14)
        {
          if(cursorX!=(userCardNum-1)*intern)
          {
            cursorX+=intern;
            currentCard++;
          }
          else
          {
            cursorX = 0;
            currentCard = 0;
          }
          cursorY = MainGame.inst.h-22*2;
        }
        else
        {
          if(cursorY==MainGame.inst.h-22*2)
          {
            if(cursorX!=(userCardNum-15)*intern)
            {
              cursorX+=intern;
              currentCard++;
            }
            else
            {
              cursorX=0;
              currentCard = 0;
              cursorY=MainGame.inst.h-22*3;
            }
          } else if(cursorY==MainGame.inst.h-22*3)
          {
            if(cursorX!=13*intern)
            {
              cursorX+=intern;
              currentCard++;
            } else
            {
              cursorX=0;
              cursorY=MainGame.inst.h-22*2;
              currentCard = 14;
            }
          }
        }
      }
    }
  }
  public void RegiterUser(String name)
  {
    userName=name;
    gameState=2;
    Display.getDisplay(CardClientMIDlet.instance).setCurrent(MainGame.inst);
  }
  public void waitAction()
  {
    if(!isOpenSocket)
    {
      openSocket();
      isOpenSocket = true;
    }
  }

  public void BeginGame(String name)
  {
    //开始游戏
    try
    {
      gameState=1;
      Display.getDisplay(CardClientMIDlet.instance).setCurrent(MainGame.inst);
      this.sendDataHead.command=NetProtocol.REQUEST_STARTGAME;
      this.sendDataHead.size=32;
      byte[] buffer=name.getBytes();
      this.sendBuffer=new byte[32];
      System.arraycopy(buffer,0,sendBuffer,0,buffer.length);
      out.write(sendDataHead.getBytes(),0,4);
      out.write(sendBuffer,0,sendBuffer.length);
    }
    catch(Exception e)
    {
      System.out.print(e);
    }

  }

//网络
  SocketConnection conn;
  String userName;
  InputStream in;
  OutputStream out;
  DataHead recvDataHead=new DataHead();
  DataHead sendDataHead=new DataHead();
  byte[] recvBuffer;
  byte[] sendBuffer;
  byte[] recvHeadBuffer=new byte[4];
  boolean networkEnable=false;
  public int gameState;
  public int menuWhichActive;
  public int keyAction;
  String[] userList;
  public int cursorX;
  public int cursorY;
  public int cardSelect;
  public int currentCard;
  public boolean isSelect;
  boolean isOpenSocket;

  private volatile Thread networkThread=null;

  static public GameManager inst;

  boolean iControl;
  Card[] userCard=new Card[30];
  int userCardNum;
  Card[] oppoCard=new Card[30];
  int oppoCardNum;
  Card[] userPostCard=new Card[30];
  int userPostCardNum;
  Card[] oppoPostCard=new Card[30];
  int oppoPostCardNum;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -