Почему мой код неправильно подсчитывает мои удерживаемые карты? - PullRequest
4 голосов
/ 07 августа 2020

Привет, я кодирую оценку, и она должна быть очень скоро, я сделал фрагмент кода, который должен суммировать стоимость моих удерживаемых карт, я использую единицу, и я поместил все спрайты в в определенном порядке (сначала я ставлю все тузы, затем двойки и так далее), поэтому, когда я считаю, я просто делю на 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);
    }
}

1 Ответ

3 голосов
/ 07 августа 2020

Вы всегда вычисляете только

CalcCardValue(1)  ...  CalcCardValue(4)

внутри Dealcards(), потому что вы всегда вызываете его только со значениями от 1 до 4. Вам нужно вызвать CalcCardValue со значением Card (0 ... 51) хотя.

Вы, наверное, должны сделать:

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();        
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...