Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/438.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 点击按钮上的PHP 21点随机卡_Javascript_Php - Fatal编程技术网

Javascript 点击按钮上的PHP 21点随机卡

Javascript 点击按钮上的PHP 21点随机卡,javascript,php,Javascript,Php,我试图使用PHP制作21点游戏,但遇到以下问题: 我制作了以下数组: function random_card(){ $cards = array( 1 => 1, 2 => 2, 3 => 3, 4 => 4, 5 => 5, 6 => 6, 7

我试图使用PHP制作21点游戏,但遇到以下问题:

我制作了以下数组:

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();
函数随机卡(){
$cards=数组(
1           =>  1,
2           =>  2,
3           =>  3,
4           =>  4,
5           =>  5,
6           =>  6,
7           =>  7,
8           =>  8,
9           =>  9,
10          =>  10,
“杰克”=>10,
“女王”=>10,
“国王”=>10,
‘Ace’=>11);
$card=阵列随机数($cards);
$points=$cards[$card];
回显“卡片:”.$card.“
”; 回显“点:”.$points.“

”; } 回声随机_卡();
这只是一个开始,它会显示一张随机卡和分数。(我不知道这是否是最好的方法,但它有效)

现在我需要一个名为“点击”的按钮,按下时需要给我第二张卡。我知道不能在按钮上使用PHP函数,所以它应该是javascript onClick()事件。但我如何将两者结合起来,在我已有的卡片旁边再给我一张卡片呢

我已经尝试过使用submit按钮,通过这种方式您可以向其中添加php代码,但它会不断覆盖我的旧卡。它不断地随机化第一张牌

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


我非常感谢任何帮助我朝着正确的方向前进,因为我在javascript和php方面没有真正的经验。

您需要维护和记住状态,并标记已经发给用户的卡片。您可以通过MySQl之类的数据库来实现,也可以使用缓存或
加密cookie以存储以前交付的卡。

通过点击请求发送当前卡id,如“King”


并检查随机卡是否与给定卡Id不相等。

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

您可以使用纯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>

var卡=新阵列(
新阵列(1,1),
新阵列(2,2),
新阵列(3,3),
新阵列(4,4),
新阵列(5,5),
新阵列(6,6),
新阵列(7,7),
新阵列(8,8),
新阵列(9,9),
新阵列(10,10),
新阵列(“杰克”,10),
新阵列(“女王”,10),
新阵列(“国王”,10),
新阵列(“Ace”,11)
);
函数随机_卡(){
如果(卡片长度>0){
var rand=Math.floor(Math.random()*cards.length);
var html=“卡片:“+cards[rand][0]+”
点数:“+cards[rand][1]+”

”; document.getElementById(“myDiv”).innerHTML+=html; 卡.拼接(兰特,1); } } 打

演示:

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

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

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>
session_start();//使用会话
//纸牌堆
如果(!isset($\u会话[“pile”])$\u会话[“pile”]=数组(
1           =>  1,
2           =>  2,
3           =>  3,
4           =>  4,
5           =>  5,
6           =>  6,
7           =>  7,
8           =>  8,
9           =>  9,
10          =>  10,
“杰克”=>10,
“女王”=>10,
“国王”=>10,
‘Ace’=>11);
//手中的牌
如果(!isset($_会话[“手”]))$_会话[“手”]=array();
//从牌堆中抽出一张牌到手中
函数绘图卡(){
$card=array_rand($_SESSION[“pile”]);
$会话[“手”][$card]=$会话[“堆”][$card];
取消设置($_会话[“桩”][$card]);
}
函数列表_hand(){
foreach($\会话[“手”]作为$card=>$points){
回显“卡片:”.$card.“
”; 回显“点:”.$points.“

”; } } //检测触发了哪个窗体 函数形式($value){ 返回isset($\u POST[“form”])&&&$\u POST[“form”]==$value; } //办理抽签手续 如果(表格(“提款”)提款卡(); 列表_hand(); ?>
使用ajax和jsonIt的组合与您的问题没有直接关系,但您使用卡片选项数组的示例有点缺陷,因为1)一张ace在任何时候都可能值1或11,因此对这两个选项使用单独的选项都会强制值(这样某人可以得到一张1和一张国王牌,如果它是一张可变值的王牌,则为21),以及2)你只处理卡的值,而不是西装的值。这套西装在BJ并不重要,但它确实会将可能的牌数乘以4。现在有14分之一的机会获得王牌,而在真正的牌组中有52分之一的机会。@Anthony你说得绝对正确。但我从一开始就在努力。这就是让一个按钮给你一张随机的卡片。如果这个有效,我会让它算数,如果它是22分或更高,你会被抓获等。别担心,我正在努力。太棒了!我不知道JS阵列也可以这样工作。非常感谢@Farewyth然后请接受这个答案,让其他人知道你已经找到了一个有效的解决方案。如果你对PHP方式感兴趣,看看我的答案:我相信你也会发现它很有用。我会选择你的答案作为最佳答案,因为我真的在努力改进我的PHP,并尽可能多地使用PHP。非常感谢你抽出时间来帮助我!绘制完所有卡片后,它将发送一张最终的
卡片:积分:
,页面顶部有一个
未定义索引:in
。有没有一个快速的方法来防止这种情况发生?不要介意最后的评论,它不会发生有人抽所有的牌。但有一个问题是,我需要在哪里结束会话。因此,如果我刷新页面,它将再次清空页面?@Farewyth:不,会话变量是持久的。每次编写会话变量时,它都会在服务器上序列化。当您在刷新后读取数据时,它的值将通过从服务器进行非序列化来恢复。每个访问者都有自己独特的会话id,存储为cookie或url。您还可以手动销毁或结束会话变量,开始读取。