AI - B3D
Übersicht

![]() |
StepTigerBetreff: AI - B3D |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich programmiere gerade an einem 3d Spiel und arbeite an einer KI. Sie greifen mich schon an und sollen letzendlich nach Wegpunkten laufen.
Das Problem ist, dass die KI nicht auf irgendeinem Weg zu mir laufen soll, sie soll auf dem kürzesten zu mir. Wie lass ich am besten prüfen, ob es der kürzeste ist? (Alle möglichen Wege sind miteinander verknüpft, wenn man von einem zum anderen direkt laufen kann.) Soll ich alle Möglichkeiten durchprobieren (vorberechnen), und den Weg messen oder gibt es auch eine Variante, die intelligenter ist und nicht so einen hohen Speicheraufwand hat? |
||
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer: AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t Gewinner: BP Code Compo #2 Π=3.141592653589793238...<--- und das aus dem kopf ![]() Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser. |
![]() |
FreetimeCoder |
![]() Antworten mit Zitat ![]() |
---|---|---|
Vielleicht solltest du ,immer wenn ein Gegner aktiv wird, einen direkten Weg von Gegner zu Spieler erstellen. Dann wird der Wegpunkt errechnet, der dem Gegner und dem direkten Weg am nächsten ist. Diesen Wegpunkt soll dann der Gegner ansteuern.
So geht`s weiter mit dem nächsten Wegpunkt. Müssteste mal probieren ![]() |
||
"Wir haben keine Chance, aber wir werden sie nutzen!"
Projekte: Dexterity Ball (100%) Aquatic Atmosfear (22 % ca 4700 Zeilen) eingefrohren mangels OOP Fähigkeiten von Blitz (ehemals Uboot) PC: Intel D 3 GHz | NVidiaGforce 6700 256 Mb | 1024 Mb DDR RAM 400 Mhz | 2x160 GB S-ATA |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wenn du dein Pfadnetz aufgestellt hast ist der wohl beliebteste (da sehr effizient) Algorithmus den kürzesten Weg zu finden A* (Astar oder wie auch immer die leute es ausschreiben. Gibt glaub sogar AStern *ggg*) | ||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
StepTiger |
![]() Antworten mit Zitat ![]() |
---|---|---|
hab mir mal ein pathfinding programmiert. (ganz ohne tutorial ![]() Klappt super, aber wie lese ich die Knotenpunkte wieder aus? also mal hier das Programm: *edit* Code verändert: So löscht er die alten waypoints und gibt die anzahl der waypoints (wenn danach gefragt) an. *noch ein edit* findet den Weg zwar jetzt nicht mehr so schnell aber dafür immer richtig: *edit nr. 3* jetzt findet es den weg *bei mir* immer. CodeArchiv-reif oder? *edit nr. 4* Jetzt lass ich es erstmal so ![]() Code: [AUSKLAPPEN] max=15
Graphics max*20,max*20+20,32,2 AppTitle "PATHES" Dim dat(max,max) Dim dist#(max,max) Dim kdist#(max,max) Dim used(max,max) Dim once(max,max) Dim knotx(400) Dim knoty(400) Restore mydata For y=1 To max For x=1 To max Read dat(x,y) If dat(x,y)=2 Then px=x:py=y:starx=x:stary=y If dat(x,y)=3 Then tarx=x:tary=y Next Next For x=1 To max For y=1 To max If dat(x,y)=0 Then Color 125,125,125 If dat(x,y)=1 Then Color 255,0,0 If dat(x,y)=2 Then Color 0,0,255 If dat(x,y)=3 Then Color 0,255,0 posx=(x-1)*20 posy=(y-1)*20 Rect posx,posy,20,20 Color 0,0,0 Text posx+5,posy+5,dist#(x,y) Next Next SetBuffer BackBuffer() shortx=0 shorty=0 knot=1 knotx(1)=1 knoty(1)=1 While dat(px,py)<>3 And KeyDown(1)=0 Cls c=0 opx=px opy=py Dim oonce(max,max) Dim oused(max,max) For x=1 To max For y=1 To max oonce(x,y)=once(x,y) oused(x,y)=used(x,y) Next Next wegnow#=0 For x=2 To knot wegnow#=wegnow#+cdist#(knotx(x-1),knoty(x-1),knotx(x),knoty(x)) Next For x=-1 To 1 For y=-1 To 1 tx=px+x ty=py+y If tx>0 And tx<=max And ty>0 And ty<=max And (x=-1 And y=-1)=0 And (x=1 And y=1)=0 And (x=1 And y=-1)=0 And (x=-1 And y=1)=0 If dat(tx,ty)<>1 If (tx<>px Or ty<>py) Then c=c+1 dist#(tx,ty)=cdist#(tx,ty,tarx,tary)+wegnow# kdist#(tx,ty)=dist#(tx,ty) EndIf EndIf Next Next If once(px,py)=0 Then used(px,py)=c If c=0 Then RuntimeError "Absolut nich möglich!" ; Text 1,1,used(px,py)+" "+once(px,py):Flip:WaitKey shortx=0 shorty=0 For x=1 To max For y=1 To max If dat(x,y)<>1 If (dist#(x,y)>0) And (used(x,y)>0 Or once(x,y)=0) ; Cls ; Print used(x,y)+" "+once(x,y) ; Flip ; WaitKey ; If shortx=0 ; shortx=x ; shorty=y ; once(x,y)=1 ; ; Color 255,255,255 ; Text 1,1,"Klappt" ; Flip ; WaitKey ; EndIf If dist#(x,y)<=kdist#(shortx,shorty) Or dist#(shortx,shorty)=0 Or c=1 used(px,py)=used(px,py)-1 shortx=x shorty=y px=shortx py=shorty If opx>px Then richtung=1 If opy<py Then richtung=4 If opx<px Then richtung=3 If opy>py Then richtung=2 ; Color 255,255,255 ; Text 1,1,"Klappt" ; Flip ; WaitKey EndIf EndIf EndIf Next Next If px=opx And py=opy Then RuntimeError("Es gibt keinen Weg!") If dist#(px,py)<odist# odist#=dist#(px,py) For x=1 To max For y=1 To max dist#(x,y)=0 Next Next EndIf once(px,py)=1 dat(px,py)=4 If cdist#(opx,opy,px,py)<=1 If richtung<>altrichtung dat(opx,opy)=5 knotx(knot)=opx knoty(knot)=opy knot=knot+1 EndIf Else richtung=0 short#=1000 sknot=0 For x=1 To knot If cdist#(opx,opy,knotx(x),knoty(x))<short# Then sknot=x Next For y=sknot To knot dat(knotx(y),knoty(y))=4 Next knot=sknot EndIf altrichtung=richtung For x=1 To max For y=1 To max If dat(x,y)=0 Then Color 125,125,125 If dat(x,y)=1 Then Color 255,0,0 If dat(x,y)=2 Then Color 0,0,255 If dat(x,y)=3 Then Color 0,255,0 If dat(x,y)>=4 Then Color 255,255,255 posx=(x-1)*20 posy=(y-1)*20 Rect posx,posy,20,20 If dat(x,y)=5 Then Color 255,0,255:Rect posx+8,posy+8,4,4 Color 0,0,0 Text posx+5,posy+5,dist#(x,y) Next Next Color 255,255,255 Text 1,160,starx+" "+stary+" "+px+" "+py+" "+once(px,py)+" "+used(px,py) Flip If cdist#(px,py,tarx,tary)<=1 Then RuntimeError "Du bist am Ziel. Die Koordinaten lauten: "+(px+Sin(richtung*90))+"x "+(py+Cos(richtung*90))+"y." WaitKey FlushKeys Delay 100 Wend End Function cdist#(x1,y1,x2,y2) Return Sqr#((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)) End Function .mydata Data 2,1,1,1,1,1,1,1,1,1,1,1,1,1,1 Data 0,0,1,0,0,0,0,1,0,0,0,0,0,0,0 Data 1,0,1,0,1,1,0,1,0,1,1,1,0,1,0 Data 1,0,1,0,0,1,0,1,0,0,1,1,0,1,0 Data 1,0,1,1,0,1,0,1,1,0,0,0,0,1,0 Data 1,0,0,1,0,1,0,0,0,0,1,1,1,1,0 Data 1,0,0,1,0,1,1,0,1,0,1,0,0,1,0 Data 1,0,0,1,0,0,1,0,1,0,1,0,0,1,0 Data 1,0,1,1,1,0,1,0,1,0,1,0,0,0,0 Data 1,0,0,0,1,0,1,0,0,0,1,0,0,1,1 Data 1,1,1,0,1,0,1,1,1,1,0,0,0,1,3 Data 0,0,0,0,1,0,1,1,0,0,0,1,0,1,0 Data 1,0,1,1,1,0,0,1,0,1,1,1,0,1,0 Data 0,0,0,0,0,1,0,1,0,1,0,0,0,1,0 Data 0,1,1,1,0,0,0,1,0,0,0,1,0,0,0 |
||
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer: AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t Gewinner: BP Code Compo #2 Π=3.141592653589793238...<--- und das aus dem kopf ![]() Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser. |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group