Botit

Voit pyytää apua ohjelmointiongelmiin täältä.
Monsteruy

Botit

Post by Monsteruy » Thu Jun 05, 2008 7:17 pm

Miten te tekisitte botit? Olen miettinyt bottien tekoa siitä lähtien kun sain pelimoottorin muuten valmiiksi... Eli ampuvia vastustaja botteja pitäisi saada liikkumaan ympäri tilekarttaa, sillä tavalla ettei ne törmäisi koko aika tilen seiniin vaan liikkuisi siellä. Olen yrittänyt mm. arpoa Randillä lukuja jotka toimisi botin liikkeinä, mutta siitä tulee liian holtiton. Sen lisäksi niiden pitäisi itse tajuta ampua jos ne näkee vastustajan tai jos niitä ammutaa. Jonkin näköisen tekoälyn ne tarvitsevat, mutta en oikein tiedä mistä alkaa...

User avatar
nevssons
Devoted Member
Posts: 503
Joined: Sun Jan 13, 2008 6:02 pm

Re: Botit

Post by nevssons » Thu Jun 05, 2008 7:32 pm

Monsteruy wrote:Miten te tekisitte botit? Olen miettinyt bottien tekoa siitä lähtien kun sain pelimoottorin muuten valmiiksi... Eli ampuvia vastustaja botteja pitäisi saada liikkumaan ympäri tilekarttaa, sillä tavalla ettei ne törmäisi koko aika tilen seiniin vaan liikkuisi siellä. Olen yrittänyt mm. arpoa Randillä lukuja jotka toimisi botin liikkeinä, mutta siitä tulee liian holtiton. Sen lisäksi niiden pitäisi itse tajuta ampua jos ne näkee vastustajan tai jos niitä ammutaa. Jonkin näköisen tekoälyn ne tarvitsevat, mutta en oikein tiedä mistä alkaa...
Ne kävelee tiettyyn suuntaan jos tietyn matkan päässä on seinä vaihdetaan suuntaa. objectin poiminta on hödyllinen "näköä" tehtäessä
Koodarina kohtalainen, henkilönä vittumainen
Image

User avatar
Eräs cb koodaaja
Active Member
Posts: 126
Joined: Wed Aug 29, 2007 3:55 pm

Re: Botit

Post by Eräs cb koodaaja » Thu Jun 05, 2008 7:54 pm

Liikkumiseen voi hyödyntää myös tilekarttojen datoja. Eli kun botin kohdalla on jokin datanumero, se käännetään johonkin asentoon. Tämä vaatii kyllä sen, että reitit ollaan jo valmiiksi määritetty tilekarttaan.
Tiimit ja tuotokset:
RE:Ydintuho
Drahtlose:Infernalisch, Pienet pelit

Monsteruy

Re: Botit

Post by Monsteruy » Thu Jun 05, 2008 8:15 pm

No olisiko kellään jotain yksikertaista tai ei niin yksin kertaista koodi esimerkkiä botista? Ja miten tuota data -kerrosta käytetään? Mä käytän TileGeniä...

User avatar
Eräs cb koodaaja
Active Member
Posts: 126
Joined: Wed Aug 29, 2007 3:55 pm

Re: Botit

Post by Eräs cb koodaaja » Fri Jun 06, 2008 12:49 pm

No koodi voi olla vaikka tällainen(ei toimi suoraan, mutta antaa esimerkkiä ;) ):

Code: Select all

Repeat
    datanumero = Getmap(3,ObjectX(Botti),ObjectY(Botti))
    If datanumero = 1 Then Rotateobject Botti,0
    If datanumero = 2 Then Rotateobject Botti,90
    If datanumero = 3 Then Rotateobject Botti,180
    If datanumero = 4 Then Rotateobject Botti,270
    Drawscreen
Forever 
Tilegenistä en osaa neuvoa.
Tiimit ja tuotokset:
RE:Ydintuho
Drahtlose:Infernalisch, Pienet pelit

User avatar
Nemesis
Member
Posts: 51
Joined: Sat May 17, 2008 1:54 pm

Re: Botit

Post by Nemesis » Fri Jun 06, 2008 1:53 pm

Tässä pieni esimerkki botista, joka kääntyy aina randomilla törmätessään johonkin. Tähän vielä ObjectPickillä joku tarkistus, onko pelaajia edessä ja jos on, ammutaan. Tuossa kääntymisessä on myös kehitettävää.

Code: Select all

FrameLimit 40 

kartta = LoadMap("Media\cdm2.til","Media\tileset.bmp")
botti = LoadObject ("Media\guy.bmp",72)

nopeus = 2	'Botin nopeus

SetupCollision botti, kartta, 1, 4, 2
Repeat
	MoveObject botti, nopeus
	
	'Tarkistetaan, onko törmätty
	If CountCollisions(botti) Then
		TurnObject botti, Rand(360)	'Käännetään bottia random-suuntaan. 
		UpdateGame
	EndIf
	
	CloneCameraPosition botti
	DrawScreen
Forever
Asian tuntian oikein kirjoitus ohjeet:
-Älä tee yhdys sana virheitä.
-Vältä lyhenteitä mahd. muk.
-Yksi sanaiset lauseet? Unohda.

Nomic
Newcomer
Posts: 1
Joined: Sat Jun 07, 2008 12:58 pm

Re: Botit

Post by Nomic » Sat Jun 07, 2008 1:10 pm

Suosittelen tutkimaan tätä algoritmia: http://fi.wikipedia.org/wiki/Bresenhamin_algoritmi

Eli käyttö:
1. luo satunnaisesti botille tulevat koordinaatit.
2. tarkista onko reitin varrella esteitä
2a. jos on, valitse toinen reitti
2b. jos ei ole, kulje reitti

Liikkumisen voi toteuttaa tehden reitistä yksiuloitteisen listan. Jokaiseen alkioon tallennetaan tulevat koordinaatit x- ja y-koordinaatit erottaen pisteellä.
Tehdään looppi, jonka sisällä botti liikkuu. Listaa pienennetään aina kun botti on samassa kohtaa listan viimeisimmän alkion kanssa.
Listaa pienennetään, jotta voidaan ottaa aina viimeinen alkio, kun olemme samassa kohtaa, kuin mihin meidät on määrätty. Esimerkiksi:
hahmon koordinaatit on 3.14, listan viimeisen alkion sisällä on tietona '3.14', jotenka samassa ollaan: poistetaan/tyhjennetään alkio ja tarkastetaan seuraavaa koordinaattia ja liikutaan sen suuntaan.

Mitä tulee hahmon näkemiseen ja tätä kohti ampumiseen: samalla algoritmilla voidaan toteuttaa tämä: Aina kun hahmo liikkuu (tai tehdään tarkistus vaikkapa sekunnin välein), botit käyttävät tuota viiva-algoritmia jonka kohde on pelaajan koordinaatit. Jos edessä on seinä, hylätään lasku, koska botti ei 'näe.' Mutta jos edessä ei ole esteitä, voi botti ampua, tehdä hälytyksen, juosta kohti tai tehdä mitä ikinä tahtoo.

Suosittelen myös tutustumaan A*-algoritmiin. Sen avulla itse olen tehnyt esteiden kiertämiset, monipuolisemmat bottien liikkumiset ja ties mitä.

En laita valmista koodia, koska siitä oppii minusta huonommin kuin potkimalla tiettyyn suuntaan. Toivottavasti tämä valaisi hieman mahdollisuuksia. :)

User avatar
MikkoK
Devoted Member
Posts: 813
Joined: Thu Jun 05, 2008 2:13 pm
Location: City 17

Re: Botit

Post by MikkoK » Sat Jun 07, 2008 1:28 pm

Ite tarvisin jonku botin joka liikkuu esim pientä neliötä. Esim:Koira tai lehmä tai joku elukka joka laiduntaa siis ei koirat laidunna.

Code: Select all

#aha. @ IRCNet
<Grandi> Voit laittaa jo valmiiks hailaittiin "Amis-Mikko", koska alan kutsua sua sillä nimellä.

User avatar
Nemesis
Member
Posts: 51
Joined: Sat May 17, 2008 1:54 pm

Re: Botit

Post by Nemesis » Sat Jun 07, 2008 1:54 pm

MikkoK141 wrote:Ite tarvisin jonku botin joka liikkuu esim pientä neliötä. Esim:Koira tai lehmä tai joku elukka joka laiduntaa siis ei koirat laidunna.
Voisi toteuttaa vaikkapa näin:

Loopin sisällä:
1.Kasvata muuttujaa kaanna.

2.Liikuta_lehmää.
3. Jos kaanna on 50 tai yli:
a)Käännä lehmää 90 astetta.
b)Nollaa kaanna.

Tuo kääntää lehtää joka 50:llä kierroksella 90 astetta, eli se kulkee pientä neliötä.
Last edited by Nemesis on Sat Jun 07, 2008 1:56 pm, edited 2 times in total.
Asian tuntian oikein kirjoitus ohjeet:
-Älä tee yhdys sana virheitä.
-Vältä lyhenteitä mahd. muk.
-Yksi sanaiset lauseet? Unohda.

User avatar
Nemesis
Member
Posts: 51
Joined: Sat May 17, 2008 1:54 pm

Re: Botit

Post by Nemesis » Sat Jun 07, 2008 1:55 pm

Ohhoh... anteeksi, tuli kaksi kertaa.
Asian tuntian oikein kirjoitus ohjeet:
-Älä tee yhdys sana virheitä.
-Vältä lyhenteitä mahd. muk.
-Yksi sanaiset lauseet? Unohda.

User avatar
MikkoK
Devoted Member
Posts: 813
Joined: Thu Jun 05, 2008 2:13 pm
Location: City 17

Re: Botit

Post by MikkoK » Sat Jun 07, 2008 2:09 pm

Nemesis wrote:
MikkoK141 wrote:Ite tarvisin jonku botin joka liikkuu esim pientä neliötä. Esim:Koira tai lehmä tai joku elukka joka laiduntaa siis ei koirat laidunna.
Voisi toteuttaa vaikkapa näin:

Loopin sisällä:
1.Kasvata muuttujaa kaanna.

2.Liikuta_lehmää.
3. Jos kaanna on 50 tai yli:
a)Käännä lehmää 90 astetta.
b)Nollaa kaanna.

Tuo kääntää lehtää joka 50:llä kierroksella 90 astetta, eli se kulkee pientä neliötä.
Ööh. Tuota muuttujaa en osaa tehä mut muute menis vissii näin:

Code: Select all

If kaanna=50 then turnobject lehmä 90
and kaanna=0

Code: Select all

#aha. @ IRCNet
<Grandi> Voit laittaa jo valmiiks hailaittiin "Amis-Mikko", koska alan kutsua sua sillä nimellä.

User avatar
Koodiapina
Forum Veteran
Posts: 2396
Joined: Tue Aug 28, 2007 4:20 pm
Contact:

Re: Botit

Post by Koodiapina » Sat Jun 07, 2008 2:17 pm

MikkoK141 wrote:Ööh. Tuota muuttujaa en osaa tehä mut muute menis vissii näin:

Code: Select all

If kaanna=50 then turnobject lehmä 90
and kaanna=0
Koodisi menisi kääntäjästä läpi tässä muodossa:

Code: Select all

if kaanna=50 then
     turnobject lehmä,90
     kaanna=0
endif
Andia käytetään siis ehdoissa. Esimerkiksi:

Code: Select all

If jotain = 3 and muuta then
     ' tee jotain
endif
Olen liian älykäs ollakseni väärässä. Jos olet kanssani eri mieltä, suosittelen sinua pohtimaan omaa elämänkatsomustasi ja sen perusteita.

User avatar
MikkoK
Devoted Member
Posts: 813
Joined: Thu Jun 05, 2008 2:13 pm
Location: City 17

Re: Botit

Post by MikkoK » Sat Jun 07, 2008 2:35 pm

Ookkei eli suurinpiirtein osaan koodata oikein. :D Mutta tuo muuttuja:

Code: Select all

If kaanna>0 then
moveobject lehmä 1 
kaanna+1
oisko se näin?

Code: Select all

#aha. @ IRCNet
<Grandi> Voit laittaa jo valmiiks hailaittiin "Amis-Mikko", koska alan kutsua sua sillä nimellä.

User avatar
Harakka
Advanced Member
Posts: 430
Joined: Mon Aug 27, 2007 9:08 pm
Location: Salo
Contact:

Re: Botit

Post by Harakka » Sat Jun 07, 2008 2:42 pm

Koodistasi puuttuu EndIf ja se toimisi vähän eri tavalla: jos muuttuja kaanna olisi yli nolla, lehmä liikkuisi eteenpäin (ja muuttuja kasvaisi). Siitä puuttuu kokonaan kääntyminen. Sen saisi tehtyä vaikka näin:

Code: Select all

MoveObject lehmä, 1 'lehmä liikkuu aina (huomaa pilkku)
kaanna = kaanna + 1 'muuttujan arvo kasvaa aina
If kaanna = 50 Then 'jos on kääntymisen aika
    TurnObject lehma, 90 'käännetään lehmää 90 astetta
    kaanna = 0 'palautetaan muuttuja nollaan, josta se jatkaa kasvamista
EndIf 'lopetetaan ehtolauseke (muista tämä)
Nuo siis repeat-loopin sisään. Toivottavasti kommenteista on apua ja tajuat idean.

EDIT: Täältä löytyy aikaisempi esimerkkikoodini täsmälleen samasta aiheesta. Siinä on pehmeä kääntyminen, mutta suosittelen aloittamaan simppelimmästä.
Peli piirtokomennoilla - voittaja, Virtuaalilemmikkipeli - voittaja,
Sukellusvenepeli - voittaja, Paras tileset - voittaja
Vaihtuva päähenkilö - voittaja, Autopeli - voittaja sekä
Hiirellä ohjattava peli - voittaja B)

Jormalaz
Member
Posts: 77
Joined: Sun Jun 15, 2008 9:22 pm

Re: Botit

Post by Jormalaz » Fri Jun 20, 2008 1:21 am

Miten saisi botin tulemaan pelaajaan päin ja ampumaan?

User avatar
Eräs cb koodaaja
Active Member
Posts: 126
Joined: Wed Aug 29, 2007 3:55 pm

Re: Botit

Post by Eräs cb koodaaja » Fri Jun 20, 2008 11:50 am

Pointobjectilla käännät botin, liikutat sitä ja koodaat sen ampumaan. Jos taas esimerkkiä tarviit niin kato oppitunneista ammukset2.
Tiimit ja tuotokset:
RE:Ydintuho
Drahtlose:Infernalisch, Pienet pelit

User avatar
Ilkka
Active Member
Posts: 201
Joined: Mon Oct 08, 2007 8:01 am

Re: Botit

Post by Ilkka » Mon Jun 23, 2008 10:10 am

Eräs cb koodaaja wrote:Liikkumiseen voi hyödyntää myös tilekarttojen datoja. Eli kun botin kohdalla on jokin datanumero, se käännetään johonkin asentoon. Tämä vaatii kyllä sen, että reitit ollaan jo valmiiksi määritetty tilekarttaan.
itse käytän tätä Data-juttua. Ja saman asian ajaa ku tekee paintil tai jollain muulla objectin ja ku koskee objectiin ni
botti kääntyy.
Image

Jormalaz
Member
Posts: 77
Joined: Sun Jun 15, 2008 9:22 pm

Re: Botit

Post by Jormalaz » Mon Jun 23, 2008 4:27 pm

Seuraava projektini on kohta valmis, mutta olen jäänyt jumiin... Eli siis haluaisin, että jos luoti koskettaa jotain objektia, niin se poistuu deleteobjectilla, mutta minulla on 2 ongelmaa.

1. Tulee MAV, jos laitan deleteobject, esim bottiin.
2. luotia ei enään pysty käyttämään muissa funktioissa, kun CB valittaa, että se on jo käytetty siinä ammus funktiossa.

Todella sekavaa, mutta toivottavasti tajuatte.

Seuraavan pelini nimi on Zombie Attack.

User avatar
Sami The Great
Advanced Member
Posts: 485
Joined: Tue Aug 28, 2007 4:15 pm
Contact:

Re: Botit

Post by Sami The Great » Mon Jun 23, 2008 7:03 pm

Jormalaz wrote:Seuraava projektini on kohta valmis, mutta olen jäänyt jumiin... Eli siis haluaisin, että jos luoti koskettaa jotain objektia, niin se poistuu deleteobjectilla, mutta minulla on 2 ongelmaa.

1. Tulee MAV, jos laitan deleteobject, esim bottiin.
2. luotia ei enään pysty käyttämään muissa funktioissa, kun CB valittaa, että se on jo käytetty siinä ammus funktiossa.

Todella sekavaa, mutta toivottavasti tajuatte.

Seuraavan pelini nimi on Zombie Attack.
1. MAV tulee kun yrität käsitellä jo tuhottua objectia myöhemmin.
2. Mitä tarkkaanottaen tarkoitat?
http://www.rockodilegames.com
CoolBasickin käyttäjä vuodesta 2004.

Jormalaz
Member
Posts: 77
Joined: Sun Jun 15, 2008 9:22 pm

Re: Botit

Post by Jormalaz » Mon Jun 23, 2008 7:13 pm

Sami The Great wrote:
Jormalaz wrote:Seuraava projektini on kohta valmis, mutta olen jäänyt jumiin... Eli siis haluaisin, että jos luoti koskettaa jotain objektia, niin se poistuu deleteobjectilla, mutta minulla on 2 ongelmaa.

1. Tulee MAV, jos laitan deleteobject, esim bottiin.
2. luotia ei enään pysty käyttämään muissa funktioissa, kun CB valittaa, että se on jo käytetty siinä ammus funktiossa.

Todella sekavaa, mutta toivottavasti tajuatte.

Seuraavan pelini nimi on Zombie Attack.
1. MAV tulee kun yrität käsitellä jo tuhottua objectia myöhemmin.
2. Mitä tarkkaanottaen tarkoitat?
1.Kerroppa miten tuon MAV:in saisi vittuun ja botin tuhoutumaan? MAV tulee ilmeisesti, kun käytän CountCollisionia. Onko mahdollista mitenkään lopettaa kaikki bottia käskevät funktiot?

2. Tätä: http://www.aijaa.com/v.php?i=2269174.png Ja tuossa 195 linen kohdalla on koodi: luoti.AMMUS = New(AMMUS)

Post Reply