// 当玩家自己操作时,触摸屏事件的处理 public void onTuch(int x, int y) { for (int i = 0; i < cards.length; i++) { // 判断是那张牌被选中,设置标志 if (i != cards.length - 1) { if (CardsManager.inRect( x, y, (int) ((left + i * 20) * Game.SCALE_HORIAONTAL), (int) ((top - (cardsFlag[i] ? 10 : 0)) * Game.SCALE_VERTICAL), (int) (20 * Game.SCALE_HORIAONTAL), (int) (60 * Game.SCALE_VERTICAL))) { cardsFlag[i] = !cardsFlag[i]; break; } } else { if (CardsManager.inRect( x, y, (int) ((left + i * 20) * Game.SCALE_HORIAONTAL), (int) ((top - (cardsFlag[i] ? 10 : 0)) * Game.SCALE_VERTICAL), (int) (40 * Game.SCALE_HORIAONTAL), (int) (60 * Game.SCALE_VERTICAL))) { cardsFlag[i] = !cardsFlag[i]; break; } } } }
// 电脑判断出牌的智能 public CardsHolder chupaiAI(CardsHolder card) { int[] pokeWanted = null; if (card == null) { // 玩家随意出一手牌 pokeWanted = CardsManager.outCardByItsself(cards, last, next); } else { // 玩家需要出一手比card大的牌 pokeWanted = CardsManager.findTheRightCard(card, cards, last, next); } // 如果不能出牌,则返回 if (pokeWanted == null) { return null; } // 以下为出牌的后续操作,将牌从玩家手中剔除 for (int i = 0; i < pokeWanted.length; i++) { for (int j = 0; j < cards.length; j++) { if (cards[j] == pokeWanted[i]) { cards[j] = -1; break; } } } int[] newpokes = new int[0]; if (cards.length - pokeWanted.length > 0) { newpokes = new int[cards.length - pokeWanted.length]; } int j = 0; for (int i = 0; i < cards.length; i++) { if (cards[i] != -1) { newpokes[j] = cards[i]; j++; } } this.cards = newpokes; CardsHolder thiscard = new CardsHolder(pokeWanted, playerId); // 更新桌子最近一手牌 Desk.cardsOnDesktop = thiscard; this.latestCards = thiscard; return thiscard; }
public void paintResultCards(GLEx canvas) { RectF.Range src = new RectF.Range(); RectF.Range des = new RectF.Range(); int row; int col; for (int i = 0; i < cards.length; i++) { row = CardsManager.getImageRow(cards[i]); col = CardsManager.getImageCol(cards[i]); cardImage = Game.getImage(CardImage.cardImages[row][col]); Paint paint = new Paint(); paint.setStyle(Style.STROKE); paint.setColor(LColor.black); paint.setStrokeWidth(1); // 当玩家是NPC时,竖向绘制,扑克牌全是背面 if (paintDirection == CardsType.direction_Vertical) { src.set(0, 0, cardImage.getWidth(), cardImage.getHeight()); des.set( (int) (left * Game.SCALE_HORIAONTAL), (int) ((top - 40 + i * 15) * Game.SCALE_VERTICAL), (int) ((left + 40) * Game.SCALE_HORIAONTAL), (int) ((top + 20 + i * 15) * Game.SCALE_VERTICAL)); RectF.Range rectF = new RectF.Range(des); canvas.rect(rectF, 5, 5, paint); canvas.drawBitmap(cardImage, src, des, paint); } else { src.set(0, 0, cardImage.getWidth(), cardImage.getHeight()); des.set( (int) ((left + 40 + i * 20) * Game.SCALE_HORIAONTAL), (int) (top * Game.SCALE_VERTICAL), (int) ((left + 80 + i * 20) * Game.SCALE_HORIAONTAL), (int) ((top + 60) * Game.SCALE_VERTICAL)); RectF.Range rectF = new RectF.Range(des); canvas.rect(rectF, 5, 5, paint); canvas.drawBitmap(cardImage, src, des, paint); } } }
// 绘制玩家手中的牌 public void paint(GLEx canvas) { // System.out.println("id:" + playerId); RectF.Range src = new RectF.Range(); RectF.Range des = new RectF.Range(); int row; int col; // 当玩家是NPC时,竖向绘制,扑克牌全是背面 if (paintDirection == CardsType.direction_Vertical) { Paint paint = new Paint(); paint.setStyle(Style.STROKE); paint.setColor(LColor.black); paint.setStrokeWidth(1); LTexture backImage = Game.getImage("card_bg"); src.set(0, 0, backImage.getWidth(), backImage.getHeight()); des.set( (int) (left * Game.SCALE_HORIAONTAL), (int) (top * Game.SCALE_VERTICAL), (int) ((left + 40) * Game.SCALE_HORIAONTAL), (int) ((top + 60) * Game.SCALE_VERTICAL)); RectF.Range rectF = new RectF.Range(des); canvas.rect(rectF, 5, 5, paint); canvas.drawBitmap(backImage, src, des, paint); // 显示剩余牌数 paint.setStyle(Style.FILL); paint.setColor(LColor.white); paint.setTextSize((int) (20 * Game.SCALE_HORIAONTAL)); canvas.drawText( "" + cards.length, (int) (left * Game.SCALE_HORIAONTAL), (int) ((top + 80) * Game.SCALE_VERTICAL), paint); } else { Paint paint = new Paint(); paint.setStyle(Style.STROKE); paint.setColor(LColor.black); paint.setStrokeWidth(1); for (int i = 0; i < cards.length; i++) { row = CardsManager.getImageRow(cards[i]); col = CardsManager.getImageCol(cards[i]); cardImage = Game.getImage(CardImage.cardImages[row][col]); int select = 0; if (cardsFlag[i]) { select = 10; } src.set(0, 0, cardImage.getWidth(), cardImage.getHeight()); des.set( (int) ((left + i * 20) * Game.SCALE_HORIAONTAL), (int) ((top - select) * Game.SCALE_VERTICAL), (int) ((left + 40 + i * 20) * Game.SCALE_HORIAONTAL), (int) ((top - select + 60) * Game.SCALE_VERTICAL)); RectF.Range rectF = new RectF.Range(des); canvas.rect(rectF, 5, 5, paint); canvas.drawBitmap(cardImage, src, des, paint); } } }
// 非电脑的出牌 public CardsHolder chupai(CardsHolder card) { int count = 0; for (int i = 0; i < cards.length; i++) { if (cardsFlag[i]) { count++; System.out.println("出牌:" + String.valueOf(CardsManager.getCardNumber(cards[i]))); } } int[] chupaiPokes = new int[count]; int j = 0; for (int i = 0; i < cards.length; i++) { if (cardsFlag[i]) { chupaiPokes[j] = cards[i]; j++; } } int cardType = CardsManager.getType(chupaiPokes); System.out.println("cardType:" + cardType); if (cardType == CardsType.error) { // 出牌错误 if (chupaiPokes.length != 0) { Game.sendEmptyMessage(Game.WRONG_CARD); } else { Game.sendEmptyMessage(Game.EMPTY_CARD); } return null; } CardsHolder newLatestCardsHolder = new CardsHolder(chupaiPokes, playerId); if (card == null) { Desk.cardsOnDesktop = newLatestCardsHolder; this.latestCards = newLatestCardsHolder; int[] newPokes = new int[cards.length - count]; int k = 0; for (int i = 0; i < cards.length; i++) { if (!cardsFlag[i]) { newPokes[k] = cards[i]; k++; } } this.cards = newPokes; this.cardsFlag = new boolean[cards.length]; } else { if (CardsManager.compare(newLatestCardsHolder, card) == 1) { Desk.cardsOnDesktop = newLatestCardsHolder; this.latestCards = newLatestCardsHolder; int[] newPokes = new int[cards.length - count]; int ni = 0; for (int i = 0; i < cards.length; i++) { if (!cardsFlag[i]) { newPokes[ni] = cards[i]; ni++; } } this.cards = newPokes; this.cardsFlag = new boolean[cards.length]; } if (CardsManager.compare(newLatestCardsHolder, card) == 0) { Game.sendEmptyMessage(Game.SMALL_CARD); return null; } if (CardsManager.compare(newLatestCardsHolder, card) == -1) { Game.sendEmptyMessage(Game.WRONG_CARD); return null; } } return newLatestCardsHolder; }