Botti typellä
Botti typellä
Okei, olen tonkinut tätä täältä ja vanhalta foorumilta mutta mitään sopivaa ei ole löytynyt...
Tarvitsisin siis koodin, jolla saa lauman typebotteja liikkumaan itsenäisesti ympäri karttaa. Pelaajia on kaksi. Jos joku boteista näkee jomman kumman pelaajista, se lähtee tulemaan päin. Jos se näkee molemmat pelaajat, se lähtee lähempänä olevaa kohti. Kun botti saa pelaajan kiinni, sen pitäisi jäädä möllöttämään paikalleen pariksi sekunniksi (pakoaika uko(i)lle) ja lähtee taas saalistamaan.
Kiitos jo etukäteen.
Toivottavasti joku jaksaa väkertää sellaisen...
Tarvitsisin siis koodin, jolla saa lauman typebotteja liikkumaan itsenäisesti ympäri karttaa. Pelaajia on kaksi. Jos joku boteista näkee jomman kumman pelaajista, se lähtee tulemaan päin. Jos se näkee molemmat pelaajat, se lähtee lähempänä olevaa kohti. Kun botti saa pelaajan kiinni, sen pitäisi jäädä möllöttämään paikalleen pariksi sekunniksi (pakoaika uko(i)lle) ja lähtee taas saalistamaan.
Kiitos jo etukäteen.
Toivottavasti joku jaksaa väkertää sellaisen...
Re: Botti typellä
Tässähän sinä suorastaan pyydät jotakuta muuta tekemään itsellesi valmista peliä.
Ja ehei, en ole koodannut sinulle riviäkään, mutta onneksi Marcoder on.
Kyseessähän on siis hyvin toimiva, sekä helppokäyttöinen zombi tekoäly.
Kaikkea mitä sinä haluat se ei vielä tee, mutta täytyyhän sinunkin jotain koodailla
http://www.coolbasic.com/oldforums/inde ... topic=5151
Ja ehei, en ole koodannut sinulle riviäkään, mutta onneksi Marcoder on.
Kyseessähän on siis hyvin toimiva, sekä helppokäyttöinen zombi tekoäly.
Kaikkea mitä sinä haluat se ei vielä tee, mutta täytyyhän sinunkin jotain koodailla
http://www.coolbasic.com/oldforums/inde ... topic=5151
Re: Botti typellä
Juu, sain tuon toimimaan. Mutta millä nimellä zombia pitää kutsua, kun luoti osuu siihen?
...Or ObjectsOverlap(luoti\obj, ?zombinnimi?,3 Then...
...Or ObjectsOverlap(luoti\obj, ?zombinnimi?,3 Then...
Re: Botti typellä
Jos zombi on luotu typeillä niin esimerkiksi näin:Alienvalloittaja wrote:Juu, sain tuon toimimaan. Mutta millä nimellä zombia pitää kutsua, kun luoti osuu siihen?
...Or ObjectsOverlap(luoti\obj, ?zombinnimi?,3 Then...
Code: Select all
if objectsoverlap(luoti\obj,zombi\obj,2) then...
Re: Botti typellä
eipä toimi tässä koodissa. jos tähän koodiin lisäsi sen luoti jutun niin se kannattaisi tehdä mielummin objectsoverlapin sijasta countcollisionilla. lue siitä lisää manuaalista.FuJi wrote:Jos zombi on luotu typeillä niin esimerkiksi näin:Alienvalloittaja wrote:Juu, sain tuon toimimaan. Mutta millä nimellä zombia pitää kutsua, kun luoti osuu siihen?
...Or ObjectsOverlap(luoti\obj, ?zombinnimi?,3 Then...Code: Select all
if objectsoverlap(luoti\obj,zombi\obj,2) then...
Edit: oho anteeksi typeryyteni, totta kai voi.
zombie\bodyobj:llä kutsutaan, mutta pitää repeat looppiin tehdä for...each rakenne eli:
Code: Select all
For it.ZOMBIES = Each ZOMBIES
if ObjectsOverlap(pati\obj, it\bodyobj) Then health-1
Next it
Re: Botti typellä
Tein noin, mutta se sanoo että luoti\objia ei ole olemassa vaikka on.
Ja miten saadaan tässä koodissa vihu tulemaan päin jos ObjectSight on tosi? Se ei vaikuta mitenkään. Veikkaan syyksi jalkojen liikkumista, mutta miten se tehdään?
Ja miten saadaan tässä koodissa vihu tulemaan päin jos ObjectSight on tosi? Se ei vaikuta mitenkään. Veikkaan syyksi jalkojen liikkumista, mutta miten se tehdään?
Re: Botti typellä
Sinun täytyy zombeja päivitettäessä katsoa läpi jokainen pati tai pateja katsottaessa toisinpäin.
ja toinen ongelmasi:
tuollasta...
offtopic:
taiat olla alotteleva koodari?
ja toinen ongelmasi:
Code: Select all
For...Each...
If ObjectSIght(pelaaja1) Then PointObject zombie\obj,pelaaja1:MoveObject zombie\obj,3
Next...
offtopic:
taiat olla alotteleva koodari?
Kiinnostuin pelien tekemisestä ennen 1. luokkaa.
Sitten 3. luokalla tuli CB. Ja siitä se alkoi.
Blender! TF2! CB! Game Maker! Nokia-mollaus! Kitaransoitto! Breakdance! MadTracker! Minecraft!
Sitten 3. luokalla tuli CB. Ja siitä se alkoi.
Blender! TF2! CB! Game Maker! Nokia-mollaus! Kitaransoitto! Breakdance! MadTracker! Minecraft!
Re: Botti typellä
Ei toimi. Zombit eivät edelleenkään reagoi mitenkään kumpaankaan asiaan, seuraamiseen tai luodin osumiseen.
offtopic: Kyllähän minä olen tällä kaikenlaista väkerrellyt mutta tekoälyistä ei ole vielä paljoa kokemusta.
offtopic: Kyllähän minä olen tällä kaikenlaista väkerrellyt mutta tekoälyistä ei ole vielä paljoa kokemusta.
Re: Botti typellä
Voisitko koittaa pistää vähän sitä omaa koodiasi, niin olisi vähän helpompi auttaa. Itselläni on aika paljonkin kokemusta typeistä,luedeista ja tekoälystä.
CoolBasic henkilökuntaa
Graafikko
Graafikko
Re: Botti typellä
Tätä pidin viimeisenä vaihtoehtona....
En saa luodin osumista vihuun ja vihu-seuraa-pelaajaa -juttua toimimaan. Jos zombi näkee molemmat pelaajat sen pitäisi lähteä ensin näkemänsä perään.
Tähän koodiin olen poimiskellut kaikenlaista mitä olen foorumeilta löytynyt.
Niin, ja tässä on aseen ylikuumenemistoimintO!
En saa luodin osumista vihuun ja vihu-seuraa-pelaajaa -juttua toimimaan. Jos zombi näkee molemmat pelaajat sen pitäisi lähteä ensin näkemänsä perään.
Code: Select all
'JACK AND JOHN 2
SCREEN 1024,768,0,0
SetWindow "Jack & John 2", 3, "Are you sure you want to quit?"
Goto Valikko
Valikko:
Goto Level1
Level1:
//--------------------------------------------------------------------------------
// Vakioita joilla voidaan säätää ukkeleiden käyttäytymistä
//--------------------------------------------------------------------------------
Const MAX_ZOMBIES = 40 // Kuinka monta zombieta kentällä kulkee
Const MIN_NEXT_ACTION = 500 // Koska aikaisintaan arvotaan zombielle uusi suunta
Const MAX_NEXT_ACTION = 1000 // Koska viimeistään arvotaan zombielle uusi suunta
Const RND_ROTATION# = 1.0 // Kun zombielle arvotaan uusi kääntyminen niin tämä on maksimi.
Const MIN_SPEED# = 2.0 // Zombien nopeus kun se on havainnut esteen
Const MAX_SPEED# = 2.5 // Zombien nopeus kun tie on vapaa
Const WAKEUP_DIST = 95 // Jos matkaa esteeseen on vähemmän kuin tämä niin aletaan etsiä uutta suuntaa
Const EXPLORE_ANGLE = 50 // Kun pitää päätellä uusi suunta niin se tehdään katselemalla
// näin monta astetta molempiin suuntiin
Const DODGE_ROTATION# = 15.0 // Kun zombie on lähellä estettä niin tällä määrätään kuinka
// jyrkällä käännöksellä yritetään väistää.
// Piemenpi arvo on jyrkempi käännös.
lavagunioverheat=LoadSound("Button 1.wav")
lavaguniääni=LoadSound("Button 2.wav")
ääniAmmu = LoadSound ("Cannon.wav")
musa = PlaySound ("SK_Battle2.mp3")
boom=LoadSound("Boom 1.wav")
moment=0
Jack_Elossa=1
John_Elossa=1
Jack_Tapot=0
John_Tapot=0
Jack_Overheat=0
Jack_Overheat_Image=LoadImage("Overheat.png")
Jack_Health_Image=LoadImage("life.png")
John_Health_Image=LoadImage("life.png")
Jack_Health=100
John_Health=100
jytym_aika=0
Kamerakohde=1
ZombieHealth=60
OverheatMittari=0
efekti=MakeImage (ScreenWidth(),ScreenHeight())
Overheataika = 100 //1000 = 1 sekunti, 2000 = 2 sekuntia, 100 = 0,1 sekuntia jne.
'---------------------------------------------------
Type AMMUS 'luo kokoelma, jonka nimi on AMMUS
Field obj
End Type
Type AMMUS2 'luo kokoelma, jonka nimi on AMMUS
Field obj2
End Type
Type ZOMBIES
Field bodyObj As Integer // Tämä on itse objekti
// Seuraavia tarvitaan liikkumisen tekoälyyn
Field nextAngle As Float // Kulma johon zombien pitäisi liikkua
Field rotation As Float // Tällä käännetään objektia (TurnObject)
Field nextAction As integer // Ajankohta jolloin zombielle arvotaan uusi suunta
Field tooClose As Byte // Zombie on liian lähellä seinää tai toista zombieta
// Seuraavia tarvitaan kävelyn animointiin
Field leftLegObj As Integer // Vasen jalka
Field rightLegObj As Integer // Oikea jalka
Field prevPosX As Float // Objektin edellinen positio
Field prevPosY As Float // Objektin edellinen positio
Field legPos As Float // "Animointiframe" eli jalkojen asettelu tämän mukaan
EndType
'--------------------------------------------------------
FrameLimit 40 'rajoita nopeutta
DrawToWorld ON 'mahdollistaa piirtämisen maailmaan
'lataa kartta
kartta = LoadMap("cdm2.til","tileset.bmp")
ObjectPickable kartta, ON 'aseta se poimittavaksi
PlayObject kartta,0,0,1 'animoi kartta
'lataa pelaaja
jack = LoadObject ("guy.bmp",72)
ObjectPickable jack, 2 'aseta se poimittavaksi
pati=LoadObject("bullet.bmp")
ShowObject pati,OFF
SpawnPoint=LoadObject("car2.bmp")
PositionObject spawnpoint,400,520
pati2=LoadObject("bigbullet.bmp")
ShowObject pati2,OFF
maali=LoadObject("Cow.bmp")
jytym=LoadObject("Car.bmp")
ShowObject jytym, OFF
PositionObject jytym, 35156,4531
zombieObject = LoadObject("soldier.bmp", 72)
ShowObject zombieObject, OFF
legObject = LoadObject("leg.bmp", 72)
ShowObject legObject, OFF
enemy2=LoadObject("soldier.bmp",72)
PositionObject enemy2, 5630,563653
ShowObject enemy2,OFF
'-----------------------
fontti=LoadFont("Impact",20,OFF,ON,OFF)
bigfontti=LoadFont("Impact",70,OFF,OFF,OFF)
SetFont fontti
'lataa kamu
john = LoadObject ("soldier.bmp",72)
ObjectPickable john, 2 'aseta se poimittavaksi
PositionObject john, 32,150 'sijoita ylemmäs
'törmäykset
SetupCollision jack, john, 2, 2, 2
SetupCollision john, jack, 2, 2, 2
'kartta-törmäykset on hyvä esitellä viimeiseksi
SetupCollision jack, kartta, 1, 4, 2
SetupCollision john, kartta, 1, 4, 2
PositionObject maali, 500,200
For t = 1 To MAX_ZOMBIES
zombie.ZOMBIES = New(ZOMBIES)
// Ensin jalat että ne jää kropan alle
zombie\leftLegObj = CloneObject(legObject)
zombie\RightLegObj = CloneObject(legObject)
zombie\bodyObj = CloneObject(zombieObject)
zombie\rotation = 0
zombie\tooClose = False
// Laitetaan kartalle satunnaiseen paikkaan ja asetetaan törmäystunnistus
SpawnObject(zombie\bodyObj)
zombie\nextAngle = ObjectAngle(zombie\bodyObj)
SetupCollision zombie\bodyObj, kartta, 2, 4, 2
// Asetetaan zombie poimittavaksi että zombiet osaavat väistellä toisiaan
ObjectPickable zombie\bodyObj, ON
// Animaation varvitsemat alustukset
zombie\prevPosX = ObjectX(zombie\bodyObj)
zombie\prevPosY = ObjectY(zombie\bodyObj)
Next t
zombinäkeejackin=ObjectSight(Zombie\Bodyobj,Jack)
zombinäkeejohnin=ObjectSight(Zombie\BodyObj,John)
Global gPicker
gPicker = MakeObject()
Repeat
'---------------------------
'Ukon ohjaus
If KeyDown(cbKeyA) Then TurnObject jack,5
If KeyDown(cbKeyD) Then TurnObject jack,-5
If KeyDown(cbKeyW) Then MoveObject jack,3
If KeyDown(cbKeyS) Then MoveObject jack,-2
If KeyDown(cbKeyQ) Then MoveObject jack,0,-2
If KeyDown(cbKeyE) Then MoveObject jack,0,2
If LeftKey() Then TurnObject john,5
If RightKey() Then TurnObject john,-5
If UpKey() Then MoveObject john,2
If DownKey() Then MoveObject john,-1.7
If KeyDown(cbKeyn) Then MoveObject john,0,-2
If KeyDown(cbKeyb) Then MoveObject john,0,2
If ObjectsOverlap(jack,maali,3) Or ObjectsOverlap (john,maali,3) Then
Goto level2
EndIf
UpdateGame
If Jack_Elossa=1 And Kamerakohde=1 Then
CloneCameraPosition jack
Else
CloneCameraPosition john
EndIf
UpdateGame
DrawGame 'tämä komennetaan ennen piirtokomentoja
DrawToWorld ON
'--------------------------
ObjectPick jack
e=PickedObject()
'jos poiminta osui omaan
If e=john And Jack_Elossa Then
Color cbGreen
Circle PickedX()-4,PickedY()+4,8,OFF
EndIf
'jos poiminta osui karttaan
If e=kartta And Jack_Elossa Then
Color cbWhite
Circle PickedX()-4,PickedY()+4,8,OFF
EndIf
'vihuun
If e=zombie\bodyobj And Jack_Elossa Then
Color cbRed
Circle PickedX()-4,PickedY()+4,8,OFF
EndIf
'------------------------
ObjectPick john
ei=PickedObject()
'jos poiminta osui omaan
If ei=jack And John_Elossa Then
Color cbGreen
Circle PickedX()-4,PickedY()+4,8,OFF
EndIf
'jos poiminta osui karttaan
If ei=kartta And John_Elossa Then
Color cbWhite
Circle PickedX()-4,PickedY()+4,8,OFF
EndIf
'vihuun
If e=zombie\bodyobj And John_Elossa Then
Color cbRed
Circle PickedX()-4,PickedY()+4,8,OFF
EndIf
'-----------------------------------
If KeyDown(cbKeyF) And reload=0 And OverHeatMittari = 0 Then
PlaySound lavaguniääni,50
luoti.AMMUS = New(AMMUS) 'luo uusi ammus
luoti\obj=CloneObject(pati) 'tee klooni
'asetetaan pati samaan paikkaan
CloneObjectPosition luoti\obj,jack
'käännetään pati samaan suuntaan
CloneObjectOrientation luoti\obj,jack
reload=0 'aseen lataus
EndIf
'päivitä aseen lataaminen
If reload>0 Then reload=reload-1
'Päivitä kaikki ammukset
For luoti.AMMUS = Each AMMUS
MoveObject luoti\obj,6
If GetMap(2, ObjectX(luoti\obj), ObjectY(luoti\obj)) <> 0 Then
DeleteObject luoti\obj
Delete luoti
ElseIf ObjectsOverlap (luoti\obj,john,3)
DeleteObject luoti\obj
Delete luoti
John_Health=John_Health-1
ElseIf Distance2(jack,luoti\obj) =200 Then
DeleteObject luoti\obj
Delete luoti
EndIf
Next luoti
If KeyDown(cbKeyF) And reload=0 Then
Jack_Overheat = Jack_Overheat + 1.3
EndIf
If Jack_Overheat > 100 Then
PlaySound lavagunioverheat
Jack_Overheat = 100
Overheatmittari = 1
EndIf
If Timer() > timeStamp + 100 Then
timeStamp = Timer()
Jack_Overheat -2
EndIf
If jack_overheat=0 Then
Overheatmittari = 0
EndIf
If jack_overheat < 0 Then
Jack_overheat = 0
EndIf
Color cbOrange
If Jack_Overheat = 100 Then
Text 10, 120, "Overheated!"
EndIf
'----------------------
If KeyDown(cbKeyM) And reload2=0 Then
PlaySound ääniAmmu,100
luoti2.AMMUS2 = New(AMMUS2) 'luo uusi ammus
luoti2\obj2=CloneObject(pati2) 'tee klooni
'asetetaan pati samaan paikkaan
CloneObjectPosition luoti2\obj2,john
'käännetään pati samaan suuntaan
CloneObjectOrientation luoti2\obj2,john
reload2=50 'lataus
EndIf
'päivitä aseen lataaminen
If reload2>0 Then reload2=reload2-1
'Päivitä kaikki ammukset
For luoti2.AMMUS2 = Each AMMUS2
MoveObject luoti2\obj2,6
If GetMap(2, ObjectX(luoti2\obj2), ObjectY(luoti2\obj2)) <> 0 Or ObjectsOverlap(luoti2\obj2,jack,3) Or ObjectsOverlap(luoti2\obj2,ZOMBIE\bodyObj,3)Then
ShowObject jytym, ON
Jytym_aika=1
moment=Timer()
CloneObjectPosition jytym, luoti2\obj2
PlaySound boom
DeleteObject luoti2\obj2
Delete luoti2
EndIf
Next luoti2
If Timer()>moment+600 And jytym_aika = 1 Then
jytym_aika=0
ShowObject jytym,OFF
PositionObject jytym,5312,5235
EndIf
'-------------------
'--------------------------------
'OMIEN VAHINGOITTUMINEN SEKÄ KUOLEMINEN JA SPAWNAUS
'Johnin pati Jackiin
If ObjectsOverlap(jytym,jack,3) Then
Jack_Health= Jack_Health -1
EndIf
'Johnin pati itseensä
If ObjectsOverlap(jytym,john,3) Then
John_Health= John_Health -1
EndIf
'Ketasu
If Jack_Health=0 Then
Jack_Elossa = 0
ShowObject Jack,OFF
PositionObject jack,5435,53151
CloneCameraPosition john
EndIf
If John_Health=0 Then
ShowObject john,OFF
PositionObject john,431513,5315
John_Elossa = 0
EndIf
'GAME OVER
If Jack_elossa=0 And John_elossa=0 Then
ShowObject jytym,OFF
ShowObject maali,OFF
ShowObject kartta,OFF
CopyBox 0,0,ScreenWidth(),ScreenHeight(),0,0,SCREEN(),Image(efekti)
teksti$="GAME OVER"
Goto loppu
EndIf
'HENKIINHERÄTTÄMINEN
If ObjectsOverlap(jack,spawnpoint,3) And john_elossa=0 Then
CloneObjectPosition john,spawnpoint
ShowObject john,ON
John_Health = 50
John_Elossa=1
EndIf
If ObjectsOverlap(john,spawnpoint,3) And jack_elossa=0 Then
CloneObjectPosition jack,spawnpoint
ShowObject jack,ON
Jack_Health = 50
Jack_Elossa=1
EndIf
'----------------------------
'JA SITTEN: VIHOLLISET!
'---------------
'MUSA
If SoundPlaying(musa)=0 Then
musa = PlaySound ("Media\SK_Battle2.mp3")
'satunnainen tapahtuma..
'tasataanko ääni oikealle vai vasemmalle
If Rand(1,2)=1 Then
SetSound musa,0,100,-100 'vasen kajari
Else
SetSound musa,0,100,100 'oikea kajari
EndIf
EndIf
'- Päivitä Zombeja
If zombinäkeejackin=0 Or zombinäkeejohnin=0 Then
UpdateAI()
UpdateAnimation()
EndIf
If KeyDown(2) Then
CloneCameraPosition jack
Kamerakohde=1
ElseIf KeyDown(3) Then
CloneCameraPosition john
Kamerakohde=2
EndIf
DrawGame
Text 600, 0, FPS()
'---------------------
'Enut yms.
DrawToWorld OFF
Color cbBlue
Box 0,0,220,120
Box 804,0,220,120
Color cbRed
Text 10,10,"Jack"
Text 10,65,"Kills:" +Jack_Tapot
Text 974,10,"John"
Text 930,65,"Kills:" +John_Tapot
Text 400,10,"FPS:" +FPS()
If john_elossa=0 Then
Color cborange
Text 814,40,"John is dead!"
EndIf
If jack_elossa=0 Then
Color cborange
Text 10,40,"Jack is dead!"
EndIf
DrawImageBox Jack_Health_Image,10,40,0,0,jack_health*2,26
DrawImageBox Jack_Overheat_Image,10,100,0,0,jack_Overheat,26
DrawImageBox John_Health_Image,814,40,0,0,john_health*2,26
'---------------------
DrawScreen 'piirrä näyttö
Forever
//================================================================================
// Päivitetään zombiet
//================================================================================
Function UpdateAI()
// Käydään kaikki läpi
For zombie.ZOMBIES = Each ZOMBIES
// Mikäli zombie ei ole liian lähellä seinää ja on aika arpoa sille uusi suunta
// niin tehdään se nyt.
If zombie\tooClose = False And zombie\nextAction < Timer() Then
// Arvotaan seuraavan käännöksen ajankohta eli koska tähän iffiin
// tullaan seuraavaksi
zombie\nextAction = Rand(MIN_NEXT_ACTION, MAX_NEXT_ACTION) + Timer()
// Arvotaan zombielle uusi kääntyminen
zombie\rotation = Rnd(-RND_ROTATION, RND_ROTATION)
EndIf
// Käännetään zombieta
TurnObject zombie\bodyObj, zombie\rotation
// Seuraavaksi alkaa varsinainen tekoäly jossa tutkitaan ympäristöä.
// Tämä tehdää kuitenkin vain mikäli zombie ei ole liian lähellä jotakin estettä.
If zombie\tooClose = False Then
// Nyt lasketaan etäisyys edessä olevaan esteeseen.
// Etäisyys lasketaan objektin keskeltä sekä reunoista eli objektin koko leveydeltä.
minDist# = 0
dist# = 0
// Ensin "silmä" keskelle objektia
CloneObjectPosition gPicker, zombie\bodyObj
CloneObjectOrientation gPicker, zombie\bodyObj
// Poimitaan lähin este
ObjectPick gPicker
minDist = Distance(ObjectX(gPicker), ObjectY(gPicker), PickedX(), PickedY())
// Siiretään "silmä" toiseen reunaan ja poimitaan lähin este
MoveObject gPicker, 0, -15
ObjectPick gPicker
minDist = Min(minDist, Distance(ObjectX(gPicker), ObjectY(gPicker), PickedX(), PickedY()))
// Ja vielä toiseen reunaan ja poimitaan lähin este
MoveObject gPicker, 0, 30
ObjectPick gPicker
minDist = Min(minDist, Distance(ObjectX(gPicker), ObjectY(gPicker), PickedX(), PickedY()))
// Jos este on niin lähellä että siihen pitää reagoida niin tutkitaan se nyt.
If minDist < WAKEUP_DIST Then
// Ensin "silmä" samaan suuntaan kuin zombie
CloneObjectOrientation gPicker, zombie\bodyObj
// Käännetään katsetta toiselle sivulle ja lasketaan etäisyys lähimpään esteeseen
TurnObject gPicker, -EXPLORE_ANGLE
ObjectPick gPicker
d1# = Distance(ObjectX(gPicker), ObjectY(gPicker), PickedX(), PickedY())
// Ja sitten vielä toiseen suuntaan.
TurnObject gPicker, EXPLORE_ANGLE * 2
ObjectPick gPicker
d2# = Distance(ObjectX(gPicker), ObjectY(gPicker), PickedX(), PickedY())
// Tutkitaan kumpaan suuntaan on pidempi matka seuraavaan esteeseen
// ja suunnataan sinne.
// Kääntymisen jyrkkyyteen vaikuttaa vielä etäisyys esteeseen eli
// mitä lähempänä ollaan niin sitä jyrkemmin käännytään
d# = 0
If d1 > d2 Then
d = -(WAKEUP_DIST - minDist)
Else
d = (WAKEUP_DIST - minDist)
EndIf
// Asetetaan kääntymisnopeus
zombie\rotation = d / DODGE_ROTATION
// Asetetaan tavoitekulma
zombie\nextAngle = WrapAngle(ObjectAngle(zombie\bodyObj) + d)
// Asetetaan vielä tooClose-muuttuja päälle eli tekoälyä ei päivitetä
// ennen kuin objekti on kääntynyt tavoitekulmaan.
// Samalla myös objektin nopeutta vähennetään.
zombie\tooClose = True
EndIf
Else
// Zombie on liian lähellä jotain estettä.
// tooClose-muuttuja nollataan vain jos tekoälyn asettama tavoitekulma on saavutettu.
If Abs(ObjectAngle(zombie\bodyObj) - zombie\nextAngle) < 3 Then
// Objektin kulma on nyt riittävän lähellä tavoitekulmaa joten
// kääntäminen voidaan lopettaa.
zombie\rotation = 0
zombie\tooClose = False
EndIf
EndIf
// Nyt siirretään objektia.
speed# = MAX_SPEED
// Jos ollaan liian lähellä jotain estettä niin pienemmällä vauhdilla
If zombie\tooClose = True Then speed = MIN_SPEED
MoveObject zombie\bodyObj, speed
Next zombie
EndFunction
//================================================================================
// Kävelyanimaatioiden päivitys
//================================================================================
Function UpdateAnimation()
For zombie.ZOMBIES = Each ZOMBIES
CloneObjectPosition zombie\leftLegObj, zombie\bodyObj
CloneObjectOrientation zombie\leftLegObj, zombie\bodyObj
CloneObjectPosition zombie\rightLegObj, zombie\bodyObj
CloneObjectOrientation zombie\rightLegObj, zombie\bodyObj
ox# = ObjectX(zombie\bodyObj)
oy# = ObjectY(zombie\bodyObj)
px# = zombie\prevPosX
py# = zombie\prevPosY
zombie\prevPosX = ox
zombie\prevPosY = oy
zombie\legPos = WrapAngle(zombie\legPos + Distance(ox, oy, px, py) * 3.0)
MoveObject zombie\leftLegObj, -Sin(zombie\legPos) * 10 - 10, -9
MoveObject zombie\rightLegObj, Sin(zombie\legPos) * 10 - 10, 9
Next zombie
EndFunction
//================================================================================
// Siirretään objekti satunnaiseen kohtaan kartalle
//================================================================================
Function SpawnObject(_obj)
While True
x = Rand(1, MapWidth())
y = Rand(1, MapHeight())
tBack = GetMap2(0, x, y)
tHit = GetMap2(2, x, y)
If tBack > 0 And tHit = 0 Then
wx = (x * 32 - 16) - ((MapWidth() * 32) / 2)
wy = ((y * 32 - 16) - ((MapHeight() * 32) / 2)) * -1
PositionObject _obj, wx, wy
RotateObject _obj, Rand(0, 360)
Exit
EndIf
Wend
EndFunction
Level2:
End
loppu:
koko=0
Repeat
DrawToImage efekti
koko+1
For i=0 To 10
For j=0 To 10
Color 0,0,0
Circle i*ScreenWidth()/10-koko/2,j*ScreenHeight()/10-koko/2,koko
Next j
Next i
DrawToScreen
DrawImage efekti, 0,0
If koko>75 Then
Color vari,vari,vari
Text ScreenWidth()/2-Len(teksti)*4,ScreenHeight()/2-6,teksti
if vari<253 Then vari+2
EndIf
If KeyDown(cbKeySpace) Then
Goto valikko
EndIf
DrawScreen
Forever
Niin, ja tässä on aseen ylikuumenemistoimintO!
Re: Botti typellä
näyttää siltä että animoit zombiet ja päivität ai:n VAIN JOS zombie näkee jomman kumman pelaajista.
-
- Newcomer
- Posts: 5
- Joined: Sat Nov 17, 2007 4:18 pm
Re: Botti typellä
Ai niin, juu. Se johtuu eräästä kokeesta jonka tein...
No laittakaa niin että ne päivittyvät vaikka eivät näkisikään ketään.
EDIT: Ai niin, ne päivittyvät silti vaikka eivät näkisikään ketään. Miksi?
No laittakaa niin että ne päivittyvät vaikka eivät näkisikään ketään.
EDIT: Ai niin, ne päivittyvät silti vaikka eivät näkisikään ketään. Miksi?
Re: Botti typellä
tuleeko siinä joku virheilmoitus vai mitä?
edit: ehkä ne näkevät pelaajan heti kun peli alkaa jolloin ne päivittyvät
edit: ehkä ne näkevät pelaajan heti kun peli alkaa jolloin ne päivittyvät
-
- Newcomer
- Posts: 5
- Joined: Sat Nov 17, 2007 4:18 pm
Re: Botti typellä
Ei siinä mitään virheilmoitusta tule...
Eiväthän ne kaikki näe pelaajaa saman tien. Vai pitääkö vain yhden nähdä?
Eiväthän ne kaikki näe pelaajaa saman tien. Vai pitääkö vain yhden nähdä?
-
- Moderator
- Posts: 1583
- Joined: Mon Aug 27, 2007 11:24 pm
- Location: Otaniemi - Mikkeli -pendelöinti
Re: Botti typellä
Kaveri tulee ainakin tuplasti nälkävuotta pidemmän, puoliksi copypastetun koodin kanssa sanomaan että "no laittakaapa tällainen ja tällainen ominaisuus, kun itse evotan niin pahasti". Aijaa. Ja sitten vielä tällainen väläytys, johon sinun pitäisi itse vastata: "vai pitääkö vain yhden nähdä?"
Sanotaanpas tähän tällainen löytämäni omituisuus koodissasi: zombinäkeejackin ja zombinäkeejohnin päivitetään ihan alussa, vain yhdellä zombilla. Sitä vartenhan pitäisi jokaisella zombilla olla oma muuttuja, eli lykkää uusi fieldi tuohon typeen. Lisäksi se tulisi päivittää aina vihuja läpikäytäessä, eikä vain kerran ennen päälooppia. ( ja ei, älä kysy että miten nämä tehdään )
Sanotaanpas tähän tällainen löytämäni omituisuus koodissasi: zombinäkeejackin ja zombinäkeejohnin päivitetään ihan alussa, vain yhdellä zombilla. Sitä vartenhan pitäisi jokaisella zombilla olla oma muuttuja, eli lykkää uusi fieldi tuohon typeen. Lisäksi se tulisi päivittää aina vihuja läpikäytäessä, eikä vain kerran ennen päälooppia. ( ja ei, älä kysy että miten nämä tehdään )