Archief - [ALG][AI] Top down view race game AI ?

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

joyrider

Legacy Member
Hey,

ik ben momenteel bezig met een klein top down view race spelletje te maken voor de gp2x. Nu alles loopt goed maar ik heb wat probleempjes met de AI code.

Mijn eerste idee was om een lijntje links en rechts van de wagen te trekken op -45 & + 45 graden tov de huidige hoek van het wagentje. Dan te tellen hoeveel stappen er nodig zijn om voor elk lijntje tot je aan de zijkant komt van het circuitje en te draaien in die richting waar de meeste stappen geteld zijn.
(zoals je kan zien in dit filmpje van een oude versie: http://www.youtube.com/watch?v=-CMPWrYSwPQ )

Nu dat systeempje werkte wel maar als de wagen crashte in een bocht omdat hij te snel ging kon het zijn dat hij in de verkeerde richting gaat rijden.
Een ander nadeel aan dit systeem is dat de wagen altijd in het midden van de weg zal probreren te rijden wat niet altijd goed is om scherpe bochten te nemen.

Nu een ander ideetje dat ik had was om blauwe vakjes op de weg te zetten en van -90 tot +90 graden (dus 180 graden int totaal) te kijken wat het verste blauwe vierkantje is dat hij tegenkomt (kan zien). Dan de hoek berekenen tussen de positie van de wagen en dat laatst zichtbare blauwe vierkantje en dan het wagentje te laten draaien tot wanneer hij die hoek bereikt. (zoals je kan zien in dit filmpje hier http://users.pandora.be/IMS/misc/devmovies/newcpu.swf.html )

Maar ook hier weer zit ik met hetzelfde probleem dat als het wagentje crashed hij soms in de verkeerde richting gaat.

Tevens weet ik ook niet hoe ik het wagentje kan laten vertragen en versnellen, maw dat de ai car weet dat hij moet vertragen omdat er bvb een scherpe bocht aankomt. Momenteel laat ik hem vertragen als hij op een rood vlak komt maar ik zou liever een algemene manier te weten komen zodat je die rode vlakken niet meer moet tekenen. Het enigste waar ik aandacht is een soort van brute force methode waarbij je alle mogelijkheden afgaat en dan de beste neemt waarin hij niet botst maar dit lijkt me vrij cpu intensief en misschien zelfs niet haalbaar voor de gp2x dan.

Nu ik zou graag een paar andere manieren te weten komen, misschien heeft er hier iemand een beter idee, of een ideetje om mijn huidige manier(en) te verbeteren. Ik denk dat het vanzelf moet beteren eens ik een manier weet om de snelheid van de wagen aan te passen op bepaalde stukken.

alvast bedankt.

Racemaniac

Legacy Member
zalig, ene van de gp2x scene die hier op dees forum zit ^^
'k zit nog op gp32x bij momenten, maar heb geen gp2x, 'k zit daar nog van de tidj van de gp32 ^^

heb uw post ook gezien op gp32x
ik zou eerder in de richting denken van een ideale lijn te definieren, wss gewoon punten waartussen hij moet rijden, met info in die punten ivm snelheid/stuurbeweging die nodig is.
'k denk dat er sowieso een heleboel dingen op voorhand berekend zullen moeten worden, wij zien ook aan de bocht hoe snel we daar gaan mogen gaan en zo, voor de cpu speler gaat da wss op voorhand berekend moeten worden.

Bavo aka Joske

Legacy Member
Ik heb ooit een AI geschreven voor zo een spel, dat werkte vanaf da eerste keer dat ik het testte. Geweldig gevoel. Nuja, het was wel wat amateuristisch bedacht:

Een parcours bestond uit een grid van kleine velden, waar eke veld ofwel 'baan' was, ofwel 'muur' (maar ook water, jumps etc). De muur elementen bevatten een richting, waar de autos, die bvb tot 5 velden vooruit kijken, kunnen uit afeliden welke richting ze uitmoeten. Als zo een veld in hun bereik zit (bvb op 3 velden van hun) dan draaien ze rustig de richting die het veld aangeeft, tot ze het ofwel niet meer zien, ofwel een ander zien.

De diepte van AI gaf dan aan hoe snel autos reageerden. Ideaal was dat een rdelijke afstand, niet te dicht, nie te ver. Dat werkte verbazend goed, geen enkele AI auto reed tegen muren. Het was een Applet, als ik het ooit terugvind, zal ik het eens uploaden.
De grid maakte je gewoon met een kleine editor. Erg simpel.

joyrider

Legacy Member
Racemaniac:
Hehe ja gp2x scene is tof, en binnekort de pandora :-)

Ah ja het waypoint systeem. nu ik heb da reeds geprobreerd, das feitelijk gewoon het omgekeerde van men tweede manier. (ipv dat hij het laatste vierkant neemt, neemt hij het eerste). Maar da geeft nogal raar effectjes.

Snelheid ed definieren in die vierkantjes is een optie, maar aangezien ik mensen zelf levels (/tracks) ga laten maken is dat bijna niet te doen. Ik ga namelijk alle objecten (deurtjes, jumppads, speedpads,finish, checkpoints ed) uiteindelijk in de mask laten opnemen, en als je het level laad, aan de hand van een kleur bepalen welk object het juist is en in men partsmanager steken. Nu misschien kan ik wel vierkantjes maken die de speed bepalen bvb een rood vierkantje is vertraag tot de helft van de maximum speed. Een andere rood schakering is dan weer vertraag tot een vierde van de maximum speed ed. Dat is wel haalbaar.

Misschien moet ik toch is die brute force methode uitprobreren om te zien wat dat geeft. Het zal nog wat testen worden :)

Maar dacht dat er misschien nog andere manieren waren om de richting van de wagen te bepalen buiten waypoint. Via google vond ik niet al te veel.

Bavo:
Dat lijkt me ook een vrij goed systeemke, moet ik is uitprobreren of in actie zien. Maar aangezien ik het vrij simpel wil houden voor de mensen om een nieuwe track te maken is dit misschien niet haalbaar. Ik wil ze namelijk gewoon de mask en feitelijke graphics laten tekenen, als ze zelf de richting voor ai ed moeten bepalen gaat het wat verwarrend worden voor zij die er niet zo veel vanaf weten :)

edit:
Ik heb men tweede idee wat verder uitgewerkt, ipv vierkantjes gebruik ik nu gewoon pixels en dit werkt veel beter. Tevens heb ik ook zijn "vooruitblik" gelimiteerd tot een bepaald aantal stappen. Dit lijkt vrij goed te werken. Moet juist nog een manier vinden voor het throttlen van de speed.
http://users.pandora.be/IMS/misc/devmovies/newcpu2.swf.html

blackrabbit

Legacy Member
Effe tussendoor: als je mensen hun eigen tracks gaat laten maken, kan je editor (of mapcompiler in je spel) nog steeds 'meta-info' berekenen (snelheid, max-snelheid, ..)

Racemaniac

Legacy Member
joyrider zei:
Racemaniac:
Hehe ja gp2x scene is tof, en binnekort de pandora :-)

Ah ja het waypoint systeem. nu ik heb da reeds geprobreerd, das feitelijk gewoon het omgekeerde van men tweede manier. (ipv dat hij het laatste vierkant neemt, neemt hij het eerste). Maar da geeft nogal raar effectjes.

Snelheid ed definieren in die vierkantjes is een optie, maar aangezien ik mensen zelf levels (/tracks) ga laten maken is dat bijna niet te doen. Ik ga namelijk alle objecten (deurtjes, jumppads, speedpads,finish, checkpoints ed) uiteindelijk in de mask laten opnemen, en als je het level laad, aan de hand van een kleur bepalen welk object het juist is en in men partsmanager steken. Nu misschien kan ik wel vierkantjes maken die de speed bepalen bvb een rood vierkantje is vertraag tot de helft van de maximum speed. Een andere rood schakering is dan weer vertraag tot een vierde van de maximum speed ed. Dat is wel haalbaar.

Misschien moet ik toch is die brute force methode uitprobreren om te zien wat dat geeft. Het zal nog wat testen worden :)

Maar dacht dat er misschien nog andere manieren waren om de richting van de wagen te bepalen buiten waypoint. Via google vond ik niet al te veel.

Bavo:
Dat lijkt me ook een vrij goed systeemke, moet ik is uitprobreren of in actie zien. Maar aangezien ik het vrij simpel wil houden voor de mensen om een nieuwe track te maken is dit misschien niet haalbaar. Ik wil ze namelijk gewoon de mask en feitelijke graphics laten tekenen, als ze zelf de richting voor ai ed moeten bepalen gaat het wat verwarrend worden voor zij die er niet zo veel vanaf weten :)

edit:
Ik heb men tweede idee wat verder uitgewerkt, ipv vierkantjes gebruik ik nu gewoon pixels en dit werkt veel beter. Tevens heb ik ook zijn "vooruitblik" gelimiteerd tot een bepaald aantal stappen. Dit lijkt vrij goed te werken. Moet juist nog een manier vinden voor het throttlen van de speed.
http://users.pandora.be/IMS/misc/devmovies/newcpu2.swf.html
'k vind het prachtig hoe goed het werkt, maar 'k vraag me nog steeds af of het niet beter is om bepaalde data op voorhand te proberen berekenen. zolang ge bij een ai blijft die nix vooropberekend gebruikt, gaat die ver van de ideale lijn blijven. nu ja, hangt uiteraard ook af van hoe goed ge verwacht dat mensen in uw spelleke gaan rijden, als het nvieau dat de cpu nu al haalt zo hoog is dat mensen er wss maar met véél moeite voorbij gaan geraken, dan is dit meer dan goed genoeg.
als hij echter nog sneller moet gaan rijden, zult ge toch info ivm de bochten in het track ergens moeten opslaan. wss dingen als de maximale snelheid daar, evt info ivm de optimale lijn.
menselijke rijders rijden nooit puur op wat ze zien, ze zorgen dat ze het track ,de ideale lijn, waar ze hoe snel kunnen gaan enz... kennen (ook in games ^^).
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan