Программа сдает 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> </td>\n");
for ($i = 0; $i < count($this->cards); $i++) {
print("<td>" . $this->cards[$i]->getImage() . "</td><td> </td>\n");
}
print("</tr></table>\n");
}
function showValue()
{
for ($i = 0; $i < count($this->cards); $i++) {
print(" " . $this->cards[$i]->getValue() . " ");
}
} // 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> </p>");
}
Ваш $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> </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 не является универсальным пользовательским объектом, вы, конечно, будете использовать его во многих местах.
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;
}