• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Tworzenie obiektu wewnątrz funkcji?

VPS Starter Arubacloud
0 głosów
240 wizyt
pytanie zadane 26 listopada 2015 w C# przez emSon Stary wyjadacz (10,480 p.)
edycja 27 listopada 2015 przez emSon

Cześć. Ćwiczę sobie obiektowość na nieskomplikowanej grze RPG. W klasie gracza ekwipunek rozwiązałem za pomocą listy, obiekt tworzę na zewnątrz dzięki czemu mogę go przemieszczać między sklepem bądź innymi postaciami. Natrafiłem jednak na pewien problem. 

Tworzę klase Potwór. W założeniu z potwora możliwe jest dropnięcie jakiegoś miecza czy zbroi. Zastanawiam się jak to rozwiązać. Pomyślałem, aby Potwór miał ekwipunek. Funkcja losowałaby z niego jeden przedmiot, a resztę usuwała. Wyodrębniłem na to trzy sposoby:

  1. Tworzyć obiekt podczas dodawania do listy. Niestety, takiego obiektu chyba nie da się wyodrębnić i przypisać do innej listy. 
  2. Tworzyć obiekt w konstruktorze, a do listy przekazać wskaźnik na niego (wiem, że w C# nie ma wskaźników, ale nie wiem jak to nazwać). Niestety, po zakończeniu konstruktora obiekt byłby usuwany i nie możliwe byłoby odwołanie się do niego z poziomu main'a.
  3. Tworzyć obiekt w mainie, a konstruktorowi tylko go przekazywać. Przy założeniu, że będzie istnieć 5 przedmiotów funkcja wymagałaby 5 argumentów.. Poza tym tworzenie obiektów w mainie byłoby raczej niewygodne i nie sprawdziłoby się.

Niestety, żaden z moich 'sposobów' nie daje rady. Ma ktoś jakiś lepszy pomysł?

PS Jeśli jakaś informacja napisana przeze mnie nie jest prawdziwa, proszę o uświadomienie.

1 odpowiedź

+1 głos
odpowiedź 26 listopada 2015 przez Dorion300 Szeryf (90,250 p.)
wybrane 27 listopada 2015 przez emSon
 
Najlepsza
Praktycznie jeśli operujesz na Klasach to wszystko co podajesz jako nazwę obiektu to jest właśnie adres.

Więc gdy dodajesz do Listu (np.Vektor) Jakiś obiekt (class) to gdy zaczniesz operować na nim to także operujesz go na liście.

O ile dobrze pamiętam - Wyjątek to struktury (struct)

Przy okazji - rozwiń pierwszy i drugi sposób ponieważ nie bardzo go rozumiem w jaki ono ma pomóc.
komentarz 26 listopada 2015 przez emSon Stary wyjadacz (10,480 p.)

Pierwszy sposób:

oPersonsList.Add(new Person(1, "Jan", "Kowalski", 24)); 

Drugi sposób:

public Klasa()
{
    Inna_Klasa obiekt = new Inna_Klasa();
    lista.Add(obiekt);
}

Mam nadzieję, że teraz to zrozumiesz. Niestety twoja odpowiedź mi niczego nie rozjaśniła, wszystko co napisałeś sam zdążyłem odkryć.

EDIT: Może sam źle napisałem. 

Chodzi o to, że chce aby podczas tworzenia potwora jego ekwipunek stworzony na podstawie listy zapełniał się przedmiotami, w taki jednak sposób, aby te przedmioty dało się przenieść na ekwipunek gracza - stworzony również na podstawie listy.

komentarz 26 listopada 2015 przez Dorion300 Szeryf (90,250 p.)
No to może lista "Ekwipunek" w "Potwór"

I metody które obsługują ten Ekwipunek.

np. Zwróć co zawiera,metoda która przenosi przedmiot z jednej listy do drugiego. (Metoda przyjmuje po prostu Listę gracza i numerek jaki chcesz zabrać przedmiot).

Albo odwrotnie, zabierz przedmiot z listy... w sumie to tak jest logiczniej.(moim zdaniem...ale pod warunkiem że Jan kowalski - główny bohater gry istnieje jako realny uporządkowany obiekt)

Pasuje ci czy nie o to ci chodzi?
komentarz 26 listopada 2015 przez emSon Stary wyjadacz (10,480 p.)
Przenoszenie to akurat najmniejszy kłopot. Chodzi mi o zapełnienie listy przedmiotami. Tworzenie ich w mainie się w tym wypadku nie sprawdzi.
komentarz 26 listopada 2015 przez Dorion300 Szeryf (90,250 p.)
No to gdy tworzysz potwór po prostu zapełniasz syfami którymi go charakteryzuje.

Konstruktorze podajesz parametry - obiekt "RecipeEkwipunek" który zawiera jakie mniej więcej potwór powinien mieć przedmioty.

Obiekty "RecipeEkwipunek" będzie można dostać z metody statycznej klasy "RecipeEkwipunek" podwajając mu ID bądź nazwę potwora.

Możesz od razu z "potwór" odczytać recepturę, nie musisz podawać w argumentach, jak wolisz.

Tak to widzę.

Pasuje ci? czy dostrzegasz jakiś błąd?
komentarz 26 listopada 2015 przez emSon Stary wyjadacz (10,480 p.)
mógłbyś jeszcze sypnąć przykładowym kodem dla zobrazowania? wtedy już masz najlepszą, łapencję już dostałeś.
komentarz 26 listopada 2015 przez Dorion300 Szeryf (90,250 p.)
Jutro zrobię i podam kod.

Po w nocy jestem w trybie zombie i szybkość programowania mam ustawione na "SuperLow"
komentarz 26 listopada 2015 przez emSon Stary wyjadacz (10,480 p.)
Okej. W sumie ja też już pójdę spać. Dobranoc :D
komentarz 27 listopada 2015 przez Dorion300 Szeryf (90,250 p.)
Powiem tak, długo myśłałem.

Nawet nie wiedziałem w jaki sposób przechowujesz Itemy.

Ale mam nadzieję że ten przykład powie ci mniej więcej co robić dalej.

Przykład robiony "na szybko"

Widać wyrażne sposoby na poprawienie kodu, ale obecnie podałem w sposób "Logiczny" i przyjażny.

Proszę, nie przestrasz się ile to kodu, no chyba że się spodziewałeś że aż tyle tego będzie.

Chwilowo na github(O wiele czytelniej jest) podam, potem to jakoś ułożę na wklej.org

https://github.com/Dorion300/Testy/tree/master/InventoryTest
komentarz 27 listopada 2015 przez emSon Stary wyjadacz (10,480 p.)
Wow, ależ się rozpisałeś! W międzyczasie coś wykombinowałem, ale dokładnie przeanalizuje to co podesłałeś. Dzięki wielkie :)) !

Podobne pytania

0 głosów
2 odpowiedzi 880 wizyt
pytanie zadane 6 grudnia 2015 w C# przez emSon Stary wyjadacz (10,480 p.)
+1 głos
0 odpowiedzi 323 wizyt
–1 głos
3 odpowiedzi 858 wizyt
pytanie zadane 19 marca 2017 w OpenGL, Unity przez Emil Panecki Bywalec (2,100 p.)

92,454 zapytań

141,263 odpowiedzi

319,099 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...