Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Counter Strike in 2D (https://www.delphipraxis.net/31390-counter-strike-2d.html)

F.W. 10. Okt 2004 12:17

Re: Counter Strike in 2D
 
Wahrscheinlichkeitsrechnung ist meine Schwachstelle :lol:

mimi 10. Okt 2004 12:39

Re: Counter Strike in 2D
 
du hast doch für die spieler die positions angaben.
jetzt machst du z.b. sowas
Delphi-Quellcode:
function GetFeindlichGegener:Integer;
begin
  for i:=0 to Gegener.count-1 do begin
    if (Gegener[i].x - player.x <= 200) and (Gegener[i].y - player.y <= 200) then begin
     if Genger[i].feindlich = True then begin
        result:=i;
        break;
      end;
    end;
  end;
end;
so änlich würde ich das lösen*G*
evtl. müste man ein rechteck ziehen

nailor 10. Okt 2004 12:50

Re: Counter Strike in 2D
 
nö gibts nicht. array mit for-schleife durchgehen und relative position bestimmen. fertig aus.

hab mimis post noch nicht gesehen gehabt, aber so ungefähr könnte es gehen.

alcaeus 10. Okt 2004 12:56

Re: Counter Strike in 2D
 
Hi mimi,

es wär aber besser, Gegner im Umkreis von z.B. 500 Pixel zu finden:

Ich nehme jetzt einfach an, dass Player[0] der PC-Spieler ist, und der Rest KI-Spieler.
Delphi-Quellcode:
for i := 1 to Players.Count-1 do
begin
  if Players[0].Team <> Players[i].Team then
  begin
    if Sqr(Players[0].Position.X-Players[i].Position.X)+Sqr(Players[0].Position.Y-Players[i].Position.Y) > Sqr(Umkreis) then
      //Gegner markieren
  end;
end;
Hier werden nur Spieler überprüft, die nicht im Team des PC-Spielers sind. Die if-Abfrage berechnet den Abstand zwischen den Spielern, und vergleicht ihn mit dem maximalen Abstand (Umkreis). Dieser muss quadriert werden, außer du willst die Wurzel des linken Teils des Vergleichs ziehen. Hier fehlt allerdings noch eine Überprüfung, ob ein Objekt im Weg ist. Das wird schon etwas komplizierter.

Greetz
alcaeus

nailor 10. Okt 2004 23:23

Re: Counter Strike in 2D
 
hey, es gibt leute, die können diagonal weiter schauen, als geradeaus ;)

Ben1 11. Okt 2004 10:44

Re: Counter Strike in 2D
 
Ich habe einst (vor vielen Jahren) mal ein ähnliches Spiel mit DelphiX gemacht.
Und bin dabei noch einen Schritt weiter gegangen indem ich versuchte hören und sehen in 2D umzusetzen. Jeder kann nur Truppen in einen bestimmten Sichtfeld sehen, es sei denn sie sind sehr laut dann wurden sie halb durchsichtig gezeichnet.

Die Freund-Feind Erkennung lief so das alle Objekte in einem gewissen Umkreis gesucht wurden. Dann erfolgte die Prüfung ob sie im Sichtfeld lagen, falls nicht ob sie hörbar sind. Sollten sie sichtbar sein wurden zusätzlich noch alle anderen Objekte auf ihren Abstand zur Verbindungslinie zwischen eigenen Spieler und dem Feind/Freund überprüft. War dieser Abstand kleiner als die Größe des Objektes - Größe des Freund/Feindes dann wurde er verdeckt (klingt ganz schön kniffelig :wink: )

Ob das Gegenüber dann auch tatsächlich identifiziert werden konnte wurde dann ganz simpel über den Abstand bestimmt.

Für alle die sich eines meiner Machwerke mal reinziehen möchten:
http://space.arcor.de/nirw/

F.W. 11. Okt 2004 19:34

Re: Counter Strike in 2D
 
@Ben1: Hab mir dein Spiel noch nicht angesehen, hört sich aber logisch an, auch von den anderen.

Das Prob. ist, ich weiß nicht was ich mit der for-Schleife durchgehen soll. Ich hab mal was versucht, hat aber nicht geklappt:
Delphi-Quellcode:
 for I := 0 to DXSpriteEngine.Engine.Items.Count-1
Zitat:

Ich nehme jetzt einfach an, dass Player[0] der PC-Spieler ist, und der Rest KI-Spieler
Nein, es gibt keinen PC-Spiele, ich möchte vorerst nur probieren, vom Computer gesteuerte Personen (->"Bots") zu bewegen.
Alle Spieler gehören der Klasse TCSPlayer an. Sie werden nur am Team (TTeam = (TeamCT, TeamT)) unterschieden. (Und sie haben ein blaues bzw. rotes Sprite, das wird anhand von Team zugewiesen).

Erstellen TUE ich sie folgender Maßen:
Delphi-Quellcode:
var
 NewTeam: TTeam;

constructor TCSPlayer.Create(AOwner: TSprite);
begin
 inherited;

 HP := 100;
 if Team = TeamCT then begin
    Image := Game.Pics.Items.Find('Blau'); //Game ist mein Haupt-Formular
    Width := Game.Pics.Items.Find('Blau').Width;
    Height := Game.Pics.Items.Find('Blau').Height;
    X := Random(Game.DXWelt.Width div 3);
    Y := Random(Game.DXWelt.Height-Height);
 end else begin
    Image := Game.Pics.Items.Find('Rot');
    Width := Game.Pics.Items.Find('Rot').Width;
    Height := Game.Pics.Items.Find('Rot').Height;
    X := Game.DXWelt.Width-Width-Random(Game.DXWelt.Width div 3);
    Y := Random(Game.DXWelt.Height-Height);
 end;
end;

procedure StartGame(ACTCount, ATCount: Integer);
var
 I: integer;
begin
 for I := 1 to ACTCount do begin
     NewTeam := TeamCT;
     with TCSPlayer.Create(Game.DXEngine.Engine) do begin end;
 end;

 for I := 1 to ATCount do begin
     NewTeam := TeamT;
     with TCSPlayer.Create(Game.DXEngine.Engine) do begin end;
 end;
end;
Welches Array muss ich abgehen?

Ben1 11. Okt 2004 20:23

Re: Counter Strike in 2D
 
Ich hatte meine Daten unabhängig von DelphiX organisiert. In einer Liste bzw. in vielen Listen. Die Karte war Quadranten eingeteilt von denen jeder einer Liste mit Objekten enthielt die sich dort befanden. Zusätzlich war jedes Objekt noch in einer zweiten Liste registriert die sämtliche Spielobjekte enthielt. Ich brauchte also nur berechnen welche Quadranten betroffen waren und deren Objektlisten durchgehen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:42 Uhr.
Seite 2 von 2     12   

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