Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/256.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.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
用PHP模拟交易卡_Php_Codeigniter_Multidimensional Array - Fatal编程技术网

用PHP模拟交易卡

用PHP模拟交易卡,php,codeigniter,multidimensional-array,Php,Codeigniter,Multidimensional Array,我正在为扑克牌手制作功能(向“n”个玩家发牌)。 我试图在我的codeigniter中模拟卡片交易功能。但我被卡住了,因为所有的玩家都得到了相同的牌对 以下是我的模型函数: $deck = array( 'AD', '2D', '3D', '4D', '5D', '6D', '7D', '8D', '9D', 'TD', 'JD', 'QD', 'KD', 'AC', '2C', '3C', '4C', '5C', '6C', '7C', '8C', '9C', 'TC', 'J

我正在为扑克牌手制作功能(向“n”个玩家发牌)。 我试图在我的codeigniter中模拟卡片交易功能。但我被卡住了,因为所有的玩家都得到了相同的牌对

以下是我的模型函数:

$deck = array(
    'AD', '2D', '3D', '4D', '5D', '6D', '7D', '8D', '9D', 'TD', 'JD', 'QD', 'KD',
    'AC', '2C', '3C', '4C', '5C', '6C', '7C', '8C', '9C', 'TC', 'JC', 'QC', 'KC',
    'AH', '2H', '3H', '4H', '5H', '6H', '7H', '8H', '9H', 'TH', 'JH', 'QH', 'KH',
    'AS', '2S', '3S', '4S', '5S', '6S', '7S', '8S', '9S', 'TS', 'JS', 'QS', 'KS'
);

shuffle($deck);

$player_card = array();

$cycle = 2;
for ($k=0; $k < $players; $k++) {
    for ($i=0; $i < $cycle; $i++) { 
        $player_card[$k][$i] = $deck[$i];   
    }
}
这是“n”玩家的卡(n=3)

我想要的是: 希望对每位玩家进行基于回合的卡牌分配

Array
    (
        [0] => Array
            (
                [0] => JC
                [1] => 5D
            )

        [1] => Array
            (
                [0] => AC
                [1] => 3D
            )

        [2] => Array
            (
                [0] => 4H
                [1] => QD
            )

    )

你已经洗牌了,为什么不干脆
array\u chunk

shuffle($cards);
$player_card = array_chunk($cards, 13);

这将输出如下内容:

Array
(
    [0] => Array
    (
        [0] => 3D
        [1] => 7S
        [2] => AD
        [3] => 9C
        [4] => 5D
        [5] => KS
        [6] => 4H
        [7] => 6S
        [8] => AS
        [9] => TH
        [10] => 4S
        [11] => TS
        [12] => 3H
    )

    [1] => Array
    (
        [0] => AH
        [1] => 5S
        [2] => AC
        [3] => QS
        [4] => 5H
        [5] => 7D
        [6] => JH
        [7] => QD
        [8] => JS
        [9] => 9S
        [10] => 8S
        [11] => 6C
        [12] => 2H
    )

    [2] => Array
    (
        [0] => TD
        [1] => 8H
        [2] => 5C
        [3] => KD
        [4] => 8D
        [5] => QH
        [6] => JC
        [7] => TC
        [8] => 3C
        [9] => 6D
        [10] => 9H
        [11] => 2C
        [12] => 2D
    )

    [3] => Array
    (
        [0] => 7C
        [1] => KH
        [2] => 4D
        [3] => 9D
        [4] => 6H
        [5] => 7H
        [6] => KC
        [7] => QC
        [8] => JD
        [9] => 2S
        [10] => 8C
        [11] => 4C
        [12] => 3S
    )

)
编辑:如果你想一张一张地发牌给玩家

$player_card = [[],[],[],[]]; // four players
for($i = 0; i < count($deck); $i++){
    $player_card[$i % 4][] = $deck[$i];   
}
$player_card=[]、[]、[]、[]、[];//四人
对于($i=0;i
之所以发生这种情况,是因为决定处理哪张牌的逻辑在内部循环中,而玩家循环是外部循环。因此,对于外循环的每一次迭代,你都在给每个玩家发相同的牌

最好是放弃你最初的洗牌,而是每次随机发一张牌,然后将该牌从主阵列中移除

$num_cards_to_deal = 2;
for ($k=0; $k < $players; $k++)
    for ($i=0; $i < $num_cards_to_deal; $i++) {
        $card_index = rand(0, count($deck) - 1);
        $player_card[$k][$i] = array_values($deck)[$card_index];
        unset($deck[$card_index]);
    }

问题是你正在给玩家发牌,但从来没有把牌从牌堆上拿下来

如果你想让它像一副普通的牌一样工作,你应该总是拿出最上面的牌。最简单的方法是使用
array\u shift($deck)
。它将从阵列中返回第一张卡并将其移除

为了使它干净,我将创建一个函数
draw

function draw(){
    global $deck;
    return array_shift($deck);
}
您也可以创建一个deck类,这会更好,因为您不需要处理全局变量,但这是另一篇文章


此外,如果你害怕表演(除非你玩的是一副几千张的牌,否则没有理由害怕),你可以使用array_pop()代替。它也会做同样的事情,但不是拿第一张牌,而是拿最后一张牌。不会有太大变化,但在内存方面,使用PHP会更容易。

特别感谢@taha Paksu:

数组\u chunk()为我工作。我根据自己的需要管理它

这是“N”玩家牌交易逻辑的完整模型

class Card_model extends CI_Model {

    public function __construct()
    {
        parent::__construct();
    }


    public function shuffled_deck($type, $players)
    {
        $noraml_deck = $deck = array(
            'AD', '2D', '3D', '4D', '5D', '6D', '7D', '8D', '9D', 'TD', 'JD', 'QD', 'KD',
            'AC', '2C', '3C', '4C', '5C', '6C', '7C', '8C', '9C', 'TC', 'JC', 'QC', 'KC',
            'AH', '2H', '3H', '4H', '5H', '6H', '7H', '8H', '9H', 'TH', 'JH', 'QH', 'KH',
            'AS', '2S', '3S', '4S', '5S', '6S', '7S', '8S', '9S', 'TS', 'JS', 'QS', 'KS'
        );



        shuffle($deck);
        $player_hand = array();
        if ($type === 'holdem')
        {

            $card_per_player = 2;
            $chunk = array_chunk($deck, $players);

            for ($j=0; $j < $players; $j++)
            { 
                for ($i=0; $i < $card_per_player; $i++)
                { 
                    array_push($player_hand, $chunk[$i][$j]);
                }
            }
            $player_hand = array_chunk($player_hand, $card_per_player);

        }

        return [$player_hand];

    }
}
玩家卡:这里的玩家=N=3

Array
    (
        [0] => Array
            (
                [0] => 2H
                [1] => 2S
            )

        [1] => Array
            (
                [0] => 6D
                [1] => 8S
            )

        [2] => Array
            (
                [0] => 3D
                [1] => KC
            )

)

这是一个比我更优雅的解决方案。现在,这不适用于所有纸牌游戏,甚至不适用于德克萨斯州的hold'em。纯粹主义者也会说,纸牌是一张一张地发给玩家的,而不是同时发给所有玩家。将[]添加到您的添加中。。。否则它将只保留每个玩家收到的最后一张卡。这同样有效,但有时会出现错误:遇到PHP错误严重性:注意消息:未定义的偏移量:32

文件名:models/card\u model.PHP

行号:43

数组([0]=>Array([0]=>7H[1]=>)[1]=>数组([0]=>JH[1]=>KC))。见玩家1的牌2 i缺失。这很奇怪。你也可以使用一个类似于使用next()的方法在不移除卡片的情况下迭代卡片,这样你就可以保持整个卡片组的完整性。别忘了接受正确的答案。
function draw(){
    global $deck;
    return array_shift($deck);
}
class Card_model extends CI_Model {

    public function __construct()
    {
        parent::__construct();
    }


    public function shuffled_deck($type, $players)
    {
        $noraml_deck = $deck = array(
            'AD', '2D', '3D', '4D', '5D', '6D', '7D', '8D', '9D', 'TD', 'JD', 'QD', 'KD',
            'AC', '2C', '3C', '4C', '5C', '6C', '7C', '8C', '9C', 'TC', 'JC', 'QC', 'KC',
            'AH', '2H', '3H', '4H', '5H', '6H', '7H', '8H', '9H', 'TH', 'JH', 'QH', 'KH',
            'AS', '2S', '3S', '4S', '5S', '6S', '7S', '8S', '9S', 'TS', 'JS', 'QS', 'KS'
        );



        shuffle($deck);
        $player_hand = array();
        if ($type === 'holdem')
        {

            $card_per_player = 2;
            $chunk = array_chunk($deck, $players);

            for ($j=0; $j < $players; $j++)
            { 
                for ($i=0; $i < $card_per_player; $i++)
                { 
                    array_push($player_hand, $chunk[$i][$j]);
                }
            }
            $player_hand = array_chunk($player_hand, $card_per_player);

        }

        return [$player_hand];

    }
}
[0] => Array
    (
        [0] => 2H
        [1] => 6D
        [2] => 3D
        [3] => 2S
        [4] => 8S
        [5] => KC
        [6] => JC
        [7] => 8H
        [8] => TD
        [9] => 4S
        [10] => 7C
        [11] => KH
        [12] => 6C
        [13] => AC
        [14] => 2D
        [15] => JH
        [16] => 7D
        [17] => 9H
        [18] => 8C
        [19] => AD
        [20] => TC
        [21] => 9S
        [22] => TH
        [23] => 4C
        [24] => 6S
        [25] => 5S
        [26] => 5C
        [27] => 6H
        [28] => 4D
        [29] => KS
        [30] => JD
        [31] => KD
        [32] => TS
        [33] => QH
        [34] => 5H
        [35] => 8D
        [36] => 9C
        [37] => 5D
        [38] => 3H
        [39] => QC
        [40] => 9D
        [41] => 3S
        [42] => 7H
        [43] => QD
        [44] => 3C
        [45] => QS
        [46] => AS
        [47] => 7S
        [48] => AH
        [49] => 4H
        [50] => 2C
        [51] => JS
    )
Array
    (
        [0] => Array
            (
                [0] => 2H
                [1] => 2S
            )

        [1] => Array
            (
                [0] => 6D
                [1] => 8S
            )

        [2] => Array
            (
                [0] => 3D
                [1] => KC
            )

)