Программа раздает по 5 карт каждому игроку, отображая изображения карт вместе со значением количества карт после того, как пользователь выберет количество игроков.

Все работает, как описано выше, но я не знаю, как суммировать значения после вызова функции. Кто-нибудь может дать мне идею?

<?php

class classHand
{
    var $totals;
    var $cards;

    function drawCard($c, $theDeck)
    {
        if (is_numeric($c)) {
            $c = floor($c);
            for ($i = 0; $i < $c; $i++) {
                $this->cards[] = $theDeck->dealCard();
            }
        }
    }

    function showHand()
    {
        print("<table border=0>\n");
        print("<tr><td>&nbsp;</td>\n");
        for ($i = 0; $i < count($this->cards); $i++) {
            print("<td>" . $this->cards[$i]->getImage() . "</td><td>&nbsp;</td>\n");
        }
        print("</tr></table>\n");
    }

    function showValue()
    {
        for ($i = 0; $i < count($this->cards); $i++) {
            print("&nbsp;" . $this->cards[$i]->getValue() . "&nbsp;");
        }
    } // end of showValue
} // end of classHand

class classPlayer
{
    var $name;
    var $hand;

    function classPlayer($n = "player")
    {
        $this->name = $n;
        $this->hand = new classHand();
    }
}

Тогда это страница, которая реализует классы под названием cards.php

<?php

include("classCard.php");

$dealersDeck = new classDeck();
$dealersDeck->shuffleDeck();

$player[] = new classPlayer("You");

$selected_players = $_POST['players'];

for ($i = 0; $i < 5; $i++) {
    for ($j = 0; $j < count($player); $j++) {
        $player[$j]->hand->drawCard(1, $dealersDeck);
    }
}

for ($i = 0; $i < count($player); $i++) {
    print("Player: " . $player[$i]->name . "<br />");
    $player[$i]->hand->showHand();
    $player[$i]->hand->showValue();
    print("<P>&nbsp;</p>");
}
-1
BeetleThug 25 Фев 2015 в 19:24

2 ответа

Лучший ответ

Ваше свойство $totals не использовалось, поэтому я переименовал его в $totalValue. В этой переменной вы отслеживаете карты в руке.

class Hand
{
    protected $totalValue;
    protected $cards;

    public function __construct()
    {
        $this->reset();
    }

    /**
     * $deck is the only required parameter
     */
    public function drawCard($deck, $count = 1, $reset = false)
    {
        // reset the counter
        $this->reset();

        if (!is_numeric($count)) return;

        for ($i = 0; $i < $ccount; $i++) {
            $this->addCard($deck->dealCard());
        }
    }

    public function addCard(Card $card)
    {
        $this->totalValue += $card->getValue();
        $this->cards[] = $card;
    }

    function getTotalValue()
    {
        return $this->totalValue;
    }

    public function reset()
    {
        $this->totalValue = 0;
        $this->cards = array();
    }
}

Теперь вы можете получить значение Hand:

$deck = new Deck();
$players[] = new Player("You");

// start with 5 cards
foreach ($players as $player) {
    $player->getHand()->drawCard($deck, 5);
}

// each player draws a card
foreach ($players as $player) {
    $player->getHand()->drawCard($deck);
}

// get totals
foreach ($players as $player) {
    print("Player: " . $player->getName() . "<br />");
    $player->getHand()->getTotalValue();
    print("<P>&nbsp;</p>");
}

// start again with new 5 cards
foreach ($players as $player) {
    $player->getHand()->drawCard($deck, 5, true); // reseting with the 3rd param
}

Вам не нужно ставить перед именами классов префикс class, а общедоступные свойства считаются "не выполненными". Обычной практикой является установка для всех свойств как минимум защищенных и добавление функций доступа (get..() и set...())

И в этом конкретном примере я бы даже подумал об объединении классов Player и Hand, потому что они как бы похожи на одно и то же. Если объект Player не является общим пользовательским объектом, вы, конечно, будете повторно использовать его во многих местах.

0
NDM 3 Мар 2015 в 19:43
function drawCard($c,$theDeck){
    if(is_numeric($c)){
        $c=floor($c);
        for($i=0;$i<$c;$i++){
            $this->cards[] = $theDeck->dealCard();
            $this->total += $theDeck->dealCard()->getValue();
        }
     }
}

function getTotal(){
   return $this->total;
}
0
JC Sama 27 Фев 2015 в 17:49