Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Wegfindung (KI) Programmieren

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
AndT



Anmeldungsdatum: 02.04.2007
Beiträge: 481

BeitragVerfasst am: 21.07.2007, 11:06    Titel: Wegfindung (KI) Programmieren Antworten mit Zitat

Wie kann man eine KI für eine Wegfindung programmieren???
Ich hab schon eienen kleinen Anfangscode
Code:



const w = 800
const h = 600
const colors = 8
const flag = 0
screenres w,h,colors,,flag
dim as integer mx,my,mb,sr

dim as integer omx,omy
dim as integer px,py
dim as integer timex
timex=10000000
Print
Print " Mauern mit mir der Maus zeichenen"
Print "weiter mit Taste, beenden mit Esc"
sleep
cls
' "Mauern" zeichnen
DO
    timex-=1
    if timex = 0 then exit do
    IF sr > -1 then
    omx=mx
    omy=my
    end if
       
        GETMOUSE mx,my,sr,mb
    if mb  = 1 then line (mx,my)-(omx,omy),4
sleep 1
loop until inkey=chr(27)


' Start der Wegsuche
dim as integer scancol
mx=0
my=0
do
    scancol=point (mx,my+1)
if scancol= 0 then
my+=1
else
 my-=10
    scancol=point (mx+1,my)
    if scancol = 0 then
    mx+=1
end if
end if
pset (mx,my),15
loop until inkey=chr(27)

sleep

Aber dieser ist leider noch Fehlerhaft mit dem Kopf durch die Mauer wollen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Mao



Anmeldungsdatum: 25.09.2005
Beiträge: 4409
Wohnort: /dev/hda1

BeitragVerfasst am: 21.07.2007, 12:13    Titel: Antworten mit Zitat

[url=http://de.wikipedia.org/wiki/A*]A*[/url] dürfte der richtige Algorithmus für dein Problem sein. lächeln
_________________
Eine handvoll Glück reicht nie für zwei.
--
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 21.07.2007, 13:52    Titel: Antworten mit Zitat

Korrekter Link:
http://de.wikipedia.org/wiki/A%2A-Algorithmus
_________________
http://de.wikibooks.org/wiki/FreeBasic Jede Hilfe für dieses Buch ist Willkommen!
http://de.wikibooks.org/wiki/FreeBasic:_FAQ FAQ zu Freebasic (im Aufbau, hilfe Willkommen)
Neu mit Syntax Highlight
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 22.07.2007, 07:45    Titel: Antworten mit Zitat

hi, ich hab da mal vor laengerem was gefunden aber nicht weiter mit beschaeftigt....

Ein Pathfinder in Blitzbasic

Mein versuch das ganze auf die schnelle zu uebersetzen, scheint aber noch ein fehler zu haben.

vielleicht hilft das weiter....
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
AndT



Anmeldungsdatum: 02.04.2007
Beiträge: 481

BeitragVerfasst am: 22.07.2007, 11:37    Titel: Antworten mit Zitat

Nette hinweise wie dass einfacher geht zwinkern
Ich hab gerade nix zu tun also mach ich da mal ein Spiel draus xD.

Bitte:
Code:

const w = 800
const h = 600
const colors = 8
const flag = 0
screenres w,h,colors,,flag
dim as integer mx,my,mb,sr

dim as integer omx,omy
dim as integer px,py

dim as string bewegung

Print
Print " Mauern mit mir der Maus zeichenen"
Print "weiter mit Taste, beenden mit Esc"
sleep
cls
' "Mauern" zeichnen
dim as integer scancol
cmx=w/2
cmy=0


DO
    'Zeichen Engine
    if sr >-1 then
        omx=mx
        omy=my
        end if
    getmouse mx, my, sr,mb
    IF MB= 1 then LINE(mx,my)-(omx,omy),4
   
   ' Entscheidungs Trigger
   if point (cmx,cmy+1)=0 then
       bewegung = "unten"
   else
       if point (cmx+1,cmy)=0 then
           bewegung = "rechts"
   else
       if point (cmx-1,cmy)=0 then
               bewegung = "links"
       
       else
       If point(cmx,cmy-1)=0 then
       bewegung = "oben"
           
           end if
       end if
   end if
end if

' Endscheidungen Ausführen
If Bewegung="unten" then cmy+=1
If Bewegung="oben" then cmy-=1
If Bewegung="links" then cmx-=1
If Bewegung="rechts" then cmx+=1

' Zeichnen
pset (cmx,cmy),15
locate 1,1:print cmx,cmy
sleep 10
if cmy=599 then print "LOSER":exit do
loop until inkey=chr(27)
sleep

Man muss die weisse Linie solange wie möglich auf den Bildschirm halten.
Sie bewegt sich nach nach unten.
Sobald sie unten angekommen ist, ist das Spiel verloren xD.

Und dann noch eine Modifizierte KI, die dazu in der Lage ist, die Mausspur zu verfolgen:
Code:

const w = 800
const h = 600
const colors = 8
const flag = 0
screenres w,h,colors,,flag
dim as integer mx,my,mb,sr

dim as integer omx,omy
dim as integer px,py

dim as string bewegung

Print
Print " Mauern mit mir der Maus zeichenen"
Print "weiter mit Taste, beenden mit Esc"
sleep
cls
' "Mauern" zeichnen
dim as integer scancol
cmx=w/2
cmy=0

bewegung="unten"
DO
    'Zeichen Engine
    if sr >-1 then
        omx=mx
        omy=my
        end if
    getmouse mx, my, sr,mb
    IF MB= 1 then LINE(mx,my)-(omx,omy),4
   
   ' Entscheidungs Trigger
   if point (cmx,cmy+1)=4 then
       bewegung = "unten"
   else
       if point (cmx+1,cmy)=4 then
           bewegung = "rechts"
   else
       if point (cmx-1,cmy)=4 then
               bewegung = "links"
       
       else
       If point(cmx,cmy-1)=4 then
       bewegung = "oben"
           
           end if
       end if
   end if
end if

' Endscheidungen Ausführen
If Bewegung="unten" then cmy+=1
If Bewegung="oben" then cmy-=1
If Bewegung="links" then cmx-=1
If Bewegung="rechts" then cmx+=1

' Zeichnen
pset (cmx,cmy),15
locate 1,1:print cmx,cmy
sleep 10
if cmy=599 then print "LOSER":exit do
loop until inkey=chr(27)
sleep


Was könnte man noch besser machen?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
PMedia



Anmeldungsdatum: 14.08.2006
Beiträge: 2847

BeitragVerfasst am: 22.07.2007, 12:04    Titel: Antworten mit Zitat

Nice, auch wenn diese Kollisionserkennung doch leicht fehlerhaft ist.

ach ja, und es fehlte ein
Code:
Dim as integer cmx, cmy

im code
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
AndT



Anmeldungsdatum: 02.04.2007
Beiträge: 481

BeitragVerfasst am: 22.07.2007, 12:45    Titel: Antworten mit Zitat

Naja..
Das ist indireckt ein Bug.
Wenn die roten Linien etwas dicker sind, ist auch der Bug weg zwinkern
Also eine 2 Pixel Linie anstelle einer benutzen oder?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 22.07.2007, 17:09    Titel: Antworten mit Zitat

A* bzw dijkstra sind zwar zwei tolle algorithmen, aber benötigen ne halbwegs ordentliche graphenimplementierung und ne prioritätswarteschlange, das is dann nicht unbedingt einfach zu realisieren auch wenn mans recht simpel angehen kann wenn etwas unschöner gehalten. Aber ohne vorkenntnisse ziemlich schwer umzusetzen.
_________________
"It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
AndT



Anmeldungsdatum: 02.04.2007
Beiträge: 481

BeitragVerfasst am: 22.07.2007, 17:41    Titel: Antworten mit Zitat

ich benutze einfach 8 anstelle von 4 Pixel zum Scannen und siehe da... das programm kann "denken" xD..
_________________
Bis irgendwann... grinsen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz