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:

Code: Select all

ATAN(y1-y2/x1-x2) 


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
EDIT:


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. :?: :shock:

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.