Eiegene Kleine KI

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

xXThunderXx

Betreff: Eiegene Kleine KI

BeitragDi, März 31, 2009 19:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo zusammen ich prog erst seit 3 wochen und hab jetzt ein problem und zwar mache ich grad ein Spiel in dem 25 monster gezeichnet werden und so....... jetzt will ich aber das sie hin und her laufen und nicht nur wenn sie irgent wo anstoßen den weg zurück gehen. Sie sollen dann einen anderen weg gehen ich hab da mal was gemacht aber das funktioniert irgent wie nicht aber am besten schaut ihr es euch selber an
Code: [AUSKLAPPEN]


zahler = zahler + 1
If zahler = 4 Then

For i = 0 To 24

   If monsterm(i)\richtung = 1 And ( aktivif = 0 )Then
   monsterm(i)\richtung = Rand(1,4) :aktivif = 1
   
   If monsterm(i)\richtung = 3  Then
   monsterm(i)\y = monsterm(i)\y + 5
   ElseIf monsterm(i)\richtung = 4 Then
   monsterm(i)\y = monsterm(i)\y - 5
   Else
   monsterm(i)\x = monsterm(i)\x + 5 : monsterm(i)\richtung = 1
   aktivif = 1
EndIf
EndIf
   If monsterm(i)\richtung = 2 And( aktivif = 0 )Then   
   monsterm(i)\richtung = Rand(1,4)
   If monsterm(i)\richtung = 3 Then
   monsterm(i)\y = monsterm(i)\y + 5
   ElseIf monsterm(i)\richtung = 4 Then
   monsterm(i)\y = monsterm(i)\y - 5
   Else
   monsterm(i)\x = monsterm(i)\x - 5 : monsterm(i)\richtung = 2
   aktivif = 1
EndIf
EndIf
   If monsterm(i)\richtung = 3 And ( aktivif = 0 ) Then   
   monsterm(i)\richtung = Rand(1,4)
   If monsterm(i)\richtung = 1 Then
   monsterm(i)\x = monsterm(i)\x + 5
   ElseIf monsterm(i)\richtung = 2 Then
   monsterm(i)\x= monsterm(i)\x - 5
   Else
   monsterm(i)\y = monsterm(i)\y + 5 : monsterm(i)\richtung = 3
   aktivif = 1
EndIf
EndIf
   If monsterm(i)\richtung = 4 And ( aktivif = 0 ) Then   
   monsterm(i)\richtung = Rand(1,4)
   If monsterm(i)\richtung = 1 Then
   monsterm(i)\x = monsterm(i)\x + 5
   ElseIf monsterm(i)\richtung = 2 Then
   monsterm(i)\x = monsterm(i)\x - 5
   Else
   monsterm(i)\y = monsterm(i)\y - 5 : monsterm(i)\richtung = 4
   aktivif = 1
EndIf
EndIf

Next

aktivif   = 0
zahler = 0
EndIf

 
 

Text 60,60, " Monster"+monsterm(1)\x
Text 60,75, " Monster"+monsterm(1)\y
Text 60,85, " Monster"+monsterm(1)\richtung

Text 160,60, " Monster"+monsterm(7)\x
Text 160,75, " Monster"+monsterm(7)\y
Text 160,85, " Monster"+monsterm(7)\richtung

Text 260,60, " Monster"+monsterm(19)\x
Text 260,75, " Monster"+monsterm(19)\y
Text 260,85, " Monster"+monsterm(19)\richtung

Text 360,60, " Monster"+monsterm(3)\x
Text 360,75, " Monster"+monsterm(3)\y
Text 360,85, " Monster"+monsterm(3)\richtung
 

For i = 0 To 24
 DrawImage monsterw,monsterm(i)\x,monsterm(i)\y,6
Next

Das "text" habe ich gemacht um zu schauen woran es liegen könnte aber finde es nicht vieleicht liegt es an den if schleifen aber ich weis nicht genau woran.
thx für eure hilfe

ozzi789

BeitragDi, März 31, 2009 19:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Hmm..

Hi erstmal
Versuche deine Gegner lieber als Type zu realisieren.
Zum Rumlaufen, auch Pathfinding gennent, würde ich einen A*-Algorithmusempfehlen, falls sie nicht zufällig rumwuseln sollen, stichwort: "Waypoints".
(http://de.wikipedia.org/wiki/A*-Algorithmus, blödes * in der URL -.-)


Da du erst seit 3 Wochen codest, finde ich das du zuerst etwas einfacheres machen solltest..
Zum Schluss : https://www.blitzforum.de/about/startup/ Wink


mfg

Xeres

Moderator

BeitragDi, März 31, 2009 19:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Anhand der Syntax sind es Types in einem Array... Aber die wichtigeren Informationen wären: Wie sieht die Karte aus, auf denen sich das Viehzeug bewegen soll? Für ein perfektes Labyrinth kann man die Rechte oder Linke Hand Regel verwenden ohne auf A* zurückgreifen zu müssen.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

xXThunderXx

BeitragDi, März 31, 2009 19:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Es ist theoretisch eine leere Karte. Sie sollen erst mal rum laufen die Kollision mit den Achsen mach ich später aber erst mal müssen sich die Monster bewegen. Theoretisch sollen die Monster eine zufällige bewegung ausführen.

Nicdel

BeitragDi, März 31, 2009 19:50
Antworten mit Zitat
Benutzer-Profile anzeigen
=> SeedRnd + Millisecs; Rand; Rnd (@ Zufall)
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7

Xeres

Moderator

BeitragDi, März 31, 2009 19:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Und aus Millisecs baust du dir einen Timer - unter dem Suchbegriff solltest du bei Fragen noch etwas finden hoffe ich. Damit sorgst du dafür, das die Monster sich in einer Überschaubaren Zeitspanne bewegen und die Richtung ändern...
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

xXThunderXx

BeitragDi, März 31, 2009 20:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Habs jetzt hin bekommen ist zwar kein gut Ki aber sie erfüllt ihren zweck hir ist der mal der code
Code: [AUSKLAPPEN]

zahler = zahler + 1
If zahler = 4 Then

For i = 0 To 24

   If monsterm(i)\richtung = 1 Then
   monsterm(i)\richtung = Rand(1,20)
   For a = 0 To 1
   If monsterm(i)\richtung = 3  Then
   monsterm(i)\y = monsterm(i)\y + 5 : Exit 
   ElseIf monsterm(i)\richtung = 4 Then 
   monsterm(i)\y = monsterm(i)\y - 5  : Exit 
   Else
   monsterm(i)\x = monsterm(i)\x + 5 : monsterm(i)\richtung = 1  : Exit
EndIf

Next 
EndIf
 
   If monsterm(i)\richtung = 2 Then   
   monsterm(i)\richtung = Rand(1,20)
   For a = 0 To 1
   If monsterm(i)\richtung = 3 Then
   monsterm(i)\y = monsterm(i)\y - 5  : Exit
   ElseIf monsterm(i)\richtung = 4 Then
   monsterm(i)\y = monsterm(i)\y +5 : Exit
   Else
   monsterm(i)\x = monsterm(i)\x - 5 : monsterm(i)\richtung = 2 : Exit
   
EndIf

Next
EndIf
   If monsterm(i)\richtung = 3  Then   
   monsterm(i)\richtung = Rand(1,20)
   For a = 0 To 1
   If monsterm(i)\richtung = 1 Then
   monsterm(i)\x = monsterm(i)\x + 5 : Exit
   ElseIf monsterm(i)\richtung = 2 Then
   monsterm(i)\x= monsterm(i)\x - 5 : Exit
   Else
   monsterm(i)\y = monsterm(i)\y - 5 : monsterm(i)\richtung = 3 : Exit
   
EndIf

Next 
EndIf

   If monsterm(i)\richtung = 4  Then   
   monsterm(i)\richtung = Rand(1,20)
   For a = 0 To 1
   If monsterm(i)\richtung = 1 Then
   monsterm(i)\x = monsterm(i)\x + 5 : Exit
   ElseIf monsterm(i)\richtung = 2 Then
   monsterm(i)\x = monsterm(i)\x - 5 : Exit
   Else
   monsterm(i)\y = monsterm(i)\y + 5 : monsterm(i)\richtung = 4 : Exit
   EndIf
   
   Next
 
EndIf 
 

Next


zahler = 0
EndIf

 
 
 

For i = 0 To 24
 DrawImage monsterw,monsterm(i)\x,monsterm(i)\y,6
Next

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group