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 :)
Utwórz sobie klasę Karta, która będzie miała pola typu int i string.
Klasa karta.
I potem ręcznie wprowadzać talię 52 kart?
Możesz wczytać z pliku.
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;}
}
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).
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();
}
}
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?
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.