AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Spiel nachprogrammieren - Gegnerberührung funktioniert nicht
Thema durchsuchen
Ansicht
Themen-Optionen

Spiel nachprogrammieren - Gegnerberührung funktioniert nicht

Ein Thema von Premaider · begonnen am 28. Aug 2012 · letzter Beitrag vom 30. Aug 2012
Antwort Antwort
Premaider

Registriert seit: 31. Mär 2012
160 Beiträge
 
#1

AW: Spiel nachprogrammieren - Gegnerberührung funktioniert nicht

  Alt 28. Aug 2012, 22:07
Ohne Fehlerbeschreibung weiß ich nichtmal wonach ich suchen soll.

Tipp: Es haben hier schon ein/zwei Andere versucht dieses Spiel nachzuprogrammieren ... da darf man gerne abgucken, wie die es gemacht haben und auch das lesen was dort geantwortet wurde.
Naja möchte es auf meine Weise machen. Der Fehler ist, dass es nicht funktioniert..
Achso, ja dann schau doch mal bei der Zeile da, da rechts musst du was anderes schreiben, dann sollte es funktionieren.

Hast du schon mal versucht, das mit der Kollision auf einem Blatt Papier aufzumalen und dann überlegt, wie man rechnerisch die Kollision erkennen kann?
Nein -> warum fängst du an zu programmieren, wenn du nicht weißt was?
Ja -> wo kommst du nicht weiter? Lad mal die Zeichnung hoch und die Berechnung, dann schauen wir mal
ja habe ich. Für Spieler und Ziel funktionierts ja auch. Nur für die Gegner krieg ichs nicht hin, da es ja theoretisch unendlich viele sein können und dadurch alles womit ich das Berechne ein dynamischer Array sein muss, oder nicht ? Also sonst war mein Prinzip so:
Ankatete:= Ziel.left - Spieler.left
Gegenkatete:= Ziel.top - Spieler.top
HypotenuseHoch2:=(Ankatete*Ankatete)+(Gegenkatete* Gegenkatete)
Hypotenuse:=sqrt(HypotenuseHoch2)

sqrt mit Hilfe der Math-unit

Um was genau gehts bei dem Spiel eigentlich? Wenn ich einen Gegner berühre kommt ein weiterer hinzu? Ist das der Trick des Spiels? Sorry, aber von dem Spiel habe ich wahrlich noch nie was gehört
Man geht mit seinem Spieler zum ziel möglichst ohne von den Gegnern getroffen zu werden. Wenn man das Ziel erreicht hat spawnt es woanders/"ein neues"
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Spiel nachprogrammieren - Gegnerberührung funktioniert nicht

  Alt 28. Aug 2012, 22:39
Nur mal so für Spaß eine vereinfachte Betrachtungsweise:
Delphi-Quellcode:
type
  TFigur = class
    Top, Left : Integer;
    function AbstandZu( aFigur : TFigur ) : Extended;
  end;

  TSpieler = class( TFigur )
  end;

  TZiel = class( TFigur )
  end;

  TGegner = class( TFigur )
  end;

function TFigur.AbstandZu( aFigur : TFigur ) : Extended;
begin
  Result := Sqrt( Sqr( Self.Left - aFigur.Left ) + Sqr( Self.Top - aFigur.Top ) );
end;
Und im Code dann:
Delphi-Quellcode:
var
  Spieler : TSpieler;
  Ziele : TList;
  Gegner : TList;

begin
  // Gegner berührt?
  for idx := 0 to Pred( Gegner.Count ) do
    if Spieler.AbstandZu( TFigur( Gegner[idx] ) ) < 10 then // 10 ist jetzt einfach nur als Beispiel genommen
      GegnerKollision( TGegner( Gegner[idx] ) ); // Behandlung der Kollision mit einem Gegner
  
  // Ziel berührt?
  for idx := 0 to Pred( Ziele.Count ) do
    if Spieler.AbstandZu( TFigur( Ziele[idx] ) ) < 10 then // 10 ist jetzt einfach nur als Beispiel genommen
      ZielEingefangen( TZiel( Ziele[idx] ) ); // Behandlung der Kollision mit einem Ziel
end;
BTW: Für die Kollisionsbehandlung würde sich hier das Visitor-Pattern anbieten, das habe ich aber bewusst herausgelassen um nicht mehr zu verwirren. Obschon es sehr viel Charme hätte und den Code insgesamt nochmals verkürzen würde.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Premaider

Registriert seit: 31. Mär 2012
160 Beiträge
 
#3

AW: Spiel nachprogrammieren - Gegnerberührung funktioniert nicht

  Alt 29. Aug 2012, 10:25
Nur mal so für Spaß eine vereinfachte Betrachtungsweise:
Delphi-Quellcode:
type
  TFigur = class
    Top, Left : Integer;
    function AbstandZu( aFigur : TFigur ) : Extended;
  end;

  TSpieler = class( TFigur )
  end;

  TZiel = class( TFigur )
  end;

  TGegner = class( TFigur )
  end;

function TFigur.AbstandZu( aFigur : TFigur ) : Extended;
begin
  Result := Sqrt( Sqr( Self.Left - aFigur.Left ) + Sqr( Self.Top - aFigur.Top ) );
end;
Und im Code dann:
Delphi-Quellcode:
var
  Spieler : TSpieler;
  Ziele : TList;
  Gegner : TList;

begin
  // Gegner berührt?
  for idx := 0 to Pred( Gegner.Count ) do
    if Spieler.AbstandZu( TFigur( Gegner[idx] ) ) < 10 then // 10 ist jetzt einfach nur als Beispiel genommen
      GegnerKollision( TGegner( Gegner[idx] ) ); // Behandlung der Kollision mit einem Gegner
  
  // Ziel berührt?
  for idx := 0 to Pred( Ziele.Count ) do
    if Spieler.AbstandZu( TFigur( Ziele[idx] ) ) < 10 then // 10 ist jetzt einfach nur als Beispiel genommen
      ZielEingefangen( TZiel( Ziele[idx] ) ); // Behandlung der Kollision mit einem Ziel
end;
BTW: Für die Kollisionsbehandlung würde sich hier das Visitor-Pattern anbieten, das habe ich aber bewusst herausgelassen um nicht mehr zu verwirren. Obschon es sehr viel Charme hätte und den Code insgesamt nochmals verkürzen würde.
Wenn ich deinen Code einbaue bekomme ich ein paar Fehlermeldungen:
Delphi-Quellcode:
[Fehler] Unit1.pas(51): Bezeichner redefiniert: 'TFigur.AbstandZu'
[Fehler] Unit1.pas(52): Undefinierter Bezeichner: 'Result'
[Fehler] Unit1.pas(52): Undefinierter Bezeichner: 'Self'
[Fehler] Unit1.pas(52): Undefinierter Bezeichner: 'aFigur'
[Fehler] Unit1.pas(52): 'END' erwartet, aber ')' gefunden
[Fehler] Unit1.pas(100): Undefinierter Bezeichner: 'idx'
[Fehler] Unit1.pas(102): Undefinierter Bezeichner: 'GegnerKollision'
[Fehler] Unit1.pas(107): Undefinierter Bezeichner: 'ZielEingefangen'
[Fataler Fehler] Project1.dpr(5): Verwendete Unit 'Unit1.pas' kann nicht compiliert werden
Geht das denn so überhaupt für Delphi7 ?
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Spiel nachprogrammieren - Gegnerberührung funktioniert nicht

  Alt 29. Aug 2012, 10:34
Das war eine vereinfachte Betrachtungsweise, wo es nur darum ging, wie man die Kollisionsüberwachung der Figuren vereinfachen kann. Du musst das Konzept in deine Klassen einbauen.

Was damit gezeigt werden sollte, wie man mit Vererbung den Code einfacher hält.

CopyPaste funktioniert da nicht
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Premaider

Registriert seit: 31. Mär 2012
160 Beiträge
 
#5

AW: Spiel nachprogrammieren - Gegnerberührung funktioniert nicht

  Alt 29. Aug 2012, 11:03
Das war eine vereinfachte Betrachtungsweise, wo es nur darum ging, wie man die Kollisionsüberwachung der Figuren vereinfachen kann. Du musst das Konzept in deine Klassen einbauen.

Was damit gezeigt werden sollte, wie man mit Vererbung den Code einfacher hält.

CopyPaste funktioniert da nicht
Ach so hast du das gemeint xDD
Ja dann ist das klar ^^
Ich werds versuchen wenn ich wieder von der Schule da bin, muss jetzt wieder weg

[OT]
Hab das mit der roten Box mal gegoogelt. Scheinbar macht die gerade in Spanien Urlaub. Siehe Foto
[/OT]
Sinn ?
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.739 Beiträge
 
Delphi 6 Enterprise
 
#6

AW: Spiel nachprogrammieren - Gegnerberührung funktioniert nicht

  Alt 29. Aug 2012, 12:22
[OT]
Hab das mit der roten Box mal gegoogelt. Scheinbar macht die gerade in Spanien Urlaub. Siehe Foto
[/OT]
Sinn ?
Un-Sinn
Sollte ein Insider-Witz bzgl. der Bemerkungen zur roten Box in den vorhergegangenen Posts sein. Daher auch mit Pseudo-Off-Topic-Tags gekennzeichnet. Sorry, wenn ich dich damit irritiert haben sollte.
Nur falls nicht bekannt: Die rote (Warn-)Box sollte immer dann kommen, wenn du einen Post abschickst aber es bereits neue Posts gab, während du noch geschrieben hast.
Ralph
  Mit Zitat antworten Zitat
Premaider

Registriert seit: 31. Mär 2012
160 Beiträge
 
#7

AW: Spiel nachprogrammieren - Gegnerberührung funktioniert nicht

  Alt 30. Aug 2012, 18:01
Habe mich jetzt erstmal an die Bewegung und das abprallen der Gegner gesetzt:

Delphi-Quellcode:
procedure TForm1.Timer2Timer(Sender: TObject);
var
m,l,k,links,rechts,oben,unten,Geschwindigkeit:Integer;
begin
    //Gegner bewegen
    If length(Gegner)>=1 Then
      begin
        For l:= 0 to length(gegner)-1 do
          begin
            If Gegner[l].width > Gegner[l].height Then
              begin
                //Wenn Gegner waagrecht ist
                Gegner[l].Left:=Gegner[l].left + Gegner[l].speed;
                for k := 0 to high(Gegner) do
                  begin
                    links := Gegner[k].left;
                      if links <= 0 then
                        begin
                          Gegner[k].speed := Gegner[k].speed * -1;
                        end;
                      if Links + Gegner[k].Width >= Form1.clientwidth + Gegner[k].left then
                        begin
                         Gegner[k].speed := Gegner[k].speed * -1;
                        end;
                  end;

              end;
            If Gegner[l].width < Gegner[l].height Then
              begin
             //Wenn Gegner senkrecht ist
                Gegner[l].top:=Gegner[l].top + Gegner[l].speed;
                for m := 0 to high(Gegner) do
                  begin
                    oben := Gegner[m].top;
                      if oben <= 0 then
                        begin
                          Gegner[m].speed := Gegner[m].speed * -1;
                        end;
                      if oben + Gegner[m].Height >= Form1.clientheight then
                        begin
                          Gegner[m].speed := Gegner[m].speed * -1;
                        end;
                  end;
              end;
        end;
   end;
end;
Leider funktioniert das nicht ganz. Die Gegner prallen manchmal ab und manchmal nicht und ich
verstehe nicht warum. Kann mir jemand sagen, was ich falsch mache ?
Ich kann euch auch nochmal das Projekt hochladen, damit ihr es euch mal anschauen könnt.
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#8

AW: Spiel nachprogrammieren - Gegnerberührung funktioniert nicht

  Alt 29. Aug 2012, 10:36
Ohoh... Lege dir doch bitte erst mal die Grundlagen zu. Ich glaube, du hast da einige Defizite udn es ist schwer dir dann richtig zu helfen.

Der Code von Sir Rufo funktioniert und das auch mit Delphi 7. Die Typdeklarationen kommen in den Type-Deklaration über den implementation-Teil. Und der Code gehört in den implementation-Teil, also darunter.

Aber nur Copy&Paste ist halt nicht, es gehört auch dazu den Code zu verstehen, denn du musst schon noch ein wenig drum herum programmieren, sodass der Code von Sir Rufo komplett funktioniert.

[add]
Wo war die rote Box?
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.656 Beiträge
 
Delphi 12 Athens
 
#9

AW: Spiel nachprogrammieren - Gegnerberührung funktioniert nicht

  Alt 29. Aug 2012, 10:37
Klar geht das, man muss nur noch die fehlenden Methoden implementieren und die fehlenden Variablen deklarieren.

[edit]
[add]
Wo war die rote Box?
Das frag ich mich auch. [/edit]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.739 Beiträge
 
Delphi 6 Enterprise
 
#10

AW: Spiel nachprogrammieren - Gegnerberührung funktioniert nicht

  Alt 29. Aug 2012, 10:43
[OT]
Hab das mit der roten Box mal gegoogelt. Scheinbar macht die gerade in Spanien Urlaub. Siehe Foto
[/OT]
Angehängte Grafiken
Dateityp: jpg images.jpg (4,1 KB, 26x aufgerufen)
Ralph
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:35 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz