Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Funktion für alle Objekte einer Klasse
Jonas2909
myCSharp.de - Member



Dabei seit:
Beiträge: 2

Themenstarter:

Funktion für alle Objekte einer Klasse

beantworten | zitieren | melden

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!
private Nachricht | Beiträge des Benutzers
gfoidl
myCSharp.de - Team

Avatar #avatar-2894.jpg


Dabei seit:
Beiträge: 6.856
Herkunft: Waidring

beantworten | zitieren | melden

Hallo Jonas2909,
Zitat
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!"
private Nachricht | Beiträge des Benutzers
M.L.
myCSharp.de - Member



Dabei seit:
Beiträge: 316

beantworten | zitieren | melden

Zitat
...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 ;-)
private Nachricht | Beiträge des Benutzers
Jonas2909
myCSharp.de - Member



Dabei seit:
Beiträge: 2

Themenstarter:

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers