Reklama
Strona 1 z 3 123 OstatniaOstatnia
Pokazuje wyniki od 1 do 15 z 39

Temat: C# - "obiekt" klasy jako parametr funkcji

  1. #1
    Mickey Mouse

    Domyślny C# - "obiekt" klasy jako parametr funkcji

    Mam sobie 2 klasy, monsterka i playera, w kazdej z nich mam wartosc:

    Kod:
    public int health,
    public int maxHealth


    no i tworze sobie te kreatury i chce zrobic funkcje ktora pobeira ich hp czyli:

    Kod:
    	public int getHealth()
    	{
    		return health;
    	}
    i niby wszystko dziala i jest ok, ale skoro w obu klasach mam taka sama zmienna to czy nieda sie moze stworzyc funkcji 1 raz np w oddzielnej klasie z funkcjami tak zeby dzialalo to na zasadzie

    Kod:
    	public int getHealth(creature)
    	{
    		return creature.health;
    	}
    Bo nie bardzo wiem jak moge przekazac te creature do funkcji, tj jako co to okreslic :D
    Tak dla wizualizacji, postac tworze w nastepujacy sposob;

    Kod:
     Character Postac = new Character("Arkam", 100, 100, 0, 1,1,1,1,0,-1);
    Wiec tak jak mowilem, problem glownie z przekazaniem tej kreatury, czy id do funkcji. Z gory dzieki :)


    ##edit
    zrobilem tak xd juz chyba nvm

    Kod:
    public class Functions {
    	
    	public int getHealth(Character creature)
    	{
    		return creature.health;
    	}
    	
    	public int getHealth(Enemy creature)
    	{
    		return creature.health;
    	}
    }
    
    
    //Przyklad_1
    Functions funkcje = new Functions ();
    		funkcje.getHealth (Postac);
    
    //Przyklad_2
    Functions funkcje = new Functions ();
    		funkcje.getHealth(Przeciwnik);
    Ostatnio zmieniony przez Mickey Mouse : 04-08-2015, 06:13

  2. #2
    qbek72

    Domyślny

    Przedstawione przez Ciebie jest nieprawidłowe, może i działa, ale tak się nie pisze. Poczytaj sobie o dziedziczeniu class.

  3. Reklama
  4. #3
    Avatar sw.5
    Data rejestracji
    2006
    Położenie
    Skarżysko-Kamienna
    Wiek
    29
    Posty
    299
    Siła reputacji
    18

    Domyślny

    Poczytaj sobie o polimorfizmie - w skrócie, używamy dziedziczenia bo skoro obie klasy mają te same pola to można zrobić klasę (matkę?) np Creature i żeby Player i Monster po niej dziedziczyły (tj. kopiowały wszystkie pola i funkcje które są w niej do siebie)

    Tutaj przykładowy kod:
    Kod:
    using System;
    
    namespace NaTorga
    {
        class Creature
        {
            public int health;
            public int maxHealth;
        }
        class Player : Creature
        {
            //dodatkowe rzeczy tylko dla playera
        }
        class Monster : Creature
        {
            // dodatkowe rzeczy dla monstera
        }
    
        
    
        class Program
        {
            public static int getHealth(Creature c)
            {
                return c.health;
            }
    
            static void Main(string[] args)
            {
                Player p1 = new Player();
                Monster m1 = new Monster();
    
                p1.health = 100;
                m1.health = 200;
    
                Console.WriteLine(getHealth(p1));
                Console.WriteLine(getHealth(m1));
    
                Console.Read();
            }
        }
    }

    edit: tutaj dobry artykuł na msdn'nie https://msdn.microsoft.com/pl-pl/lib...v=vs.120).aspx
    Ostatnio zmieniony przez sw.5 : 04-08-2015, 08:04

  5. #4
    Piżmak Terrorysta

    Domyślny

    @Yakuza ; wonchaj masło
    Cytuj sw.5 napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    Poczytaj sobie o polimorfizmie - w skrócie, używamy dziedziczenia bo skoro obie klasy mają te same pola to można zrobić klasę (matkę?) np Creature i żeby Player i Monster po niej dziedziczyły (tj. kopiowały wszystkie pola i funkcje które są w niej do siebie)

    Tutaj przykładowy kod:
    Kod:
    using System;
    
    namespace NaTorga
    {
        class Creature
        {
            public int health;
            public int maxHealth;
        }
        class Player : Creature
        {
            //dodatkowe rzeczy tylko dla playera
        }
        class Monster : Creature
        {
            // dodatkowe rzeczy dla monstera
        }
    
        
    
        class Program
        {
            public static int getHealth(Creature c)
            {
                return c.health;
            }
    
            static void Main(string[] args)
            {
                Player p1 = new Player();
                Monster m1 = new Monster();
    
                p1.health = 100;
                m1.health = 200;
    
                Console.WriteLine(getHealth(p1));
                Console.WriteLine(getHealth(m1));
    
                Console.Read();
            }
        }
    }

    edit: tutaj dobry artykuł na msdn'nie https://msdn.microsoft.com/pl-pl/lib...v=vs.120).aspx


    JA CI ZARAZ DAM TE GETTERY Z DUPY

    Po pierwsze
    Kod:
    public int getHealth()
    	{
    		return health;
    	}
    w c#

    robi się tak


    Kod:
    public int Health
    {
    get
    {
    return health;
    }
    }
    PO DRUGIE W C# używasz PascalCase

    PO 3 naucz się języka zanim zaczniesz pisać bo gwałcisz tylko jakoby piękny język c# ...
    Ostatnio zmieniony przez Piżmak Terrorysta : 04-08-2015, 11:22

  6. #5
    Avatar joozioom
    Data rejestracji
    2007
    Posty
    1,460
    Siła reputacji
    17

    Domyślny

    Cytuj Piżmak Terrorysta napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    PO DRUGIE W C# używasz PascalCase
    a co microsoft tak nakazał że w C# tylko pascal case? xD

  7. #6
    Avatar Bazan
    Data rejestracji
    2008
    Wiek
    31
    Posty
    1,909
    Siła reputacji
    18

    Domyślny

    Raczej spolecznosc, i ma racje. Blagam trzymac sie standardow, to na prawde ulatwia prace.
    Dreaming by drumming. ˆˆ™

  8. #7
    Mickey Mouse

    Domyślny

    Aj dobra all up, sorry xd za dużo bez snu i nie wiem co próbowałem zrobić. Właściwie to jak się połozyłem spać to ogarnalem co zrobilem xd problem rozwiązany, przepisalem to z dziedziczeniem, temat do zamkniecia.
    //Anyway thz za chęć pomocy ;p

  9. #8
    Avatar Kusterek
    Data rejestracji
    2013
    Położenie
    Warszawa
    Wiek
    31
    Posty
    1,710
    Siła reputacji
    13

    Domyślny

    @Mickey Mouse ; szacun dla Ciebie że jako laik zobaczyłeś potrzebe korzystania z dziedziczenia :)

    irc: freenode.net in #torgdevs

  10. #9
    Piżmak Terrorysta

    Domyślny

    Cytuj joozioom napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    a co microsoft tak nakazał że w C# tylko pascal case? xD

    ucz .net deva jak pisać c# weź ty lepiej wracaj oglądać demotywatory

  11. #10
    konto usunięte

    Domyślny

    Cytuj Bazan napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    Raczej spolecznosc, i ma racje. Blagam trzymac sie standardow, to na prawde ulatwia prace.
    Jaka firma, taki standard.

    @topic
    Zapraszamy na IRC :)

  12. #11
    Avatar Yakuza
    Data rejestracji
    2010
    Posty
    973
    Siła reputacji
    15

    Domyślny

    Cytuj Piżmak Terrorysta napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    bo gwałcisz tylko jakoby piękny język c#
    A Tobie zdecydowanie polecam dokształcić się co oznacza słowo "jakoby" bo widocznie słabo Ci to idzie.

  13. #12
    Piżmak Terrorysta

    Domyślny

    Oglądałem nad narnią wiem o co w tym słowie chodzi

  14. #13
    Mickey Mouse

    Domyślny

    Dzięki za pomoc :D jeszcze jeden problem, pewnie znów coś machnąłem albo przez niewiedzę źle zrobiłem ;(
    Mianowicie problem polega na tym, że nie bardzo wiem jak mogę wywołać wewnątrz klasy metodę która znajduje się w klasie niżej.

    Poniżej kawałek kodu:

    Kod:
    public class Creature {
    	public int health;
    	public int Health
    	{
    		get
    		{
    			return health;
    		}
    		set
    		{
    			this.health = value;
    			//Jak tutaj wywolac funkcje HealthBar.ChangeGreenFill()?
    		}
    	}
    	
    	public void spawn()
    	{
    		//Tutaj troche kodu odpowiedzialnego za spawnowanie, tj. dobieranie mu grafiki, dodawanie do obiektu BoxCollidera itd.  +
    		
    		GameObject s_Object = new GameObject (); //Obiekt do ktorego pozniej przypinam ww. collidery etc.
    		//HealthBar
    		HealthBar healthBar = new HealthBar (s_Object);
    		healthBar.Create ()
    		
    	}
    	
    	//Obsluga graficznego hp bara
    	public class HealthBar
    	{
    		public void ChangeGreenFill()
    		{
    			//Tutaj kod zmieniajacy ilosc zielonego pola na pasku hp			
    		}
    	}
    	
    
    }
    Z góry dzięki

  15. #14
    Avatar Kusterek
    Data rejestracji
    2013
    Położenie
    Warszawa
    Wiek
    31
    Posty
    1,710
    Siła reputacji
    13

    Domyślny

    tak z ciekawosci, po co trzymasz klasę w klasie?

    @edit
    jak sie wczytałem w kod to widze ze kompletnie nie ogarniasz tematu ;/
    po co Ci 2 publiczne pola health?

    Zobacz jak powinny wyglądać właściwości w C# (bo chyba o to Ci chodzilo) - http://www.cezarywalenciuk.pl/post/2...iwosci-15.aspx

    Ponadto nie trzymaj klasy HealthBar tylko obiekt tej klasy wewnątrz klasy Creature.
    Ostatnio zmieniony przez Kusterek : 04-08-2015, 16:34

    irc: freenode.net in #torgdevs

  16. #15
    Mickey Mouse

    Domyślny

    Cytuj Kusterek napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    tak z ciekawosci, po co trzymasz klasę w klasie?

    @edit
    jak sie wczytałem w kod to widze ze kompletnie nie ogarniasz tematu ;/
    po co Ci 2 publiczne pola health?

    Zobacz jak powinny wyglądać właściwości w C# (bo chyba o to Ci chodzilo) - http://www.cezarywalenciuk.pl/post/2...iwosci-15.aspx

    Ponadto nie trzymaj klasy HealthBar tylko obiekt tej klasy wewnątrz klasy Creature.
    W sumie to sam nie wiem czemu tak zrobiłem, ale czy coś to zmienia w moim problemie jeżeli wyciągnę ja poza klasę Creatures?

Reklama

Informacje o temacie

Użytkownicy przeglądający temat

Aktualnie 1 użytkowników przegląda ten temat. (0 użytkowników i 1 gości)

Podobne tematy

  1. Praca jako "cieć" i pozwolenie na broń?
    Przez Perkun w dziale O wszystkim i o niczym
    Odpowiedzi: 30
    Ostatni post: 19-05-2017, 20:55
  2. [C++] Tworzenie tablicy dynamicznej jako element klasy
    Przez hefalump w dziale Programowanie
    Odpowiedzi: 12
    Ostatni post: 17-12-2014, 17:15
  3. Petycja w sprawie funkcji nagrywania w Tibii
    Przez Inny_15 w dziale Tibia
    Odpowiedzi: 16
    Ostatni post: 30-05-2010, 11:35
  4. Obiekt w tibii
    Przez Siw w dziale Tibia
    Odpowiedzi: 10
    Ostatni post: 25-03-2010, 11:50
  5. Odpowiedzi: 2
    Ostatni post: 14-03-2010, 18:59

Zakładki

Zakładki

Zasady postowania

  • Nie możesz pisać nowych tematów
  • Nie możesz pisać postów
  • Nie możesz używać załączników
  • Nie możesz edytować swoich postów
  •