Page 63 of 154
Re: Tyhmät kysymykset
Posted: Wed Aug 20, 2008 4:46 pm
by KillBurn
Kuinkia? wrote:Kysymys on, kuinka saan botin pysymään tiettyjen tilejen alueella.
Onnistuisiko näin?
Code: Select all
If GetMap2 (0, x, y) = 7 then moveobject obj,- 2
If GetMap2 (0, x, y) = 8 then moveobject obj,2
if GetMap2 (0, x, y) = 9 then turnobject obj,60
joo onnistuu, jos käyt tilet läpi ja objectit eivät osaa peruuttaa.
Code: Select all
For x=1 To MapWidth()
For y=1 To MapHeight()
If GetMap2 (0, x, y) = 7 then moveobject obj,- 2
If GetMap2 (0, x, y) = 8 then moveobject obj,2
if GetMap2 (0, x, y) = 9 then turnobject obj,60
Next y
Next x
Re: Tyhmät kysymykset
Posted: Wed Aug 20, 2008 6:05 pm
by mato1223
Miten saan tehtyä botin?
Re: Tyhmät kysymykset
Posted: Wed Aug 20, 2008 6:19 pm
by MAVmaggot
mato1223 wrote:Miten saan tehtyä botin?
Botti käsittää miljoona eri asiaa, joten voisitko vähän selventää millaista peliä teet?
Re: Tyhmät kysymykset
Posted: Thu Aug 21, 2008 9:56 pm
by Koodiapina
Milläs kaavalla saisin laskettua missä kulmassa toinen piste on toiseen pisteeseen nähden, kun tiedossa on kummankin pisteen sijainti (2D x,y)? GetAnglea en voi käyttää, koska työskentelen toisella kielellä ja kun se kaava on kuitenkin todella yksinkertainen niin turha lisäkirjastoillakaan on pelleillä.
EDIT: Mato1223, tässä esimerkki botista:
Code: Select all
While True
If MouseX()<50 Or MouseX()>350 Or MouseY()<50 Or MouseY()>250 Then PositionMouse 200,150
Wend
Re: Tyhmät kysymykset
Posted: Thu Aug 21, 2008 10:31 pm
by Ozcar
CB-koodilla näin:
Tässä siis helppo tapa käyttäen trigonometristä tan-funktiota (tai siis sen käänteisfunkkaria). Joudut tosin hieman kikkailemaan, sillä tulos on aina jotain väliltä -90 - 90 astetta, ja ettei mene liian helpoksi, niin riippuen kummalla puolella x2 on x1:stä tämän negatiivisen arvon toinen pää heittelee. Kuva kertoo nopsasti miten tuloksen arvo on joko positiivinen tai negatiivinen riippuen x2:n sijainnista koordinaatistossa.
x2..........x2
..
-...|.....
+..
......|........
-----x1--------
......|.........
..
+...|......
-..
x2............x2
Eli kannattaa tarkistaa kumpi on isompi, x1 vai x2, ja sen mukaan sitten muokkailla tulosta. Kaava myös kertoo vain sen kulman, jonka toinen sivu on x-akselilla, joten jos haluat y-akselin välisen, niin sitten vähentelet 90 asteesta. Sekavaa, mutta yritä ymmärtää ;).
Re: Tyhmät kysymykset
Posted: Thu Aug 21, 2008 10:43 pm
by Koodiapina
En kyllä ymmärtänyt O_o Kiitos kuitenkin vastauksesta, ja kysymys ratkesikin jo, kun muistin
tämän koodin, jonka toivottavasti saan käännettyä C++:ssaksi.
Re: Tyhmät kysymykset
Posted: Fri Aug 22, 2008 1:06 pm
by Mikä tässä on väärin?
Kuinka saan 1 type botin ampumaan?
Tällä hetkellä kaikki botit ampuu yhtäaikaa vaikka pelaaja olisi vain 1 botin lähellä.
Mitä teen tässä väärin?
Code: Select all
For u.ob = Each OB
If ObjectsOverlap(u\obj,objcar) Or ObjectSight(u\obj,objcar) Then ammutaan=1
If ammutaan=1 Then
patim.AMMUS = New (AMMUS)
patim\obj = CloneObject (pati)
patim\vahinko = 1 'Säädetään padille vahinko ja nopeus
patim\nopeus = 4
SetupCollision patim\obj,map, 2, 4, 1
CloneObjectPosition patim\obj,u\obj 'Asetetaaan luoti oikein
CloneObjectOrientation patim\obj,u\obj
ResetObjectCollision patim\obj
Else
ammutaan=0
EndIf
Next u
For u.ob = Each ob
For ipati.AMMUS = Each AMMUS
MoveObject ipati\obj,ipati\nopeus
If ObjectsOverlap (objcar,ipati\obj) Then
hp - ipati\vahinko
DeleteObject ipati\obj
Delete ipati
Exit
EndIf
For i = 1 To CountCollisions (ipati\obj)
If Distance2(ipati\obj,u\obj) => 2500 Or GetCollision (ipati\obj,i) =map Then
DeleteObject ipati\obj
Delete ipati
ammutaan=0
Exit
EndIf
Next i
Next ipati
Exit
Next u
Re: Tyhmät kysymykset
Posted: Fri Aug 22, 2008 1:56 pm
by Jonez
Johtuu tosta ammutaan-muuttujasta: Jos vihu näkee sut, se muutetaan ykköseksi ja jätetään tähän tilaan. Kun käydään loput vihut läpi, ammutaan on edelleen yksi ja näin ollen muutkin viholliset ampuvat. Nollaa se ammutaan-muuttuja ihan silmukan alussa.
Toi: Else ammutaan = 0 on ihan turha, koska tämä muuttaa ammutaan-muuttujan nollaan vain aina kun muuttuja on eri kuin 1, eli esim. 2 tai jo valmiiksi 0.
Lisäks on turha tehdä kaks kertaa For u.ob ... next u - silmukkaa. Tää vaan hidastaa peliä turhaan. Voit heittää ton kaiken koodin vain yhden silmukan sisään.
Re: Tyhmät kysymykset
Posted: Fri Aug 22, 2008 1:57 pm
by DatsuniG
Osaako kukaan sanoa minkä takia teksti ei tule näkyviin? Kyllä sitä tekstiä tulee, kun kerran laatikko siirtyy oikealle kirjoitettaessa. Olen melko varma että tähän on melko simppeli vastaus, mutta olen juuri aloittanut funktioiden käytön harjoittelemisen. (Huonot sisennykset)
Code: Select all
Global blinker, currentuser$, blink, cmd$
ClsColor 0,0,128
Repeat
Color cbwhite
cmdinput()
DrawScreen
Forever
Function cmdinput()
Color cbwhite
Text 3,3,currentuser$+"//"+cmd$
Locate -20,-20
Cmd$=Input("")
If TIMER()>blinker+400 Then
blink=Not blink
blinker=TIMER()
EndIf
If blink Then
Color cbwhite
Box TextWidth(currentuser$+"//"+cmd$)+4,3,7,14
EndIf
EndFunction
Re: Tyhmät kysymykset
Posted: Fri Aug 22, 2008 2:22 pm
by Koodiapina
Korjattu koodi on tässä. Muuttuja kuuluu määritellä vain kerran halutun tyyppiseksi.
Code: Select all
Global blinker, currentuser$, blink, cmd$
ClsColor 0,0,128
Repeat
cmdinput()
DrawScreen
Forever
Function cmdinput()
Color cbwhite
Text 3,3,currentuser$+"//"+cmd
Locate -20,-20
Cmd=Input("")
If Timer()>blinker+400 Then
blink=Not blink
blinker=Timer()
EndIf
If blink Then Box TextWidth(currentuser$+"//"+cmd)+4,3,7,14
EndFunction
Samalla parantelin sisennystä.
Re: Tyhmät kysymykset
Posted: Fri Aug 22, 2008 2:39 pm
by Jonez
Osaako kukaan sanoa minkä takia teksti ei tule näkyviin?
Grandi jo auttoi, mutta selvennyksenä vielä että kyseessä lienee cb:n bugi joka mahdollistaa kahden eri muuttujan nimeämisen samannimisiksi:
Code: Select all
Global tekstiä As String
tekstiä = "Globaali"
tekstiä$ = "lokaali"
Print tekstiä + " " + tekstiä$
WaitKey
Tossa sun koodissa oli vain se ongelmana, että globaali muuttuja oli cmd ilman dollarimerkkiä, ja sinä käytit cmd-muuttujaa dollarimerkin kanssa. Bugin vika siis.
Re: Tyhmät kysymykset
Posted: Sat Aug 23, 2008 8:21 pm
by Smuliii
Taas jatkuu pelinteko ja ongelma syntyi. Ideana on saada hahmo liikkumaan tiettyyn suuntaan (likuhihnan tavoin), jos on tietyllä datanumerossa. Ja tämähän toimii siihen saakka kunnes tulee seuraava tile. Nimittäin silloin se jää siihen tilen reunalle mutta kun painaa kerran menosuuntaan taas likutaan yksi tile ja töks..
On yritetty MoveObjectia ja TranslateObjectia ja vaikka mitä muuta mutta kun ei niin ei. Alla koodinpätkä:
Code: Select all
For hihna.LHIHNAT = Each LHIHNAT
If ObjectsOverlap(hihna\obj,pelihahmo) Then
MoveObject pelihahmo, 2 // TranslateObject pelihahmo, 2,0
EndIf
Next hihna
Eli apuja kaivataan.
Re: Tyhmät kysymykset
Posted: Sat Aug 23, 2008 10:15 pm
by Ozcar
Smuliii wrote:Ideana on saada hahmo liikkumaan tiettyyn suuntaan (likuhihnan tavoin), jos on tietyllä datanumerossa. Ja tämähän toimii siihen saakka kunnes tulee seuraava tile. Nimittäin silloin se jää siihen tilen reunalle mutta kun painaa kerran menosuuntaan taas likutaan yksi tile ja töks..
Kokeileppa muuttaa tarkistus Getmapiksi, eli jos ukon alla on datakerroksen tietty numero, liikutaan vähän eteenpäin. ObjectsOverlap tuskin on paras tapa toteuttaa tätä
.
Re: Tyhmät kysymykset
Posted: Sun Aug 24, 2008 7:29 pm
by cheeshelmet.jr
keksisikö joku minua nopeamman tavan laskea laatikko joka on pyöritetty tiettyyn kulmaan??
Re: Tyhmät kysymykset
Posted: Sun Aug 24, 2008 8:15 pm
by Smuliii
@Ozcar
En tiedä millaista tapaa tarkoitit mutta enpä itse ainakaan onnistunut.
Code: Select all
If GetMap2(3,x,y)=4 Then
hihna.LHIHNAT = New(LHIHNAT)
hihna\obj=LoadObject("media/piste2.png")
PositionObject2(hihna\obj,kenttä,x,y)
EndIf
^^ Näin olen siis tehnyt hihnan datapisteisiin ja edellisessä postauksessani näkyy miten olen osumisen toteuttanut.
Re: Tyhmät kysymykset
Posted: Sun Aug 24, 2008 8:35 pm
by Dande
Smuliii wrote:@Ozcar
En tiedä millaista tapaa tarkoitit mutta enpä itse ainakaan onnistunut.
Code: Select all
If GetMap2(3,x,y)=4 Then
hihna.LHIHNAT = New(LHIHNAT)
hihna\obj=LoadObject("media/piste2.png")
PositionObject2(hihna\obj,kenttä,x,y)
EndIf
^^ Näin olen siis tehnyt hihnan datapisteisiin ja edellisessä postauksessani näkyy miten olen osumisen toteuttanut.
Jos unohtaisit tuon vaiheen kokonaan, ja korvaat tuon aiemman tarkistuksen tällä: (tätä Ozcar oletettavasti tarkoittikin)
Code: Select all
If GetMap(3,ObjectX(pelihahmo),ObjectY(pelihahmo)) Then
MoveObject pelihahmo, 2
EndIf
Tai (itse suosittelen ylempää) voisit myös vaihtoehtoisesti käyttää objectrangea hihna\obj-objektin törmäysalueen säätämiseksi (oletan nyt että "media/piste2.png" on aika pieni kuva jonka on tarkoitus olla käytännössä näkymätön, tai ainakaan sen koko ei taida olla sama kuin tilenkoko) Tämä siis hihnan luonnissa "hihna\obj = loadobject(...)" tilalle
Code: Select all
hihna\obj=MakeObject()
ObjectRange hihna\obj, tilenLeveys, tilenKorkeus
Re: Tyhmät kysymykset
Posted: Mon Aug 25, 2008 11:08 am
by Olwi
cheeshelmet.jr wrote:keksisikö joku minua nopeamman tavan laskea laatikko joka on pyöritetty tiettyyn kulmaan??
Mitä tarkoitat laatikon laskemisella? Kulman laskemista?
Re: Tyhmät kysymykset
Posted: Mon Aug 25, 2008 3:15 pm
by Smuliii
@Galgoneer
Homma toimii ja lisäoppiakin sain siitä.
ammuksen osuma vihuun
Posted: Mon Aug 25, 2008 8:17 pm
by koodari299
elikkä mulla olis sellainen tosi tyhmä kysymys, eli kun otan vaikka learning centeristä ton ammukset 2 ja lisään sinne vihollisen, niin mikä koodi pätkä siihen pitää pistää ,että ammus ei mene vaan läpi vaan esim. vihun hp vähenee.
ei ole toiminut countsollisiont ja objectsoverlapit.
Re: Tyhmät kysymykset
Posted: Mon Aug 25, 2008 8:27 pm
by Koodiapina
Yleinen käytäntö on pistää koodi tänne, että voidaan korjailla.