Tyhmät kysymykset (I/2010)

Voit pyytää apua ohjelmointiongelmiin täältä.
Locked
User avatar
Zero
Lead Developer
Lead Developer
Posts: 725
Joined: Sun Aug 26, 2007 2:30 pm
Location: Helsinki, Finland
Contact:

Tyhmät kysymykset (I/2010)

Post by Zero » Mon Jan 04, 2010 10:08 am

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!
CoolBasic henkilökuntaa
Johtava Suunnittelija
CoolBasic V3, CoolBasic Classic

http://www.coolbasic.com/blog

User avatar
skorpioni-cb
Advanced Member
Posts: 364
Joined: Wed Dec 03, 2008 4:48 pm
Location: Turku

Re: Tyhmät kysymykset (I/2010)

Post by skorpioni-cb » Mon Jan 04, 2010 5:52 pm

No jos tähän saa kirjoittaa, niin eka kysymys täällä:

miten heksadesimaalivärikoodeja voi muuntaa muotoon RGB (HTML värikoodeista->RGB kooreiksi.)
Minä en tiedä mitä tiedän, mutta sen tiedän ettei se ole mitään kaunista.

DatsuniG
Advanced Member
Posts: 367
Joined: Fri Aug 15, 2008 9:57 pm

Re: Tyhmät kysymykset (I/2010)

Post by DatsuniG » Mon Jan 04, 2010 6:05 pm

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]
Hengität nyt manuaalisesti.

martti
Newcomer
Posts: 27
Joined: Mon Aug 31, 2009 6:21 pm

Re: Tyhmät kysymykset (I/2010)

Post by martti » Tue Jan 05, 2010 6:42 pm

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! :)

Last edited by martti on Tue Jan 05, 2010 7:43 pm, edited 2 times in total.
OpenTTD

Projektit:
  • Land of guy's 10.0%
ylimääräistä:
---------------------------- ...kyläkaupunkiin.

DatsuniG
Advanced Member
Posts: 367
Joined: Fri Aug 15, 2008 9:57 pm

Re: Tyhmät kysymykset (I/2010)

Post by DatsuniG » Tue Jan 05, 2010 6:51 pm

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()
Hengität nyt manuaalisesti.

Hene
Active Member
Posts: 122
Joined: Wed Apr 22, 2009 8:13 pm

Re: Tyhmät kysymykset (I/2010)

Post by Hene » Tue Jan 05, 2010 7:25 pm

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ä.
"Baby," I said. "I'm a genius but nobody knows it but me."

User avatar
Rufi
Member
Posts: 50
Joined: Fri Dec 21, 2007 12:12 pm

Re: Tyhmät kysymykset (I/2010)

Post by Rufi » Tue Jan 05, 2010 8:08 pm

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 ^^,

Last edited by Rufi on Tue Jan 05, 2010 9:10 pm, edited 2 times 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.

User avatar
tuhoojabotti
Advanced Member
Posts: 485
Joined: Tue Aug 28, 2007 3:53 pm
Location: Suomi, Finland
Contact:

Re: Tyhmät kysymykset (I/2010)

Post by tuhoojabotti » Tue Jan 05, 2010 8:36 pm

Haulla löytyi melkein heti: viewtopic.php?f=10&t=1511&p=25495&hilit ... kko#p25495 Saa käyttää!
Imagedev.tuhoojabotti.com — “Programmer (noun): An organism that turns caffeine into code.”

Koodi

Re: Tyhmät kysymykset (I/2010)

Post by Koodi » Tue Jan 05, 2010 9:57 pm

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

User avatar
Koodiapina
Forum Veteran
Posts: 2396
Joined: Tue Aug 28, 2007 4:20 pm
Contact:

Re: Tyhmät kysymykset (I/2010)

Post by Koodiapina » Tue Jan 05, 2010 10:03 pm

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 :)
Last edited by Koodiapina on Tue Jan 05, 2010 10:12 pm, edited 1 time in total.
Olen liian älykäs ollakseni väärässä. Jos olet kanssani eri mieltä, suosittelen sinua pohtimaan omaa elämänkatsomustasi ja sen perusteita.

User avatar
Ilmuri
Developer
Developer
Posts: 277
Joined: Sun Aug 26, 2007 2:46 pm
Location: \o

Re: Tyhmät kysymykset (I/2010)

Post by Ilmuri » Tue Jan 05, 2010 10:05 pm

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.
CoolBasic henkilökuntaa
Kehittäjä
CoolBasic Classic

User avatar
ezbe
Tech Developer
Tech Developer
Posts: 93
Joined: Fri May 08, 2009 6:53 pm

Re: Tyhmät kysymykset (I/2010)

Post by ezbe » Tue Jan 05, 2010 10:43 pm

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.

Koodi

Re: Tyhmät kysymykset (I/2010)

Post by Koodi » Tue Jan 05, 2010 11:33 pm

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 

User avatar
skorpioni-cb
Advanced Member
Posts: 364
Joined: Wed Dec 03, 2008 4:48 pm
Location: Turku

Re: Tyhmät kysymykset (I/2010)

Post by skorpioni-cb » Thu Jan 07, 2010 7:09 pm

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]
Last edited by skorpioni-cb on Fri Jan 08, 2010 2:36 pm, edited 1 time in total.
Minä en tiedä mitä tiedän, mutta sen tiedän ettei se ole mitään kaunista.

User avatar
Jonez
Devoted Member
Posts: 575
Joined: Mon Aug 27, 2007 8:37 pm

Re: Tyhmät kysymykset (I/2010)

Post by Jonez » Thu Jan 07, 2010 7:30 pm

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.
-Vuoden 2008 aloittelijan ystävä -palkinnon voittaja-
Image <- protestipelikilpailun voittaja.
Space War

Hene
Active Member
Posts: 122
Joined: Wed Apr 22, 2009 8:13 pm

Re: Tyhmät kysymykset (I/2010)

Post by Hene » Thu Jan 07, 2010 9:50 pm

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... :/
"Baby," I said. "I'm a genius but nobody knows it but me."

User avatar
Herra Siili
Advanced Member
Posts: 308
Joined: Tue Nov 25, 2008 9:06 pm
Location: Viitasaari, Keski-Suomi
Contact:

Re: Tyhmät kysymykset (I/2010)

Post by Herra Siili » Thu Jan 07, 2010 10:59 pm

Otat ensin inputilla salasanan talteen. Tarkistuksen voi tehdä näin:

Code: Select all

if SalasanaOikein() then
    goto x
else
    goto y
endif
a.k.a. Hedge

Image
Member
Posts: 59
Joined: Sat May 09, 2009 3:28 pm

Re: Tyhmät kysymykset (I/2010)

Post by Image » Thu Jan 07, 2010 11:48 pm

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..

User avatar
Jonez
Devoted Member
Posts: 575
Joined: Mon Aug 27, 2007 8:37 pm

Re: Tyhmät kysymykset (I/2010)

Post by Jonez » Thu Jan 07, 2010 11:54 pm

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.
Last edited by Jonez on Fri Jan 08, 2010 10:53 am, edited 1 time in total.
-Vuoden 2008 aloittelijan ystävä -palkinnon voittaja-
Image <- protestipelikilpailun voittaja.
Space War

Image
Member
Posts: 59
Joined: Sat May 09, 2009 3:28 pm

Re: Tyhmät kysymykset (I/2010)

Post by Image » Fri Jan 08, 2010 9:01 am

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

Locked