?? hall.java
字號:
import java.io.DataInputStream;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Font;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
public class Hall extends Canvas implements Runnable, NetWork {
static boolean s_bRunning;
static long s_timeForLimitFps;
static long s_timeForFps;
static Thread mainThread;
static DataInputStream dis;
static Main s_midlet;
static Graphics s_g;
public Commu _commu;
public Game game;
static String server, url, playerpsw,token;
static int roomId, port,accountID;
static byte minStartCondition = 1;
static boolean Test ;
/** 登陸的玩家自己 */
static Player s_player;
/**桌子的狀態(tài) &0x01: 0 空閑中 1: 游戲中 密碼特性 &0x04 0 不需要 1 需要 桌子&0x08 0 不需要刷新 1 需要刷新*/
byte[] tableStats;
/** 每張椅子的信息,&0x40 是否有人 &0x3F 相對應(yīng)的player號 &0x80 0 不需要刷新 1 需要刷新 */
byte[] tableChairs;
Player[] Gplayer;// 當(dāng)頁全部玩家
/** 當(dāng)桌密碼 */
String tablePassword;
boolean b_logined;// 是否已經(jīng)登陸
byte s_hallState, s_pre_hallState;// 大廳狀態(tài)變量
boolean tableDataComplete;// 是否已經(jīng)收到2025標(biāo)志
boolean PlayerDataComplete;// 是否已經(jīng)收完2028標(biāo)志
Image imgBg, imghallbg;
Graphics bg, hallbg;
Image[] imgbgpic, imgHallres, imgHallres2, imgNumber, imglogo, imgmenu;
static Image[] imgPortrait;
short infotype;//特殊消息信息 recive
short infoactiontype;//特殊需要操作的信息 1 扣魅力確認(rèn)
Hall(Main midlet) {
s_midlet = midlet;
s_hallState = HALL_STATUS_INIT;
messageString = new StringBuffer();
setFullScreenMode(true);
Display.getDisplay(s_midlet).setCurrent(this);
_commu = new Commu(this, server, port, Def.bDgg, Def.bCDgg);
b_logined = false;
mainThread = new Thread(this/*, "Hall"*/);
s_bRunning = true;
mainThread.start();
}
boolean needupdata;// 需要刷新大廳的標(biāo)志
boolean needupdata_info;// 需要刷新人物信息
boolean needupdata_message;// 需要刷新對話框
Player info_player;
byte BUTTON_SELECTED = -1;// 用戶光標(biāo)
byte PRE_BUTTON_SELECTED = -1;// 前一次操作用戶光標(biāo)
short menu_x, menu_y;// 菜單坐標(biāo)
boolean OpenMenu;// 是否打開菜單標(biāo)志
byte MENU_SELECTED = -1;// 菜單光標(biāo)
boolean popMessage;// 彈出信息框標(biāo)志
/** 彈出框類型 &0x01 確定 &0x02 同意or不同意 &0x04 是or不是 &0x10 0 計(jì)時(shí) 1不計(jì)時(shí) */
byte messagetype;
byte messageselect;//信息框選擇
StringBuffer messageString;
int askinvitePlayerID;// 請求邀請的玩家ID
short askinvitedtable;// 請求邀請玩家所在的桌子號
byte refuseReason;// 拒絕邀請的理由 0 拒絕接受邀請 1超時(shí)
byte findseatnum;//找到的座位號ID
boolean findseat;//是否尋找座位的編號
short sitTable;//坐下玩家桌子號
short sitChair;//坐下玩家椅子號
boolean PlayingSit;//游戲中有人坐下
long nowtime = 0;
int cur_time = 0;
int now_usertime = 0;
boolean globalflag = true;//特殊全局標(biāo)志位
// updatahall狀態(tài)分化
final static byte HALL_STATUS_INIT = 0;
final static byte HALL_STATUS_PRE_LOADING = HALL_STATUS_INIT + 1;
final static byte HALL_STATUS_LOADING = HALL_STATUS_PRE_LOADING + 1;
final static byte HALL_STATUS_MAINACTION = HALL_STATUS_LOADING + 1;
final static byte HALL_STATUS_SHOWINFO = HALL_STATUS_MAINACTION + 1;
final static byte HALL_STATUS_PREPARE = HALL_STATUS_SHOWINFO + 1;
final static byte HALL_STATUS_GAMERUNNING = HALL_STATUS_PREPARE + 1;
protected void updateHall() {
if(Commu.flagconnect ){
if(s_hallState != HALL_STATUS_GAMERUNNING){
messagetype &= 0x00;
messagetype |= 0x11;// 不計(jì)時(shí)確認(rèn)按鈕
drawMessage();
if(Commu.connectnotfound) {
Message_X = 203;
Message_Y = 49;
messageString.append("未成功連上服務(wù)器,請檢查網(wǎng)絡(luò)情況或服務(wù)端設(shè)置");
}
else messageString.append("你已經(jīng)與服務(wù)端斷開連接,請重新登陸");
if(popMessage){
dealMessageaction();
if(IsKeyPressed(GK_FIRE)){
s_midlet.goToReturnURL();
// s_bRunning = false;
}
updateButton(false);
}
}else{//游戲中
int x = getWidth()/2-imgHallres2[0].getWidth();
int y = getHeight()/2-imgHallres2[0].getHeight();
Tool.drawImage(s_g, imgHallres2[0], x, y);
// Tool.drawString(s_g, "您由于游戲幣", Def.COLOR_WHITE, Def.FONTMIDDLE, x+30, y+15);
// Tool.drawString(s_g, "不足被迫離開", Def.COLOR_WHITE, Def.FONTMIDDLE, x+30, y+45);
Tool.drawString(s_g, "你與服務(wù)端斷開", Def.COLOR_WHITE, Def.FONTMIDDLE, x+30, y+15);
Tool.drawString(s_g, "連接,請重新登陸", Def.COLOR_WHITE, Def.FONTMIDDLE, x+30, y+45);
if (highLight++ % 5 > 2)
Tool.drawImage(s_g, imgHallres[9], x+Button_Kind1_X, y+Button_Kind1_Y);
else Tool.drawImage(s_g, imgHallres[8], x+Button_Kind1_X, y+Button_Kind1_Y);
if(IsKeyPressed(GK_FIRE)){
s_midlet.goToReturnURL();
// s_bRunning = false;
}
}
return;
}
switch (s_hallState) {
case HALL_STATUS_INIT: {
imgBg = Image.createImage(Def.CANVAS_WIDTH, Def.CANVAS_HEIGHT);
bg = imgBg.getGraphics();
// 置回狀態(tài)及變量
tableDataComplete=false;//暫時(shí)去掉
switchHallStatus(HALL_STATUS_PRE_LOADING);
break;
}
case HALL_STATUS_PRE_LOADING: {
reset_Loading();
loadResource();
Tool.fillRect(bg, Def.COLOR_BLACK, 0, 0, Def.CANVAS_WIDTH,
Def.CANVAS_HEIGHT);
s_g.setClip(0, 0, Def.CANVAS_WIDTH, Def.CANVAS_HEIGHT);
s_g.drawImage(imgBg, 0, 0, Graphics.TOP | Graphics.LEFT);
Tool.drawImage(s_g, imgLoad[Def.LOADING_BACK],
Def.GAME_LOADING_FRAMEX, Def.GAME_LOADING_FRAMEY);// 大北京圖片
Tool.drawImage(s_g, imgLoad[Def.LOADING_FONT],
Def.GAME_LOADING_FONTX, Def.GAME_LOADING_FONTY);// Loading...
switchHallStatus(HALL_STATUS_LOADING);
}
case HALL_STATUS_LOADING: {
drawLoadingBar();
if(popMessage){
dealMessageaction();
if(IsKeyPressed(GK_FIRE)){
s_bRunning = false;
}
updateButton(false);
}
if (loadResource()) {
int i;
for (i = 0; i < imgLoad.length; i++)
imgLoad[i] = null;
imgLoad = null;
Tool.gc();
switchHallStatus(HALL_STATUS_MAINACTION);
}
break;
}
case HALL_STATUS_MAINACTION: {
if (needupdata) {
needupdata_message =true;
needupdata = false;
BUTTON_SELECTED = PRE_BUTTON_SELECTED == -1 ? PRE_BUTTON_SELECTED = 0
: PRE_BUTTON_SELECTED;
if(Currentpage+1 == pagenumber && globalflag){
globalflag = false;
Tool.drawRegion(bg, imghallbg, 0, 0, 445, 420, 0, 0, 0);
}
drawChairs();
Tool.drawImage(s_g, imgBg, 0, 0);
if (OpenMenu && (tableChairs[BUTTON_SELECTED] & 0x40) != 0) {
short pos_x = (short) (START_CHAIR_X
+ (BUTTON_SELECTED / chairsPerTable % tablePerLine)
* DISTANCE_X + chairsBounds[BUTTON_SELECTED
% chairsPerTable][0]);
short pos_y = (short) (START_CHAIR_Y
+ DISTANCE_Y
* (BUTTON_SELECTED / (chairsPerTable * tablePerLine)) + chairsBounds[BUTTON_SELECTED
% chairsPerTable][1]);
Tool.drawRect(s_g, Def.COLOR_BUTTON_SELECTED1,
pos_x - 1, pos_y - 1, 32 + 2, 32 + 2);
Tool.drawRect(s_g, Def.COLOR_BUTTON_SELECTED1,
pos_x, pos_y, 32, 32);
drawMenu(s_g);
}
if(s_player.Table_idx > -1){
byte count = 0;
for(byte i =0;i<chairsPerTable;i++){
if((tableChairs[(s_player.Table_idx%tablePerPage)*chairsPerTable+i]&0x40)!=0)
count++;
}
if(count >= minStartCondition){
switchHallStatus(HALL_STATUS_PREPARE);
}
}
// Vlutil.gc();
}
if ((tableChairs[BUTTON_SELECTED] & 0x40) == 0) {
OpenMenu = false;
}
if(popMessage){
dealMessageaction();
}
updateButton(false);
if (IsKeyPressed(GK_NUM7)||IsKeyPressed(GK_RETURN)||m_keyLastPressed == -32) {//退出鍵
messagetype &= 0x00;
messagetype |= 0x14;// 不計(jì)時(shí)是or不是
drawMessage();
messageString.append("確認(rèn)退出?");
break;
}
if(IsKeyPressed(GK_NUM0)){
_commu.formatSendPack(GR_USER,USER_QUICKSTART_REQ);
}
if (IsKeyPressed(GK_RIGHT)) {
updateButton(true);
getMovePath_Right();
PRE_BUTTON_SELECTED = BUTTON_SELECTED;
}
if (IsKeyPressed(GK_LEFT)) {
updateButton(true);
getMovePath_Left();
PRE_BUTTON_SELECTED = BUTTON_SELECTED;
}
if (IsKeyPressed(GK_UP)) {
updateButton(true);
getMovePath_Up();
PRE_BUTTON_SELECTED = BUTTON_SELECTED;
}
if (IsKeyPressed(GK_DOWN)) {
updateButton(true);
getMovePath_Down();
PRE_BUTTON_SELECTED = BUTTON_SELECTED;
}
if (IsKeyPressed(GK_NUM4)) {
Currentpage = (byte) (Currentpage == 0 ? pagenumber - 1
: Currentpage - 1);
if(Currentpage == pagenumber - 1){
globalflag = true;
}
_commu.formatSendPack(GR_USER,USER_STANDUP_REQ);
_commu.formatSendPack(GR_USER,USER_TABLEPLAYER_INFO_REQ);//請求分頁信息
PRE_BUTTON_SELECTED = -1;
drawPageTurnButton(false);
}
if (IsKeyPressed(GK_NUM6)) {
Currentpage = (byte) (Currentpage == pagenumber - 1 ? 0
: Currentpage + 1);
if(Currentpage == pagenumber - 1){
globalflag = true;
}
_commu.formatSendPack(GR_USER,USER_STANDUP_REQ);
_commu.formatSendPack(GR_USER,USER_TABLEPLAYER_INFO_REQ);//請求分頁信息
PRE_BUTTON_SELECTED = -1;
drawPageTurnButton(true);
}
if (IsKeyPressed(GK_FIRE)) {
if (!OpenMenu&&!popMessage) {
dealHallAction();
break;
} if(popMessage){
dealMessageactionAction();
break;
}else {
dealMenuAction();
}
}
break;
}
case HALL_STATUS_SHOWINFO: {
if (needupdata_info) {
needupdata_info = false;
drawDetailPlayerInfo();
}
if ((tableChairs[BUTTON_SELECTED] & 0x40) == 0) {
info_player = null;
OpenMenu = false;
Tool.drawImage(bg, imghallbg, 0, 0, 443, 420);
for (byte i = 0; i < chairsPerTable * tablePerPage; i++) {
tableChairs[i] |= 0x80; // 都需要刷新
}
for(byte i=0;i<tablePerPage;i++){
if(Currentpage*tablePerPage+i >= tableNum)
continue;
tableStats[Currentpage*tablePerPage+i] |=0x08;
}
switchHallStatus(HALL_STATUS_MAINACTION);
}
if (highLight++ % 5 > 2)
Tool.drawImage(s_g, imgHallres[8], 175, 346);
else
Tool.drawImage(s_g, imgHallres[9], 175, 346);
if (IsKeyPressed(GK_FIRE)) {
Tool.drawImage(bg, imghallbg, 0, 0, 443, 420);
for (byte i = 0; i < chairsPerTable * tablePerPage; i++) {
tableChairs[i] |= 0x80; // 都需要刷新
}
for(byte i=0;i<tablePerPage;i++){
if(Currentpage*tablePerPage+i >= tableNum)
continue;
tableStats[Currentpage*tablePerPage+i] |=0x08;
}
switchHallStatus(HALL_STATUS_MAINACTION);
}
break;
}
case HALL_STATUS_PREPARE:{
System.out.println("Game Prepare");
releaseHallRes();
game = new Game(this,s_g, _commu);
game.main=s_midlet;
game.resetGame();
game.s_player_chair_idx=s_player.Chair_idx;
game.copyPlayer(s_player,s_player.Chair_idx);
for (byte i = 0; i < chairsPerTable; i++) {
if((tableChairs[(s_player.Table_idx%tablePerPage)*chairsPerTable+i]&0x40)==0||(tableChairs[(s_player.Table_idx%tablePerPage)*chairsPerTable+i]&0x3f)==37
||Gplayer[tableChairs[(s_player.Table_idx%tablePerPage)*chairsPerTable+i]&0x3f]==null)
continue;
System.out.println("GPlayer ID:"
+ Gplayer[tableChairs[(s_player.Table_idx%tablePerPage)*chairsPerTable+i]&0x3f].ID);
int chair=Gplayer[tableChairs[(s_player.Table_idx%tablePerPage)*chairsPerTable+i]&0x3f].Chair_idx;
if(chair>=0)
game.copyPlayer(Gplayer[tableChairs[(s_player.Table_idx%tablePerPage)*chairsPerTable+i]&0x3f], chair);
}
_commu.setOwner(game);
switchHallStatus(HALL_STATUS_GAMERUNNING);
break;
}
case HALL_STATUS_GAMERUNNING:{
int gameState = game.updateGame();
if (gameState == 1 || gameState == -1)
_commu.setOwner(this);
if (gameState == -1) {
switchHallStatus(HALL_STATUS_INIT);
// _commu.formatSendPack(GR_USER,USER_STANDUP_REQ);
_commu.formatSendPack(GR_USER,USER_LEFT_GAME_REQ);
PRE_BUTTON_SELECTED = -1;
game.releaseGame();
game = null;
Tool.gc();
} else if (gameState == 1){
PRE_BUTTON_SELECTED = -1;
game.releaseGame();
game = null;
Tool.gc();
switchHallStatus(HALL_STATUS_INIT);
}
break;
}
}
if(heart){
heart = false;
_commu.formatSendPack((short)0,(short)1);
}
}
//釋放大廳資源
void releaseHallRes(){
imgBg = null;
imghallbg = null;
// imgHallres = null;
// imgHallres2 = null;用到對話框,暫時(shí)保留
imgNumber = null;
imglogo = null;
imgmenu = null;
Tool.gc();
}
/** 畫上下翻頁 */
void drawPageTurnButton(boolean down){
Tool.drawRegion(bg, imghallbg, 469, 346, 30, 25, 469, 346, 0);
drawNumber(bg, 496, 346, -1);
drawNumber(bg, 469, 346, Currentpage+1);
if(down){
Tool.drawRegion(s_g, imgHallres[5], 0, 0, imgHallres[4].getWidth(),
imgHallres[4].getHeight(), 537, 329, Def.FLAG_MIRROR);
}else{
Tool.drawImage(s_g, imgHallres[5], 454, 329);
}
resetGplayerAndTableChair();
for (short i = 0; i < tableNum; i++) {
tableStats[i] |= 0x08;// 需要刷新
}
needupdata = true;
}
/** 設(shè)置菜單位置 */
void setMenuPos() {
menu_x = (short) (START_CHAIR_X
+ (BUTTON_SELECTED / chairsPerTable % tablePerLine)
* DISTANCE_X
+ chairsBounds[BUTTON_SELECTED % chairsPerTable][0] + imgPortrait[0]
.getWidth() / 2);
menu_y = (short) (START_CHAIR_Y
+ (BUTTON_SELECTED / chairsPerTable / tablePerLine)
* DISTANCE_Y
+ chairsBounds[BUTTON_SELECTED % chairsPerTable][1] + imgPortrait[0]
.getHeight() / 2);
switch (chairsPerTable) {
case 2: {
if (BUTTON_SELECTED > 11)
menu_y -= imgmenu[0].getHeight();
break;
}
case 3: {
if (BUTTON_SELECTED > 17
|| (BUTTON_SELECTED % 3 == 1 && BUTTON_SELECTED > 7))
menu_y -= imgmenu[0].getHeight();
break;
}
case 4: {
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -