Klasy i Obiekty w C# na przykładzie gry RPG
Czujesz, że „klasa” to coś więcej niż szkolna sala, ale nie do końca wiesz jak ją wykorzystać w kodzie? 😄 Dobrze trafiłeś! W tym wpisie nauczysz się, czym są klasy i obiekty w C#, tworząc prostą grę RPG. Zero teorii z encyklopedii, 100% praktyki: bohaterowie, ich atrybuty, walka i bezpieczeństwo danych. Gotowy? Miecz w dłoń i… kodujemy! 💻⚔️
📌 Spis treści
- Dlaczego klasy są potrzebne w C#
- Tworzymy naszą pierwszą klasę
- Instancje: tworzenie obiektów
- Konstruktory – przyspieszamy start
- Hermetyzacja – jak chronić dane
- Właściwości – nowoczesne Get/Set
- Podsumowanie i zadanie dla Ciebie
Dlaczego klasy są potrzebne w C#
Bez klas kod szybko zmienia się w spaghetti.
// ❌ Zły sposób - bez klas
string imie = "Aragorn";
int hp = 100;
int sila = 25;
Dodaj drugiego, trzeciego bohater… i nagle masz bałagan. A co z poziomem, many, ekwipunkiem?
Rozwiązanie? Klasy. Czyli kontenery na dane i logikę – jak pudełko LEGO, w którym wszystko ma swoje miejsce.
Tworzymy naszą pierwszą klasę
Klasa to szablon – jak foremka do ciastek 🍪. Definiuje, jakie cechy będzie miał nasz bohater.
// Bohater.cspublic class Bohater
{
public string imie;
public int punktyZycia;
public int sila;
}
Tylko szablon? Tak! Aby działała, potrzebujemy obiektu – czyli konkretnej instancji tej klasy. Jak forma na ciastka – sama forma to nie ciastko. Musimy stworzyć konkretnych bohaterów – czyli obiekty.
Instancje: tworzenie obiektów
Tworzymy bohatera. Obiekt to konkretna instancja klasy – jak upieczone ciastko z naszej formy.
Bohater aragorn = new Bohater();
aragorn.imie = "Aragorn";
aragorn.punktyZycia = 100;
aragorn.sila = 25;
I wyświetlamy:
Console.WriteLine($"{aragorn.imie} - HP: {aragorn.punktyZycia}, Siła: {aragorn.sila}");
Świetnie! Ale prawdziwa moc klas pokazuje się, gdy tworzymy wiele obiektów. Dodajemy drużynę:
Bohater[] druzyna = {
new Bohater { imie = "Legolas", punktyZycia = 80, sila = 30 },
new Bohater { imie = "Gimli", punktyZycia = 120, sila = 35 },
aragorn
};
Każdy obiekt to osobna jednostka – zmiana w jednym nie wpływa na resztę. Każdy obiekt jest niezależny.
Konstruktory – przyspieszamy start
Ręczne przypisywanie właściwości jest męczące. Rozwiązanie? Konstruktor:
public Bohater(string imie, int punktyZycia, int sila)
{
this.imie = imie;
this.punktyZycia = punktyZycia;
this.sila = sila;
}
Teraz tworzenie bohaterów jest dużo prostsze! Tworzenie obiektów:
Bohater legolas = new Bohater("Legolas", 80, 30);
Bohater gimli = new Bohater("Gimli", 120, 35);
Szybko, prosto, z klasą 😉
Hermetyzacja – jak chronić dane
Publiczne pola? Zło. Ktoś może zrobić głupie rzeczy z naszymi bohaterami!
aragorn.punktyZycia = -999; // ❌ Nonsens!
Czas na hermetyzację – dane prywatne, dostęp kontrolowany. Hermetyzacja to ukrywanie wewnętrznych szczegółów klasy.
private int punktyZycia;
public void SetPunktyZycia(int noweHP)
{
punktyZycia = Math.Max(noweHP, 0); // minimum 0
}
Właściwości – nowoczesne Get/Set
C# pozwala na elegancję:
public int PunktyZycia
{
get => punktyZycia;
set
{
if (value < 0)
{
punktyZycia = 0;
Console.WriteLine($"{Imie}: HP ustawione na 0");
}
else
{
punktyZycia = value;
}
}
}
Użycie:
gimli.PunktyZycia = -50; // Wynik: HP ustawione na 0
Sztos, co nie? 👌
Podsumowanie i zadanie dla Ciebie
✅ Dziś nauczyłeś się:
- Czym są klasy i obiekty
- Jak tworzyć konstruktor
- Jak chronić dane (hermetyzacja)
- Jak korzystać z właściwości
🧠 Zadanie:
Stwórz nowego bohatera, np. „Boromir”, z własnymi statystykami i dodaj go do drużyny. Dodaj walidację punktów many lub doświadczenia.
Zostaw komentarz z kodem swojego bohatera!