Schüsse bei Raumschiffspiel erzeugen



  • Ich bin dabei ein kleines Raumschiffspiel zu programmieren.
    Bis jetzt habe ich die Bewegung des raumschiffes programmiert:

    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #pragma hdrstop
    
        #include "Unit1.h"
    //---------------------------------------------------------------------------
        #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    
    int p1b;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key,
          TShiftState Shift)
    {
    
      if (GetAsyncKeyState(VK_UP) < 0)
      {
    
      P1->Picture->LoadFromFile("o.jpg");
        P1->Top = P1->Top - p1b;
      }
    
       if (GetAsyncKeyState(VK_DOWN) < 0)
      {
    
      P1->Picture->LoadFromFile("u.jpg");
      P1->Top = P1->Top + p1b;
      }
    
       if (GetAsyncKeyState(VK_RIGHT) < 0)
      {
      P1->Left =  P1->Left + p1b;
    
      P1->Picture->LoadFromFile("r.jpg");
      }
    
       if (GetAsyncKeyState(VK_LEFT) < 0)
      {
      P1->Left =  P1->Left - p1b;
    
      P1->Picture->LoadFromFile("l.jpg");
      }
    
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::FormCreate(TObject *Sender)
    {
     p1b = 4;
     Form1->DoubleBuffered=true;
    
    }
    //---------------------------------------------------------------------------
    

    (l.jpg zeigt das Raumschif bei dem Vorne auf der linken Seite ist)
    (r.jpg zeigt das Raumschif bei dem Vorne auf der rechten Seite ist)
    (o.jpg zeigt das Raumschif bei dem Vorne auf der oberen Seite ist)
    (u.jpg zeigt das Raumschif bei dem Vorne auf der unteren Seite ist)

    Jetzt soll bei drücken der Schift-Taste ein Schuss ausgelöst werde.

    Dazu habe ich mir folgendes überlegt:

    Bei drücken der Schift-Taste wird ein neues TImage-Objekt erzeugt und ihm das Bild schuss.bmp zugewiesen.

    Ein Timer prüft alle 10 Millisekunden jedes der schon erstellten Schuss Bilder durch.
    Er prüft ob es vorhanden ist.
    Wenn ja dann bewegt er es und frägt ab ob es ein Raumschiff getroffen hat.
    Wenn ja dann zieht er dem Raumschiff Lebensenergie (in einer Variable
    gespeichrt) ab un löscht das Schuss-Objekt.
    Wenn nein dann fragt er ab ob es vielleicht den Rand der Form erreicht hat.
    Wenn Ja dann löscht er es.

    Wenn ihr eine Idee habt wie ich die Schüsse hingriegen sollt dann schreibt nitte eine antwort.

    Danke schonmal im vorraus

    MfG kevka



  • irgendwie habe ich keine konkrette frage gelesen 😕



  • kevka schrieb:

    Jetzt soll bei drücken der Schift-Taste ein Schuss ausgelöst werde.

    Dazu habe ich mir folgendes überlegt:

    Bei drücken der Schift-Taste wird ein neues TImage-Objekt erzeugt und ihm das Bild schuss.bmp zugewiesen.

    Ein Timer prüft alle 10 Millisekunden jedes der schon erstellten Schuss Bilder durch.
    Er prüft ob es vorhanden ist.
    Wenn ja dann bewegt er es und frägt ab ob es ein Raumschiff getroffen hat.
    Wenn ja dann zieht er dem Raumschiff Lebensenergie (in einer Variable
    gespeichrt) ab un löscht das Schuss-Objekt.
    Wenn nein dann fragt er ab ob es vielleicht den Rand der Form erreicht hat.
    Wenn Ja dann löscht er es.

    Wenn ihr eine Idee habt wie ich die Schüsse hingriegen sollt dann schreibt nitte eine antwort.

    Ich will wissen ob meine Überlegungen richtig sind und wie ich sie am besten in Quellcode umsetze

    MfGkevka



  • Hallo

    wenn du deine Vorstellungen schon so präziße formulieren kannst, dann setzte diese doch gleich in Code um, und probier aus was passiert.
    Das was du da schreibst ist doch schon fast Pseudocode, bis hinunter zu den einzelnen Bedingungen und Ergebnisen.

    bis bald
    akari



  • Ja aber es sollen auch mehrere Schüsse möglich sein also muss ich alle TImage Objekte mit dem bild schuss.bmp abfragen und ich habe keine ahnung wie ich das bewrkstelligen soll.

    MfG kevka



  • Hallo

    du machst ein dynamisches Array über die möglichen Schuß-Objekte (DynamicArray, weitere Infos siehe BCB-FAQ hier im Forum, Abschnitt Komponenten benutzen) Dann must du nicht suchen, sondern hast alle Schußobjekte. Für jedes einzelne kannst du dann nacheinander die genannten Sachen überprüfen.

    bis bald
    akari



  • Warum lädst du bei jedem Richtungswechsel--nein, bei jedem Schritt--das Bild neu von der Festplatte?

    Für zügige Lernfortschritte lege ich dir die Online-Hilfe nahe.

    Schau dir mal Graphics::TBitmap an. Die Canvas-Eigenschaft solltest du auch gut kennen, und besonders Copy.

    TTimer ist auch eine tolle Sache.

    Und wenn alles schön rund läuft, schaust du dir OnIdle mal genauer an.

    Und wenn du so weit bist dass dich das alles langweilt, liest du dich in OpenGL oder DirectX ein.


Anmelden zum Antworten