Laden...

Funktion für alle Objekte einer Klasse

Erstellt von Jonas2909 vor einem Jahr Letzter Beitrag vor einem Jahr 367 Views
J
Jonas2909 Themenstarter:in
5 Beiträge seit 2022
vor einem Jahr
Funktion für alle Objekte einer Klasse

Hallo,

dies ist mein erster Beitrag hier im Forum, deshalb stelle ich mich kurz vor:

Ich bin 26 Jahre alt und programmiere seit meinem 12 Lebensjahr mal mehr und mal weniger.
Angefangen habe ich mit BlitzBasic. Irgendwann habe ich dann recht viel mit PHP und HTML gemacht. Nun bin ich vor wenigen Wochen auf C# gestoßen.
Dies ist nun auch meine erste Berührung mit der OOP, was mir einige Probleme bereitet.
Ich habe zwar schon viel gelesen, allerdings bleiben doch viele Fragen, weshalb ich mich nun hier angemeldet habe.

Momentan stehe ich vor folgendem Problem bei meinem "Spiel" mit C# und dem MonoGame Framework.

Ich zeichne einen "Menschen". Dann zeichne ich noch einen Menschen.
Beide kann ich instanzieren und dann auch mittels Methode in der Klasse Mensch auch bewegen.
Nun sollen irgendwann mehr Menschen hinzukommen, so dass ich nicht mehr für jeden möglichen Menschen die Methode Bewegen() aufrufen will.
Nun habe ich an eine statische Methode gedacht. Allerdings kann ich in dieser nicht die Positionswerte der zuvor erstellten Menschen nutzen.
Gibt es eine Möglichkeit eine Methode für alle Objekte aufzurufen?

Hier mal mein Quellcode der Methode:



        public void Bewegen()
        {

            // TODO: Add your update logic here
            MouseState newState = Mouse.GetState();



            //Ball mit links klicken
            if (newState.LeftButton == ButtonState.Pressed && oldState.LeftButton == ButtonState.Released && isclicked == false)
            {
                mausx = newState.X;
                mausy = newState.Y;


                if (mausx >= mposx && mausy >= mposy && mausx <= mposx + 64 && mausy <= mposy + 64)
                {
                    /*
                    Random rnd = new Random();
                    randx = rnd.Next(1, _graphics.PreferredBackBufferWidth - 56);
                    randy = rnd.Next(1, _graphics.PreferredBackBufferHeight - 56);
                    */
                    isclicked = true;
                    
                }



            }


            if (newState.RightButton == ButtonState.Pressed && oldState.RightButton == ButtonState.Released && isclicked == true && ziel == false)
            {
                mausx = newState.X;
                mausy = newState.Y;
                int posx = mposx;
                int posy = mposy;
                ziel = true;




            }

            if (isclicked == true && mposx != mausx && ziel == true)
            {

                if (mposx > mausx) { mposx--; }
                if (mposx < mausx) { mposx++; }
            }


            if (isclicked == true && mposy != mausy && ziel == true)
            {
                if (mposy > mausy) { mposy--; }
                if (mposy < mausy) { mposy++; }


            }

            if (mposy == mausy && mposx == mausx) { ziel = false; isclicked = false; }



            //rechts klick

            oldState = newState; //

        }



Ich danke euch schon Mal für eure Mühen!

6.911 Beiträge seit 2009
vor einem Jahr

Hallo Jonas2909,

Gibt es eine Möglichkeit eine Methode für alle Objekte aufzurufen?

Speichere alle Menschen in einer Liste, dann kannst du z.B. mit foreach über diese Liste iterieren und für jedes Menschen-Objekt die Methode aufrufen.


public class Welt
{
    private readonly List<Mensch> _menschen;

    public void BewegeAlleMenschen(/* ... */)
    {
        foreach (Mensch mensch in _menschen)
        {
            mensch.Bewege(/* ... */);
        }
    }
}

BTW: [Tipp] Anfängerhinweis == true / == false

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

M
368 Beiträge seit 2006
vor einem Jahr

...PHP...C#...OOP... Auf Vorrat: C# erzwingt die Verwendung von Klassen zum Definieren von Variablen und Methoden. Datentypsicherheit wird auch streng gehandhabt: FAQ - Variablennamen zur Laufzeit...

Goalkicker.com // DNC Magazine for .NET Developers // .NET Blogs zum Folgen
Software is like cathedrals: first we build them, then we pray 😉

J
Jonas2909 Themenstarter:in
5 Beiträge seit 2022
vor einem Jahr

Ich danke euch! Es funktioniert super und hat mir sogar Probleme erspart, die später aufgetreten wären!
Und auch die von euch verlinkten Feinheiten werde ich gleich einbauen um einen sauberen Code zu bekommen.

Vielen Dank! Hier kann das geschlossen werden.