我很擅长使用OOP并想创建一个简单的卡片游戏。 我得到了以下代码:
class card{
private $suit;
private $rank;
public function __construct($suit, $rank){
$this->suit = $suit;
$this->rank = $rank;
}
public function test(){
echo $this->suit.' '.$this->rank;
}
}
class deck{
private $suits = array('clubs', 'diamonds', 'hearts', 'spades');
private $ranks = array(2, 3, 4, 5, 6, 7, 8, 9, 10, 'J', 'Q', 'K', 'A');
public function create_deck(){
$cards = array();
foreach($this->suits as $suit) {
foreach ($this->ranks as $rank) {
$cards[] = new card($suit, $rank);
}
}
print_r($cards);
}
}
比如说,我的班级卡有处理卡的功能。 我如何处理心中之王?已经创建但我不知道如何访问它。
答案 0 :(得分:1)
处理卡的功能应该在deck
类,而不是card
类。它会是这样的:
public function deal_card() {
$suit = $this->suits[array_rand($this->suits, 1)];
$rank = $this->ranks[array_rand($this->ranks, 1)];
return new card($suit, $rank);
}
请注意,这里没有处理哪些卡片的记忆。 deck
类可能应该有private $cards
属性,其中包含所有卡的数组(您可以使用类似于create_deck
函数的循环在构造函数中填充它)。然后当你处理一张卡片时,你可以从这个阵列中删除它:
public function deal_card() {
if (count($this->cards) > 0) {
$index = array_rand($this->cards, 1); // pick a random card index
$card = $this->cards[$index]; // get the card there
array_splice($this->cards, $index, 1); // Remove it from the deck
return $card;
} else {
// Deck is empty, nothing to deal
return false;
}
}
答案 1 :(得分:0)
实例化一个这样的对象:
$card = new card('hearts', 'K');