Programmabläufe (Funktionen) gleichzeitig laufen lassen



  • Zwei Ablaeufe gleichzeitig hinzubekommen ist in dem Sinne nur mit Threads moeglich. Da du aber sagst, dass "Projektil-Obejtk" dir nichts sagt, vermute ich, dass du noch nicht viel vom Klassenkonzept von C++ weisst. In dem Falle waere es noch etwas frueh fuer Threads und die Basics von C++ eventuell erstmal wichtiger. (Es sei denn du programmiert in C, wo es keine Klassen und Objekte gibt, dann waerst du allerdings im falschen Forum gelandet)



  • Ein "Projektil-Objekt" ist auch nichts gängiges - das soll einfach nur das von dir abgefeuerte Projektil darstellen.

    OK, mal ein Beispiel - bezogen auf deinen Ursprungsbeitrag:

    class game_object
    {
      int x,y;
    public:
      virtual void update() = 0;//aktualisiert die Position
      int getx() {return x;}
      int gety() {return y;}
      ...
    };
    
    class enemy : public game_object
    {
      //nötige Operationen für die gegnersichen Schiffe
    };
    
    class player : public game_object
    {
      //das Raumschiff des Spielers
    };
    
    class projektil : public game_object
    {
      //ein einzelner "Schuss" des Spielers
    };
    
    vector<game_object*> gamedata;
    //ein player und ausreichend enemy reinpacken
    while(!dead)
    {
      switch(getch()
      {
      case ' ':
        gamedata.push_back(projektil(...));//Projektil anlegen und speichern
      ...
      }
      for(size_t i=0;i<gamedata.size();++i)
      {
        gamedata[i].update();
        //hier auch Auswertungen für Kollisionen einbauen und ggf Objekte löschen
      }
    }
    


  • ja ich programmiere in c++!
    danke für die antworten. wenn das wirklich die einfachste möglichkeit ist, werde ich mich damit mal auseinandersetzen.
    danke und vg chris



  • Das entscheidende ist wohl nicht das Projektil-Objekt, sondern dass du dein Spiel in kleine Zeitschritte unterteilst, die du dann hintereinander simulierst. In jedem Schritt bewegen sich die Gegner ein kleines Stück, dein Schuß bewegt sich ein Stück, Eingaben werden ausgewertet usw.
    Mit Multithreading hättest du den Nachteil, dass das zeitliche Verhalten untereinander nicht fest ist, du hättest also einen nichtdeterministischen Spielablauf.



  • also zurzeit arbeite ich noch mit funktionen. aber das sind ja auch externe kleine programme die im Hauptprogramm aufgerufen werden. mein problem ist halt nur wenn ich eine funktion aufrufe, muss ich warten bis diese fertig ist und kann nicht gleichzeitig was anderes machen.z.b. funktion Punkte läuft unten mit, gleichzeitig kann ich schießen und mich bewegen und die gegner fallen runter.
    ich versuche jetzt erstmal alles in klassen zu schreiben. und mal gucken ob ich es dann irgendwie hin bekomme
    vg
    chris



  • Eine echte Parallelität gibt es bei Anwendungen, die auf einem Prozessor laufen, sowieso nicht, die Anweisungen laufen immer nacheinander ab (auch mit Threads).
    Nur für den Anwender (Spieler) kommt es ihm dann so vor, als ob es gleichzeitig stattfinden würde (da die Prozessoren heute einfach viel zu schnell sind - früher mit Lochkarten da konnte man wenigstens noch zuschauen).

    Ob du Funktionen oder Klassenmethoden verwendest, spielt hierbei keine Rolle, sondern du mußt einfach jede Funktion so gestalten, daß sie nur eine geringe Laufzeit hat (z.B. eine Bewegung ausführen, einen Wert anzeigen, eine Taste abfragen).



  • hi,
    also ich habe mein Programm in eine Klasse und Methoden umgewandelt und würde gerne jetzt anfangen und mir Threads aneignen. Ich benutze Borland C++ und würde gerne wissen wo ich multithreading aktivieren kann. Ich habe gelesen das es aktiv sein muss, aber ich weiß nicht wo und wie man das aktiv schaltet. Ansonsten habe ich die Bibliothek "process.h" in mein Programmm eingebunden.
    Könnt ihr mir vielleicht helfen?

    void multi(void *dummy);

    int main()
    {
    _beginthread(multi, 0, NULL);
    }

    void multi(void *dummy)
    {
    cout<<"Hallo";
    _endthread();
    }



  • ich bin mir ziemlich sicher, dass das original keine zwei threads brauchte.



  • Multithreading ist ein ganz eigenes Konzept der Programmierung. Und da würde ich (v.a. als Einsteiger) nichts eigenes schreiben, sondern mich auf vorhandene Bibliotheken berufen.

    Nur als Info für deine Spielidee: mit einer simplen Schleife, die alle Schritte nacheinander absteuert (Spieler-Aktion, Spieler-Bewegung, Schuss-Animation, Kollisionserkennung, Feind-Bewegung etc) bist du immer noch auf der sicheren Seite und Geschwindigkeitsmässig spürst du das gar nicht. Da sollten wohl immer noch einige Dutzend bis Hunderte Iterationen der Schleife möglich sein (neudeutsch: Frames, sofern es auf dem Schirm dargestellt wird)



  • Ich würde gerade einem Einsteiger der noch nicht weiss wie man parallele Abläufe ohne Threads programmiert empfehlen sicht erstmal garnicht mit Threads zu beschäftigen.
    Ist auch mit bestehenden Libs kompliziert genug.


Anmelden zum Antworten