Ich hab so ein Gefühl, dass man eine KI, also künstliche Intelligenz,
auch erschaffen kann indem man einer (nicht vom User gesteuerten)
Spielfigur einfach nen Haufen Parameter gibt.
Eine KI, wenn auch nur eine ganz dumme, wäre
ja schon, wenn ein Monster immer umkehrt sobald
es vor ne Mauer läuft...
So in dem Prinzip, aber auch dass die Spielfiguren auch
gewisse einprogrammierte Tatigkeiten ausführen können,
über deren tatsächliche Ausführung dann Schwellenwerte
Entscheiden. In der Gehirnchemie ist es ähnlich, wir haben
allerlei Ideen im Kopf, und je mehr Dopamin im Hirn rumzirkuliert
desto eher schreiten wir zur Tat und führen diese Ideen aus.
Das wäre mal eine andere vielleicht auch sinnvolle herangehensweise
an diese Sache, eben mal nicht über neuronale Netze.
Lernfähig müssen die Viecher nicht sein, das sind viele
Menschen auch nicht Einfach nur: reagieren, und
eigene Interessen durchziehen, entsprechend der
Schwellenmechanik.
Schön wäre das auch wenn man das mit Sprache verbinden kann.
mittelkomplexe KI
mittelkomplexe KI
mov ax, 13h
int 10h
while vorne_frei do vor;
int 10h
while vorne_frei do vor;
Re: mittelkomplexe KI
Statt einer KI bietet sich auch eine Art von "Script-Engine" aus. So funktioniert das auch bei vielen moderen Games (meistens natürlich noch zusammen mit einer Basis-KI). Da wird zum Beispiel ein Rechteck gezogen auf der Map - betritt der Spieler das erste mal diesen Bereich, dann setzt das Script z. B. bestimmte Flags, die dann wiederum bestimmte Blöcke auslösen.
Ich weiss nicht mehr wie das Spiel hieß, bei dem ich das mal ein wenig probiert habe (C&C Generals?) - ich weiss nur noch, dass ich als "Timer" ein Auto verwendet habe, das ausserhalb der sichtbaren Karte um selbige herumfährt (im langsamen Tempo) und dabei bestimmte "Trigger-Bereiche" auslöst. Das war spannend - hat aber auch funktioniert
So ähnlich reagiert dann der Computer auf bestimmte Einheiten die gebaut werden, oder aber er bescheisst - wie z. B. bei CIV 2. Da habe ich mal eine (flache) Welt (große Karte) gemalt, um meine Vorahnung, dass der Computer bescheisst, zu bestätigen. Links befand sich eine kleine Insel und rechts - auf der linken ich, auf der rechten der Computer - dazwischen nichts als Wasser - und plötzlich kommt der Rechner mit einer Trireme von rechts (CIV-Kenner wissen, dass ohne Leuchtturm die Dinger nach 2 Runden absaufen, wenn sie sich vom Ufer entfernen)...
Ich weiss nicht mehr wie das Spiel hieß, bei dem ich das mal ein wenig probiert habe (C&C Generals?) - ich weiss nur noch, dass ich als "Timer" ein Auto verwendet habe, das ausserhalb der sichtbaren Karte um selbige herumfährt (im langsamen Tempo) und dabei bestimmte "Trigger-Bereiche" auslöst. Das war spannend - hat aber auch funktioniert
So ähnlich reagiert dann der Computer auf bestimmte Einheiten die gebaut werden, oder aber er bescheisst - wie z. B. bei CIV 2. Da habe ich mal eine (flache) Welt (große Karte) gemalt, um meine Vorahnung, dass der Computer bescheisst, zu bestätigen. Links befand sich eine kleine Insel und rechts - auf der linken ich, auf der rechten der Computer - dazwischen nichts als Wasser - und plötzlich kommt der Rechner mit einer Trireme von rechts (CIV-Kenner wissen, dass ohne Leuchtturm die Dinger nach 2 Runden absaufen, wenn sie sich vom Ufer entfernen)...
Re: mittelkomplexe KI
So kenne ich es auch, mit einem Script kann man auf Objekte und auch auf die KI zugreifen. Jedes Object, die KI und auch alle Mitspieler haben/bekommen eine Nummer. Mit bestimmten Abfragebefehlen kann überprüft werden ob die KI sich im Radius von einem anderen Objekt, oder KI, oder Mitspieler befindet, oder ob ein Objekt benutzt, oder betreten wurde. Es können Variable verwendet werden.Brueggi hat geschrieben:Statt einer KI bietet sich auch eine Art von "Script-Engine" aus. So funktioniert das auch bei vielen moderen Games (meistens natürlich noch zusammen mit einer Basis-KI). Da wird zum Beispiel ein Rechteck gezogen auf der Map - betritt der Spieler das erste mal diesen Bereich, dann setzt das Script z. B. bestimmte Flags, die dann wiederum bestimmte Blöcke auslösen.
Hier ist so eine Script welches ich für eine Coop-Map für den Egoshooter Joint Operrations, bzw. für den AW-Mod den es dafür gibt, geschrieben habe:
Code: Alles auswählen
if elapse(15) then
if ssnnearssn(67312,199282,60) then // Train1
ssnhp(67312,32000)
endif
if ssnnearssn(67720,199281,60) then // Train1a
ssnhp(67720,32000)
endif
if ssnnearssn(67313,199283,60) then // Train2
ssnhp(67313,32000)
endif
if ssnnearssn(67724,199284,60) then // Train2a
ssnhp(67724,32000)
endif
endif
if elapse(9) then
ssnwave(133097,"Station.wav",200)
endif
if ssnnearssn(67720,198793,10) then // Train1 go
ssntowp(67312,1)
ssnwave(67720,"Lok.wav",300)
endif
if ssnnearssn(67312,198793,10) then // Train1a go
ssntowp(67720,1)
ssnwave(67312,"Lok.wav",300)
endif
if ssnnearssn(67724,198794,10) then // Train2 go
ssntowp(67313,2)
ssnwave(67724,"Lok.wav",300)
endif
if ssnnearssn(67313,198794,10) then // Train2a go
ssntowp(67724,2)
ssnwave(67313,"Lok.wav",300)
endif
if ssnnearssn(67312,198730,50) then // Kill Train1
ssntowp(67312,0)
killssn(1978)
killssn(67312)
endif
if ssnnearssn(67720,198730,50) then // Kill Train1a
ssntowp(67720,0)
killssn(2183)
killssn(67720)
endif
if ssnnearssn(67313,198731,50) then // Kill Train2
ssntowp(67313,0)
killssn(1979)
killssn(67313)
endif
if ssnnearssn(67724,198731,50) then // Kill Train2a
ssntowp(67724,0)
killssn(2187)
killssn(67724)
endif
if ssnnearssn(67312,199282,60) and ssnnearssn(67720,199281,60) then // Train1 go (first match)
ssntowp(67312,1)
endif
if ssnnearssn(67313,199283,60) and ssnnearssn(67724,199284,60) then // Train2 go (first match)
ssntowp(67313,2)
endif
if ssnride(132874) or ssnride(132876) or ssnride(133015) or ssnride(133017) then // Bot fall down on railroad track
GLOOP Civilian
if ssnonssn(item,132874) or ssnonssn(item,132876) or ssnonssn(item,133015) or ssnonssn(item,133017) then
killssn(item)
endif
END
endif
if ontick(5) then
ssn2ssn(1978,67312) // Train1
ssn2ssn(1979,67313) // Train2
ssn2ssn(2183,67720) // Train1a
ssn2ssn(2187,67724) // Train2a
ssn2ssn(2750,68257) // Stryker1
ssntowp(2750,124)
ssn2ssn(2751,68256) // Tank1
ssntowp(2751,124)
ssn2ssn(2761,68256)
ssntowp(2761,124)
ssn2ssn(2752,68261) // 30cal1
ssn2ssn(2753,68262) // 30cal2
ssn2ssn(2855,68427) // 50cal1
ssn2ssn(2923,68458) // 50cal2
ssn2ssn(3006,68541) // 50cal3
ssn2ssn(3008,68543) // 50cal4
ssn2ssn(3010,68545) // 50cal5
ssn2ssn(3017,68552) // 50cal6
ssn2ssn(3019,68554) // 50cal7
ssn2ssn(2928,68462) // Flak1
ssn2ssn(2929,68463) // Flak2
GLOOP Hide
hidessn(item)
END
GLOOP WalkA
ssntowp(item,3)
END
GLOOP WalkB
ssntowp(item,4)
END
GLOOP WalkC
ssntowp(item,5)
END
GLOOP WalkD
ssntowp(item,6)
END
GLOOP WalkE
ssntowp(item,7)
END
GLOOP WalkF
ssntowp(item,8)
END
endif
if never and ssndead(68295) then // Crate1
removessn(133949) // Fence Gate1
endif
if never and ssndead(68296) then // Crate2
removessn(133952) // Fence Gate2
endif
if never and (ssndead(133543) or ssndead(133544) or ssndead(133545) or ssndead(133546)) then // Garage Doos
GLOOP WalkC
ssntowp(item,9)
END
GLOOP WalkD
ssntowp(item,10)
END
endif
if never and (ssndead(2928) or ssndead(2929)) then // Flak Soldier
GLOOP WalkC
ssntowp(item,11)
END
GLOOP WalkD
ssntowp(item,12)
END
endif
if never and ssndead(2855) then // 50cal1 Soldier
GLOOP WalkG
unhidessn(item)
ssntowp(item,13)
END
unhidessn(68631) // Jet1
v99 = 1
endif
if v99 == 1 and ssnnearssn(2855,68427,3) then // 50cal1 Soldier
if !ssndead(2855) and !ssndead(68631) then
ssnrelease(2855)
ssn2ssn(2855,68631)
ssnuse(2855)
ssntowp(68631,15)
endif
endif
if never and ssndead(68256) then // Tank1
GLOOP WalkH
unhidessn(item)
ssntowp(item,14)
END
endif
if never and ssndead(68298) and ssndead(68299) then // Crate3 + Crate4
removessn(134128) // Fence Gate
removessn(134129) // Fence Gate
removessn(133161) // Rebel Base Flag
endif
if never and ssndead(68295) and ssndead(68296) and ssndead(68298) and ssndead(68299) and ssndead(68300) and ssndead(68301) and ssndead(68302) and ssndead(68303) and ssndead(68304) and ssndead(68405) and ssndead(68406) and ssndead(68407) and ssndead(68408) and ssndead(68409) then
win(1)
endif
if (V78 != humans) then
if (humans < 3) then
if (V78 > 1) then
if (humans < V78) then
consol("accuracy down")
else
consol("accuracy up")
endif
endif
V78 = (humans * 2)
accuracyspread = 32 - V78
else
accuracyspread = 1
consol("accuracy up")
endif
V78 = humans
endif
Andere Gruppen von KI sollen vordefinierte Wege mit festen Wegpunkten zu Fuss ablaufen, oder stationäre Waffen benutzen. Wenn eine bestimmte Ki an an einer solchen stationären Waffe von uns erschossen wird und dann ein zweites Mal spawnen darf, dann wird diese KI zu einen Flugzeug teleportiert und fliegt dann eine bestimmte Flugroute. Von uns gesetzte Wegpunkte werden zu durchnummerierten Wegpunktlisten zusammengefasst in der Map gespeichert.
Zur Basis-KI:
Wenn ein Mitspieler sich in einer festgelgten Entfernung zu der KI befindet und die KI sieht den Spieler, dann bleibt die KI stehen und die KI fängt an den Spieler zu bechiessen. Dabei kann die KI auch selbständig in Deckung gehen und die ursprünglichen Weg verlassen. Wenn der Spieler nicht mehr da ist, dann versucht die KI wieder ihren Weg zu folgen. Manchmal klapt das nicht so ganz, wenn die KI festhängt und nicht wirklich den Weg zurück zur alten Route findet. Dann versucht die Ki immer den naheliegensten Wegpunkt zu erreichen und dann die Liste der Wegpunkte abzulaufen.
Das Bild zu der Map mit den Namen "Town AW2":
Dirk