gpt4 book ai didi

matlab - 我在 Matlab 中洗牌时遇到问题。需要帮助看看我哪里出错了

转载 作者:行者123 更新时间:2023-12-02 09:30:44 26 4
gpt4 key购买 nike

我目前已经对这副牌进行了编码,但它尚未洗牌。如果有帮助的话,这是为了编写 war 纸牌游戏。我需要洗牌,但每当我洗牌时,它只会将牌号和花色一起洗牌,而不是整张牌。例如,我将 A 确定为 A,并且花色位于每个数字之后。一张普通的牌是“AH”(红心 A)或“6D”(方 block 6)。相反,它会输出“5A”作为其中一张牌,就像 5 中的 A 一样。我不知道如何解决这个问题,但我目前拥有的代码是这样的:

card_nums = ('A23456789TJQK')';
card_suits = ('HDSC')';
unshuffled_deck = [repmat(card_nums,4,1),repmat(card_suits,13,1)];
disp(unshuffled_deck)

shuffled_deck = unshuffled_deck(randperm(numel(unshuffled_deck)));
disp(shuffled_deck)

如果您能提供任何帮助,我将不胜感激,非常感谢您抽出宝贵的时间!

最佳答案

您正在创建 unshuffled_deck 两列组合中所有元素的随机排列。相反,您需要创建 unshuffled_deck的随机排列:

shuffled_deck = unshuffled_deck(randperm(size(unshuffled_deck,1)),:);

size 的调用为您提供牌组数组中的行数,然后我们获得行索引的随机排列,并将行(值、花色)复制为单个实体。


这是一个使用结构体数组来响应 @Carl Witthoft's 评论的版本。我担心它会给解决方案增加太多的复杂性,但它确实不错:

card_nums = ('A23456789TJQK')';
card_suits = ('HDSC')';
deck_nums = repmat(card_nums,4,1);
deck_suits = repmat(card_suits,13,1);
cell_nums = cellstr(deck_nums).'; %// Change strings to cell arrays...
cell_suits = cellstr(deck_suits).'; %// so we can use them in struct

%// Construct a struct array with fields 'value' and 'suit'
unshuffled_deck = struct('value',cell_nums,'suit',cell_suits);
disp('unshuffled deck:');
disp([unshuffled_deck.value;unshuffled_deck.suit]);

%// Shuffle the deck using the number of elements in the structure array
shuffled_deck = unshuffled_deck(randperm(numel(unshuffled_deck)));
disp('shuffled deck:');
disp([shuffled_deck.value; shuffled_deck.suit]);

这是一个测试运行:

unshuffled deck:
A23456789TJQKA23456789TJQKA23456789TJQKA23456789TJQK
HDSCHDSCHDSCHDSCHDSCHDSCHDSCHDSCHDSCHDSCHDSCHDSCHDSC
shuffled deck:
4976TT93KTJQJATK953A75QA82Q6226K5J784J4A3372486K859Q
CHSSSHCDSCSSHDDCDSHHCDHSDDCDHCCHHCHHHDDCSCDSSCHDSCSD

要访问单个卡,您可以执行以下操作:

>> shuffled_deck(2)
ans =

scalar structure containing the fields:

value = 9
suit = H

或者您可以访问各个字段:

>> shuffled_deck(2).value
ans = 9
>> shuffled_deck(2).suit
ans = H

不幸的是,我不知道有什么方法可以简单地索引结构体数组并获取9H,就像使用disp(shuffled_deck(2, :))。在这种情况下,我知道的唯一选择是显式连接每个字段:

disp([shuffled_deck(2).value,shuffled_deck(2).suit]);

关于matlab - 我在 Matlab 中洗牌时遇到问题。需要帮助看看我哪里出错了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33335904/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com