【问题标题】:Why is my code not counting my held cards correctly?为什么我的代码没有正确计算我持有的牌?
【发布时间】:2020-11-27 10:43:49
【问题描述】:

嘿,所以我正在编写评估代码,并且很快就要到期了,我编写了一段代码,假设可以将我持有的卡片的价值相加,我正在使用统一,我已经将所有精灵放在一个一定的顺序(我把所有的 A 先放,然后是 2 等等)所以这样当我数它时,我只需除以 4(这是我老师告诉我的方法。所以它确实计数但不正确, 有时它倒数,我不知道它实际上是如何计数的,谁能指出它有什么问题。这是整个项目的链接。https://drive.google.com/file/d/1Karttf7_zmNlASE4bjKVjRAuinMrLMdw/view?usp=sharing

这里是代码,如果你只是想看看它,虽然我只是到柜台部分,但它没有完成。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class GameManager : MonoBehaviour
{
    [SerializeField]
    int[] Cards = new int[52];
    
    [SerializeField]
    GameObject[] PlayerCards;
    
    [SerializeField]
    GameObject[] DealerCards;
    
    [SerializeField]
    Sprite[] CardSprite;
    
    [SerializeField]
    Text HeldValue;
    int temp, Card1, Card2, dealt, PlayerDealt, DealerDealt, CardValue, DealCardValue;
    
    void Start()
    {
        shuffle();
        RestartGame();
        Dealcards();
        CardValue = 0;
        DealCardValue = 0;
    }
    
    void RestartGame()
    {
        for (int i = 0; i < PlayerCards.Length; i++)
        {
            PlayerCards[i].SetActive(false);
            DealerCards[i].SetActive(false);
        }
    }
    
    void shuffle()
    {
        dealt = 0;
    
        for (int i = 0; i < 52; i++)
        {
            Cards[i] = i + 1;
        }
        for (int i = 0; i < 100; i++)
        {
            Card1 = Random.Range(0, 51);
            Card2 = Random.Range(0, 51);
            temp = Cards[Card1];
            Cards[Card1] = Cards[Card2];
            Cards[Card2] = temp;
        }
        
    }
    
    void Dealcards()
    {
        PlayerCards[0].SetActive(true);
        PlayerCards[0].GetComponent<Image>().sprite = CardSprite[Cards[0]];
        CardValue += CalcCardValue(0);
        PlayerCards[1].SetActive(true);
        PlayerCards[1].GetComponent<Image>().sprite = CardSprite[Cards[1]];
        CardValue += CalcCardValue(1);
        DealerCards[0].SetActive(true);
        DealerCards[0].GetComponent<Image>().sprite = CardSprite[Cards[2]];
        DealCardValue += CalcCardValue(2);
        DealerCards[1].SetActive(true);
        DealerCards[1].GetComponent<Image>().sprite = CardSprite[Cards[3]];
        DealCardValue += CalcCardValue(3);
        HeldValue.text = CardValue.ToString();
    
        dealt += 4;
        PlayerDealt = 2;
        DealerDealt = 2;
    }
    
    public void Hit()
    {
        PlayerCards[PlayerDealt].SetActive(true);
        PlayerCards[PlayerDealt].GetComponent<Image>().sprite = CardSprite[Cards[dealt]];
    
        CardValue += CalcCardValue(dealt);
        PlayerDealt += 1;
        dealt += 1;
    
        HeldValue.text = CardValue.ToString();
    }
    
    int CalcCardValue(int i)
    {
        return Mathf.CeilToInt(Cards[i] / 4);
    }
}

【问题讨论】:

  • 嗨,我强烈建议您删除整个项目的链接。如果这是一个评估,那么它可能会被同学找到并采取,这会给你带来分享/窃取工作的麻烦(即使它是你自己的)
  • @TheGrandJ 我试图找到一个解决方案,甚至我的老师也不知道发生了什么,他不想再帮助我了。
  • “数错”是什么意思?
  • @PatrickArtner streamable.com/vx487m

标签: c# unity3d blackjack


【解决方案1】:

你只是在计算

CalcCardValue(1)  ...  CalcCardValue(4)

Dealcards() 内,因为您只使用 1 到 4 的值调用它。不过,您需要使用卡片的值 (0...51) 调用 CalcCardValue。

你可能会做:

void Dealcards()
{
    for (int i = 0; i < 2; i++)
    {
        PlayerCards[i].SetActive(true);
        PlayerCards[i].GetComponent<Image>().sprite = CardSprite[Cards[i]];
        CardValue += CalcCardValue(Cards[i]);  # fix here ... and below the same

        DealerCards[i].SetActive(true);
        DealerCards[i].GetComponent<Image>().sprite = CardSprite[Cards[i+2]];
        DealCardValue += CalcCardValue(Cards[i+2]);
    }
    HeldValue.text = CardValue.ToString();

    dealt += 4;
    PlayerDealt = 2;
    DealerDealt = 2;
}

public void Hit()
{
    PlayerCards[PlayerDealt].SetActive(true);
    PlayerCards[PlayerDealt].GetComponent<Image>().sprite = CardSprite[Cards[dealt]];

    CardValue += CalcCardValue(Cards[dealt]);  # and here as well
    PlayerDealt += 1;
    dealt += 1;

    HeldValue.text = CardValue.ToString();        
}

【讨论】:

  • 现在你在哪里更快;) 只是想提出一个循环以及
  • 因此,我不必为每个玩家卡交易添加 2 行,而是使用您那里的内容? @Patrick Artner
  • @derHugo 那一个仍然不起作用我不知道为什么,我只是想将它复制并粘贴到我的代码中替换之前的代码?
  • @OGXirvin 是的。作为旁注,对于测试,您可能希望跳过洗牌(注释掉该部分),以便您确切知道卡片中卡片的顺序。如果我理解正确,那么卡片 0-3 为 1,卡片 4-7 为 2,卡片 8-11 为 3,等等。无需洗牌,您可以更轻松地检查您的数字。
  • @PatrickArtner 我做到了,它给我的只是王牌
猜你喜欢
  • 1970-01-01
  • 2019-10-04
  • 1970-01-01
  • 2019-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-04
  • 2016-05-05
相关资源
最近更新 更多