单击按钮上的PHP BlackJack随机卡

时间:2014-02-03 12:45:49

标签: javascript php

我正在尝试使用PHP制作BlackJack游戏,但我遇到了以下问题:

我做了以下数组:

function random_card(){
    $cards = array(
    1           =>  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,
    'Ace'       =>  11);

    $card = array_rand($cards);
    $points = $cards[$card];
    echo 'card: ' . $card . '<br>';
    echo 'points: ' . $points . '<br><br>';
}

echo random_card();

这只是一个开始,它会告诉我一张随机卡和积分。 (我不知道这是否是最好的方法,但它有效)

现在我需要一个名为'hit'的按钮,当按下它时需要给我一张第二张牌。我知道你不能在按钮上使用PHP函数,所以它应该是一个javascript onClick()事件。但是我如何将它们两者结合起来给我另一张我已经拥有的卡片。

我已经尝试过使用提交按钮,这样你可以添加php代码但它会覆盖我的旧卡。它不断随机化第一张卡片。

我怀疑使用提交按钮$ _POST给我一张卡是最好的解决方案。

我感谢任何帮助推动我朝着正确的方向发展,因为我没有真正体验过javascript和php。

5 个答案:

答案 0 :(得分:2)

您可以使用纯javascript:

<html>
<head>
<script type="text/javascript">
var cards = new Array(
    new Array(1, 1),
    new Array(2, 2),
    new Array(3, 3),
    new Array(4, 4),
    new Array(5, 5),
    new Array(6, 6),
    new Array(7, 7),
    new Array(8, 8),
    new Array(9, 9),
    new Array(10, 10),
    new Array("Jack", 10),
    new Array("Queen", 10),
    new Array("King", 10),
    new Array("Ace", 11)
);
function random_card(){
    if(cards.length > 0){
    var rand = Math.floor(Math.random()*cards.length);
    var html = "card: "+cards[rand][0]+"<br/>points: "+cards[rand][1]+"<br/><br/>";
    document.getElementById("myDiv").innerHTML += html;
    cards.splice(rand, 1);
    }
}
</script>
</head>
<body>
<div id="myDiv"></div>
<button onclick="random_card();">Hit</button>
</body>
</html>

演示:http://jsfiddle.net/TT7JK/

答案 1 :(得分:1)

使用点击请求发送当前卡ID,例如'King'。

并且将随机卡与给定的卡ID不相等。

答案 2 :(得分:0)

您需要维护并记住状态,并标记已经提供给用户的卡片。您可以通过MySQl等数据库或仅使用缓存或 加密的cookie来存储以前发送的卡片。

答案 3 :(得分:0)

您不需要cookie或数据库;您可以将卡存储在$_SESSION变量中。这种方式也不需要AJAX。

答案 4 :(得分:0)

如果您对javascript更熟悉,请使用Sharanya Dutta的简单答案。

如果您更喜欢PHP,SESSION将是记住状态的最简单方法。

session_start(); // use session

// cards on pile
if(!isset($_SESSION["pile"])) $_SESSION["pile"] = array(
  1           =>  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,
  'Ace'       =>  11);

// cards in hand
if(!isset($_SESSION["hand"])) $_SESSION["hand"] = array();

// draw a card from the pile into the hand
function draw_card() {
  $card = array_rand($_SESSION["pile"]);
  $_SESSION["hand"][$card] = $_SESSION["pile"][$card];
  unset($_SESSION["pile"][$card]);
}

function list_hand() {
  foreach($_SESSION["hand"] as $card=>$points) {
    echo 'card: ' . $card . '<br>';
    echo 'points: ' . $points . '<br><br>';
  }
}

// detect which form was triggered
function FORM($value) {
  return isset($_POST["form"]) && $_POST["form"]==$value;
}

// handle the draw form
if(FORM("draw")) draw_card();
list_hand();
?>

<form method="post">
  <input type="hidden" name="form" value="draw">
  <input type="submit" value="Draw a card">
</form>