Hiirialkuvalikko

Voit pyytää apua ohjelmointiongelmiin täältä.
Post Reply
Pabnih
Newcomer
Posts: 34
Joined: Thu Sep 20, 2007 3:15 pm
Location: Hirvas

Hiirialkuvalikko

Post by Pabnih » Thu Sep 20, 2007 3:36 pm

Hei!
Olen uusi täällä ja kaipaisin näin neuvoa alkuun. Eli harjoittelen tuota hiirivalikon luomista. 'Lopeta' nappini toimii hyvin, mutta kun koitan painaa Ohjeet -nappulaani, niin ohjelma kaatuu :|

Code: Select all

SCREEN 800, 600

FrameLimit 40

ClsColor cbWhite 

uusipeli=LoadObject("media/uusipeli.png")

ohjeet=LoadObject("media/ohjeet.png")

quit=LoadObject("media/lopeta.png")

hiiri=LoadObject("media/hiiri.png")

ShowMouse OFF

PositionObject uusipeli,-300,220

PositionObject ohjeet,-300,150

PositionObject quit,-300,80

alku:
Repeat

PositionObject hiiri,MouseWX(),MouseWY()
    If ObjectsOverlap(hiiri,quit) And MouseHit(1) Then
    End
    EndIf
    
    If ObjectsOverlap(hiiri,ohjeet) And MouseHit(1) Then
    Goto ohje
    EndIf
    
DrawScreen
Forever

ohje:
Repeat
    Text 10,10,"Tähän tuleepi ohjeet, paina enter."
    DrawScreen
    If KeyHit(28) Then Goto alku
Forever 
'Uusipeli' vielä vain hengailee tuossa. :P

User avatar
koodaaja
Moderator
Moderator
Posts: 1583
Joined: Mon Aug 27, 2007 11:24 pm
Location: Otaniemi - Mikkeli -pendelöinti

Re: Hiirialkuvalikko

Post by koodaaja » Thu Sep 20, 2007 4:08 pm

Pabnih wrote:Hei!
Olen uusi täällä ja kaipaisin näin neuvoa alkuun. Eli harjoittelen tuota hiirivalikon luomista. 'Lopeta' nappini toimii hyvin, mutta kun koitan painaa Ohjeet -nappulaani, niin ohjelma kaatuu :|

Code: Select all

SCREEN 800, 600

FrameLimit 40

ClsColor cbWhite 

uusipeli=LoadObject("media/uusipeli.png")

ohjeet=LoadObject("media/ohjeet.png")

quit=LoadObject("media/lopeta.png")

hiiri=LoadObject("media/hiiri.png")

ShowMouse OFF

PositionObject uusipeli,-300,220

PositionObject ohjeet,-300,150

PositionObject quit,-300,80

alku:
Repeat

PositionObject hiiri,MouseWX(),MouseWY()
    If ObjectsOverlap(hiiri,quit) And MouseHit(1) Then
    End
    EndIf
    
    If ObjectsOverlap(hiiri,ohjeet) And MouseHit(1) Then
    Goto ohje
    EndIf
    
DrawScreen
Forever

ohje:
Repeat
    Text 10,10,"Tähän tuleepi ohjeet, paina enter."
    DrawScreen
    If KeyHit(28) Then Goto alku
Forever 
'Uusipeli' vielä vain hengailee tuossa. :P
Tee tuosta subi, eikä vain goto-labelia. Eli näin:

Code: Select all


//koodia...

    If ObjectsOverlap(hiiri,ohjeet) And MouseHit(1) Then
        Gosub ohje
    EndIf

//koodia...

ohje:
Repeat
    Text 10,10,"Tähän tuleepi ohjeet, paina enter."
    DrawScreen
    If KeyHit(28) Then Exit
Forever
Return
Eli Gosub menee subiin. Se on vähän niinkuin Goto, mutta sieltä ohjelma osaa palata takaisin sinne, mistä lähti. Eli Returnin kohdalla siirrytään takaisin sinne, missä lukee "gosub". Subiin voi toki mennä monestakin paikkaa, silloin palataan paikkaan, josta sinne siirryttiin. Ja Exit poistuu loopista. Eli Foreveristä ei enää hypätäkään Repeattiin, vaan jatketaan eteenpäin.

Funktio olisi toki vielä parempi, mutta jos olet vasta-alkaja, älä vaivaa päätäsi semmoisilla. Tuo toimii ihan yhtä hyvin.

User avatar
Murskaaja
Member
Posts: 92
Joined: Tue Aug 28, 2007 8:19 pm
Contact:

Re: Hiirialkuvalikko

Post by Murskaaja » Thu Sep 20, 2007 4:34 pm

koodaaja: ajapa tuo koodisi niin huomaat, että varsinainen ongelma ei poistunut ;)

Ohjelma ei itseasiassa kaatunut, vaan ladatut objektit jäivät ruudulle ja ohjeena ollut teksti tulostui valkoisena (koska piirtoväriä ei ole vaihdettu). Koodaajan koodi pienillä lisäyksillä:

Code: Select all

//koodia...

    If ObjectsOverlap(hiiri,ohjeet) And MouseHit(1) Then
        Showobject uusipeli, OFF
        Showobject ohjeet, OFF
        Showobject quit, OFF
        Showobject hiiri, OFF
        Gosub ohje
    EndIf

//koodia...

ohje:
color 0,0,0
Repeat
    Text 10,10,"Tähän tuleepi ohjeet, paina enter."
    DrawScreen
    If KeyHit(28) Then
        Showobject uusipeli, ON
        Showobject ohjeet, ON
        Showobject quit, ON
        Showobject hiiri, ON
        Exit
    EndIf
Forever
Return
ASCII star wars Xtreme | Cool Bombers | Combat (kehitteillä)

RedShadow productions

Pabnih
Newcomer
Posts: 34
Joined: Thu Sep 20, 2007 3:15 pm
Location: Hirvas

Re: Hiirialkuvalikko

Post by Pabnih » Thu Sep 20, 2007 5:26 pm

Suuret kiitokset molemmille :)

User avatar
jabanii
Member
Posts: 93
Joined: Tue Aug 28, 2007 9:23 pm

Re: Hiirialkuvalikko

Post by jabanii » Thu Sep 20, 2007 11:57 pm

koodaaja wrote:
Pabnih wrote: Funktio olisi toki vielä parempi, mutta jos olet vasta-alkaja, älä vaivaa päätäsi semmoisilla. Tuo toimii ihan yhtä hyvin.
Kyllä mielestäni ihan aloitteliakin voi käyttää funktioita, mutta hänen ei vielä tarvitse ymmärtää sen kaikkia ominaisuuksia.

Hyvin toteutettu:

Code: Select all

if Asetukset_painettu=true then Asetukset()

Function Asetukset()
//Koodi tänne
End Function
Huonosti toteutettu:

Code: Select all

if Asetukset_painettu=true then Asetukset()

Asetukset:
//Koodi tänne
return
GoTo/GoSub kikkailu on vanhentunut, ja se on lähes kaikissa kielissä hyödytön (Paitsi Assemblyssa, jossa ei ole funktioita).

Post Reply