Пример #1
0
  /**
   * Based on rendering information returns card index selected
   *
   * @param player - refernce to player
   * @param event - reference to mouse event handler
   * @return index of card depending on mouse position
   */
  public static int getCardIndex(CPlayer player, CGraphics g_src, int mouseX, int mouseY) {

    Point mouse = new Point(mouseX, mouseY);
    Point pos;

    pos = getDeckPosition(g_src, 'd');

    if (g_src.getCardOutline(pos.x, pos.y).contains(mouse.x, mouse.y)) return 100;

    pos = getDeckPosition(g_src, 't');
    if (g_src.getCardOutline(pos.x, pos.y).contains(mouse.x, mouse.y)) return 200;

    if (player == null) return -1;

    /*

    int j=((T_CHumanPlayer)mPlayers[0]).selected();

    if(j>-1)
        if(T_CGraphics.getCardOutline(playerCardsCoords[j][0], playerCardsCoords[j][1]-25)
                .contains(x, y))
            return j;
    */
    int offset = (int) ((0.65 * g_src.displayWidth()) / (player.getNumberOfCards() - 1));
    for (int i = player.getNumberOfCards() - 1; i > -1; i--) {
      int x = (int) ((0.35 / 2) * g_src.displayWidth() - g_src.cardWidth() / 2 + offset * i);
      int y = (int) (0.95 * g_src.displayHeight() - g_src.cardHeight());
      if (g_src.getCardOutline(x, y).contains(mouse.x, mouse.y)) return i;
    }

    return -1;
  }
Пример #2
0
  private static RoundRectangle2D.Double getTypeOutline(CGraphics g_src, int type) {

    int width = g_src.displayWidth() / 9;
    int y = g_src.displayHeight() / 2 - width / 2;
    int x = width * (2 * type + 1);
    return new RoundRectangle2D.Double(x - 5, y - 5, width + 10, width + 10, 10, 10);
  }
Пример #3
0
  /**
   * Renders card type selection if needed
   *
   * @param g - refernce to graphic content
   * @param g_src - reference to class which holds informations about rendering
   * @param mouseX - X position of mouse
   * @param mouseY - Y position of mouse
   * @param width - width of display
   * @param height - height of display
   */
  public static void renderSelectType(Graphics g, CGraphics g_src, int mouseX, int mouseY) {
    g.setColor(new Color(88, 88, 88, 180));
    g.fillRect(0, 0, g_src.displayWidth(), g_src.displayHeight());
    Image temp = null;

    String label = "Vyber farbu";
    g.setFont(new Font("Arial", Font.BOLD | Font.ITALIC, 40));
    FontMetrics metrics = g.getFontMetrics();
    g.setColor(Color.RED);
    g.drawString(
        label,
        g_src.displayWidth() / 2 - metrics.stringWidth(label) / 2,
        g_src.displayHeight() / 4 + metrics.getHeight());

    for (int i = 0; i < 4; i++) {

      RoundRectangle2D.Double outline = getTypeOutline(g_src, i);
      boolean mouseon = outline.contains(mouseX, mouseY);
      temp = g_src.getType(i);
      int x = (int) outline.getX();
      int y = (int) outline.getY();
      int width = (int) outline.getWidth();
      g.setColor(new Color(0x6C, 0x43, 0x19));
      g.fillRoundRect(x - 5, y - 5, width + 10, width + 10, 10, 10);
      g.setColor(new Color(0xFF, 0xFF, 0xB8));
      g.fillRoundRect(x, y, width, width, 10, 10);
      g.drawImage(
          temp,
          x + 5,
          y + 5,
          x + width - 5,
          y + width - 5,
          0,
          0,
          temp.getWidth(null),
          temp.getHeight(null),
          null);
      if (!mouseon) {
        g.setColor(new Color(88, 88, 88, 120));
        g.fillRoundRect(x, y, width, width, 10, 10);
      }
    }
  }
Пример #4
0
  private static Point getDeckPosition(CGraphics g_src, char type) {
    Point result = new Point();

    int offset;
    if (Character.toLowerCase(type) == 'd') offset = -3 * g_src.cardWidth() / 2;
    else offset = g_src.cardWidth() / 2;

    result.x = g_src.displayWidth() / 2 + offset;
    result.y = g_src.displayHeight() / 2 - g_src.cardHeight() / 2;

    return result;
  }
Пример #5
0
  private static Point getPlayerPosition(int player, CGraphics g_src, int numOfPlayers) {
    int width = g_src.displayWidth();
    int height = g_src.displayHeight();

    if (player < 1 || player > numOfPlayers) return null;
    int[] positions = new int[numOfPlayers];
    int[][] pos = new int[5][2];
    pos[0][0] = width - 80;
    pos[0][1] = height / 2 - 45;

    pos[1][0] = 5 * width / 6 - 50;
    pos[1][1] = height / 6;

    pos[2][0] = width / 2;
    pos[2][1] = 50;

    pos[3][0] = width / 6 + 50;
    pos[3][1] = pos[1][1];

    pos[4][0] = 100;
    pos[4][1] = pos[0][1];

    switch (numOfPlayers) {
      case 1:
        positions[0] = 2;
        break;
      case 2:
        positions[0] = 1;
        positions[1] = 3;
        break;
      case 3:
        positions[0] = 0;
        positions[1] = 2;
        positions[2] = 4;
        break;
      case 4:
        positions[0] = 0;
        positions[1] = 1;
        positions[2] = 3;
        positions[3] = 4;
        break;
      default:
        for (int i = 0; i < 5; i++) {
          positions[i] = i;
        }
    }

    return new Point(pos[positions[player - 1]][0], pos[positions[player - 1]][1]);
  }
Пример #6
0
  /**
   * Renders player hand
   *
   * @param g - refernce to class Graphics that takes care of displaying play field
   * @param graphicSource - refernce to class that holds rendering information
   * @param player - reference to human player
   * @param mouseX - Xposition of mouse
   * @param mouseY - Yposition of mouse
   * @param width - width of display
   * @param height - height of display
   */
  public static void renderPlayerHand(
      Graphics g, CGraphics g_src, CPlayer player, int mouseX, int mouseY, boolean active) {

    int numOfCards = player.getNumberOfCards();
    // sets space between each card. Distance between first and last card has to be maximum 0.65 of
    // display width
    int offset = (int) ((0.65 * g_src.displayWidth()) / (numOfCards - 1));
    // position indicators - stores info about position of card
    int y;
    int x;
    // temporary stores image of card before rendering
    Image temp;
    // index of card on which is mouse on

    int i = -1;
    if (active) i = getCardIndex(player, g_src, mouseX, mouseY);
    // position of card on which mouse is on
    int x2 = 0;
    int y2 = 0;

    // displays cards on field
    for (int j = 0; j < numOfCards; j++) {
      // gets card position
      x = (int) ((0.35 / 2) * g_src.displayWidth() - g_src.cardWidth() / 2 + offset * j);
      y = (int) (0.95 * g_src.displayHeight() - g_src.cardHeight());
      /*
      if(g_src.getCardOutline(x, y).contains(mouseX, mouseY)){
          x2=x;
          y2=y;
          i=j;
        //  continue;
      }
      */

      // skips rendering of card, which has mouse on and stores card position
      if (i == j) {
        x2 = x;
        y2 = y;
        continue;
      }

      // renders card
      temp = g_src.getFrontCard(player.getCard(j).getNumber(), player.getCard(j).getType());
      g.drawImage(temp, x, y, null);
    }

    // renders card, which has mouse on it
    if (i > -1 && i < 50) {
      // sets and renders shadow
      g.setColor(new Color(88, 88, 88, 120));
      ((Graphics2D) g).fill(g_src.getCardOutline(x2 + 4, y2 + 4));
      // renders card which is position bit above all others cards
      temp = g_src.getFrontCard(player.getCard(i).getNumber(), player.getCard(i).getType());
      g.drawImage(temp, x2 - 2, y2 - 2, null);
    }
    // prints out information about player hand
    x = (int) ((0.35 / 2) * g_src.displayWidth() - g_src.cardWidth() / 2);
    y = (int) (0.95 * g_src.displayHeight() - g_src.cardHeight()) - 15;
    String karta;
    switch (player.getNumberOfCards()) {
      case 1:
        karta = "karta";
        break;
      case 2:
      case 3:
      case 4:
        karta = "karty";
        break;
      default:
        karta = "kariet";
        break;
    }
    g.setColor(Color.BLACK);
    g.setFont(new Font("Arial", Font.BOLD, 15));
    g.drawString(player.name() + ": " + player.getNumberOfCards() + " " + karta, x, y);
  }
Пример #7
0
  /**
   * Renders game table
   *
   * @param g - reference to graphic content
   * @param graphicSource - reference to class that contains rendering information
   * @param deck - refernce to deck
   * @param trash - reference to trash
   * @param width - width of display
   * @param height - height of display
   */
  public static void renderTable(
      String gameName,
      Graphics g,
      CGraphics g_src,
      CPacket deck,
      CPacket trash,
      int mouseX,
      int mouseY,
      boolean active,
      boolean activeTrash) {
    Graphics2D g2 = (Graphics2D) g;
    Point temp;
    Image img;

    int cardIndex = getCardIndex(null, g_src, mouseX, mouseY);

    // draw background
    g.drawImage(g_src.getBackground(), 0, 0, null);
    // draw name of game
    g.setColor(Color.WHITE);
    g.setFont(new Font("Arial", Font.BOLD | Font.ITALIC, 25));
    FontMetrics metrics = g.getFontMetrics();
    g.drawString(gameName, g_src.displayWidth() / 2 - metrics.stringWidth(gameName) / 2, 30);
    // draw table
    g.drawOval(15, 45, g_src.displayWidth() - 30, g_src.displayHeight() - 75);
    g.setColor(new Color(0, 0, 0, 50));
    g.fillOval(15, 45, g_src.displayWidth() - 30, g_src.displayHeight() - 75);

    // draw decks
    temp = getDeckPosition(g_src, 'd'); // save deck coords
    if (deck.isEmpty()) {
      // draws empty deck
      g.setColor(new Color(88, 88, 88, 125));
      g2.fill(g_src.getCardOutline(temp.x, temp.y));
    } else {
      // temporary stores back card
      img = g_src.getBackCard();
      // gets number of cards in deck
      int numDeckCards = deck.size();
      // if mouse is on the deck moves upmost card bit upward
      // Debug.println("cardIndex", Integer.toString(cardIndex));
      if (cardIndex == 100 && active)
        numDeckCards -= 1; // if mouseover num of cards rendered in deck is 1 less
      // draws deck
      for (int i = 0; i < numDeckCards; i++)
        g.drawImage(img, temp.x - (i - deck.size()) / 3, temp.y - (i - deck.size()) / 3, null);

      // if(g_src.getCardOutline(temp.x,temp.y).contains(mouseX, mouseY))
      if (cardIndex == 100 && active) {
        // draws mouseover card
        g.setColor(new Color(88, 88, 88, 120));
        g2.fill(g_src.getCardOutline(temp.x + 4, temp.y + 4));
        g.drawImage(img, temp.x - 2, temp.y - 1, null);
      }
    }
    // draws trash
    temp = getDeckPosition(g_src, 't');

    if (trash.isEmpty()) {
      g.setColor(new Color(88, 88, 88, 125));
      g2.fill(g_src.getCardOutline(temp.x + deck.size() / 3, temp.y + deck.size() / 3));
    } else {
      CCard topCard = trash.getTopCard();
      img = g_src.getFrontCard(topCard.getNumber(), topCard.getType());
      // gets number of cards in deck
      int numDeckCards = trash.size();
      // if mouse is on the deck moves upmost card bit upward
      // Debug.println("cardIndex", Integer.toString(cardIndex));
      if (cardIndex == 200 && activeTrash)
        numDeckCards -= 1; // if mouseover num of cards rendered in deck is 1 less
      // draws deck
      for (int i = 0; i < numDeckCards; i++)
        g.drawImage(img, temp.x - (i - trash.size()) / 3, temp.y - (i - deck.size()) / 3, null);
      if (cardIndex == 200 && activeTrash) {
        // draws mouseover card
        g.setColor(new Color(88, 88, 88, 120));
        g2.fill(g_src.getCardOutline(temp.x + 4, temp.y + 4));
        g.drawImage(img, temp.x - 2, temp.y - 1, null);
      }
    }
  }