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

📄 dealer.java

📁 一个非常不错的java纸牌游戏源代码
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
			}
			if (samecount == 1) {// one of a kind
				if (pile[top] != null)
					pile[top].drawCard(centre1);
			} else if (samecount == 2) {// 2 of a kind
				pile[top + 1].drawCard2((int) centre1.getX(), (int) centre1
						.getY() - 10);
				pile[top].drawCard2((int) centre1.getX(),
						(int) centre1.getY() + 10);
			} else if (samecount >= 3) {// 3 of a kind
				pile[top + 2].drawCard2((int) centre1.getX(), (int) centre1
						.getY() - 20);
				pile[top + 1].drawCard2((int) centre1.getX(), (int) centre1
						.getY());
				pile[top].drawCard2((int) centre1.getX(),
						(int) centre1.getY() + 20);
			}
			if (nine == true && pile[0].getValue() == 9)
				if (top == 1)// one nine
					pile[0].drawSideWays2((int) centre1.getX() - 15,
							(int) centre1.getY() + 40);
			if (top == 2) {// 2 nines
				pile[1].drawSideWays2((int) centre1.getX() - 15, (int) centre1
						.getY() + 40);
				pile[0].drawSideWays2((int) centre1.getX() - 15, (int) centre1
						.getY() + 50);
			}
			if (top == 3) {// 3 nines
				pile[2].drawSideWays2((int) centre1.getX() - 15, (int) centre1
						.getY() + 40);
				pile[1].drawSideWays2((int) centre1.getX() - 15, (int) centre1
						.getY() + 50);
				pile[0].drawSideWays2((int) centre1.getX() - 15, (int) centre1
						.getY() + 60);
			}
		} else if (burnt) {
			g.drawImage(burntPic, 130, 190, sh);
			burnt = false;
		}
		g.drawImage(pointer[whosturn], (int) pointerpoints[whosturn].getX(),
				(int) pointerpoints[whosturn].getY(), sh);
		if (sh.smallscreen())
			sh.scalepic();
		sh.repaint();
	}

	public void redeal() {

		if (socketCount >= 3) {

			for (int n = 0; n < 4; n++) {
				// setting scoreboard if game finishes early
				if (n < 3) {
					if (outofgame[n] == false)
						score.addScore(otherNames[n], position);
				} else {
					if (outofgame[n] == false)
						score.addScore(playersName, position);
				}

				outofgame[n] = false;
				if (n < 3)
					waitformsg[n] = false;
				hands[n].removeAll();
			}

			whosturn = 2;
			position = 1;
			swapcount = 0;

			for (int n = 0; n < 52; n++)
				pile[n] = null;
			for (int n = 0; n < 3; n++)
				sendCommand("reset:", n);
			deal();
		}
	}

	private int pilelength() {
		int cardCount = 0;
		for (int n = 0; n < 52; n++) {
			if (pile[n] == null)
				break;
			cardCount++;
		}
		return cardCount;
	}

	private int decklength() {
		int cardCount = 0;
		for (int n = 0; n < 52; n++) {
			if (deck[n] == null)
				break;
			cardCount++;
		}
		return cardCount;
	}

	private void outofgame(int playerout) {

		String name = "";
		// telling whos out of the game there are out
		if (playerout == 3) {// dealer out of game
			if (position == 1)
				sh
						.addMsg("Well done you have won the game your the first out !!");
			else if (position == 2)
				sh.addMsg("You've done alright you the second out of the game");
			else if (position == 3)
				sh.addMsg("Just made it, congrats your not a ShitHead !");
			name = playersName;
		} else {
			sendCommand("out:" + position + ":", playerout);
			name = otherNames[playerout];
			sh.addMsg(name + " is out of the game");
		}

		// updating scoreboard
		score.addScore(name, position);

		// sending message to everyone else
		for (int n = 0; n < 3; n++)
			if (n != playerout)
				sendCommand("otherout:" + name + ":", n);

		outofgame[playerout] = true;
		position++;

		// ending game if over
		if (position == 4) {
			gameID++;
			int wholost = 0;
			// finding out which player is still in the game
			for (int n = 0; n < 4; n++)
				if (!outofgame[n]) {
					wholost = n;
					outofgame[n] = true;
					break;
				}
			if (wholost == 3) {
				sh.addMsg("You Lost ShitHead !!!");
				sh.addMsg("Game Over");
				name = playersName;
				displayTable();
			} else {
				sendCommand("out:" + position + ":", wholost);
				name = otherNames[wholost];
				sh.addMsg(name + " is the Shithead");
				sh.addMsg("Game Over");
				whosturn = 3;
				displayTable();
			}

			// updating scoreboard
			score.addScore(name, 4);
			new ScoreThread();

			// sending message to everyone else
			for (int n = 0; n < 3; n++)
				if (otherNames[n] != name)
					sendCommand("lost:" + name + ":", n);
			outofgame[wholost] = true;
		}
	}

	public void cardSelection(int cardno) {
		Card card;
		String command;
		if (hands[3].getCard(0) == null) {// if player only has cards on table
			if (hands[3].getFaceUp(0) != null || hands[3].getFaceUp(1) != null
					|| hands[3].getFaceUp(2) != null) { // if cards still faceup
				// on table
				card = hands[3].getFaceUp(cardno);
				command = "othersturn:" + playersName + ":faceup:";
				if (isValidCard(card, command))
					hands[3].removeFaceUp(cardno);
			} else {// if only cards down
				card = hands[3].getFaceDown(cardno);
				command = "othersturn:" + playersName + ":facedown:";
				if (isValidCard(card, command)) {
					hands[3].removeFaceDown(cardno);
					// checking if player is out of the game
					if (hands[3].getFaceDown(0) == null
							&& hands[3].getFaceDown(1) == null
							&& hands[3].getFaceDown(2) == null)
						outofgame(3);
				} else {// player must pick up the deck if not valid
					sh.addMsg("The card you played was a "
							+ hands[3].getFaceDown(cardno).getStringValue()
							+ " you had to pick up the pile");
					hands[3].addCard(hands[3].getFaceDown(cardno));
					for (int n = 0; n < 3; n++)
						sendCommand("othersturn:" + playersName
								+ ":facedown:pickup:"
								+ hands[3].getFaceDown(cardno).getNumber()
								+ ":", n);
					for (int n = 0; n < 52; n++) {
						if (pile[n] == null)
							break;
						hands[3].addCard(pile[n]);
						pile[n] = null;
					}
					hands[3].removeFaceDown(cardno);
					nextTurn();
				}
			}
		} else {// if player still has cards in hand
			card = hands[3].getCard(cardno);
			command = "othersturn:" + playersName + ":";
			if (isValidCard(card, command))
				for (int n = 0; n < hands[3].length() - 1; n++)
					if (card.getNumber() == hands[3].getCard(n).getNumber()) {
						hands[3].removeCard(n);
						break;
					}
			// checking if player is out of the game
			if (hands[3].getFaceDown(0) == null
					&& hands[3].getFaceDown(1) == null
					&& hands[3].getFaceDown(2) == null
					&& hands[3].getCard(0) == null) {
				outofgame(3);
				if (whosturn == 3)
					nextTurn();
			}
		}
		// if players hand is less than 3 card and card still in deck give
		// another card to player
		while (deck[0] != null && hands[3].length() <= 3) {
			hands[3].addCard(deck[0]);
			// removing card from deck
			deck[51] = null;
			for (int w = 0; w < 51; w++)
				deck[w] = deck[w + 1];
		}
		displayTable();
	}

	private boolean checkformultiFaceUp(Card card) {
		// checking if card selection is valid
		if (pile[0] != null) {
			if (card.getValue() == 9 && nine == true) {
				// do nothing as valid card
			} else if (card.getValue() == 10 || card.getValue() == 2) {
				// do nothing as valid card
			} else if (nine == true && pile[0].getValue() == 9) {
				int count = 0;// determining the number of nines on top of
				// pile
				for (int i = 0; i < 52; i++) {
					if (pile[i] == null)
						break;
					if (pile[i].getValue() == 9)
						count++;
					else
						break;
				}
				if (pile[count] != null) {
					if (card.getValue() == 9) {
						// do nothing as valid card
					} else if (seven == true && pile[count].getValue() == 7) {
						if (card.getValue() >= 7)
							return false;
					} else if (!(card.getValue() == 2 || card.getValue() == 10 || card
							.getValue() >= pile[count].getValue()))
						return false;
				}
			} else if (seven == true && pile[0].getValue() == 7) {
				if (card.getValue() >= 7)
					return false;
			} else if (!(card.getValue() == 2 || card.getValue() == 10 || card
					.getValue() >= pile[0].getValue()))
				return false;
		}

		// checking how many card of the same value as card played are in
		// players hand
		int amountinhand = 0;
		for (int n = 0; n < 3; n++) {
			if (hands[3].getFaceUp(n) != null)
				if (hands[3].getFaceUp(n).getValue() == card.getValue())
					amountinhand++;
		}
		if (amountinhand <= 1)
			return false;
		MultiCardD dialog = new MultiCardD(sh, amountinhand);
		int numbertoplay = dialog.getChoice();
		if (numbertoplay <= 1)
			return false;
		String command = "othersturn:" + playersName + ":faceup:multi:"
				+ numbertoplay + ":" + card.getNumber() + ":";
		addcardtopile(card);
		numbertoplay--;
		for (int n = 0; n < 3; n++)
			if (hands[3].getFaceUp(n) != null) {
				if (numbertoplay <= 0)
					break;
				if (card.getValue() == hands[3].getFaceUp(n).getValue()
						&& card.getNumber() != hands[3].getFaceUp(n)
								.getNumber()) {
					command = command.concat(hands[3].getFaceUp(n).getNumber()
							+ ":");
					addcardtopile(hands[3].getFaceUp(n));
					// storing which card are to be removed
					hands[3].removeFaceUp(n);
					numbertoplay--;
				}
			}
		// sending command
		for (int n = 0; n < 3; n++)
			sendCommand(command, n);
		// checking for 4 of a kind
		if (fourOfAKind(pile[3]) || pile[0].getValue() == 10) {
			burnt = true;
			for (int n = 0; n < 51; n++)
				pile[n] = null;
			sh.addMsg("You burn the pile is your turn again");
		} else {
			sh.setmyTurn(false);
			nextTurn();
		}
		return true;
	}

	private boolean checkformulti(Card card) {
		// checking if card selection is valid
		if (pile[0] != null) {
			if (nine == true && pile[0].getValue() == 9) {
				int count = 0;// determining the number of nines on top of
				// pile
				for (int i = 0; i < 52; i++) {
					if (pile[i] == null)
						break;
					if (pile[i].getValue() == 9)
						count++;
					else
						break;
				}
				if (pile[count] != null) {
					if (card.getValue() == 9) {
						// do nothing as valid card
					} else if (seven == true && pile[count].getValue() == 7) {
						if (card.getValue() >= 7)
							return false;
					} else if (!(card.getValue() == 2 || card.getValue() == 10 || card
							.getValue() >= pile[count].getValue()))
						return false;
				}
			} else if (card.getValue() == 9 && nine == true) {
				// do nothing as valid card
			} else if (seven == true && pile[0].getValue() == 7) {
				if (card.getValue() >= 7)
					return false;
			} else if (!(card.getValue() == 2 || card.getValue() == 10 || card
					.getValue() >= pile[0].getValue()))
				return false;
		}

		// checking how many card of the same value as card played are in
		// players hand
		int amountinhand = 0;
		for (int n = 0; n < hands[3].length(); n++) {
			if (hands[3].getCard(n) == null)
				break;
			if (hands[3].getCard(n).getValue() == card.getValue())
				amountinhand++;
		}
		if (amountinhand <= 1)
			return false;
		MultiCardD dialog = new MultiCardD(sh, amountinhand);
		int numbertoplay = dialog.getChoice();
		if (numbertoplay <= 1)
			return false;
		String command = "othersturn:" + playersName + ":multi:" + numbertoplay
				+ ":" + card.getNumber() + ":";
		addcardtopile(card);
		numbertoplay--;
		int toberemovedcount = 0;
		int toberemoved[] = new int[3];
		for (int n = 0; n < 3; n++)
			toberemoved[n] = -1;
		for (int n = 0; n < hands[3].length() - 1; n++) {
			if (hands[3].getCard(n) == null)
				break;
			if (numbertoplay <= 0)
				break;
			if (card.getValue() == hands[3].getCard(n).getValue()
					&& card.getNumber() != hands[3].getCard(n).getNumber()) {
				command = command.concat(hands[3].getCard(n).getNumber() + ":");
				addcardtopile(hands[3].getCard(n));
				// storing which card are to be removed
				toberemoved[toberemovedcount] = hands[3].getCard(n).getNumber();
				toberemovedcount++;
				numbertoplay--;
			}
		}
		// removing card from hand
		for (int n = 0; n < 3; n++) {
			if (toberemoved[n] == -1)
				break;
			for (int i = 0; i < hands[3].length() - 1; i++)
				if (hands[3].getCard(i).getNumber() == toberemoved[n]) {
					hands[3].removeCard(i);
					break;
				}
		}
		// sending command
		for (int n = 0; n < 3; n++)
			sendCommand(command, n);
		// checking for 4 of a kind
		if (fourOfAKind(pile[3]) || pile[0].getValue() == 10) {
			burnt = true;
			for (int n = 0; n < 51; n++)
				pile[n] = null;
			// checking if player is out of game
			if (hands[3].getFaceDown(0) == null
					&& hands[3].getFaceDown(1) == null
					&& hands[3].getFaceDown(2) == null
					&& hands[3].getCard(0) == null)
				nextTurn();
			else
				// else there go again
				sh.addMsg("You burn the pile is your turn again");
		} else {
			sh.setmyTurn(false);
			nextTurn();
		}
		return true;
	}

	private void nextTurn() {
		whosturn++;
		if (whosturn >= 4)
			whosturn = 0;
		int loop = 0;// stop program becoming trapped in loop
		while (outofgame[whosturn] && loop < 5) {
			loop++;
			whosturn++;
			if (whosturn >= 4)
				whosturn = 0;
		}
		if (whosturn != 3) {
			waitformsg[whosturn] = true;
			if (!aiPlayer[whosturn]) {
				sendCommand("yourturn:", whosturn);
			} else {
				new AIThread();
			}
		} else {
			canDealerPlay();
		}
	}

	public boolean fourOfAKind(Card card) {
		if (pile[0] == null || pile[1] == null || pile[2] == null
				|| card == null)
			return false;

⌨️ 快捷键说明

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