PHP, Как я могу суммировать числовые значения после вызова функции из класса?

Программа сдает 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

Решение

Ваш $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

Другие решения

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

По вопросам рекламы [email protected]