You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

配对游戏开发问题:如何随机显示52张卡片各两张

Pairs配对游戏卡片显示问题解决指引

你当前的问题核心在于initgame方法里把memoryarray的所有元素都赋值为1,导致GImageArray组件给每个格子加载同一张编号为1的图片,所以所有卡片显示一模一样。要实现随机展示52张内的成对卡片,需要修改数组赋值逻辑,生成包含随机成对编号的二维数组,具体步骤如下:

核心修改思路

  1. 你的网格是6×6共36个位置,需要18对不同的卡片(从52张中随机选取18个不重复的编号,每个编号出现两次)
  2. 生成包含成对编号的列表后打乱顺序(洗牌),再填充到二维数组中
  3. 确保GImageArray组件能根据数组中的编号正确加载对应图片

代码修改示例

替换原initgame方法的数组赋值逻辑,修改后的代码如下:

public void initgame()
{
    // 计算需要的卡片对数:6×6网格共36个位置,对应18对
    int pairCount = memoryarray.GetLength(0) * memoryarray.GetLength(1) / 2;
    List<int> cardNumbers = new List<int>();
    Random random = new Random();
    HashSet<int> usedCardIds = new HashSet<int>();

    // 从1-52中随机挑选18个不重复的卡片编号,每个编号添加两次
    while (usedCardIds.Count < pairCount)
    {
        int randomCardId = random.Next(1, 53); // 生成1到52的随机数
        if (usedCardIds.Add(randomCardId))
        {
            cardNumbers.Add(randomCardId);
            cardNumbers.Add(randomCardId);
        }
    }

    // 洗牌:打乱卡片列表的顺序,实现随机分布
    for (int i = cardNumbers.Count - 1; i > 0; i--)
    {
        int j = random.Next(i + 1);
        // 交换元素位置
        (cardNumbers[i], cardNumbers[j]) = (cardNumbers[j], cardNumbers[i]);
    }

    // 将打乱后的卡片编号填充到二维数组中
    int currentIndex = 0;
    for (int row = 0; row < memoryarray.GetLength(0); row++)
    {
        for (int col = 0; col < memoryarray.GetLength(1); col++)
        {
            memoryarray[row, col] = cardNumbers[currentIndex++];
        }
    }

    // 初始化图片数组组件
    controlarray = new GImageArray(this, memoryarray, 35, 200, 10, 200, 10, imagepath);
    controlarray.Which_Element_Clicked += new GImageArray.ImageClickedEventHandler(Which_Element_Clicked);
}

关键注意事项

  • 确保你的Cards文件夹中存在编号1到52的图片文件(比如1.png、2.png…52.png),如果图片命名规则不同(比如带前缀),需要调整GImageArray内部的图片路径拼接逻辑
  • 洗牌步骤用了Fisher-Yates算法,保证随机分布的公平性
  • 如果后续要调整网格大小,代码中的pairCount计算会自动适配,无需手动修改

内容的提问来源于stack exchange,提问作者Harrison 2904

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 04:20:16