background image

  shuffle($antagonists);
  shuffle($complicati****);
  echo $settings[0] . ' ' . $objectives[0] . ' ' . $antagonists[0] . ' '
  . $complicati****[0] . "<br />\n";

我们可以通过添加新文本文件向场景中添加元素,也可能希望添加多重复杂度。添加到基
本文本文件中的内容越多,场景随时间的变化就越多。
牌组创建器(Deck builder)和装备(shuffler)

如果您要玩纸牌并且要处理与纸牌相关的脚本,我们需要用装备中的工具整合一副

 — 

牌组构建器。首先,让我们构建一副标准纸牌。需要构建两个数组

一个用于保存同花色

的组牌,而另一个用于保存牌面。如果稍后需要添加新组牌或牌类型,则这样做将获得很
好的灵活性。

 

清单 7. 构建一副标准扑克牌
  $suits = array (
  "Spades", "Hearts", "Clubs", "Diamonds"
  );
  $faces = array (
  "Two", "Three", "Four", "Five", "Six", "Seven", "Eight",
  "Nine", "Ten", "Jack", "Queen", "King", "Ace"
  );

 

然后构建一副牌数组来保存所有纸牌值。只需使用一对 foreach 循环即可完成此操作。

 

清单 8. 构建一副牌数组
  $deck = array();
  foreach ($suits as $suit) {
  foreach ($faces as $face) {
  $deck[] = array ("face"=>$face, "suit"=>$suit);
  }
  }

在构建了一副扑克牌数组后,我们可以轻松地洗牌并随机抽出一张牌。

 

清单 9. 洗牌并随机抽出一张牌
  shuffle($deck);
  $card = array_shift($deck);
  echo $card['face'] . ' of ' . $card['suit'];

现在,我们就获得了抽取多副牌或构建多层牌盒(multideck shoe)的捷径。
胜率计算器:发牌
由于构建扑克牌时会分别跟踪每张牌的牌面和花色,因此可以通过编程方式利用这副牌
来计算得到特定牌的几率。首先每只手分别抽出五张牌。

 

清单 10. 每只手抽出五张牌
  $hands = array(1 => array(), 2=>array());
  for ($i = 0; $i < 5; $i++) {
  $hands[1][] = implode(" of ", array_shift($deck));