PHP程序员站--PHP编程开发平台
 当前位置:主页 >> PHP高级编程 >> 高级应用 >> 

几个PHP小游戏编程示例代码

几个PHP小游戏编程示例代码

来源:互联网  作者:  发布时间:2010-01-18
php编写简单的掷骰器 许多游戏和游戏系统都需要骰子。让我们先

php编写简单的扑克牌游戏

牌组创建器(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));
  $hands[2][] = implode(" of ", array_shift($deck));
  }

然后可以查看这副牌,看看剩余多少张牌以及抽到特定牌的机率是多少。查看剩余的牌数十分简单。只需要计算 $deck 数组中包含的元素数。要获得抽到特定牌的机率,我们需要一个函数来遍历整副牌并估算其余牌以查看是否匹配。

清单 11. 计算抽到特定牌的几率

function calculate_odds($draw, $deck) {
  $remaining = count($deck);
  $odds = 0;
  foreach ($deck as $card) {
  if ( ($draw['face'] == $card['face'] && $draw['suit'] ==
  $card['suit'] ) ||
  ($draw['face'] == '' && $draw['suit'] == $card['suit'] ) ||
  ($draw['face'] == $card['face'] && $draw['suit'] == '' ) ) {
  $odds++;
  }
  }
  return $odds . ' in ' $remaining;
  }

现在可以选出尝试抽出的牌。为了简单起见,传入看上去类似某张牌的数组。我们可以查找特定的一张牌。

清单 12. 查找指定的一张牌

$draw = array('face' => 'Ace', 'suit' => 'Spades');
  echo implode(" of ", $draw) . ' : ' . calculate_odds($draw, $deck);

或者可以查找指定牌面或花色的牌。

清单 13. 查找指定牌面或花色的牌

$draw = array('face' => '', 'suit' => 'Spades');
  $draw = array('face' => 'Ace', 'suit' => '');

简单的扑克发牌器

现在已经得到牌组构建器和一些工具,可以帮助计算出抽出特定卡的机率,我们可以整合一个真正简单的发牌器来进行发牌。出于本例的目的,我们将构建一个可以抽出五张牌的发牌器。发牌器将从整副牌中提供五张牌。使用数字指定需要放弃哪些牌,并且发牌器将用一副牌中的其他牌替换这些牌。我们无需指定发牌限制或特殊规则,但是您可能会发现这些是非常有益的个人经验。

如上一节所示,生成并洗牌,然后每只手五张牌。按数组索引显示这些牌,以便可以指定返回哪些牌。您可以使用表示要替换哪些牌的复选框来完成此操作。

清单 14. 使用复选框表示要替换的牌

foreach ($hand as $index =>$card) {
  echo "<input type='checkbox' name='card[" . $index . "]'>
  " . $card['face'] . ' of ' . $card['suit'] . "<br />";
  }

然后,计算输入 array $_POST['card'],查看哪些牌已被选择用于替换。

清单 15. 计算输入

$i = 0;
  while ($i < 5) {
  if (isset($_POST['card'][$i])) {
  $hand[$i] = array_shift($deck);
  }
  }

使用此脚本,您可以尝试找到处理特定一组牌的最佳方法。


延伸阅读:
添加和删除HTML节点的简单示例
一段简单的php分页代码示例
php抓取远程网页内容简单示例
php多文件简单上传示例
php简单目录读取示例
常用php代码示例
php中curl的简单示例
php HEADER函数简单示例
从魔兽看PHP设计模式
分析PHP生成html文件的具体代码示例
php生成csv文件示例


几个经典php示例代码
Tags: 代码   示例   编程   游戏   php    
最新文章
推荐阅读
月点击排行榜
PHP程序员站 Copyright © 2007-2010,PHPERZ.COM All Rights Reserved 粤ICP备07503606号