Valikko

Voit pyytää apua ohjelmointiongelmiin täältä.
Post Reply
Exu
Newcomer
Posts: 26
Joined: Wed Feb 27, 2008 3:51 pm

Valikko

Post by Exu »

Miten saan toteutettua valikon, jossa liikutaan näppäimistön avulla?

01000101
01111000
01110101
Koodiapina
Forum Veteran
Posts: 2396
Joined: Tue Aug 28, 2007 4:20 pm

Re: Valikko

Post by Koodiapina »

Exu wrote:Miten saan toteutettua valikon, jossa liikutaan näppäimistön avulla?
Tässä yksi versio, saattaa olla purkkaa...

Code: Select all

    valinta = 1
    valinnat = 3
    Dim sana$(valinnat)
    sana(1) = "peli"
    sana(2) = "tekijät"
    sana(3) = "lopeta"
    While Not life
        If valinta > 1 And KeyHit(cbkeyup) Then valinta - 1
        If valinta < valinnat And KeyHit(cbkeydown) Then valinta + 1
        For i=1 To valinnat
            If valinta = i Then Color cbred Else Color cbwhite
            Text 100,i*20,sana(i)
        Next i
        If KeyHit(cbkeyreturn) Then
            Select valinta
            Case 1 'jne...
            Case 2 'jne...
            Case 3: End
            EndSelect
        EndIf
        DrawScreen 
    Wend 
Exu
Newcomer
Posts: 26
Joined: Wed Feb 27, 2008 3:51 pm

Re: Valikko

Post by Exu »

Kiitos tämä toimii, mutta tuli toinenkin ongelma.

Kun minun tarvitsisi saada piirrettyä 10 ufoa, jotka kaikki luodaan vaikka 4 sekunnin välein. Tämä ei kuitenkaan onnistu, koska en tiedä miten saan ne luotua tietyin väliajoin. Ja jos ufot luodaan silmukassa (Repeat...Forever) niin niitä luodaan loputtomasti, mutta tietääkseni timer tai muu komento ei toimi silmukan ulkopuolella(?).
Mitenköhän tämä ufojen luonti onnistuisi?

01000101
01111000
01110101
Harakka
Advanced Member
Posts: 430
Joined: Mon Aug 27, 2007 9:08 pm
Location: Salo
Contact:

Re: Valikko

Post by Harakka »

Code: Select all

Repeat
  If Timer() > alkuaika + 4000 Then
    For i = 1 to 10
      'luodaan yksi ufo
      AddText "Luotiin ufo (" + i +")"
    Next i
    alkuaika = Timer()
  Endif
  DrawScreen
Forever
Homma pelaa kun otat aina talteen Timer()-funktion palauttaman arvon ja vertaat sitä tämänhetkiseen Timer():iin.
Peli piirtokomennoilla - voittaja, Virtuaalilemmikkipeli - voittaja,
Sukellusvenepeli - voittaja, Paras tileset - voittaja
Vaihtuva päähenkilö - voittaja, Autopeli - voittaja sekä
Hiirellä ohjattava peli - voittaja B)
Rufi
Member
Posts: 50
Joined: Fri Dec 21, 2007 11:12 am

Re: Valikko

Post by Rufi »

Kommentoituna:

Code: Select all

Type UFO        'luodaan tyyppikokoelma UFO
    Field obj   'kokoelmalle uusi kenttä
EndType

ufo_Amount = 0  'tarpeeton

Repeat

    If ufo_Amount < 10 And Timer()>record+4000 Then     'jos ufoja on vähemmän kuin 10 ja aikaa on kulunut 4 sek niin...
        weirdo.UFO = New(UFO)                           '...luodaan uusi ufo,
        weirdo\obj = LoadObject("media\cow.bmp")        'uuden ufon kenttään "obj" ladataan cow.bmp,
        PositionObject weirdo\obj, Rand(-100, 100), Rand(-100, 100) 'sijoitetaan ufo randomisti
        ufo_Amount = ufo_Amount + 1                     'varmistetaan että loimme uuden ufon
        record = Timer()
    EndIf

DrawScreen
Forever
Elikkäs... Käytin siis Typeä, joten josset osaa käyttää niitä vielä, niin nyt on hyvä aika alkaa opettelemaan :D Ne ovat erittäin hyödyllisiä ja monestikin parempi vaihtoehto kuin taulukot (in my opinion ainakin...)

EDIT: Yay, hidas :( Nooh annanpa olla tämän tässä kuitenkin :lol:
EDIT2: Hahaa 20. viesti ^-^
EDIT3: Kommentti alempaan viestiin: No onhan se, mutta kun on kyse vain kymmenestä ufosta niin eipä se varmaan paljoa auta :F
Last edited by Rufi on Sun Mar 16, 2008 1:30 am, edited 1 time in total.
I'm gonna be the Pira... CoolBasic King!
D. Adams wrote:The knack of flying is learning how to throw yourself at the ground and miss.
tuhoojabotti
Advanced Member
Posts: 485
Joined: Tue Aug 28, 2007 3:53 pm
Location: Suomi, Finland
Contact:

Re: Valikko

Post by tuhoojabotti »

kannattaa käyttä cloneobjectia koska se on lataamista nopeempaa:

Code: Select all

    Type UFO        'luodaan tyyppikokoelma UFO
        Field obj   'kokoelmalle uusi kenttä
    EndType

    mufo=LoadObject("media\cow.bmp")

    ufo_Amount = 0  'tarpeeton

    Repeat

        If ufo_Amount < 10 And Timer()>record+4000 Then     'jos ufoja on vähemmän kuin 10 ja aikaa on kulunut 4 sek niin...
            weirdo.UFO = New(UFO)                           '...luodaan uusi ufo,
            weirdo\obj =  CloneObject(mufo)       'uuden ufon kenttään "obj" ladataan cow.bmp,
            PositionObject weirdo\obj, Rand(-100, 100), Rand(-100, 100) 'sijoitetaan ufo randomisti
            ufo_Amount = ufo_Amount + 1                     'varmistetaan että loimme uuden ufon
            record = Timer()
        EndIf

    DrawScreen
    Forever 
Imagedev.tuhoojabotti.com — “Programmer (noun): An organism that turns caffeine into code.”
Exu
Newcomer
Posts: 26
Joined: Wed Feb 27, 2008 3:51 pm

Re: Valikko

Post by Exu »

Sain sen toimimaan, mutta tämä Harakan antama esimerkki ei oikein toiminut kun sinne lisäsi rivin:

Code: Select all

PositionObject u\obj,-400,Rand(300,-300)
Tämä aiheutti että aina neljän sekunnin välein luodaan 10 uutta ufoa.

Tässä toimiva:

Code: Select all

    If Timer() > alkuaika + 4000 Then
        For i = 1 To 1
            u.UFOT = New(UFOT)
            u\obj = CloneObject(ufo)
            PositionObject u\obj,-400,Rand(300,-300)
        Next i
        alkuaika = Timer()
    EndIf

01000101
01111000
01110101
Exu
Newcomer
Posts: 26
Joined: Wed Feb 27, 2008 3:51 pm

Re: Valikko

Post by Exu »

Taas tuli yksi ongelma.

Tämä koodi ei poista ufoa kun klikataan:

Code: Select all

for u.UFOT = each UFOT
If MouseX()>objectx(u\obj) And MouseX()<objectx(u\obj)+33  And MouseY()>objecty(u\obj) And MouseY()<(objecty(u\obj)+10 Then a=1
    If a=1 And MouseHit(1) Then 
            DeleteObject u\obj : Delete u
            score+10
    endif 
endif
next u

01000101
01111000
01110101
Henkru
Advanced Member
Posts: 359
Joined: Sun Aug 26, 2007 2:46 pm

Re: Valikko

Post by Henkru »

Ongelmana on se että MousX() / MouseY() palautttavat koordinaatin ruudunkoordinaateina eikä maailmankoordinaaeissa niinkuin ObjectX() / ObjectY().
Exu
Newcomer
Posts: 26
Joined: Wed Feb 27, 2008 3:51 pm

Re: Valikko

Post by Exu »

Henkru wrote:Ongelmana on se että MousX() / MouseY() palautttavat koordinaatin ruudunkoordinaateina eikä maailmankoordinaaeissa niinkuin ObjectX() / ObjectY().
Kiitos. Kun sain tämän toimimaan yksi aikaisemmin ilmaantunut bugikin korjaantui :)

01000101
01111000
01110101
mokkeri
Member
Posts: 84
Joined: Sat Apr 05, 2008 9:22 pm

Re: Valikko

Post by mokkeri »

Vastaan nyt tänne;

Eli voisko joku postata yksinkertasen hiirellä toimivan valikon. Ois kiva, mut ite en osaa :) Noi hymiöt on jotain päärynöitä :D
asd
User avatar
Sami The Great
Advanced Member
Posts: 485
Joined: Tue Aug 28, 2007 4:15 pm
Contact:

Re: Valikko

Post by Sami The Great »

Helppo tapa tehdä valikko on asettaa hiiren koordinaatteihin kuva ja sitten katsoa onko se napin päällä, jos on ja nappia painetaan niin tehdään jotain.

Tai jos haluat tehdä sen objecteilla niin onnistuu myös, katso manuaalista CameraPick, ObjectPickable ja PickedObject.
http://www.rockodilegames.com
CoolBasickin käyttäjä vuodesta 2004.
Koodiapina
Forum Veteran
Posts: 2396
Joined: Tue Aug 28, 2007 4:20 pm

Re: Valikko

Post by Koodiapina »

mokkeri wrote:Eli voisko joku postata yksinkertasen hiirellä toimivan valikon. Ois kiva, mut ite en osaa :) Noi hymiöt on jotain päärynöitä :D

Code: Select all

SCREEN 800,600
    
    While 1
        If button(10,10,100,20,"Peliin") Then MakeError "Tässä on "+Chr(34)+"peli"+chr(34)+" xD"
        If button(10,40,100,20,"Häivy") then end 
        DrawScreen
    Wend 
    
    Function Button(x As integer,y As integer,w As integer,h As integer,t As String,s As integer = 5)
        If MouseX()>x And MouseY()>y And MouseX()<x+w And MouseY()<y+h Then
            If MouseDown(1) Then Color 200,200,200 Else Color 190,190,190
            If MouseUp(1) Then Return True
        Else
            Color 220,220,220
        EndIf
        Box x+s,y,w-(s*2),h
        Box x,y+s,w,h-(s*2)
        Circle x,y,s*2
        Circle x+w-s*2,y,s*2
        Circle x+w-s*2,y+h-s*2,s*2
        Circle x,y+h-s*2,s*2
        Color cbblack
        CenterText x+w/2,y+h/2-TextHeight(t)/2,t$
    EndFunction 
mokkeri
Member
Posts: 84
Joined: Sat Apr 05, 2008 9:22 pm

Re: Valikko

Post by mokkeri »

Grandi wrote:
mokkeri wrote:Eli voisko joku postata yksinkertasen hiirellä toimivan valikon. Ois kiva, mut ite en osaa :) Noi hymiöt on jotain päärynöitä :D

Code: Select all

SCREEN 800,600
    
    While 1
        If button(10,10,100,20,"Peliin") Then MakeError "Tässä on "+Chr(34)+"peli"+chr(34)+" xD"
        If button(10,40,100,20,"Häivy") then end 
        DrawScreen
    Wend 
    
    Function Button(x As integer,y As integer,w As integer,h As integer,t As String,s As integer = 5)
        If MouseX()>x And MouseY()>y And MouseX()<x+w And MouseY()<y+h Then
            If MouseDown(1) Then Color 200,200,200 Else Color 190,190,190
            If MouseUp(1) Then Return True
        Else
            Color 220,220,220
        EndIf
        Box x+s,y,w-(s*2),h
        Box x,y+s,w,h-(s*2)
        Circle x,y,s*2
        Circle x+w-s*2,y,s*2
        Circle x+w-s*2,y+h-s*2,s*2
        Circle x,y+h-s*2,s*2
        Color cbblack
        CenterText x+w/2,y+h/2-TextHeight(t)/2,t$
    EndFunction 
Kiitti! Tosta oli apua :)
asd
Post Reply