AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Counter Strike in 2D
Thema durchsuchen
Ansicht
Themen-Optionen

Counter Strike in 2D

Ein Thema von F.W. · begonnen am 8. Okt 2004 · letzter Beitrag vom 11. Okt 2004
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von F.W.
F.W.

Registriert seit: 28. Jul 2003
Ort: Zittau
636 Beiträge
 
#11

Re: Counter Strike in 2D

  Alt 10. Okt 2004, 12:17
Wahrscheinlichkeitsrechnung ist meine Schwachstelle
  Mit Zitat antworten Zitat
mimi

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

Re: Counter Strike in 2D

  Alt 10. Okt 2004, 12:39
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
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
Benutzerbild von nailor
nailor

Registriert seit: 12. Dez 2002
Ort: Karlsruhe
1.989 Beiträge
 
#13

Re: Counter Strike in 2D

  Alt 10. Okt 2004, 12:50
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.
Michael N.
http://nailor.devzero.de/code/sharpmath/testing/ --- Tests, Feedback, Anregungen, ... aller Art sehr willkommen!
::: don't try so hard - it'll happen for a reason :::
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#14

Re: Counter Strike in 2D

  Alt 10. Okt 2004, 12:56
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
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von nailor
nailor

Registriert seit: 12. Dez 2002
Ort: Karlsruhe
1.989 Beiträge
 
#15

Re: Counter Strike in 2D

  Alt 10. Okt 2004, 23:23
hey, es gibt leute, die können diagonal weiter schauen, als geradeaus
Michael N.
http://nailor.devzero.de/code/sharpmath/testing/ --- Tests, Feedback, Anregungen, ... aller Art sehr willkommen!
::: don't try so hard - it'll happen for a reason :::
  Mit Zitat antworten Zitat
Benutzerbild von Ben1
Ben1

Registriert seit: 11. Okt 2004
Ort: Rostock
36 Beiträge
 
Delphi 6 Personal
 
#16

Re: Counter Strike in 2D

  Alt 11. Okt 2004, 10:44
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 )

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/
Ben
  Mit Zitat antworten Zitat
Benutzerbild von F.W.
F.W.

Registriert seit: 28. Jul 2003
Ort: Zittau
636 Beiträge
 
#17

Re: Counter Strike in 2D

  Alt 11. Okt 2004, 19:34
@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: 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?
  Mit Zitat antworten Zitat
Benutzerbild von Ben1
Ben1

Registriert seit: 11. Okt 2004
Ort: Rostock
36 Beiträge
 
Delphi 6 Personal
 
#18

Re: Counter Strike in 2D

  Alt 11. Okt 2004, 20:23
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.
Ben
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 10:42 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