Page 1 of 78

Tyhmät kysymykset (I/2010)

Posted: Mon Jan 04, 2010 10:08 am
by Zero
EDIT:

Uusi ketju aloitettu: Tyhmät kysymykset (I/2011). Keskustelu jatkuu siellä.

Jatketaan perinteikästä linjaa ja pilkotaan jättiketju pienempiin osiin. Sarjan edelliset viestiketjut ovat:
Tyhmät kysymykset (I/2009)
Tyhmät kysymykset (II/2009)

Ylläpito pilkkoo kaikki yli 100-sivuiset aiheet jatkoketjuiksi. Lisäksi aloitetaan uusi ketju vuosittain.

Tyhmät kysymykset - tarkoitus

Törmäsitkö ongelmaan, jonka tiedät olevan oikeasti ihan helppo, mutta ratkaisu ei vain osu silmään? Onko ongelmasi niin vähäpätöinen, ettei sitä varten kannata tehdä uutta ketjua?

Alkuperäisen ketjun johdanto meni näin:
iTKEVAnAKKI wrote:Eli tänne kaikki yksinkertaiset kysymykset johin et ole keksinyt ratkaisua. Mutta muistakaa, että käytätte ensin hakua!

Re: Tyhmät kysymykset (I/2010)

Posted: Mon Jan 04, 2010 5:52 pm
by skorpioni-cb
No jos tähän saa kirjoittaa, niin eka kysymys täällä:

miten heksadesimaalivärikoodeja voi muuntaa muotoon RGB (HTML värikoodeista->RGB kooreiksi.)

Re: Tyhmät kysymykset (I/2010)

Posted: Mon Jan 04, 2010 6:05 pm
by DatsuniG

Code: Select all

Function RGBToHex(r,g,b)
    Return "#" + Right(Hex(r),2) + Right(Hex(g),2) + Right(Hex(b),2)
EndFunction 
EDIT:

Oho se olikin heksadesimaalista RGB:ksi. No muunnos onnistuu esim. tällä.

EDIT:

nr.2 Tässä on koodi tuohon Heksadesimaalista RGB:ksi muunnokseen:

Code: Select all

    Function HexToRGB(hexvalue$)
        Hexvalue = Upper(hexvalue)
        If Left(HexValue,1) = "#" Then HexValue = Mid(HexValue,2,Len(HexValue) - 1)
        ReturnStr As String = ""
        For i = 1 To 6 Step 2
            If Asc(Mid(hexvalue, i, 1)) > 64 Then tmp1 = Asc(Mid(hexvalue, i, 1)) - 55 Else tmp1 = Mid(hexvalue, i, 1)
            If Asc(Mid(hexvalue, i + 1, 1)) > 64 Then tmp2 = Asc(Mid(hexvalue, i + 1, 1)) - 55 Else tmp2 = Mid(hexvalue, i + 1, 1)
            If i < 5 Then ReturnStr = ReturnStr + Str(16 * tmp1 + tmp2) + "," Else ReturnStr = ReturnStr + Str(16 * tmp1 + tmp2)
        Next i
        Return ReturnStr
    EndFunction
[/edit]

Re: Tyhmät kysymykset (I/2010)

Posted: Tue Jan 05, 2010 6:42 pm
by martti
Onko kenelläkään hajua mikä tässä koodissa on vikana:

Code: Select all

Type AMMUS
    Field obj
End Type 

FrameLimit 40
ClsColor cbWhite

ukko=LoadObject("Media\soldier.bmp",72)

pati=LoadObject("Media\bullet.bmp")
ShowObject pati,OFF

AddText "Nuolista ohjaa, CTRL=ampuu"
RotateObject ukko, 90
MaskObject ukko, 255,0,255
Level=1

Repeat

    If ObjectX(ukko)<-200 Then PositionObject ukko,-200,ObjectY(ukko)
    If ObjectX(ukko)>200 Then PositionObject ukko,200,ObjectY(ukko)
    If ObjectY(ukko)<-150 Then PositionObject ukko,ObjectX(ukko),-150
    If ObjectY(ukko)>150 Then PositionObject ukko,ObjectX(ukko),150


    If UpKey() Then MoveObject ukko,5
    If DownKey() Then MoveObject ukko,-5 
    If LeftKey() Then MoveObject ukko,0,-5
    If RightKey() Then MoveObject ukko,0,5  

    If KeyDown(cbKeyRControl) And reload=0 And Level=2 Xor Level=3 Then    
        luoti.AMMUS = New(AMMUS)
        luoti\obj=CloneObject(pati)

        PositionObject luoti\obj,ObjectX (ukko)+20, ObjectY (ukko)+17.5                

        CloneObjectOrientation luoti\obj,ukko            
        reload=5      
    EndIf

    If reload>0 Then reload=reload-1
    
        If KeyDown(cbKeyRControl) And reload2=0 And Level=2 Xor Level=3 Then    
        luoti.AMMUS = New(AMMUS)
        luoti\obj=CloneObject(pati)

        PositionObject luoti\obj,ObjectX (ukko)-20, ObjectY (ukko)+17.5                

        CloneObjectOrientation luoti\obj,ukko            
        reload2=5
    EndIf

    If reload2>0 Then reload2=reload2-1
    

    
        If KeyDown(cbKeyRControl) And reload3=0 And Level=1 Xor Level=3 Then    
        luoti.AMMUS = New(AMMUS)
        luoti\obj=CloneObject(pati)

        PositionObject luoti\obj,ObjectX (ukko)-0.3, ObjectY (ukko)+13.5                

        CloneObjectOrientation luoti\obj,ukko            
        reload3=5    
    EndIf

    If reload3>0 Then reload3=reload3-1

    For luoti.AMMUS = Each AMMUS
        MoveObject luoti\obj,6     
    Next luoti
    
    Level=Level+KeyHit(78)-KeyHit(74)
    If level=<1 Then Level=1
    If level=>3 Then level=3
   
    DrawScreen

Until EscapeKey()
Siis kun level nousee kolmoseen niin jostain syystä sotilas ampuu ihan sekona.
EDIT:

Thanx! :)


Re: Tyhmät kysymykset (I/2010)

Posted: Tue Jan 05, 2010 6:51 pm
by DatsuniG
Sulut puuttuivat ampumisen ehtolausekkeesta.

Code: Select all

    Type AMMUS
        Field obj
    End Type

    FrameLimit 40
    ClsColor cbWhite

    ukko=LoadObject("Media\soldier.bmp",72)

    pati=LoadObject("Media\bullet.bmp")
    ShowObject pati,OFF

    AddText "Nuolista ohjaa, CTRL=ampuu"
    RotateObject ukko, 90
    MaskObject ukko, 255,0,255
    Level=1

    Repeat

        If ObjectX(ukko)<-200 Then PositionObject ukko,-200,ObjectY(ukko)
        If ObjectX(ukko)>200 Then PositionObject ukko,200,ObjectY(ukko)
        If ObjectY(ukko)<-150 Then PositionObject ukko,ObjectX(ukko),-150
        If ObjectY(ukko)>150 Then PositionObject ukko,ObjectX(ukko),150


        If UpKey() Then MoveObject ukko,5
        If DownKey() Then MoveObject ukko,-5
        If LeftKey() Then MoveObject ukko,0,-5
        If RightKey() Then MoveObject ukko,0,5 

        If KeyDown(cbKeyRControl) And reload=0 And (Level=2 Xor Level=3) Then   
            luoti.AMMUS = New(AMMUS)
            luoti\obj=CloneObject(pati)

            PositionObject luoti\obj,ObjectX (ukko)+20, ObjectY (ukko)+17.5               

            CloneObjectOrientation luoti\obj,ukko           
            reload=5     
        EndIf

        If reload>0 Then reload=reload-1
       
            If KeyDown(cbKeyRControl) And reload2=0 And (level=2 Xor Level=3) Then   
            luoti.AMMUS = New(AMMUS)
            luoti\obj=CloneObject(pati)

            PositionObject luoti\obj,ObjectX (ukko)-20, ObjectY (ukko)+17.5               

            CloneObjectOrientation luoti\obj,ukko           
            reload2=5
        EndIf

        If reload2>0 Then reload2=reload2-1
       

       
            If KeyDown(cbKeyRControl) And reload3=0 And (Level=1 Xor Level=3) Then   
            luoti.AMMUS = New(AMMUS)
            luoti\obj=CloneObject(pati)

            PositionObject luoti\obj,ObjectX (ukko)-0.3, ObjectY (ukko)+13.5               

            CloneObjectOrientation luoti\obj,ukko           
            reload3=5   
        EndIf

        If reload3>0 Then reload3=reload3-1

        For luoti.AMMUS = Each AMMUS
            MoveObject luoti\obj,6     
        Next luoti
       
        Level=Level+KeyHit(78)-KeyHit(74)
        If level=<1 Then Level=1
        If level=>3 Then level=3
       
        DrawScreen

    Until EscapeKey()

Re: Tyhmät kysymykset (I/2010)

Posted: Tue Jan 05, 2010 7:25 pm
by Hene
Simppeli tapa tehdä viiva, joka liikkuu eteenpäin ja toistaa itseään? Eli vähän kuin Windowsin tehtävienhallinnan suorituskyky-mittari, mutta viivan kulkusuunta olisi etukäteen päätettävissä.

Re: Tyhmät kysymykset (I/2010)

Posted: Tue Jan 05, 2010 8:08 pm
by Rufi
Muistaakseni, olisikohan ollut jopa vanhoilla foorumeilla, jossain oli esimerkkikoodi tavasta antaa tyyppikokoelman kentäksi taulukko. Olenko väärässä, vai löytyykö joltain tietoa tämän toteuttamisesta?
EDIT:

Haha kiitos tuhoojabotti. On se jännää, kun en löytänyt vaikka yritin :D Pitääpä koittaa ensi kerralla yksinkertaisempia hakusanoja ^^,


Re: Tyhmät kysymykset (I/2010)

Posted: Tue Jan 05, 2010 8:36 pm
by tuhoojabotti
Haulla löytyi melkein heti: viewtopic.php?f=10&t=1511&p=25495&hilit ... kko#p25495 Saa käyttää!

Re: Tyhmät kysymykset (I/2010)

Posted: Tue Jan 05, 2010 9:57 pm
by Koodi
Moi taas! Mietin tässä pitkän matikan läksyjä tehdessäni, että tarvitseeko ohjelmoinnissa miten paljon pitkässä matikassa opittuja asioita? Oletan että monella ohjelmoijalla on ollut pitkä matikka lukiossa. Varmasti pitkä matikka auttaa ongelmien ratkaisemisessa, mutta voiko siinä opittuja asioita soveltaa suoraan coolbasiciin? Olen ensimmäisellä vuosikurssilla, kolmas pitkän matikan kurssi menossa, itselläni siis ei ole tästä mitään tietoa :D

Re: Tyhmät kysymykset (I/2010)

Posted: Tue Jan 05, 2010 10:03 pm
by Koodiapina
Peruskoulu-matikalla pärjää.

Itse olen koodannut mm. pelejä (2D- ja verkko-), omia ohjelmointikieliä (tulkattavia ja käännettäviä), IRC-botteja, tekoälyjä, viruksia ym. sovelluksia, eikä ole koskaan tullut matemaattinen osaamattomuus vastaan :)

Re: Tyhmät kysymykset (I/2010)

Posted: Tue Jan 05, 2010 10:05 pm
by Ilmuri
Koodi wrote:Moi taas! Mietin tässä pitkän matikan läksyjä tehdessäni, että tarvitseeko ohjelmoinnissa miten paljon pitkässä matikassa opittuja asioita? Oletan että monella ohjelmoijalla on ollut pitkä matikka lukiossa. Varmasti pitkä matikka auttaa ongelmien ratkaisemisessa, mutta voiko siinä opittuja asioita soveltaa suoraan coolbasiciin? Olen ensimmäisellä vuosikurssilla, kolmas pitkän matikan kurssi menossa, itselläni siis ei ole tästä mitään tietoa :D
Trigonometria, geometria, sekä differentiaalilaskenta ainakin ovat käyttökelpoisia.

Re: Tyhmät kysymykset (I/2010)

Posted: Tue Jan 05, 2010 10:43 pm
by ezbe
Ilmuri wrote:
Koodi wrote:Moi taas! Mietin tässä pitkän matikan läksyjä tehdessäni, että tarvitseeko ohjelmoinnissa miten paljon pitkässä matikassa opittuja asioita? Oletan että monella ohjelmoijalla on ollut pitkä matikka lukiossa. Varmasti pitkä matikka auttaa ongelmien ratkaisemisessa, mutta voiko siinä opittuja asioita soveltaa suoraan coolbasiciin? Olen ensimmäisellä vuosikurssilla, kolmas pitkän matikan kurssi menossa, itselläni siis ei ole tästä mitään tietoa :D
Trigonometria, geometria, sekä differentiaalilaskenta ainakin ovat käyttökelpoisia.
Differentiaalilaskennan hyödyistä ainakin peliohjelmoinnin saralla en olisi niinkään varma, kaksi ensin mainittua kyllä ovat tärkeitä. Peruskoulun matematiikallakin pääsee jo kohtuu pitkälle, mutta varsinkin peliohjelmointi on kohtuullisen matematiikkapainotteista. Itse en lukiota ole käynyt, mutta varmasti olisi helpottanut asioiden sisäistämisessä.

3D-grafiikkaa ja -ohjelmointia ajatellen, kannattaa pitää silmät ja korvat auki, kun tunneilla käsitellään vektoreita ja matriiseja/lineaarialgebraa. Toki niitä voi hyödyntää 2d-grafiikassakin.

Re: Tyhmät kysymykset (I/2010)

Posted: Tue Jan 05, 2010 11:33 pm
by Koodi
Suuret kiitokset teille kaikille! Pitää opiskella kunnolla, että opin ehkä joskus ohjelmoimaan jotain kivaa :)

Etten lähettäisi turhaa viestiä, näytän teille tällaisen koodipätkän, jonka pitäisi piirtää se paraabeli, jonka inputtiin kirjoittaa. Tiedän mikä mättää(luulisin ainakin), mutta mitenhän sen vois korjata? Eli uu=Input() rivi - uu:hun ei taida tallentua kaikki Input():ssa olevat tiedot(teksti)? Mitenhän ne saisi kerättyä, ja sen mukaan piirrettyä paraabeli? Hankalaksi tämän tekee se että inputtiin ei voi kirjoittaa ^ -merkkiä, koitin hoitaa asian näin:

Code: Select all

If KeyHit(cbkeyp) Then p$=Chr(94)
Ja luulen että tuo on ihan toimivasti tehty :roll:

Luulen, että selitin tuon todella epäselvästi, väsyttää jo vähän :D

Code: Select all

SCREEN 800,600

DrawToWorld ON

Repeat
    
    If KeyHit(cbkeyp) Then p$=Chr(94)

    //If p$=Chr(112) Then p$=Chr(94)
    
    Line -ScreenWidth(), 0, ScreenWidth(), 0
    Line 0, -ScreenWidth(), 0, ScreenWidth()
    
    For x = -1000 To 1000
        uu=Input("p ON pontenssi ")
        
        Dot 1+x, uu
    Next x
    
    
    Text 0, 40, MouseX()
    Text 0, 60, MouseY()
    Text 0, 100, uu
    Text 0, 120, p
    
    //tämä pätkä piirtää paraabelin
    //For t=-100 To 100
    //    Dot 1+t, t^2
    //Next t
    
    
    DrawScreen
Forever 

Re: Tyhmät kysymykset (I/2010)

Posted: Thu Jan 07, 2010 7:09 pm
by skorpioni-cb
Hei, olisiko mitään tapaa saada tietää kumpaa vihollisalusta on ammuttu.
Koodi (huono sisennys :oops: ):

Code: Select all

Include "ide\cbJanelas.cb"
'Pääohjelma

SCREEN 400,300,0,0

FrameLimit 40

Type RAKETIT
   Field obj
EndType 
Type ASTEROIDIT
   Field obj
   Field hp
EndType
Type VIHUT
   Field obj
   Field hp#
EndType 

Const TUTKA_X=225
Const TUTKA_Y=100
Const TUTKA_KOKO=50
 
maksimi=2

Global hp

hp#=100.0

kamera=MakeImage(200,150) 

space=MakeImage(400,300)

DrawToImage space

For i=1 To 100 

    Dot Rand(0,399),Rand(0,299)

Next i
 
DrawToScreen 

world=MakeObjectFloor()

PositionObject world,0,0,-500

PaintObject world,space

sina=LoadObject("media\sinä.bmp",72)

energia=LoadObject("media\energia.bmp")

hiiri=LoadImage("media\hiiri.bmp")

meteori=LoadObject("media\meteori.bmp")
 ShowObject meteori,OFF 
pu=LoadObject("media\power-up.bmp")

ma=LoadObject("media\musta-aukko.bmp",72)

raketti=LoadObject("media\Kranaatti.jpg")
ShowObject raketti,OFF 
vihu=LoadObject("media\vihu.bmp",72)
ShowObject vihu,OFF 
pää=LoadObject("media\päävihu.bmp")
n=2
Repeat 

    ClsColor 56,62,184 

ShowMouse hiiri
If pause Then

Else 
    Gosub tarkista

    Color 255,255,255

    Text 251,9,"hp: "+hp

    PositionObject pää,Int(750.1994),Int(-17.1)

    If LeftKey() Then TurnObject sina,5
    If RightKey() Then TurnObject sina, -5
    If UpKey() Then MoveObject sina,n
    If DownKey() Then MoveObject sina,-n

    If KeyDown(42) Or KeyDown(54) Then n=8 Else n=2

If KeyHit(cbkeyspace) And reload=0 Then 
   
    newRaketti.RAKETIT= New(RAKETIT)
    newRaketti\obj=CloneObject(raketti)
    CloneObjectPosition newRaketti\obj,sina
    CloneObjectOrientation newRaketti\obj,sina
      
    MoveObject newRaketti\obj,40
      
    reload=4
EndIf 
   
i=0
   
For lVihu.VIHUT= Each VIHUT
    For iRaketti.RAKETIT= Each RAKETIT

    MoveObject iRaketti\obj,6
    If After(lVihu)<>NULL Then 
    If ObjectsOverlap(lVihu\obj,iRaketti\obj,3) Then 
                
        
    
       DeleteObject iRaketti\obj
         Delete iRaketti
   EndIf 
  EndIf 


   i=i+1
   Next iRaketti
Next lVihu 


   
If reload>0 Then reload=reload-1
   
   Text 248,60,"Ladatut ammukset: "+i
EndIf    
If KeyHit(cbkeyP) Then pause=Not pause
    camera(kamera,ObjectX(sina),ObjectY(sina))

        DrawImage kamera,0,0

  

 DrawScreen

Forever 

Function nappi(Teksti$,x,y,leveys=0,korkeus=0)

  leveys1=leveys
  korkeus1=korkeus
  
  If leveys1=0 Then leveys2=TextWidth(Teksti)
  If korkeus1=0 Then korkeus2=TextHeight(Teksti)
  
   'Napin pohjaväri. EI TEKSTIN VÄRI!
   
   r=getRGB(RED)
   g=getRGB(GREEN)
   b=getRGB(BLUE)
   
   Color r,g,b
   
   If r=0 And g=0 And b=0 Then 
   
   r1=255
   
   g1=255
   
   b1=255
   
   Else
      
   r1=0
   
   g1=0
   
   b1=0
   
   EndIf
   
   Box x,y,leveys2,korkeus2
   
   Color r1,r1,r1
   
   Text x,y,Teksti

     If MouseX() >=x And MouseX()<= x+leveys2 And MouseY() >= y And MouseY() <= y+korkeus2 Then 
     
       in=True 
       
     Else 
     
       in=False 
       
     EndIf 
     
   If in=True And MouseHit(1) Then 
   
     painettu=True
   
   Else 
   
     painettu=False
     
   EndIf 
   
  Return painettu
  
EndFunction 

Function VähennäHp(maara#)

hp=hp-maara

Return hp#

EndFunction 

Function camera(img,x,y)

l=ImageWidth(img)
k=ImageHeight(img)

UpdateGame

DrawToImage img
    ClsColor cbblack
    Cls
    PositionCamera x,y
    PositionCamera CameraX()+((ScreenWidth()-l)/2),CameraY()-((ScreenHeight()-k)/2)
    DrawGame
DrawToScreen
EndFunction 
Luo:
    newVihu.VIHUT= New(VIHUT)
    newVihu\obj=CloneObject(vihu)
    newVihu\hp=4.0
    
Return 

Return 
tarkista:
    Nykyinen_maara = 0
For vihumää.VIHUT = Each VIHUT
    Nykyinen_maara + 1
Next vihumää
    
    If Nykyinen_maara < Maksimi Then Gosub luo
Return 
EDIT:

Nyt toimii kaappaus, mutta kun olen tiputtanut toisen ja yrittänyt ottaa toista tiputuksen jälkeen hallintaan, niin se tiputettu on taas sama jota hallitsen ei se toinen. Apuva:

Code: Select all

Include "ide\cbJanelas.cb"
'Pääohjelma

SCREEN 400,300,0,0

FrameLimit 40

Type RAKETIT
   Field obj
EndType 
Type ASTEROIDIT
   Field obj
   Field hp
EndType
Type VIHUT
   Field obj
   Field hp#
   Field id
EndType 

Const TUTKA_X=225
Const TUTKA_Y=100
Const TUTKA_KOKO=50
 
maksimi=2

Global hp

hp#=100.0

kamera=MakeImage(200,150) 

space=MakeImage(400,300)

DrawToImage space

For i=1 To 100 

    Dot Rand(0,399),Rand(0,299)

Next i
 
DrawToScreen 

world=MakeObjectFloor()

PositionObject world,0,0,-500

PaintObject world,space

sina=LoadObject("media\sinä.bmp",72)

energia=LoadObject("media\energia.bmp")

hiiri=LoadImage("media\hiiri.bmp")

meteori=LoadObject("media\meteori.bmp")
 ShowObject meteori,OFF 
pu=LoadObject("media\power-up.bmp")

ma=LoadObject("media\musta-aukko.bmp",72)

raketti=LoadObject("media\Kranaatti.jpg")
ShowObject raketti,OFF 
vihu=LoadObject("media\vihu.bmp",72)
ShowObject vihu,OFF 
pää=LoadObject("media\päävihu.bmp")
h=MakeObject()
n=2
Repeat 

    ClsColor 56,62,184 

ShowMouse hiiri
If pause Then

Else 

 PositionObject h,MouseWX(),MouseWY()

    Gosub tarkista

    Color 255,255,255

    Text 251,9,"hp: "+hp

    PositionObject pää,Int(750.1994),Int(-17.1)

    If LeftKey() Then TurnObject sina,5
    If RightKey() Then TurnObject sina, -5
    If UpKey() Then MoveObject sina,n
    If DownKey() Then MoveObject sina,-n

    If KeyDown(42) Or KeyDown(54) Then n=8 Else n=2

If KeyHit(cbkeyspace) And reload=0 Then 
   
    newRaketti.RAKETIT= New(RAKETIT)
    newRaketti\obj=CloneObject(raketti)
    CloneObjectPosition newRaketti\obj,sina
    CloneObjectOrientation newRaketti\obj,sina
      
    MoveObject newRaketti\obj,40
      
    reload=4
EndIf 
   
i=0
   
For lVihu.VIHUT= Each VIHUT
    For iRaketti.RAKETIT= Each RAKETIT

    MoveObject iRaketti\obj,6
    If After(lVihu)<>NULL Then 
    If ObjectsOverlap(lVihu\obj,iRaketti\obj,3) Then 
      id.VIHUT=lVihu
   EndIf 
          If id=lVihu Then 
         PositionObject lVihu\obj,ObjectX(h),ObjectY(h)
       EndIf 
  EndIf 




   i=i+1
   Next iRaketti
Next lVihu 


   
If reload>0 Then reload=reload-1
   
   Text 248,60,"Ladatut ammukset: "+i
EndIf    
If KeyHit(cbkeyP) Then pause=Not pause
    camera(kamera,ObjectX(sina),ObjectY(sina))

        DrawImage kamera,0,0

  

 DrawScreen

Forever 

Function nappi(Teksti$,x,y,leveys=0,korkeus=0)

  leveys1=leveys
  korkeus1=korkeus
  
  If leveys1=0 Then leveys2=TextWidth(Teksti)
  If korkeus1=0 Then korkeus2=TextHeight(Teksti)
  
   'Napin pohjaväri. EI TEKSTIN VÄRI!
   
   r=getRGB(RED)
   g=getRGB(GREEN)
   b=getRGB(BLUE)
   
   Color r,g,b
   
   If r=0 And g=0 And b=0 Then 
   
   r1=255
   
   g1=255
   
   b1=255
   
   Else
      
   r1=0
   
   g1=0
   
   b1=0
   
   EndIf
   
   Box x,y,leveys2,korkeus2
   
   Color r1,r1,r1
   
   Text x,y,Teksti

     If MouseX() >=x And MouseX()<= x+leveys2 And MouseY() >= y And MouseY() <= y+korkeus2 Then 
     
       in=True 
       
     Else 
     
       in=False 
       
     EndIf 
     
   If in=True And MouseHit(1) Then 
   
     painettu=True
   
   Else 
   
     painettu=False
     
   EndIf 
   
  Return painettu
  
EndFunction 

Function VähennäHp(maara#)

hp=hp-maara

Return hp#

EndFunction 

Function camera(img,x,y)

l=ImageWidth(img)
k=ImageHeight(img)

UpdateGame

DrawToImage img
    ClsColor cbblack
    Cls
    PositionCamera x,y
    PositionCamera CameraX()+((ScreenWidth()-l)/2),CameraY()-((ScreenHeight()-k)/2)
    DrawGame
DrawToScreen
EndFunction 
Luo:
    newVihu.VIHUT= New(VIHUT)
    newVihu\obj=CloneObject(vihu)
    newVihu\hp=4.0
Return 

Return 
tarkista:
    Nykyinen_maara = 0
For vihumää.VIHUT = Each VIHUT
    Nykyinen_maara + 1
Next vihumää
    
    If Nykyinen_maara < Maksimi Then Gosub luo
Return 


[/edit]

Re: Tyhmät kysymykset (I/2010)

Posted: Thu Jan 07, 2010 7:30 pm
by Jonez
Tapojahan on monia, joista yksinkertaisin taitaa olla suora If-lauseen käyttö heti silmukassa. Et kuitenkaan taida hakea tätä. Funktiolla ConvertToInteger() voi ottaa jäsenmuuttujan osoitteen ylös, ja funktiolla ConvertToType() taas saadaan muuttujan sisältämä osoite takaisin jäseneksi.

Tavallisin tapa käyttää näitä on syöttää osoite funktioon, jonka ansiosta voimme käsitellä yksittäistä jäsentä ilman että käymme kokoelmaa uudestaan läpi. Cb:ssä ei itse jäsen kelpaa argumentiksi.

Esimerkkikoodi:

Code: Select all

Type laatikot
    Field x
    Field y
EndType

//Luodaan kaksi laatikko
nl.laatikot = New( laatikot )
nl\x = 10
nl\y = 50

nl.laatikot = New( laatikot )
nl\x = 100
nl\y = 50

Repeat 
    //Käydään laatikot läpi
    For il.laatikot = Each laatikot
        Box il\x, il\y, 40, 40, 0 'piirretään laatikko, koko 40x40
        
        //Jos hiiri on laatikon päällä, otetaan kyseisen jäsenen osoite ylös.
        If MouseX() > il\x And MouseY() > il\y And MouseX() < il\x + 40 And MouseY() < il\y + 40 Then
            päälläId.laatikot = ConvertToInteger( il )
        EndIf

        //Jos juuri tämän jäsenen osoite on tiedossa (eli hiiri oli viimeksi päällä),
        //piirretään umpinainen laatikko
        If päälläId = il Then Box il\x, il\y, 40, 40   
    Next il
    
    DrawScreen
Forever
Edit. edellinen koodi ei muuten edes vaadi ConvertToIntegeriä. Myös seuraavanlainen sijoitusoperaatio on mahdollinen: päälläId.laatikot = il. Em. funktioita tarvitset sitten kun otat omat funktiot mukaan.

Edit2. Toinen tapa on tietenkin tehdä ylimääräinen tyyppimuuttuja kokoelmaan, joka kertoo onko alusta ammuttu ja vaikka kuinka monta kertaa.

Re: Tyhmät kysymykset (I/2010)

Posted: Thu Jan 07, 2010 9:50 pm
by Hene
Miten toteuttaa seuraavanlainen systeemi:
Jos salasana = oikein, mene kohtaan X
Jos salasana = väärin, mene kohtaan Y

Tästäkin muistaakseni jokin ohje löytyy manuaalista, mutta komentoa en muista... :/

Re: Tyhmät kysymykset (I/2010)

Posted: Thu Jan 07, 2010 10:59 pm
by Herra Siili
Otat ensin inputilla salasanan talteen. Tarkistuksen voi tehdä näin:

Code: Select all

if SalasanaOikein() then
    goto x
else
    goto y
endif

Re: Tyhmät kysymykset (I/2010)

Posted: Thu Jan 07, 2010 11:48 pm
by Image
Huomenta vaan kaikille joo. Kysyisin että miten autoon saa ne renkaanjäljet? Oon muutenki vähä pihalle noista efekteistä, joten valaiskaa muullakin tavalla tätä asiaa :D esim että miten saa tankin, ja sen piipun kääntymään eri napeista ynms..

Re: Tyhmät kysymykset (I/2010)

Posted: Thu Jan 07, 2010 11:54 pm
by Jonez
Yksi tapa tehdä renkaanjäljet on piirtää ne erilliseen kuvaan. Komennoilla DrawToImage ja DrawImage pitäisi onnistua.

Tankki ja piippu kannattaa tehdä kahdella erillisellä objektilla / kuvalla. Piippu yksinkertaisesti siirretään silmukan joka kierroksella tankin kohdalle ja asetetaan kulmaan jossa sen pitäisi olla. Objekteja voi siirrellä mm. komennoilla PositionObject ja CloneObjectPosition.

Re: Tyhmät kysymykset (I/2010)

Posted: Fri Jan 08, 2010 9:01 am
by Image
Jonez wrote:Yksi tapa tehdä renkaanjäljet on piirtää ne erilliseen kuvaan. Komennoilla DrawToImage ja DrawImage pitäisi onnistua.

Tankki ja piippu kannattaa tehdä kahdella erillisellä objektilla / kuvalla. Piippu yksinkertaisesti siirretään silmukan joka kierroksella tankin kohdalle ja asetetaan kulmaan jossa sen pitäisi olla. Objekteja voi siirrellä mm. komennoilla PositionObject ja CloneObjectPosition().
Selvä kiitos... Pitää yrittää väsätä :P