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

📄 hall.java

📁 J2ME实现得梭哈游戏联网程序
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
			if (BUTTON_SELECTED > 23
					|| (BUTTON_SELECTED % 4 == 1 && BUTTON_SELECTED > 9))
				menu_y -= imgmenu[0].getHeight();
			break;
		}
		case 5: {
			if (BUTTON_SELECTED > 19
					|| ((BUTTON_SELECTED % 5 < 4 ) && BUTTON_SELECTED > 8))
				menu_y -= imgmenu[0].getHeight();
			break;
		}
		case 6: {
			if (BUTTON_SELECTED > 23
					|| ((BUTTON_SELECTED % 6 < 4 ) && BUTTON_SELECTED > 9))
				menu_y -= imgmenu[0].getHeight();
			break;
		}
		}
	}

	// 菜单按钮编号
	final byte detail = 0;// 详细信息
	final byte makefriend = 1;// 加为好友
	final byte vip_kick = 2;// 踢人
	final byte invite = 3;// 邀请
	final byte close = 4;// 关闭
	final byte lookon = 5;// 旁观

	void drawMenu(Graphics s_g)// 画菜单
	{
		Tool.drawImage(s_g, imgmenu[0], menu_x, menu_y);
		if (Def.FONTMIDDLE
				.stringWidth(Gplayer[(tableChairs[BUTTON_SELECTED] & 0x3f)].Nick) >= 90)
			drawNick(s_g, Gplayer[(tableChairs[BUTTON_SELECTED] & 0x3f)].Nick,
					Def.COLOR_WHITE, Def.FONTMIDDLE, menu_x + 101 - 40,
					menu_y + 2, 90);
		else
			drawNick(s_g,Gplayer[(tableChairs[BUTTON_SELECTED] & 0x3f)].Nick,Def.COLOR_WHITE,Def.FONTMIDDLE,
					menu_x+ 101- Def.FONTMIDDLE.stringWidth(Gplayer[(tableChairs[BUTTON_SELECTED] & 0x3f)].Nick)
					/ 2, menu_y + 2, 90);
		Tool.drawString(s_g,Game.getRating(Gplayer[(tableChairs[BUTTON_SELECTED] & 0x3f)].Score),
						Def.COLOR_WHITE,Def.FONTMIDDLE,menu_x+ 101- Def.FONTMIDDLE.stringWidth(Game
						.getRating(Gplayer[(tableChairs[BUTTON_SELECTED] & 0x3f)].Score))/ 2, menu_y + 27);
		Tool.drawString(s_g,""+ Gplayer[(tableChairs[BUTTON_SELECTED] & 0x3f)].Gold,Def.COLOR_WHITE,Def.FONTMIDDLE,
						menu_x+ 109- Def.FONTMIDDLE.stringWidth(""+ Gplayer[(tableChairs[BUTTON_SELECTED] & 0x3f)]
						.Gold)/ 2, menu_y + 52);
		Tool.drawString(s_g,""+ Gplayer[(tableChairs[BUTTON_SELECTED] & 0x3f)].Score,
				Def.COLOR_WHITE,
				Def.FONTMIDDLE,
				menu_x+ 101- Def.FONTMIDDLE.stringWidth(""+ Gplayer[(tableChairs[BUTTON_SELECTED] & 0x3f)].Score)
				/ 2, menu_y + 77);
		Tool.drawString(s_g,""+ Gplayer[(tableChairs[BUTTON_SELECTED] & 0x3f)].Charm,
				Def.COLOR_WHITE,
				Def.FONTMIDDLE,
				menu_x+ 101- Def.FONTMIDDLE.stringWidth(""+ Gplayer[(tableChairs[BUTTON_SELECTED] & 0x3f)].Charm)
				/ 2, menu_y + 102);
		
		if (true)
			Tool.drawImage(s_g, imgmenu[7], 53 + menu_x, 124 + menu_y); // 目前没加为好友功能
		if (!(isMember() /*&& Gplayer[(tableChairs[BUTTON_SELECTED] & 0x3f)].Property == 0*/))
			Tool.drawImage(s_g, imgmenu[7], 53 + menu_x, 151 + menu_y); // 踢人不成立
		if (!s_player.playerIsSeat()||s_player.Table_idx==Gplayer[(tableChairs[BUTTON_SELECTED] & 0x3f)].Table_idx)
			Tool.drawImage(s_g, imgmenu[8], 1 + menu_x, 179 + menu_y); // 邀请不成立
		if (true)
			Tool.drawImage(s_g, imgmenu[8], 105 + menu_x, 179 + menu_y); // 目前不允许旁观
	}
	
	short Message_X = 142; short Message_Y = 151;//弹出信息框的位置
	final short Button_Kind1_X = 48; final short Button_Kind1_Y = 75;//单个按钮
	final short Button_Kind2_X1 = 0; final short Button_Kind2_Y1 = 75;//两个按钮
	final short Button_Kind2_X2 = 96; final short Button_Kind2_Y2 = 75;
	final short Time_X = 66; final short Time_Y = 80;//时间坐标
	final short Time_WIDTH = 30; final short Time_HEIGHT = 17;//时间背景框坐标
	Image MessageBuffer = Image.createImage(162, 102);
	Graphics Message_g = MessageBuffer.getGraphics();
	void drawMessage()//画弹出框
	{
		needupdata_message = true;
		messageString.delete(0, messageString.length());
		popMessage = true;
		Tool.drawRegion(Message_g, imgBg, Message_X, Message_Y, MessageBuffer.getWidth(), 
				MessageBuffer.getHeight(), 0, 0, 0);
		Message_g.drawImage(imgHallres2[0], 0, 0, Def.TOPLEFT);
		if((messagetype & 0x01) != 0){//画确定
			Message_g.drawImage(imgHallres[8], Button_Kind1_X, Button_Kind1_Y, Def.TOPLEFT);
		}else if((messagetype & 0x02) != 0){//画同意or不同意
			Message_g.drawImage(imgHallres2[1], Button_Kind2_X1, Button_Kind2_Y1, Def.TOPLEFT);
			Message_g.drawImage(imgHallres2[3], Button_Kind2_X2, Button_Kind2_Y2, Def.TOPLEFT);
		}else if((messagetype & 0x04) != 0){//画是or不是
			Message_g.drawImage(imgHallres2[5], Button_Kind2_X1, Button_Kind2_Y1, Def.TOPLEFT);
			Message_g.drawImage(imgHallres2[7], Button_Kind2_X2, Button_Kind2_Y2, Def.TOPLEFT);
		}
		if((messagetype & 0x10) == 0){//计时
			nowtime = 0 ;
			now_usertime = 10;
		}
	}
	
	void drawMessageString(){//画对话框字符串
		if(Def.FONTMIDDLE.stringWidth(messageString.toString()) > 150)
		{
			short tmplength = (short) messageString.toString().length();
			if(tmplength>20){
				Tool.drawString(Message_g, messageString.toString().substring(0, tmplength/3), Def.COLOR_WHITE,Def.FONTMIDDLE, 
						(MessageBuffer.getWidth()>>1)-(Def.FONTMIDDLE.stringWidth(messageString.toString().substring(0, tmplength/3))>>1), 2);
				Tool.drawString(Message_g, messageString.toString().substring(tmplength/3, (tmplength/3)<<1), Def.COLOR_WHITE,Def.FONTMIDDLE, 
						(MessageBuffer.getWidth()>>1)-(Def.FONTMIDDLE.stringWidth(messageString.toString().substring(tmplength/3, (tmplength/3)<<1))>>1), 25);
				Tool.drawString(Message_g, messageString.toString().substring((tmplength/3)<<1, tmplength), Def.COLOR_WHITE,Def.FONTMIDDLE, 
						(MessageBuffer.getWidth()>>1)-(Def.FONTMIDDLE.stringWidth(messageString.toString().substring((tmplength/3)<<1, tmplength))>>1), 48);
			}else{
				Tool.drawString(Message_g, messageString.toString().substring(0, tmplength>>1), Def.COLOR_WHITE,Def.FONTMIDDLE, 
						(MessageBuffer.getWidth()>>1)-(Def.FONTMIDDLE.stringWidth(messageString.toString().substring(0, tmplength>>1))>>1), 12);
				Tool.drawString(Message_g, messageString.toString().substring(tmplength>>1, tmplength), Def.COLOR_WHITE,Def.FONTMIDDLE, 
						(MessageBuffer.getWidth()>>1)-(Def.FONTMIDDLE.stringWidth(messageString.toString().substring(tmplength>>1, tmplength))>>1), 42);
			}
		}else{
			Tool.drawString(Message_g, messageString.toString(), Def.COLOR_WHITE,Def.FONTMIDDLE, 
			(MessageBuffer.getWidth()>>1)-(Def.FONTMIDDLE.stringWidth(messageString.toString())>>1), 37);
		}
	}
	
	void dealMessageaction(){//处理对话框
		if(needupdata_message){
			needupdata_message = false;
			drawMessageString();
			Tool.drawImage(s_g, MessageBuffer, Message_X, Message_Y);
		}
		if ((messagetype & 0x10) == 0) {// 有计时
			if (nowtime == 0) {
				nowtime = System.currentTimeMillis();
			}
			cur_time = (int) (System.currentTimeMillis() - nowtime) / 1000;
			Tool.drawRegion(Message_g, imgHallres2[0], Time_X,
					Time_Y, Time_WIDTH, Time_HEIGHT, Time_X, Time_Y, 0);
			drawNumber(Message_g, Time_X, Time_Y, now_usertime
					- cur_time);
			Tool.drawRegion(s_g, MessageBuffer, Time_X,
					Time_Y, Time_WIDTH, Time_HEIGHT, Message_X+Time_X, Message_Y+Time_Y, 0);
			if(now_usertime - cur_time <=0 ){
				//目前只有邀请有计时,所以不判断
//				refuseReason = 1;//超时
//				_commu.formatSendPack(RESPONSE_PLAYER_RES);
				needupdata = true;
				popMessage = false;
			}
		}
	}
	
	void dealMessageactionAction(){//处理对话框动作
		if((messagetype&0x02)!=0){//同意or不同意
			if(messageselect == 0){//同意
				if(getFreeSeat()!=-1){
					_commu.formatSendPack(GR_USER,USER_SIT_REQ);
//					return;
				}else{
					messagetype &= 0x00;
					messagetype |= 0x11;// 不计时确定
					drawMessage();
					messageString.append("该桌座位已满");
//					return;
				}
			}else{//不同意
//				refuseReason = 0;
//				_commu.formatSendPack(RESPONSE_PLAYER_RES);
			}
		}
		if((messagetype&0x04)!=0){//是or不是
			if(messageselect == 0){//是
				switch (infoactiontype) {
				case 1:
					if(s_player.Charm > Gplayer[tableChairs[BUTTON_SELECTED] & 0x3f].Charm)
					_commu.formatSendPack(GR_MEMBER_ORDER,MEMBER_KICKUSER_REQ);//发送踢人包
					else {
						messagetype &= 0x00;
						messagetype |= 0x11;// 不计时确认按钮
						drawMessage();
						messageString.append("魅力必须大于对方才能使对方离开");
					}
					break;
				default:
					s_midlet.goToReturnURL();
//					s_midlet.destroyApp(true);
					break;
				}
			}
		}
		if((messagetype&0x01)!=0){//确定
			if(infotype == 4103)
				s_bRunning = false;
		}
		popMessage = false;
		needupdata = true;
	}
	
	void dealHallAction(){//处理大厅确定动作
		if ((tableChairs[BUTTON_SELECTED] & 0x40) == 0)// 没人
		{
			_commu.formatSendPack(GR_USER,USER_SIT_REQ);
		} else {
			if ((tableChairs[BUTTON_SELECTED] & 0x3f) == 37)// 自己
			{
				_commu.formatSendPack(GR_USER,USER_STANDUP_REQ);
			} else // 别人
			{
				OpenMenu = true;
				setMenuPos();
				MENU_SELECTED = 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);
			}
		}
	}
	
	//是否达到踢人条件
	boolean isMember(){
		if(s_player.Table_idx == Gplayer[tableChairs[BUTTON_SELECTED] & 0x3f].Table_idx && s_player.MemberLevel == 1)
			return true;
		return false;
	}
	
	void dealMenuAction(){//处理菜单相应动作
		switch (MENU_SELECTED) {
		case detail: {
			needupdata_info = true;
			info_player = Gplayer[(tableChairs[BUTTON_SELECTED] & 0x3f)];
			switchHallStatus(HALL_STATUS_SHOWINFO);
			break;
		}
		case makefriend: {
			break;
		}
		case vip_kick: {
			if (isMember()
					/*&& Gplayer[(tableChairs[BUTTON_SELECTED] & 0x3f)].Property == 0*/){ // 自己是会员
//				_commu.formatSendPack(GR_MEMBER_ORDER,MEMBER_KICKUSER_REQ);
				messagetype &= 0x00;
				messagetype |= 0x14;// 不计时是否按钮
				infoactiontype = 1;
				drawMessage();
				messageString.append("踢人需要扣除10点魅力,是否执行?");
			}
			break;
		}
		case invite: {
			if (s_player.playerIsSeat())// 玩家自己坐着
				_commu.formatSendPack(GR_USER,USER_INVITE_REQ);
			break;
		}
		case close: {
			OpenMenu = false;
			needupdata = true;
			break;
		}
		case lookon: {
			break;
		}
		}
	}
	
	//画自己的人物信息
	void drawSelfPlayerInfo(){
		Tool.drawImage(bg, imgPortrait[0], 484,131 );
		Tool.drawImage(bg, imgPortrait[s_player.Portrait+1], 484,131 );
		Tool.drawString(bg, "昵称", Def.COLOR_WHITE, Def.FONTMIDDLE, 455, 167);
		Tool.drawString(bg, "等级", Def.COLOR_WHITE, Def.FONTMIDDLE, 455, 167+23);
		Tool.drawString(bg, "游戏币", Def.COLOR_WHITE, Def.FONTMIDDLE, 455, 167+23*2);
		Tool.drawString(bg, "分数", Def.COLOR_WHITE, Def.FONTMIDDLE, 455, 167+23*4);
		
		drawNick(bg, s_player.Nick, Def.COLOR_YELLOW, Def.FONTMIDDLE, 488, 167, 70);
		Tool.drawString(bg, Game.getRating(s_player.Score), Def.COLOR_YELLOW, Def.FONTMIDDLE, 488, 167+23);
		Tool.drawString(bg, ""+s_player.Gold, Def.COLOR_YELLOW,
				Def.FONTMIDDLE, 506 - Def.FONTMIDDLE.stringWidth(""+s_player.Gold)/2, 167+23*3);
		Tool.drawString(bg, ""+s_player.Score, Def.COLOR_YELLOW,
				Def.FONTMIDDLE, 506 - Def.FONTMIDDLE.stringWidth(""+s_player.Score)/2, 167+23*5);
	}
	
	//画人物详细信息
	void drawDetailPlayerInfo(){
		Tool.drawImage(bg, imghallbg, 0, 0, 443, 420);
		Tool.drawLine(bg, Def.COLOR_WHITE, Def.VL_INFO_POS_X + 15,
				Def.VL_INFO_POS_Y + Def.VL_INFO_HEIGHT / 2 - 20,
				Def.VL_INFO_POS_X + Def.VL_INFO_WIDTH - 15,
				Def.VL_INFO_POS_Y + Def.VL_INFO_HEIGHT / 2 - 20);
		Tool.fillRect(bg, Def.COLOR_GRAY, Def.VL_INFO_PORTAIT_POS_X,
				Def.VL_INFO_PORTAIT_POS_Y, 50, 50);
		Tool.drawImage(bg, imgPortrait[info_player.Portrait+1],
				Def.VL_INFO_PORTAIT_POS_X + 10,
				Def.VL_INFO_PORTAIT_POS_Y + 10);
		Tool.drawString(bg,
				Tool.stringAdd("昵称:", info_player.Nick),
				Def.COLOR_WHITE, Def.FONTMIDDLE, Def.VL_INFO_UP_POS_X,
				Def.VL_INFO_NICK_POS_Y);
		Tool.drawString(bg, Tool.stringAdd("性别:",
				info_player.Sex == 0 ? "女" : "男"),
				Def.COLOR_WHITE, Def.FONTMIDDLE, Def.VL_INFO_UP_POS_X,
				Def.VL_INFO_SEX_POS_Y);
		Tool.drawString(bg, Tool.stringAdd("等级:", Game
				.getRating(info_player.Score)), Def.COLOR_WHITE,
				Def.FONTMIDDLE, Def.VL_INFO_UP_POS_X,
				Def.VL_INFO_RATING_POS_Y);
		Tool.drawString(bg, Tool.stringAdd("胜利盘数:", Integer
				.toString(info_player.Win)), Def.COLOR_YELLOW,
				Def.FONTMIDDLE, Def.VL_INFO_DOWN1_POS_X,
				Def.VL_INFO_EFFORT_POS_Y);
		Tool.drawString(bg, Tool.stringAdd("失败盘数:", Integer
				.toString(info_player.Lost)), Def.COLOR_YELLOW,
				Def.FONTMIDDLE, Def.VL_INFO_DOWN1_POS_X,
				Def.VL_INFO_CHARM_POS_Y);
		Tool.drawString(bg, Tool.stringAdd("和局盘数:", Integer
				.toString(info_player.Deuce)), Def.COLOR_YELLOW,
				Def.FONTMIDDLE, Def.VL_INFO_DOWN1_POS_X,
				Def.VL_INFO_FORTUNE_POS_Y);
		Tool.drawString(bg, Tool.stringAdd("断线盘数:", Integer
				.toString(info_player.OffLine)), Def.COLOR_YELLOW,
				Def.FONTMIDDLE, Def.VL_INFO_DOWN1_POS_X,
				Def.VL_INFO_MORAL_POS_Y);

		Tool.drawString(bg, Tool.stringAdd("积分:", Integer
				.toString(info_player.Score)), Def.COLOR_YELLOW,
				Def.FONTMIDDLE, Def.VL_INFO_DOWN2_POS_X,
				Def.VL_INFO_SCORE_POS_Y);
		Tool.drawString(bg, Tool.stringAdd("游戏币:", Integer
				.toString(info_player.Gold)), Def.COLOR_YELLOW,
				Def.FONTMIDDLE, Def.VL_INFO_DOWN2_POS_X,
				Def.VL_INFO_GOLD_POS_Y);
		Tool.drawString(bg, Tool.stringAdd("魅力:", Integer
				.toString(info_player.Charm)),
				Def.COLOR_YELLOW, Def.FONTMIDDLE,
				Def.VL_INFO_DOWN2_POS_X, Def.VL_INFO_WIN_POS_Y);
		Tool.drawString(bg, Tool.stringAdd("胜率:",
				formatRatio(info_player.Ratio)), Def.COLOR_YELLOW,
				Def.FONTMIDDLE, Def.VL_INFO_DOWN2_POS_X,
				Def.VL_INFO_RATIO_POS_Y);
		updateBg(true);
	}

	/** 绘制玩家的昵称,当玩家的昵称过长时到一定的位置后以"..."替代 */
	static void drawNick(Graphics g, String name, int RGB, Font f, int pos_X,
			int pos_Y, int maxLength) {
		if (name == null)
			return;
		int strLenth = f.stringWidth(name);
		if (strLenth > maxLength) {
			String subStr = null;
			char[] chars = name.toCharArray();
			int length = 0;
			for (int i = 0; i < chars.length; i++) {
				int len = f.charWidth(chars[i]);
				if (length > maxLength - 20) {
					subStr = name.substring(0, i);
					break;
				}
				length += len;
			}
			Tool.drawString(g, subStr + "...", RGB, f, pos_X, pos_Y);
		} else {
			Tool.drawString(g, name, RGB, f, pos_X, pos_Y);
		}
	}

	void switchHallStatus(byte hallStatus) {
		needupdata = true;
		clearkey();
		s_hallState = hallStatus;
	}

	static short m_LoadingProgress;
	static int m_loadingDrawState;

	Image[] imgLoad;
	// 六人专用 长按钮资源条 不是六人时丢弃
	final byte LONGBUTTON_WIDTH = 89;
	final byte LONGBUTTON_HEIGHT = 36;
	Image longbutton_normal = Image.createImage(LONGBUTTON_WIDTH,
			LONGBUTTON_HEIGHT);
	Graphics longbutton_normal_g = longbutton_normal.getGraphics();
	Image longbutton_ingame = Image.createImage(LONGBUTTON_WIDTH,
			LONGBUTTON_HEIGHT);
	Graphics longbutton_ingame_g = longbutton_ingame.getGraphics();
	// 读取资源状态分化
	static byte m_LoadingState;
	final byte k_LoadingInit = 0;
	final byte k_LoadingHallPortrait = k_LoadingInit + 1;
	final byte k_LoadingHallBg = k_LoadingHallPortrait + 1;
	final byte k_LoadingHallres1 = k_LoadingHallBg + 1;
	final byte k_LoadingHallres2 = k_LoadingHallres1 + 1;
	final byte k_LoadingHallmenu = k_LoadingHallres2 + 1;
	final byte k_LoadingConnectNet = k_LoadingHallmenu + 1;
	final byte k_LoadingCheckServer = k_LoadingConnectNet + 1;
	final byte k_LoadingLogin = k_LoadingCheckServer + 1;
	final byte k_LoadingDataComplete = k_LoadingLogin + 1;
	final byte k_LoadingDataComplete_2 = k_LoadingDataComplete + 1;
	final byte k_LoadingDrawHallbg = k_LoadingDataComplete_2 + 1;
	final byte k_LoadingDataChairs = k_LoadingDrawHallbg + 1;
	final byte k_LoadingEnd = k_LoadingDataChairs + 1;

	/**
	 * 读取大厅资源
	 */
	boolean loadResource() {
		switch (m_LoadingState) {
		case k_LoadingInit: {
			Tool.setDis(new DataInputStream(s_midlet.getClass()
					.getResourceAsStream("/loading.png")));
			imgLoad = Tool.loadImages();
			m_LoadingState = k_LoadingHallPortrait;
			m_LoadingProgress += 5;
			return false;
		}
		case k_LoadingHallPortrait: {
			Tool.setDis(new DataInputStream(s_midlet.getClass()
					.getResourceAsStream("/chairs.png")));
			imgPortrait = Tool.loadImages();
			m_LoadingState = k_LoadingHallBg;
			m_LoadingProgress += 5;
			break;
		}
		case k_LoadingHallBg: {
			Tool.setDis(new DataInputStream(s_midlet.getClass()
					.getResourceAsStream("/hallbg.png")));
			imgbgpic = Tool.loadImages();
			imghallbg = Image.createImage(Def.CANVAS_WIDTH, Def.CANVAS_HEIGHT);
			hallbg = imghallbg.getGraphics();
			Tool.drawImage(hallbg, imgbgpic[0], 0, 0);
			Tool.drawImage(hallbg, imgbgpic[1], imgbgpic[0].getWidth(), 0);
			Tool.drawImage(hallbg, imgbgpic[2], 0, imgbgpic[0].getHeight());

⌨️ 快捷键说明

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