AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia "eXtreme Towerdefence" - Trum Radios ?
Thema durchsuchen
Ansicht
Themen-Optionen

"eXtreme Towerdefence" - Trum Radios ?

Ein Thema von mimi · begonnen am 19. Mär 2008 · letzter Beitrag vom 19. Mär 2008
Antwort Antwort
Seite 1 von 3  1 23      
mimi

Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
 
FreePascal / Lazarus
 
#1

"eXtreme Towerdefence" - Trum Radios ?

  Alt 19. Mär 2008, 12:39
Hallo,
ich möchte das Spiel "eXtreme Towerdefence" nach machen mit meiner "2D Engine." Das ist so weit auch kein Problem.

Ein Problem habe ich jedoch und zwar: Jeder Turm soll ein Radios haben.
Beim Platzieren möchte ich diesen Radios anzeigen.

Also, ich habe unten mein Menu mit den Türmen die es gibt, jeder Turm hat sein Radios ich klicke auf ein Turm drauf gehe dann mit der Maus auf meine PaintBox jetzt soll der Radios in Form eines Kreis angezeigt werden.

Das Zweite:
Der Turm soll sich nur Gegner raussuchen die sich in diesen Radios bewegen.


Ausdem Buch:
"3D Programmierung mit Delphi für Kids"
habe ich folgende Funktion übernommen und angepasst:
Delphi-Quellcode:
procedure TForm1.ShotMove;
var
  strecke, Steigung:Single;
  xWeg,yWeg, xDiff, yDiff, Schritt, i, Speed,l,t:Integer;
  
begin

  Speed:=20;
  s3.left:=s2.left-(s1.Width div 2);
  s3.top:=s2.top-(s1.Height div 2);


  xWeg:=s1.Left - s2.Left;
  yWeg:=s1.Top - s2.Top;
  
  strecke:=sqrt(sqr(xWeg)+Sqr(yWeg));
  Schritt:=Round(Strecke/Speed);
  
  if Schritt = 0 then Schritt:=1;
  xDiff:=xWeg div Schritt;
  yDiff:=yWeg div Schritt;
  
  if xWeg <> 0 then Steigung:=yWeg/xWeg else Steigung:=999;
  for i:=1 to Schritt do begin
    s3.left:=s3.Left+xDiff;
    s3.top:=s3.Top+yDiff;
    application.ProcessMessages;
    s3.DrawSprite;
    if New then begin
      New:=False;
      exit;
    end;
    Sleep(200);
    
{    if (steigung >-1) and (Steigung < 1) then
      if xWeg < 0 then
        s3.left:=s3.left-s3.Width
      else
        s3.left:=s3.left+s3.Width;
     
    if (Steigung < -1) or (Steigung > 1) then
      if yWeg < 0 then
        s3.Top:=s3.Top-s3.Height
      else
        s3.Top:=s3.Top+s3.Height;}

  end;
  Timer1.Enabled:=False;
  Engine.NewAllDraw;
das geht auch wunderbar.

wie ich ein Kreis zeichne weiß ich auch. Nur das mit dem Radios weiß ich leider nicht.

Ein Suche hier im Forum brachte leider keine Ergebnisse

Das ist jetzt nur ein Test Projekt, was ich extra für dieses Problem angefangen habe.
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: "eXtreme Towerdefence" - Trum Radios ?

  Alt 19. Mär 2008, 12:50
Geh einfach alle Gegner durch und schau nach, ob ihr Abstand zum Turm (Satz des Pythagoras, sqrt(deltaX²+deltaY²) kleiner dem Radius ist. (Oder, nicht so zeitaufwändig: deltaX²+deltaY²<radius²)
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
mimi

Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
 
FreePascal / Lazarus
 
#3

Re: "eXtreme Towerdefence" - Trum Radios ?

  Alt 19. Mär 2008, 13:17
Kannst du mir das genau beschrieben ? Sowas hatten wir leider nicht in Mathe in der Schule.
(und jetzt bin ich schon ca 4 Jahre Fertig mit der Schule ).
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
Benutzerbild von Aurelius
Aurelius

Registriert seit: 29. Jan 2007
Ort: Erfurt
753 Beiträge
 
Delphi 7 Personal
 
#4

Re: "eXtreme Towerdefence" - Trum Radios ?

  Alt 19. Mär 2008, 13:22
Wenn ich 3_of_8 Richtig verstanden habe:
Gegner hat Koordinaten: x1,y1
Dein Turm die Koords: x2,y2
Der Schussradius des Turms ist: r

if ((x1-x2)^2 + (y1-y2)^2) < r² then schießen;
Jonas
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: "eXtreme Towerdefence" - Trum Radios ?

  Alt 19. Mär 2008, 13:29
Die äußere Klammer kann man weglassen, im Code muss man das ^2 und das ² noch durch ein sqr() ersetzen, ansonsten passt es. (Außerdem sollte man noch <= schreiben statt <). Ich habe es in meinem Beitrag doch eh schon ganz genau beschrieben.

Es sei M(x1|y1). Ein Kreis k(M;r) ist definiert als die Menge aller Punkte P(x2|y2) mit d(M, k)<=r, also k(M;r)={P(x2|y2)|d(M, k)<=r} oder auch (nach dem Satz des Pythagoras, a²+b²=c²): k(M;r)={P(x2|y2)|(x2-x1)²+(y1-y2)²<=r²}

Daraus folgt: Wenn ein Punkt (ein Gegner in dem Fall) die Gleichung (x2-x1)²+(y1-y2)²<=r² erfüllt, liegt er im Kreis. (Dabei wird ein Gegner als punktförmig, aber das ist in dem Fall egal.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Benutzerbild von Fussball-Robby
Fussball-Robby

Registriert seit: 22. Okt 2007
Ort: Nähe Köln
1.063 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: "eXtreme Towerdefence" - Trum Radios ?

  Alt 19. Mär 2008, 13:59
[Edit]Quatsch[/Edit]
Robert L.
Der folgende Satz ist richtig!
Der vorherige Satz ist falsch!

Paradox
  Mit Zitat antworten Zitat
mimi

Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
 
FreePascal / Lazarus
 
#7

Re: "eXtreme Towerdefence" - Trum Radios ?

  Alt 19. Mär 2008, 14:49
if ((x1-x2)^2 + (y1-y2)^2) < r² then schießen; Danke, Was bedeutet das ^2 das hier drei mal vorkommt......?

Zitat:
Der Schussradius des Turms ist: r
r kann z.b. auf 5 stehen dann hätte der Turm ein Radio von 5....

Ich möchte das gerne auch anzeigen lassen... dazu gibt es ja die Procedure Ellipse von Canvas.
Aber wie berechne ich die 4 Parameter(n) ?
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#8

Re: "eXtreme Towerdefence" - Trum Radios ?

  Alt 19. Mär 2008, 14:51
x^2 bedeutet "x hoch 2", also x².
  Mit Zitat antworten Zitat
Benutzerbild von Fussball-Robby
Fussball-Robby

Registriert seit: 22. Okt 2007
Ort: Nähe Köln
1.063 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: "eXtreme Towerdefence" - Trum Radios ?

  Alt 19. Mär 2008, 14:51
^2 heißt zum quadrat oder hoch 2, also ist (x1-x2)^2 das gleiche wie (x1-x2)*(x1-x2)
Robert L.
Der folgende Satz ist richtig!
Der vorherige Satz ist falsch!

Paradox
  Mit Zitat antworten Zitat
Benutzerbild von Aurelius
Aurelius

Registriert seit: 29. Jan 2007
Ort: Erfurt
753 Beiträge
 
Delphi 7 Personal
 
#10

Re: "eXtreme Towerdefence" - Trum Radios ?

  Alt 19. Mär 2008, 14:52
Einfach nur quadrieren( a * a), der Code so funktioniert nicht. Du musst sqr() nehmen.

if (sqr(x1-x2) + sqr(y1-y2)) <= sqr(r) then schießen; PS: Wie lautet die Ellipse-Funktion (also mit Parametern, hab grad kein Delphi zur hand)
Jonas
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 12:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz