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

📄 maincanvas.java

📁 网络游戏21点源码 java版本 支持网络连接 如有问题
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
				gameState = 4;
			}
		}

		//如果原本处在押分后等待阶段则接到牌后改为3(要牌阶段)
		if (gameState == 2) {
			gameState = 3;
		}
	}

	/*****************************************************
	 * 功能介绍:刷新筹码列表
	 * 输入参数:筹码列表
	 * 输出参数:无
	 *****************************************************/
	public void refreshJetton(String[][] jettonList) {
		this.jettonList = jettonList;
	}

	/*****************************************************
	 * 功能介绍:刷新消息列表
	 * 输入参数:消息列表
	 * 输出参数:无
	 *****************************************************/
	public void refreshMessage(String[] messageList) {
		this.messageList = messageList;
	}

	/*****************************************************
	 * 功能介绍:滚动屏幕查看其它玩家
	 * 输入参数:方向
	 * 输出参数:无
	 *****************************************************/
	private void rollCanvas(int orientation) {
		if (orientation == Canvas.UP) {
			showPageNumber--;
			if (showPageNumber < 0) {
				showPageNumber = houseUserList.length - 1;
			}
		}
		else if (orientation == Canvas.DOWN) {
			showPageNumber++;
			if (showPageNumber > houseUserList.length - 1) {
				showPageNumber = 0;
			}
		}
	}

	/*****************************************************
	 * 功能介绍:下注
	 * 输入参数:无
	 * 输出参数:无
	 *****************************************************/
	private void chipIn() {
		int intTmpOne = Integer.parseInt(jettonList[myPageNumber][1]);
		int intTmpTwo = Integer.parseInt(jettonList[myPageNumber][2]);
		if (intTmpOne == 0) {
			message = "您已没有筹码不能下注!";
			return;
		}
		intTmpOne = intTmpOne + intTmpTwo;
		intTmpTwo = intTmpTwo + 10;
		if (intTmpTwo > 100 || intTmpTwo > intTmpOne) {
			intTmpTwo = 10;
		}
		intTmpOne = intTmpOne - intTmpTwo;
		jettonList[myPageNumber][1] = Integer.toString(intTmpOne);
		jettonList[myPageNumber][2] = Integer.toString(intTmpTwo);
	}

	/*****************************************************
	 * 功能介绍:停止下注并把所下的注发往服务器
	 * 输入参数:无
	 * 输出参数:无
	 *****************************************************/
	private void stopChipIn() {
		times = 0;
		gameState = 2;
		//message = "正在等待其它闲家下注!";
		message = "waiting chip in over for other user!";
		conn.sendOneData("07" + jettonList[myPageNumber][2]); //下注
	}

	/*****************************************************
	 * 功能介绍:要牌
	 * 输入参数:第几分牌
	 * 输出参数:无
	 *****************************************************/
	private void getCard(int number) {
		conn.sendOneData("09" + number);
	}

	/*****************************************************
	 * 功能介绍:停牌
	 * 输入参数:第几分牌
	 * 输出参数:无
	 *****************************************************/
	private void stand(int number) {
		cardsState[number][2] = 1;
		//停牌判断发牌是否结束(如果结束则进入等待状态)
		if (cardsState[0][2] != 0 && !isSpread) {
			gameState = 4;
			conn.sendOneData("12");
		}
		if (cardsState[1][2] != 0 && isSpread) {
			gameState = 4;
			conn.sendOneData("12");
		}
	}

	/*****************************************************
	 * 功能介绍:分牌
	 * 输入参数:第几分牌
	 * 输出参数:无
	 *****************************************************/
	private void spread() {
		int userCards[][] = getUserCards(currentUserId);
		if (userCards == null) {
			return;
		}
		//如果第一分牌的两张牌不相同则不能分牌
		if (getCardNum(userCards[0][0]) != getCardNum(userCards[1][0])) {
			return;
		}
		//只有在没有第二轮发牌,且没有分牌的情况下才可分牌
		if (cardsState[0][1] == 2 && !isSpread) {
			conn.sendOneData("10");
			isSpread = true;
			gameState = 3;
		}
	}

	/*****************************************************
	 * 功能介绍:加倍下注
	 * 输入参数:第几分牌
	 * 输出参数:无
	 *****************************************************/
	private void doubleCard(int number) {
		//双倍下注后该分牌就停止了
		cardsState[number][2] = 1;
		conn.sendOneData("11" + number);
	}

	/*****************************************************
	 * 功能介绍:如数返回牌面的值
	 * 输入参数:未处理的数
	 * 输出参数:正常的牌面值
	 *****************************************************/
	private int getCardNum(int num) {
		if (num > 13 && num <= 26) {
			num -= 13;
		}
		else if (num > 26 && num <= 39) {
			num -= 26;
		}
		else if (num > 39 && num <= 52) {
			num -= 39;
		}
		return num;
	}

	/*****************************************************
	 * 功能介绍:取得指定用户牌的列表
	 * 输入参数:用户id
	 * 输出参数:用户牌的列表
	 *****************************************************/
	private int[][] getUserCards(int userId) {
		//先测出该用户有几条记录
		int j = 0;
		for (int i = 0; i < dealList.length; i++) {
			if (dealList[i][0] == userId) {
				j++;
			}
		}
		if (j == 0) {
			return null;
		}
		//定义一个相应记录数的临时数组(牌数,第几付牌,不包括用户id)
		int userCars[][] = new int[j][2];
		int l = 0;
		for (int i = 0; i < dealList.length; i++) {
			if (dealList[i][0] == userId) {
				userCars[l][0] = dealList[i][1];
				userCars[l][1] = dealList[i][2];
				l++;
			}
		}
		return userCars;
	}

	/*****************************************************
	 * 功能介绍:当用户按下中间键则弹出菜单
	 * 输入参数:无
	 * 输出参数:无
	 *****************************************************/
	public void showMenu() {
		int dfColor = bg.getColor();
		bg.drawImage(img[5], bgWidth / 2, bgHeight / 2 + 5, Graphics.HCENTER | Graphics.TOP);
		bg.setColor(0xffffff);
		bg.drawRect(65, 104 + 11 * menuIndex, 44, 11);
		bg.setColor(dfColor);
	}

	/*****************************************************
	 * 功能介绍:显示游戏结果
	 * 输入参数:无
	 * 输出参数:无
	 *****************************************************/
	public void showValue() {
		int tmp;
		int dfColor = bg.getColor(); //默认颜色
		int yellow = 0xE4F807;
		int red = 0xF80729;
		int green = 0x08B124;
		if (gameValue == null) { //观众不必显示游戏结果
			return;
		}
		if (times == 0) {
			return;
		}

		bg.drawImage(img[7], bgWidth / 2, bgHeight / 2 - 27, Graphics.HCENTER | Graphics.TOP);
		if (gameValue.length == 1) { //只有一个分牌
			tmp = Integer.parseInt(gameValue[0]);
			if (tmp > 0) {
				bg.setColor(dfColor);
				bg.drawString("win", bgWidth / 2 - 10, bgHeight / 2, Graphics.HCENTER | Graphics.TOP);
				bg.setColor(yellow);
				bg.drawString(gameValue[0], bgWidth / 2 + 10, bgHeight / 2, Graphics.HCENTER | Graphics.TOP);
			}
			else if (tmp < 0) {
				bg.setColor(dfColor);
				bg.drawString("lost", bgWidth / 2 - 10, bgHeight / 2, Graphics.HCENTER | Graphics.TOP);
				bg.setColor(red);
				bg.drawString(gameValue[0], bgWidth / 2 + 10, bgHeight / 2, Graphics.HCENTER | Graphics.TOP);
			}
			else if (tmp == 0) {
				bg.setColor(dfColor);
				bg.drawString("tie", bgWidth / 2 - 10, bgHeight / 2, Graphics.HCENTER | Graphics.TOP);
				bg.setColor(green);
				bg.drawString(gameValue[0], bgWidth / 2 + 10, bgHeight / 2, Graphics.HCENTER | Graphics.TOP);
			}
		}
		else if (gameValue.length == 2) { //两个分牌
			tmp = Integer.parseInt(gameValue[0]);
			if (tmp > 0) {
				bg.setColor(dfColor);
				bg.drawString("win", bgWidth / 2 - 10, bgHeight / 2, Graphics.HCENTER | Graphics.TOP);
				bg.setColor(yellow);
				bg.drawString(gameValue[0], bgWidth / 2 + 10, bgHeight / 2, Graphics.HCENTER | Graphics.TOP);
			}
			else if (tmp < 0) {
				bg.setColor(dfColor);
				bg.drawString("lost", bgWidth / 2 - 10, bgHeight / 2, Graphics.HCENTER | Graphics.TOP);
				bg.setColor(red);
				bg.drawString(gameValue[0], bgWidth / 2 + 10, bgHeight / 2, Graphics.HCENTER | Graphics.TOP);
			}
			else if (tmp == 0) {
				bg.setColor(dfColor);
				bg.drawString("tie", bgWidth / 2 - 10, bgHeight / 2, Graphics.HCENTER | Graphics.TOP);
				bg.setColor(green);
				bg.drawString(gameValue[0], bgWidth / 2 + 10, bgHeight / 2, Graphics.HCENTER | Graphics.TOP);
			}

			tmp = Integer.parseInt(gameValue[1]);
			if (tmp > 0) {
				bg.setColor(dfColor);
				bg.drawString("win", bgWidth / 2 - 10, bgHeight / 2 + 10, Graphics.HCENTER | Graphics.TOP);
				bg.setColor(yellow);
				bg.drawString(gameValue[1], bgWidth / 2 + 10, bgHeight / 2 + 10, Graphics.HCENTER | Graphics.TOP);
			}
			else if (tmp < 0) {
				bg.setColor(dfColor);
				bg.drawString("lost", bgWidth / 2, bgHeight / 2 - 10, Graphics.HCENTER | Graphics.TOP);
				bg.setColor(red);
				bg.drawString(gameValue[1], bgWidth / 2, bgHeight / 2 + 10, Graphics.HCENTER | Graphics.TOP);
			}
			else if (tmp == 0) {
				bg.setColor(dfColor);
				bg.drawString("tie", bgWidth / 2, bgHeight / 2 - 10, Graphics.HCENTER | Graphics.TOP);
				bg.setColor(green);
				bg.drawString(gameValue[1], bgWidth / 2, bgHeight / 2 + 10, Graphics.HCENTER | Graphics.TOP);
			}
		}
		bg.setColor(dfColor);
	}

	/*****************************************************
	 * 功能介绍:游戏结束
	 * 输入参数:分牌一的得分结果,分牌2的得分结果
	 * 输出参数:无
	 *****************************************************/
	public void gameOver(String inputStr) {
		gameValue = main.split(inputStr, ",");
		gameState = 5; //将游戏状态设置为游戏结束等待用户先择继续或退出
		times = 200; //80秒显示游戏结果并让用户选择下一步
	}

	/*****************************************************
	 * 功能介绍:游戏重新开始
	 * 输入参数:无
	 * 输出参数:无
	 *****************************************************/
	public void reBegin() {
		dealList = null;
		cardsState[0][2] = 0;
		cardsState[1][2] = 0;
		times = 200;
		gameState = 1;

	}

	/*****************************************************
	 * 功能介绍:取得当前用户所在的页码
	 * 输入参数:无
	 * 输出参数:无
	 *****************************************************/
	public void getUserPage() {
		for (int i = 0; i < houseUserList.length; i++) { //把默认显示的页转到当前用户本身
			String strTmp = String.valueOf(currentUserId);
			if (houseUserList[i][0].equals(strTmp)) {
				myPageNumber = i;
				showPageNumber = myPageNumber;
			}
		}
	}

	/*****************************************************
	 * 功能介绍:退出当前游戏
	 * 输入参数:无
	 * 输出参数:无
	 *****************************************************/
	public void outGame() {
		isRefresh=false;
		main.house.outHouse(main.house.houseId);
		System.gc(); //注消内存
	}

	public void keyPressed(int keyCode) {
		if (getGameAction(keyCode) == Canvas.FIRE) {
			if (isShowMenu == true) {
				switch (menuIndex) {
					case 1: //聊天
						main.msg.showForm();
						break;
					case 2: //返回
						break;
					case 3: //退出
						outGame();
						break;
					case 4: //帮助
						break;
				}
				isShowMenu=false;
			}
			else {
				isShowMenu = true;
			}
			return;
		}
		if (getGameAction(keyCode) == Canvas.UP) { //向上
			if (isShowMenu) {
				menuIndex--;
				if (menuIndex < 1) {
					menuIndex = 4;
				}
				return;
			}
			rollCanvas(Canvas.UP); //滚动屏幕
			return;
		}
		else if (getGameAction(keyCode) == Canvas.DOWN) { //向下
			if (isShowMenu) { //显示菜单时按了向下
				menuIndex++;
				if (menuIndex > 4) {
					menuIndex = 1;
				}
				return;
			}
			rollCanvas(Canvas.DOWN); //滚动屏幕
			return;
		}
		else if (getGameAction(keyCode) == Canvas.LEFT) { //向左
			return;
		}
		else if (getGameAction(keyCode) == Canvas.RIGHT) { //向右
			return;
		}
		if (myPageNumber != showPageNumber) {
			message = "当前不是您所在的页!";
			return;
		}
		switch (gameState) {
			case 1: //下注或开始
				if (keyCode == softOne) {
					chipIn(); //下注
				}
				else if (keyCode == softTwo) {
					stopChipIn(); //停止下注
				}
				break;
			case 2: //等待开牌
				break;
			case 3: //要牌或停牌(无分牌)
				if (keyCode == softOne) { //按了要牌键
					if (cardsState[0][2] == 0) {
						getCard(0);
					}
					else if (cardsState[0][2] != 0 && cardsState[1][2] == 0 && isSpread) {
						getCard(1);
					}
				}
				else if (keyCode == softTwo) { //按了停牌键
					if (cardsState[0][2] == 0) {
						stand(0);
					}
					else if (cardsState[0][2] != 0 && cardsState[1][2] == 0 && isSpread) {
						stand(1);
					}
				}
				else if (keyCode == Canvas.KEY_NUM1) { //按了双倍下注键
					if (cardsState[0][2] == 0) {
						doubleCard(0);
					}
					else if (cardsState[0][2] != 0 && cardsState[1][2] == 0 && isSpread) {
						doubleCard(1); ;
					}
				}
				else if (keyCode == Canvas.KEY_NUM2) { //按了分牌键
					//如果第一付牌现在是两张牌,而且还没分过牌就可以分牌
					spread();
				}
				break;
			case 4: //要完牌(进入等待其它人)
				break;
			case 5: //显示发牌结果,并且让用户选择继续或离开
				if (keyCode == softOne) { //返回大厅
					outGame();
				}
				else if (keyCode == softTwo) { //继续游戏
					reBegin(); //游戏重新开始
				}
				break;
		}
	}
}

⌨️ 快捷键说明

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