Пример #1
0
  // 当玩家自己操作时,触摸屏事件的处理
  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;
        }
      }
    }
  }
Пример #2
0
  // 电脑判断出牌的智能
  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;
  }
Пример #3
0
  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);
      }
    }
  }
Пример #4
0
  // 绘制玩家手中的牌
  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);
      }
    }
  }
Пример #5
0
  // 非电脑的出牌
  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;
  }