1

私はPHPが初めてで、学習目的で単純なカードゲームを作成しています(最終的にはブラックジャックに変えたいと思っています)が、今のところ、2人のプレーヤーのカードを比較して、誰が最高のカードセットを持っているかを確認したいと思います。その方法で勝者を取得します。PHP を表示すると、何も表示されない空白の画面が表示されるという問題が発生しました。* 「cardgame.php」のコードを削除すると、2 人のプレイヤーが持っているカードが取得されます。エラーログでは、これもエラーが表示される場所ですが、そのコードの何が問題なのかわかりません。そのコードには、これが機能するのを妨げる何かがあるに違いありません...どんな助けも本当に感謝しています。

以下の 4 つのファイルを投稿します。

Card.php

class Card
{
    private $suit;
    private $figure;


    public function __construct($Suit, $Fig) {
            $this->suit   = $Suit;
            $this->figure = $Fig;
    }

    public function __toString() {
            return $this->figure . ' of ' . $this->suit;
    }

    public function getFigure() {
            return $this->figure;
    }

    public function getCard() {
            echo $this->figure . " of " . $this->suit . ".<br />";
    }


}

?>

Deck.php

<?php //can't make objects out of abstract classes, but it's children can
abstract class Deck
{
protected $arrCards; 
protected $listOfCards;

/* abstract methods force classes that extends this class to implement them */
abstract public function dealCard(); //all classes that will inherit will inherit this method


/* already implemented methods */
public function __construct($Cards) {
    $this->arrCards = $Cards;
}

public function shuffleCards() {
    shuffle($this->arrCards);
}

public function listCards() {
    foreach($this->arrCards as $Card) {
        echo $Card . '<br />';
    }
}
}
 ?>

EnglishDeck.php

<?php
include_once "Deck.php"; 
include_once "Card.php"; 

class EnglishDeck extends Deck
{      
        //perhaps the keys?
    private $suits = array('Clubs', 'Diamonds', 'Hearts', 'Spades');
    private $cards = array(
    'Ace'=> 1, 
    2 => 2, 
    3 => 3, 
    4 => 4, 
    5 => 5, 
    6 => 6, 
    7 => 7, 
    8 => 8, 
    9 => 9, 
    10 => 10, 
    'Jack' => 10, 
    'Queen'=>10, 
    'King'=>10);

public function dealCard() {
    return array_pop($this->arrCards);
}

public function __construct() {
    $Cards = $this->initEnglishDeck();
    parent::__construct($Cards);
}

function initEnglishDeck() {
    $arrCards = array();

    foreach($this->suits as $Suit) {
        foreach ($this->cards as $Card) {
            $arrCards[] = new Card($Suit, $Card);
        }

    }
    return $arrCards;
}

}

$oBaraja = new EnglishDeck();
$oBaraja->shuffleCards();
?>

および cardgame.php

   <?php

    include_once "Card.php";
   include_once "EnglishDeck.php";


$oBaraja = new EnglishDeck();
$oBaraja->shuffleCards();


//PLAYER 1
$oP1card1  = $oBaraja->dealCard();
echo("Player one has " . $oP1card1);

 $oP1card2  = $oBaraja->dealCard();
echo(" and a " . $oP1card2 );

$oPlayer1 = $oP1card1 + $oP1card2;

echo "<br>";

//PLAYER 2
$oP2card1  = $oBaraja->dealCard();
echo("Player two has " . $oP2card1);

$oP2card2  = $oBaraja->dealCard();
 echo(" and a " . $oP2card2);

 $oPlayer2 = $oP2card1 + $oP2card2;

 // THIS IS WHERE I AM GETTING ERRORS
 $oBaraja->compare($oPlayer1, $oPlayer2) {
    if($oPlayer1 > $oPlayer2){
        echo "Player 1 wins";
    } else if ($oPlayer1 < $oPlayer2) {
        echo "Player 2 wins";
    } else {
        echo "it's a tie";
    }
} 
?>
4

1 に答える 1

3

それを見てみましょう。

$oBaraja = new EnglishDeck();

EnglishDeck の新しいインスタンスを作成します

$oBaraja->shuffleCards();

あなたはカードをシャッフルします

public function shuffleCards() {
shuffle($this->arrCards);}

しかし、この時点で「保護された $arrCards;」はまだ空です。最初にカードで埋める必要があります。


編集私はあなたのスクリプトを実行しました、これは出力でした

Notice: Object of class Card could not be converted to int online 18

Player two has 10 of Hearts and a 3 of Diamonds
it's a tie

この置換を修正するには

 $oPlayer1 = $oP2card1 + $oP2card2;

 $oPlayer1 = (string)$oP1card1 + (string)$oP1card2;

$oPlayer2 についても同じことを行います

また、->compare は関数ではありません。
交換すれば効果あり

$oBaraja->compare($oPlayer1, $oPlayer2) {
if($oPlayer1 > $oPlayer2){
    echo "Player 1 wins";
} else if ($oPlayer1 < $oPlayer2) {
    echo "Player 2 wins";
} else {
    echo "it's a tie";
}
}

if($oPlayer1 > $oPlayer2){
    echo "Player 1 wins";
} else if ($oPlayer1 < $oPlayer2) {
    echo "Player 2 wins";
} else {
    echo "it's a tie";
}

または、compare($oPlayer1, $oPlayer2) という関数に入れてから、$oBaraja->compare($oPlayer1, $oPlayer2) を使用して呼び出します。

于 2013-11-14T23:19:49.040 に答える