Modelowanie systemu uzbrojenia w grze CS2

28 kwietnia 2026 10:13

Opis klas abstrakcyjnych i interfejsów: https://sjarecki.pl/art/klasy-abstrakcyjne-i-interfejsy

Cel zajęć: Praktyczne wykorzystanie klas abstrakcyjnych do definiowania cech wspólnych oraz interfejsów do implementacji specyficznych zachowań obiektów.

1. Wprowadzenie teoretyczne

W grach typu FPS (First-Person Shooter), system broni musi być elastyczny. Każdy przedmiot w ekwipunku ma cenę i wagę (cechy wspólne), ale nie każdy pozwala na przybliżenie (zoom) czy zmianę trybu ognia (zachowania specyficzne).

2. Architektura systemu

  1. Klasa abstrakcyjna Weapon

Zdefiniuj klasę bazową, która zawiera:

    • Pola/Właściwości:
      • Name (string)
      • Price (int)
      • ClipSize (int) - maksymalna pojemność magazynka.
      • CurrentAmmo (int) - aktualna liczba naboi w broni.
    • Metody:
      • DisplayStats() (abstrakcyjna) - wyświetla nazwę, cenę i stan amunicji.
      • RefillAmmo() (zwykła) – resetuje CurrentAmmo do wartości ClipSize.
  1. Interfejsy (Zdolności)
    1. IFireable
      • Metoda Shoot() – oddanie strzału (zmniejszenie CurrentAmmo).
      • Metoda Reload() – wywołuje RefillAmmo() z komunikatem o przeładowaniu.
    2. IZoomable
      • Metoda ToggleScope() – zmienia stan przybliżenia (np. isZoomed = !isZoomed).
    3. IModeSwitchable
      • Metoda SwitchMode() – zmienia tryb ognia (np. z Single na Burst).

Zadanie

Zadanie 1: Implementacja broni

Stwórz klasy konkretne, inicjując ClipSize w konstruktorze:

Zadanie 2: Logika strzelania i braku amunicji

W metodzie Shoot() zaimplementuj prostą logikę:

  1. Jeśli CurrentAmmo > 0: zmniejsz licznik amunicji i wypisz dźwięk wystrzału.
  2. Jeśli CurrentAmmo == 0: wypisz "Click! (Brak amunicji)".

Zadanie 3: Testowanie polimorfizmu

Stwórz listę przedmiotów List<Weapon> myLoadout. Dodaj do niej Glocka i AWP.

Napisz pętlę do listy, która:

  1. Wyświetla statystyki broni.
  2. Próbuje wystrzelić z każdej broni 5 razy.
  3. Sprawdza: "Jeśli broń posiada lunetę, użyj jej przed strzałem". (Jeżeli dojdziesz do tego punktu to zapytaj nauczyciela)