Pole z int i string jednocześnie

0

Hej. Najpierw zaznaczę, że jestem mocno początkujący, bo dopiero 1 rok studiów, także proszę o niezawiłe odpowiedzi.
Problem narodził się przy tworzeniu gry w oczko. Otóż czy jest możliwość utworzenia jakiegoś pola/obiektu, który zawiera jednocześnie typ int i string? Np. chciałbym utworzyć kartę 5 (int) trefl (string). Z tego co wiem, to jest to chyba niemożliwe. W takim wypadku jak utworzyć te karty? Jeśli zrobię tablicę string kart, to przy sprawdzaniu kto wygrał, nie będę mógł dodawać wartości, bo będą w stringu.
Pozdrawiam i liczę na trafne porady :)

1

Utwórz sobie klasę Karta, która będzie miała pola typu int i string.

0

Klasa karta.

0

I potem ręcznie wprowadzać talię 52 kart?

0

Możesz wczytać z pliku.

0

Zakładam, że karty masz 2..14 gdzie 11 to walet a 14 as

foreach (int figure in Enumerable.Range(2, 13))
   foreach (string color in new[] {"karo", "trefl", "kier", "pik"})
      new Card
     {
        Figure = figure,
        Color = color
     }

Potrzebujesz do tego zdefiniować klasę Card

class Card
{
   int Figure {get; set;}
   string Color {get; set;}
}
1

Można też pokusić się, aby Kolor nie był stringiem, ale enumem (i w sumie figura też by mogła być, z nadanymi wartościami liczbowymi).

1

Taki pomysł na kolanie:

    public enum CardColor
    {
        Spades = 0,
        Clubs = 1,
        Hearts = 2,
        Diamonds = 3
    }

    public enum CardRank
    {
        Two = 2,
        Three = 3,
        Four = 4,
        Five = 5,
        Six = 6,
        Seven = 7,
        Eight = 8,
        Nine = 9,
        Ten = 10,
        Jack = 11,
        Queen = 12,
        King = 13,
        Ace = 14
    }

    public class Card
    {
        public CardColor Color { get; set; }
        public CardRank Rank { get; set; }

        public override string ToString()
        {
            return String.Format("{0} {1}", Rank, Color);
        }
    }

    public class Deck
    {
        public IEnumerable<Card> Cards { get { return _cards;} }

        private List<Card> _cards; 
        public Deck()
        {
            _cards = new List<Card>();

            foreach (CardColor color in Enum.GetValues(typeof(CardColor)))
            foreach (CardRank rank in Enum.GetValues(typeof(CardRank)))
            {
                _cards.Add(new Card { Color = color, Rank = rank });
            }
        }

        public void Shuffle()
        {
            _cards = _cards.OrderBy(card => Guid.NewGuid()).ToList();
        }
    }
0

Z enum dla mnie zbyt skomplikowane jeszcze a i tak muszę robić za pomocą kolekcji. Odczytywanie danych z pliku.txt i zapisywanie ich jako int, jak?

0

Przecież masz wykorzystaną kolekcję, dokładnie to listę obiektów Card.
A co do zapisywania do pliku i odczytywania, to co chcesz zapisywać stan gry?
Dobrze byłoby mieć klasę Gra, która będzie znała zasady danej gry i jej aktualny stan. Dzięki zasadom będzie wiedzieć z jakiego stanu do jakiego może przejść (wzorzec stan).

Zapisem do pliku powinna się zająć inna klasa np. GameStateSaver
W trakcie tworzenia różnych gier powinno Ci się nasunąć wydzielenie interfejsów i/lub klas bazowych, tak, żeby nie kopiować podobnej do siebie logiki pomiędzy grą w wojnę, a grą w oczko.

1 użytkowników online, w tym zalogowanych: 0, gości: 1