Gegner KI

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Dayf

Betreff: Gegner KI

BeitragSo, Jan 08, 2006 12:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo allerseits
Ich versuche gerade ansatzweise einen egoshooter zu broggn.
Mit der Umwelt und der Steuerung bin ich zufrieden.
Jedoch habe ich keine Ahnung wie ich mit der Gegner KI beginnen soll.

1.gipt es ein ausführliches tutorial ?
2.wie kann ich es realisieren, dass ich einen Gegner zehn mal kopiere und aufs terrain stelle und sich alle zehn bewegen, nich nur einer? ... mit types? wenn ja wie?
3.Wenn die kamera in den radius eines gegners kommt soll dieser sich der kamera zuwenden.

OK das währe vielleicht schon mal ein Anfang

Vielen Dank im Voraus...... Smile

5k41

BeitragSo, Jan 08, 2006 12:35
Antworten mit Zitat
Benutzer-Profile anzeigen
zu 1. ja es gibt sehr viele gute tutorials...ich würd mir an deiner stelle erstmal pathfinding angucken ( findste auf www.blitzbase.de) und dann sehen wir weiter...
zu 2. ja das geht mit types...guck dir mal in der OH den befehl each an damit geht das
zu 3. das weiss ich nicht genau aber das müßte mit atan2 gehen...
Projekte:
For a better World - Gesellschaftsspiel ( 100%)

User posted image

Hellfront

BeitragSo, Jan 08, 2006 13:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich würde ungefähr so rangehen:
-erstmal würd ich gucken, dass die Gegner sich von alleine bewegen also so wie du es dir vorstellst: evtl. -eine Zufällige Taktik
- Bewegung komplett zufällig
- suchen den gegner
Was auch immer

- dann würd ich gucken dass sie Schießen, sobald der Gegner in reichweite ist.
-Da es keine "Monstergegner" werden sollten eine kleine Reaktionszeit einbauen

usw. so nimmt deine KI langsam Form an und wird immer besser
 

Ava

Gast

BeitragSo, Jan 08, 2006 14:07
Antworten mit Zitat
@5k41 Das A*Pathfinding ist für einen Ego-Shooter eher ungeignet... Rolling Eyes
 

Dayf

BeitragSo, Jan 08, 2006 14:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für die Antworten
fange jetzt mal an mich mit dem komlexen Thema zu befassen

habe aber gerade noch ein Problemchen....

ich habe Bäume per Zufall auf mein hügeliges terrain gesetzt,
der Versuch die y-Position aller Bäume mit Hilfe von Types auf TerrainY()-1
zu setztn schlug fehl.

Was habe ich falsch gemacht?(is bestimmtn Anfängerfehler)

Code: [AUSKLAPPEN]

Type tree
     Field xxx#
     Field yyy#
End Type


For dr=1 To 100
 
 c(i).tree = New tree
 c(i)\xt#    =Rnd(50,400)         
 c(i)\yt#    =Rnd(50,400)

Next

For c(i).tree Each tree

PositionEntity c(i),xt#,TerrainY()-1,yt#


Next

5k41

BeitragSo, Jan 08, 2006 14:45
Antworten mit Zitat
Benutzer-Profile anzeigen
ich glaub einfach das (i) hinter jedem c ist sinnlos wenn du das weg nimmst sollte es funktionieren...
Projekte:
For a better World - Gesellschaftsspiel ( 100%)

User posted image

Dante

BeitragSo, Jan 08, 2006 15:02
Antworten mit Zitat
Benutzer-Profile anzeigen
glaub ehr das statt "i" da "dr" hin muss Smile

sonst ist ja die for schleife sinnlos Confused

Edit:

Versuchs vielleicht mal so:

Code: [AUSKLAPPEN]
Type tree
     Field xxx#
     Field yyy#
End Type


For dr=1 To 100
 
 c.tree = New tree
 c\xxx#  = Rnd(50,400)         
 c\yyy#  = Rnd(50,400)

Next

For c.tree = Each tree

PositionEntity c,xxx#,TerrainY()-1,yyy#

Next
 

Florian

BeitragSo, Jan 08, 2006 18:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]

For dr=1 To 100
 
 c(i).tree = New tree
 c(i)\xt#    =Rnd(50,400)         
 c(i)\yt#    =Rnd(50,400)

Next


Es könnte sein das zwei ober mehr Bäume an der gleichen Position stehen.
Ich würde erst mal über prüfen ob schon an der glechen Position ein Baum steht.
 

TACITUS

BeitragMo, Jan 09, 2006 19:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Nee, das mit der Position ist egal
Es können so viele Bäume ineinander stehen wie se wollen Smile

Bad-Rat's Antwort war richtig nur der Code war falsch (Klammern vergessen)
edit: ah, code war nicht falsch, war eine weitere möglichkeit ups

So muss es sein:
Code: [AUSKLAPPEN]

For dr=1 To 100
 
 c(dr).tree = New tree
 c(dr)\xt#    =Rnd(50,400)         
 c(dr)\yt#    =Rnd(50,400)

Next

Wink

edit: hm, du hast die feldvariable c doch vereinbart, oder? Confused
AMD Athlon 64 X2 4200+ Dual Core Prozessor _ 1024 MB Dual Channel DDR RAM _ GeForce 7800 GT PCI Express 256 MB GDDR3 RAM _ Festplatte 410 GB _ DirectX 9.0c
User posted image
 

Dayf

BeitragDi, Jan 10, 2006 17:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke
ich habe nochmal probiert, aber bin meinem Ziel nicht näher gekommen
Komme einfach nicht auf den Fehler...das kann doch nicht so schwer sein Confused

habe den code ein wenig geändert:
Code: [AUSKLAPPEN]


Global tree = LoadMesh("C:\tree2.b3d")
 

Type baueig
     Field xpt#
     Field zpt#
     Field neigung#
     Field skaleX#
     Field skaleY#
     Field skaleZ#
End Type


Global tree.baueig

For bai=0 To 100

  tree(bai).baueig    = New baueig
  tree(bai)\xpt#      = Rnd(50,400)
  tree(bai)\zpt#      = Rnd(50,400)
  tree(bai)\neigung#  = Rnd(-20,180)
  tree(bai)\skaleX#   = .2
  tree(bai)\skaleY#   = .2
  tree(bai)\skaleZ#   = .2
 
Next


For tree.baueig Each baueig

    PositionEntity tree,xpt#,TerrainY()-1,zpt#
    RotateEntity   tree,0,neigung#,0
    ScaleEntity    tree,skaleX#,skaleY#,skaleZ#

Next

 


Es kommt immer der Hinweis "Expecting Next"....

Wie dem auch sei....

Smile

BtbN

BeitragDi, Jan 10, 2006 18:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Tree ist schlicht und einfach kein Array!
Und bei der zweiten schleife fehlt ein =
 

Antsan

BeitragMi, Jan 11, 2006 13:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Das mit dem Array lässt sich ganz einfach lösen:





[syntax="bb"]
Dim tree(100)

For i=1 To 100
tree(i)= LoadMesh("C:\tree2.b3d")
next


Type baueig
Field xpt#
Field zpt#
Field neigung#
Field skaleX#
Field skaleY#
Field skaleZ#
End Type


Global tree.baueig

For bai=0 To 100

tree(bai).baueig = New baueig
tree(bai)\xpt# = Rnd(50,400)
tree(bai)\zpt# = Rnd(50,400)
tree(bai)\neigung# = Rnd(-20,180)
tree(bai)\skaleX# = .2
tree(bai)\skaleY# = .2
tree(bai)\skaleZ# = .2

Next


For tree.baueig Each baueig

PositionEntity tree,xpt#,TerrainY()-1,zpt#
RotateEntity tree,0,neigung#,0
ScaleEntity tree,skaleX#,skaleY#,skaleZ#

Next[/syntax]


Ich hab leider kaum Ahnung von Types, also weiß ich nicht, welche Fehler sich da vielleicht verstecken...

BtbN

BeitragMi, Jan 11, 2006 14:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Ähm, wenn überhaupt:

Code: [AUSKLAPPEN]
Dim tree.baueig(100)


Das sagt mir meine Logik für OOP, ka ob die im alten BB funzt,

Goodjee

BeitragMi, Jan 11, 2006 20:23
Antworten mit Zitat
Benutzer-Profile anzeigen
5k41 hat Folgendes geschrieben:
zu 1. ja es gibt sehr viele gute tutorials...ich würd mir an deiner stelle erstmal pathfinding angucken ( findste auf www.blitzbase.de) und dann sehen wir weiter...


hm, ich hab mir das mal angeguckt, un d bin überrascht, wie gut das funktioniert, aber, ist diese methode schnell genug, um bei einem Spiel vielen gegnerischen Bots ihre intelligenz zu spenden??? Bei mir hat eine berechnug ungefär 4 ms gebraucht, ist das net zu viel????
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/

5k41

BeitragMi, Jan 11, 2006 20:25
Antworten mit Zitat
Benutzer-Profile anzeigen
wurde oben von Ava schon gesacht...dachte das reicht aber ok dann brauch ma wohl wirklich noch was ausgereifteres...
Projekte:
For a better World - Gesellschaftsspiel ( 100%)

User posted image

Goodjee

BeitragDo, Jan 12, 2006 16:20
Antworten mit Zitat
Benutzer-Profile anzeigen
ava bezog sich dabei aber eher darauf, dass das pathfindung für 2d spiele gemacht wurde, nicht au die geschwindigkeit, oder???
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/
 

TACITUS

BeitragDo, Jan 12, 2006 17:03
Antworten mit Zitat
Benutzer-Profile anzeigen
An dem Code ist meiner Meinung nach ziemlich viel falsch, ich würde es
so machen:

[syntax="bb"]

Global Baum = LoadMesh("C:\tree2.b3d")

Type baueig
field Mesh
Field xpt#
Field zpt#
Field neigung#
Field skaleX#
Field skaleY#
Field skaleZ#
End Type


Global tree.baueig

For I = 1 To 100 ;100 Baums

tree.baueig = New baueig
tree\xpt# = Rnd(50,400)
tree\zpt# = Rnd(50,400)
tree\neigung# = Rnd(-20,180)
tree\skaleX# = .2
tree\skaleY# = .2
tree\skaleZ# = .2
tree\Mesh = Baum

Next


For tree.baueig = Each baueig ;Hier hast bei allen Variablen vergessen
; tree\ davor zu setzen

PositionEntity tree\Mesh,tree\xpt#,TerrainY()-1,tree\zpt#
RotateEntity tree\Mesh,0,tree\neigung#,0
ScaleEntity tree\Mesh,tree\skaleX#,tree\skaleY#,tree\skaleZ#

Next

[/syntax]

Versuchs jetzt mal, kann sein, dass jetz noch mehr falsch ist... Wink
AMD Athlon 64 X2 4200+ Dual Core Prozessor _ 1024 MB Dual Channel DDR RAM _ GeForce 7800 GT PCI Express 256 MB GDDR3 RAM _ Festplatte 410 GB _ DirectX 9.0c
User posted image
 

Dayf

BeitragDo, Jan 12, 2006 20:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Erstmal Danke
Der Weg von TACTICUS funktioniert soweit
Die Bäume stehen nun...
jedoch nicht auf dem terrain, denn bei

Code: [AUSKLAPPEN]
positionentity tree\mesh,tree\xpt#,terrainY(terrain)-1,tree\zpt#


erscheint im debug:"not enough parameters"
nun will ich versuchen alle Bäume von einer gewissen Position auf das terrain fallen zu lassen, was jedoch bei schrägen nicht gut aussieht.
Hat jemand noch eine Idee..? Smile
 

Dayf

BeitragDo, Jan 12, 2006 20:43
Antworten mit Zitat
Benutzer-Profile anzeigen
sry... TACITUS Laughing

DAK

BeitragDo, Jan 12, 2006 21:36
Antworten mit Zitat
Benutzer-Profile anzeigen
zu 3. Ich mach sowas mit der phytagoräischen Formel:

[syntax="bb"]xentfernt = gegner\x - spieler\x
yentfernt = gegner\y - spieler\y
if xentfernt < 0 then xentfernt = -xentfernt
if yentfernt < 0 then yentfernt = -yentfernt
gesammteweitequadrat = xentfernt^2 + yentfernt^2
gesammtweite = gesammteweitequadrat^0.5
if gesammtweite < x then pointentity gegner, kamera[/syntax]

gesammtweite...Entfernung des Gegners zur Kamera
x...Sichtradius
Gewinner der 6. und der 68. BlitzCodeCompo

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group