Tytuł: Zrozumienie silnika gry Wiadomość wysłana przez: Ulther_Ego 18:13 06/02/19 Witam jestem nowy i początkujący w pythonie (saaame podstawy), więc z góry chciałbym uprzedzić że mogę być zielony.
Chciałbym prosić kogoś o dokładne wytłumaczenie poniższego skryptu. Wiem że klasa Engine uruchamia (play.Engine()) scenę, pobiera scenę (next_scene.Map()) ze słownika scenes , oraz otwiera. Wiem to ponieważ prześledziłem każdą instancję, zmienną i funkcję. Potrzebuję to zrozumieć dokładniej, gdyż chcę napisać własny silnik, ale nie wiem jak do tego się zabrać. Kod
Tytuł: Odp: Zrozumienie silnika gry Wiadomość wysłana przez: Guaz 18:21 06/02/19 play.Engine()?
Czym w takim wypadku jest play. W dodatku nie ma to prawa zadziałać bo Engine nie dostaje obiektu który jest wymagany. (Patrząc po play, wnioskuję że tym argumentem musi być obiekt Map.) Przykład jakby w teorii mogło to działać: Kod start = None #Brakujący klocek startowej sceny dla obiektu Map. Przed hashtagiem wklej właściwe zamiast None. Trochę za mało danych tutaj podałeś aby to dokładnie wytłumaczyć :). Tytuł: Odp: Zrozumienie silnika gry Wiadomość wysłana przez: Ulther_Ego 18:30 06/02/19 Fakt nie umieściłem w jaki sposób wywołuję klasę i uruchamiam pierwszą scenę:
Kod a_map = Map("first_scene") Nie podaję Klasy FirsSscene() ponieważ jest ona zrozumiała, określa to jak wygląda "pomieszczenie" tzn. posiada funkcję enter, która przejmuje parametr self. Tytuł: Odp: Zrozumienie silnika gry Wiadomość wysłana przez: Guaz 11:22 09/02/19 Okej, to teraz ten wątek:
https://pl.python.org/forum/index.php?topic=931.0 Powinien ci pokrótce wytłumaczyć wszystko co dzieje się w twoim kodzie związanego z OOP (Object Oriented Programing). Bo metody typu .get dla słownika rozumiem że używasz świadomie, czy jest to skądś wzięte? Tytuł: Odp: Zrozumienie silnika gry Wiadomość wysłana przez: Ulther_Ego 15:42 09/02/19 Kod jest z książki "python 3. proste wprowadzenie do fascynującego świata programowania".
Co do tworzenia klasy, parametrów, instancjonowanie klasy, oraz wywoływanie funkcji mniej więcej wiem. Atrybuty słowników znam. Bardziej chodzi mi o wytłumaczenie tego co autor miał na myśli, przy tworzeniu własnego silnika nie chcę robić kopiuj wklej (bo to nie nauka), albo chociaż naprowadzić mnie na trop. Póki co z powyższego kodu wiem że: 1. Klasa Engine ma __init__(self, scene_map) oraz funkcję play, która przejmuje parametr self. 2. Klasa Map ma __init__(self, start_scene). funkcję next_scene z parametrem self, scene_name oraz funkcję opening_scene z parametrem self. Teraz od góry w klasie Engine dla funkcji play: Weź scene_map dla opening_map i ustaw go na current_scene Weź scene_map dla next_scene z parametrem 'finished' i ustaw go na last_scene While się nie zajmuję bo go rozumiem. Dla Map: Tworzymy słownik scenes W metodzie __init__ ustawiamy instancję zmiennej stert_scene Funkcja next_scene: do val przypisujemy pobranie scenes z klasy Map dla scene_name Jeśli źle coś zrozumiałem, to proszę o poprawienie. Tytuł: Odp: Zrozumienie silnika gry Wiadomość wysłana przez: Guaz 02:09 11/02/19 Jedyny błąd jaki tutaj popełniasz. To self nie jest tym samym co np. `scene_name`.
Ponieważ argumenty podajesz wywołując funkcję. Parametry są opcjonalne (np. w **kwargs). self jest defakto reprezentacją siebie samego. Czyli że masz dostęp do obiektów (atrybutów i metod) klasy wewnątrz tych metod które posiadają parametr self. dygresja: Używając @classmethod (dekorator). Nadal będziesz miał dostęp do metod, oraz atrybutów statycznych (ale nie wszystkich wewnątrz klasy, tylko tych współdzielonych dla wszystkich obiektów dziedziczących po tej, oraz będących obiektem o tym samym pochodzeniu) No i w reszcie nie widzę za specjalnych błędów myślowych, chyba że rozczytuje jakiś skrót inaczej niż ty. Ale mnie osobiście nic w oczy nie zakuło poza `self`, które nie != innemu argumentowi w metodzie. Tytuł: Odp: Zrozumienie silnika gry Wiadomość wysłana przez: Ulther_Ego 12:05 11/02/19 Dzięki za poprawienie oraz za pomoc :)
Potrzebowałem się trochę rozpisać i skonsultować by ułożyć swoją wiedzę. |