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

📄 hall.java

📁 J2ME实现得梭哈游戏联网程序
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
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;
	/**桌子的状态 &0x01: 0 空闲中 1: 游戏中 密码特性 &0x04 0 不需要 1 需要 桌子&0x08 0 不需要刷新 1 需要刷新*/
	byte[] tableStats;
	/** 每张椅子的信息,&0x40 是否有人 &0x3F 相对应的player号 &0x80 0 不需要刷新 1 需要刷新 */
	byte[] tableChairs;
	Player[] Gplayer;// 当页全部玩家
	/** 当桌密码 */
	String tablePassword;

	boolean b_logined;// 是否已经登陆
	byte s_hallState, s_pre_hallState;// 大厅状态变量
	boolean tableDataComplete;// 是否已经收到2025标志
	boolean PlayerDataComplete;// 是否已经收完2028标志
	Image imgBg, imghallbg;
	Graphics bg, hallbg;
	Image[] imgbgpic, imgHallres, imgHallres2, imgNumber, imglogo, imgmenu;
	static Image[] imgPortrait;
	short infotype;//特殊消息信息 recive
	short infoactiontype;//特殊需要操作的信息 1 扣魅力确认

	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;// 需要刷新大厅的标志
	boolean needupdata_info;// 需要刷新人物信息
	boolean needupdata_message;// 需要刷新对话框
	Player info_player;
	byte BUTTON_SELECTED = -1;// 用户光标
	byte PRE_BUTTON_SELECTED = -1;// 前一次操作用户光标
	short menu_x, menu_y;// 菜单坐标
	boolean OpenMenu;// 是否打开菜单标志
	byte MENU_SELECTED = -1;// 菜单光标
	boolean popMessage;// 弹出信息框标志
	/** 弹出框类型 &0x01 确定 &0x02 同意or不同意 &0x04 是or不是 &0x10 0 计时 1不计时 */
	byte messagetype;
	byte messageselect;//信息框选择
	StringBuffer messageString;
	int askinvitePlayerID;// 请求邀请的玩家ID
	short askinvitedtable;// 请求邀请玩家所在的桌子号
	byte refuseReason;// 拒绝邀请的理由 0 拒绝接受邀请 1超时
	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;//特殊全局标志位

	// updatahall状态分化
	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;// 不计时确认按钮
				drawMessage();
				if(Commu.connectnotfound) {
					Message_X = 203;
					Message_Y = 49;
					messageString.append("未成功连上服务器,请检查网络情况或服务端设置");
				}
				else messageString.append("你已经与服务端断开连接,请重新登陆");
				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, "你与服务端断开", 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();
			// 置回状态及变量
			tableDataComplete=false;//暂时去掉
			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;// 不计时是or不是
				drawMessage();
				messageString.append("确认退出?");
				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;用到对话框,暂时保留
		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;
	}

	/** 设置菜单位置 */
	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: {

⌨️ 快捷键说明

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