Tyhmät kysymykset (I/2009)

Voit pyytää apua ohjelmointiongelmiin täältä.
User avatar
Jani
Devoted Member
Posts: 741
Joined: Fri Oct 31, 2008 5:53 pm

Re: Tyhmät kysymykset

Post by Jani » Fri Jan 09, 2009 7:07 pm

Miten saan suoritettua tiedostosta luetun komennon?
Tai voisiko joku tehdä semmosen?
Dead men tell no tales. Also, Python rocks!
Codegolf: 99 bottles of beer (oneliner) - Water map partition

User avatar
temu92
Web Developer
Web Developer
Posts: 1226
Joined: Mon Aug 27, 2007 9:56 pm
Location: Gamindustri
Contact:

Re: Tyhmät kysymykset

Post by temu92 » Fri Jan 09, 2009 7:47 pm

Parseroimalla tekstitiedostosta sen komennon ja sitten suorittamalla sen, duh.

User avatar
Jani
Devoted Member
Posts: 741
Joined: Fri Oct 31, 2008 5:53 pm

Re: Tyhmät kysymykset

Post by Jani » Fri Jan 09, 2009 7:56 pm

Siis tuon kyllä tiedän.
Minulla on katsos niin että niitä komentoja voi lisätä sinne tekstitedostton... :?

Esim.

Code: Select all

***komennot.txt***
OpenToEdit
WriteByte
CloseFile
Ja sitten lisää sinne uuden rivin ja kääntäjän pitäisi osata suorittaa se...
Dead men tell no tales. Also, Python rocks!
Codegolf: 99 bottles of beer (oneliner) - Water map partition

Awaclus
Forum Veteran
Posts: 2939
Joined: Tue Aug 28, 2007 2:50 pm

Re: Tyhmät kysymykset

Post by Awaclus » Fri Jan 09, 2009 8:07 pm

Nyt tuli ongelma. Mielestäni ohjelman pitäisi toimia edes jotenkin, mutta ruudulla näkyy vain mustaa. Jutut on vielä keskeneräisiä siellä ja se ei ole läheskään sellainen kun pitäisi, mutta kai edes jotain pitäisi näkyäkin?

Niin asia on nyt korjattu. Seuraava kysymys:
Nyt kun laitan For...Next-looppiin koodin

Code: Select all

If ObjectsOverlap (iVihu\obj, heebo) Then
  Health = Health-1
  If Health = 0 Then MakeError "Oudot hihhulit tappoivat sinut!"
  EndIf
niin kaikki toimii niin kuin pitääkin. Mutta entäs sitten jos pitäisi tuhota tuo objekti iVihu\obj, kun siihen törmää jokin ammuksista (iAmmus\obj), niin miten sen teen?

EDIT: nyt mavittaa tämmöinen koodi:

Code: Select all

Type VIHUT
 Field obj
EndType

Type AMMUKSET
 Field obj
EndType

FrameLimit 40


vihu=LoadObject("Media\guy.bmp", 72)
ShowObject vihu,OFF


ammus=LoadObject("media\bullet.bmp")
ShowObject ammus,OFF


heebo=LoadObject("media\soldier.bmp", 72)

AddText "Nuolista kääntyypi, Space ampuu!"

Konekivaarintehot=1 'vielä aavistuksen turha
Kills=0 'kuin myös
Health=2000
Repeat

 'Update Tuning
 If LeftKey() Then TurnObject heebo,5
 If RightKey() Then TurnObject heebo,-5
 If UpKey() Then MoveObject heebo, 3
 If DownKey() Then MoveObject heebo, -2
 
 If KeyDown(cbkeyspace) And reload < 1 Then
 
 uusAmmus.AMMUKSET= New(AMMUKSET)
 uusAmmus\obj=CloneObject(ammus)
 CloneObjectPosition uusAmmus\obj, heebo
 CloneObjectOrientation uusAmmus\obj, heebo
 MoveObject uusAmmus\obj, 24
 
 reload=8
 EndIf
 
 If vihutimer = 0 Then 
 uusVihu.VIHUT= New(VIHUT)
 uusVihu\obj=CloneObject(vihu)
 PositionObject uusVihu\obj, Rnd (0,640), Rnd(0,480)
 vihutimer = 15
 EndIf
 
 'Update bullwts
 For iAmmus.AMMUKSET= Each AMMUKSET
  MoveObject iAmmus\obj,6
  
  i=i+1

 Next iAmmus
 
 
 'Update vihulliset
  For iVihu.VIHUT= Each VIHUT ' update vihullaiset
   PointObject iVihu\obj, heebo
   MoveObject iVihu\obj, 2
   If ObjectsOverlap (iVihu\obj, heebo) Then
   Health = Health-1
   If Health = 0 Then MakeError "Oudot hihhulit tappoivat sinut!"
   EndIf
   If ObjectsOverlap (iVihu\obj, iAmmus\obj) Then
   DeleteObject iAmmus\obj
   DeleteObject iVihu\obj
   EndIf
  Next iVihu
  
For iVihu.VIHUT = Each VIHUT
 For iAmmus.AMMUKSET = Each Ammukset
  If ObjectsOverlap(iVihu,iAmmus) Then
   DeleteObject iVihu\obj
   DeleteObject iAmmus\obj
   Delete iVihu
   Delete iAmmus
  EndIf
 Next iAmmus
Next iVihu

 
 If reload>0 Then reload=reload-Konekivaarintehot
 If vihutimer>0 Then vihutimer=vihutimer-1
 
 DrawScreen
 
Forever
Last edited by Awaclus on Fri Jan 09, 2009 10:45 pm, edited 2 times in total.

User avatar
temu92
Web Developer
Web Developer
Posts: 1226
Joined: Mon Aug 27, 2007 9:56 pm
Location: Gamindustri
Contact:

Re: Tyhmät kysymykset

Post by temu92 » Fri Jan 09, 2009 9:21 pm

Jani wrote:Ja sitten lisää sinne uuden rivin ja kääntäjän pitäisi osata suorittaa se...
Viilataan pilkkua: Coolbasicilla ei voi tehdä kääntäjää, tulkin korkeintaan. Kääntäjä ehkä DLL:llä mutta se kai oli kiellettyä Zeron mukaan (ainakin jos on samat komennot kuin CB:ssä)

Mutta, et pysty tekemään tuollaista vain tostanoin. Sun pitää koodata myös niille komennoille se funktio jonka ne suorittaa. Eihän siinä olisi mitään järkeä että sanot "Suklaapatukka" ja kädessäsi on sellainen. Tuo on vähän sama asia mitä yrität tehdä. Luoda tyhjää tyhjään.

Ja vielä tarkennetaan myös ettei CB:ssä ole PHP:n eval funktion vastaavaa versiota.

User avatar
Jani
Devoted Member
Posts: 741
Joined: Fri Oct 31, 2008 5:53 pm

Re: Tyhmät kysymykset

Post by Jani » Fri Jan 09, 2009 9:53 pm

Onko tämmöinen mahdollista?:
Tein txt:n jossa luki:

Code: Select all

exit: End
Onko jotenkin mahdollista suorittaa tuo End tuosta muuten kuin näin:

Code: Select all

...koodia

select {komento}
    case "End"
        End
endselect
?

EDIT: sain ratkaistua mutta nyt tuli toinen onglema:
Kun tekstitiedostossa lukee:

Code: Select all

Select joku
    Case 5
        jotain
EndSelect
Eli kun CoolBasicillä kirjoittaa tuohon lisää, niin se uusi teksti tulisi tuon EndSelect tekstin tilalle?

EDIT: Kaikki hoidettu
Dead men tell no tales. Also, Python rocks!
Codegolf: 99 bottles of beer (oneliner) - Water map partition

User avatar
Jani
Devoted Member
Posts: 741
Joined: Fri Oct 31, 2008 5:53 pm

Re: Tyhmät kysymykset

Post by Jani » Sat Jan 10, 2009 1:50 pm

Minä taas...
Onko mahdollista laittaa laatikko vinoon?
Jos ei, niin voisiko joku tehdä semmoisen funktion?
Dead men tell no tales. Also, Python rocks!
Codegolf: 99 bottles of beer (oneliner) - Water map partition

User avatar
temu92
Web Developer
Web Developer
Posts: 1226
Joined: Mon Aug 27, 2007 9:56 pm
Location: Gamindustri
Contact:

Re: Tyhmät kysymykset

Post by temu92 » Sat Jan 10, 2009 2:06 pm

On mahdollista tehdä tekemällä ensin funktioon kuvan teko sitä varten ja sitten se samainen funktio myös piirtää sen ensin oikeeseen kulmaan käännettynä. Äläkä nytte ruikuta täällä joka koodin pätkää mitä tarvitset. Ei niitä täällä kaikkia anneta, et sinä muuten mitään itsekään opi jos et tee itse mitään.

Vinkki: Kääntämistä ei pysty tekemään reaaliaikaisesti, jotenka kuva kannattaa tallentaa globaaliin muuttujaan tai taulukkoon tai sitten pistää funktio palauttamaan kuva.

User avatar
-Z-
Devoted Member
Posts: 682
Joined: Tue Aug 28, 2007 3:33 pm
Location: In ur danmaku, grazin ur bullets

Re: Tyhmät kysymykset

Post by -Z- » Sat Jan 10, 2009 2:10 pm

Jani wrote:Minä taas...
Onko mahdollista laittaa laatikko vinoon?
Jos ei, niin voisiko joku tehdä semmoisen funktion?
Tästä saat tällaisen täyttämättömän neliön. Ei ollut mitään tekemistä niin koodasin nopsasti.

Code: Select all

Repeat 

    i#+1

    RotBox(200,150,20,i)

    DrawScreen
Forever

Function RotBox(XPosition,YPosition,Range,angle)
    Line XPosition+Sin(angle)*Range, YPosition+Cos(angle)*Range,XPosition+Sin(WrapAngle(angle)-90)*Range, YPosition+Cos(WrapAngle(angle)-90)*Range
    Line XPosition+Sin(WrapAngle(angle)-90)*Range, YPosition+Cos(WrapAngle(angle)-90)*Range,XPosition+Sin(WrapAngle(angle)-180)*Range, YPosition+Cos(WrapAngle(angle)-180)*Range
    Line XPosition+Sin(WrapAngle(angle)-180)*Range, YPosition+Cos(WrapAngle(angle)-180)*Range,XPosition+Sin(WrapAngle(angle)+90)*Range, YPosition+Cos(WrapAngle(angle)+90)*Range
    Line XPosition+Sin(WrapAngle(angle)+90)*Range, YPosition+Cos(WrapAngle(angle)+90)*Range,XPosition+Sin(angle)*Range, YPosition+Cos(angle)*Range
End Function
"Fallout 3 (#10) marked a shift in the industry, a move that saw the western RPG begin to surpass its Japanese counterparts." -IGN top 100 RPGs of all time

E.T.
Newcomer
Posts: 42
Joined: Thu Jul 03, 2008 9:33 am

Re: Tyhmät kysymykset

Post by E.T. » Sat Jan 10, 2009 2:23 pm

MAV tulee siitä kun yrität tarkistaa ammuksen osumisen viholliseen käymättä ammuksia läpi. Toinen MAV tulee kun poistat vihun, mutta yrität vielä tarkistaa muiden ammusten osumisen samaan vihuun.

Code: Select all

Type VIHUT
Field obj
EndType

Type AMMUKSET
Field obj
EndType

FrameLimit 40


vihu=LoadObject("Media\guy.bmp", 72)
ShowObject vihu,OFF


ammus=LoadObject("media\bullet.bmp")
ShowObject ammus,OFF


heebo=LoadObject("media\soldier.bmp", 72)

AddText "Nuolista kääntyypi, Space ampuu!"

Konekivaarintehot=1 'vielä aavistuksen turha
Kills=0 'kuin myös
Health=2000
Repeat

'Update Tuning
If LeftKey() Then TurnObject heebo,5
If RightKey() Then TurnObject heebo,-5
If UpKey() Then MoveObject heebo, 3
If DownKey() Then MoveObject heebo, -2

If KeyDown(cbkeyspace) And reload < 1 Then

uusAmmus.AMMUKSET= New(AMMUKSET)
uusAmmus\obj=CloneObject(ammus)
CloneObjectPosition uusAmmus\obj, heebo
CloneObjectOrientation uusAmmus\obj, heebo
MoveObject uusAmmus\obj, 24

reload=8
EndIf

If vihutimer = 0 Then
uusVihu.VIHUT= New(VIHUT)
uusVihu\obj=CloneObject(vihu)
PositionObject uusVihu\obj, Rnd (0,640), Rnd(0,480)
vihutimer = 15
EndIf

'Update bullwts
For iAmmus.AMMUKSET= Each AMMUKSET
  MoveObject iAmmus\obj,6
 
  i=i+1

Next iAmmus


'Update vihulliset
  For iVihu.VIHUT= Each VIHUT ' update vihullaiset
   PointObject iVihu\obj, heebo
   MoveObject iVihu\obj, 2
   If ObjectsOverlap (iVihu\obj, heebo) Then
   Health = Health-1
   If Health = 0 Then MakeError "Oudot hihhulit tappoivat sinut!"
   EndIf

  Next iVihu
 
For iVihu.VIHUT = Each VIHUT
tuhoa=OFF
For iAmmus.AMMUKSET = Each Ammukset
  If ObjectsOverlap(iVihu\obj,iAmmus\obj) Then
    DeleteObject iAmmus\obj
    Delete iAmmus
    tuhoa=ON
  EndIf
Next iAmmus
If tuhoa Then
    Delete iVihu
    DeleteObject iVihu\obj
EndIf
Next iVihu


If reload>0 Then reload=reload-Konekivaarintehot
If vihutimer>0 Then vihutimer=vihutimer-1

DrawScreen

Forever
Quidquid latine dictum sit, altum videtur.
Voitot: Viikkokisa XVII

E.T.
Newcomer
Posts: 42
Joined: Thu Jul 03, 2008 9:33 am

Re: Tyhmät kysymykset

Post by E.T. » Sat Jan 10, 2009 2:24 pm

EDIT:

Miksi viesti tuli kahdesti?

Last edited by E.T. on Sat Jan 10, 2009 5:39 pm, edited 1 time in total.
Quidquid latine dictum sit, altum videtur.
Voitot: Viikkokisa XVII

IceCube

Re: Tyhmät kysymykset

Post by IceCube » Sat Jan 10, 2009 3:22 pm

Code: Select all

Dim AMMUS_ELOSSA(100)
Dim AMMUS_OBJ(100)   

FrameLimit 40 

 Color cbOrange
    Box 20,20,360,260,OFF  

mappi=LoadObject ("Media\level.bmp")


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

 

AddText "Nuolista ohjaa, CTRL=ampuu"

Repeat

Dim botit(8, 4)

botteja = 8


Const masterbotti = 0
Const objekti = 0
Const energia = 1
Const hengissä = 2
Const ampuuko = 3
Const reload_botti = 4


botit(masterbotti, objekti) = LoadObject("soldier.bmp", 360)

ShowObject botit(masterbotti, objekti), OFF

For kloonattava = 1 To 8

    botit(kloonattava, objekti) = CloneObject(botit(masterbotti, objekti))
    
    botit(kloonattava, energia) = Rand(10, 20)

    botit(kloonattava, hengissä) = 1

    botit(kloonattava, ampuuko) = 1 
    
    botit(kloonattava, reload_botti) = 0
Next kloonattava


PositionObject botit(1, objekti), -465,865
PositionObject botit(2, objekti), 110,1120
PositionObject botit(3, objekti), -50,1120
PositionObject botit(4, objekti), 465,865
PositionObject botit(5, objekti), 465,705
PositionObject botit(6, objekti), 400,130
PositionObject botit(7, objekti), 400,480
PositionObject botit(8, objekti), 400,-130


dead_master = LoadObject("dead.bmp")


ShowObject dead_master, OFF


Dim dead_tekstuurit(7)

For kloonattava = 0 To 7
   
    dead_tekstuurit(kloonattava) = CloneObject(dead_master)
    
    ShowObject dead_tekstuurit(kloonattava), OFF
Next kloonattava



    'Ohjaa ukkoa NUOLILLA
    If LeftKey() Then TurnObject ukko,5
    If RightKey() Then TurnObject ukko,-5
    If UpKey() Then MoveObject ukko,2
    If DownKey() Then MoveObject ukko,-2   
   

   If KeyDown(cbKeyRControl) And reload=0 Then   
        Gosub LisääAmmus       
    EndIf
    'päivitä aseen lataaminen
    If reload>0 Then reload=reload-1

    
    GoSub PäivitäAmmukset


    DrawGame


   
    If KeyDown(cbKeyRControl) And reload=0 Then   
        Gosub LisääAmmus       
    EndIf
    'päivitä aseen lataaminen
    If reload>0 Then reload=reload-1


 
       

    CloneCameraPosition ukko
   
     
     
    
    DrawGame


    
   
       Gosub PäivitäAmmukset
   
    DrawScreen
Until EscapeKey()



End
'----------------------------------------------
LisääAmmus:


    For i=1 To 100
        If AMMUS_ELOSSA(i)=OFF Then
           
               
            AMMUS_ELOSSA(i)=ON
            AMMUS_OBJ(i)=CloneObject(pati)
               
           
            CloneObjectPosition AMMUS_OBJ(i),ukko
               
     
        CloneObjectOrientation  AMMUS_OBJ(i),ukko
           
         
            reload=5
         
            '
            Exit
        EndIf
    Next i
Return
'-----------------------------------------------
PäivitäAmmukset:

    For i=1 To 100
       If AMMUS_ELOSSA(i) Then
            MoveObject AMMUS_OBJ(i),6
           
            
   
           
   
                'ammus ylittää rajan -> tuhoa se
         
               
            
               
                'vapauta paikka tyhjäksi
                AMMUS_ELOSSA(i)=OFF
   
        EndIf
    Next i
Return 'palaa takaisin pääsilmukkaan
Tämä ei voi jostain kumman syystä ladata mitään. Ja on oikeassa paikassa. Helppiä KiiToS

E.T.
Newcomer
Posts: 42
Joined: Thu Jul 03, 2008 9:33 am

Re: Tyhmät kysymykset

Post by E.T. » Sat Jan 10, 2009 5:54 pm

Ensimmäiset lataukset onnistuvat, mutta sitten yrität ladata botin median sijaan siitä kansiosta, jossa ohjelma on.

Code: Select all

botit(masterbotti, objekti) = LoadObject("soldier.bmp", 360)
pitäisi olla

Code: Select all

botit(masterbotti, objekti) = LoadObject("Media\soldier.bmp", 360)
Sama juttu dead.bmp :n kanssa.
Lisäksi pyöritystä ei yleensä kannata laittaa joka suuntaan vaan mielummin vaikka viiden asteen välein
Quidquid latine dictum sit, altum videtur.
Voitot: Viikkokisa XVII

Boxi
Newcomer
Posts: 15
Joined: Wed Aug 06, 2008 9:51 pm

Re: Tyhmät kysymykset

Post by Boxi » Sun Jan 11, 2009 12:54 am

voiko coolbasicilla tehdä ohjelman joka tarkistaa vaikka joka toinen minuutti että onko jokin tietty ohjelma päällä, ja jos ei ole niin se käynnistäisi sen?

User avatar
temu92
Web Developer
Web Developer
Posts: 1226
Joined: Mon Aug 27, 2007 9:56 pm
Location: Gamindustri
Contact:

Re: Tyhmät kysymykset

Post by temu92 » Sun Jan 11, 2009 12:59 am

Ei ilman DLL:iä. Coolbasic kun on tehty pelien tekoon niin sen takia se ei sisällä kovin monipuolisia mahdollisuuksia tehdä mitään hyötyohjelmia.

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

Re: Tyhmät kysymykset

Post by Henkru » Sun Jan 11, 2009 1:20 am

Yksi tapa tuli mieleen jos ohjaisi tasklist.exen tulosteen tiedostoon ja lukisi sitä.

EDIT. Jos ei suoraan cb:n execute:lla saa kutsuttua "tasklist.exe > tiedosto" niin tekee sitten vaikka bat filun tätä varten. Tosin DLL olisi siistein vaihtoehto.

Jonhu
Active Member
Posts: 186
Joined: Mon Aug 04, 2008 5:45 pm

Re: Tyhmät kysymykset

Post by Jonhu » Wed Jan 14, 2009 3:36 pm

Miksi tämä ei tarkista osumista pikselin tarkasti?

Code: Select all

SCREEN 800,600

car = LoadObject("Media\car2.bmp",90)
guy = LoadObject("Media\pacman.bmp")
'guy = LoadObject("Media\car.bmp")

PositionObject car,100,100
Const MoveSpeed=4
Const TurnSpeed=2

Repeat

    MoveObject car,(KeyDown(cbkeyW)+UpKey())*MoveSpeed-(KeyDown(cbkeyS)+DownKey())*MoveSpeed
    TurnObject car,(KeyDown(cbkeyA)-RightKey())*TurnSpeed-(KeyDown(cbkeyD)-LeftKey())*TurnSpeed
    
    osuu=HitPossible(car,guy,400)
    
    DrawGame

    If osuu>0 Then Text 10,30,"Osuu" Else Text 10,30,"Ei osu"
    Text 10,10,"FPS: "+FPS()
    Text 10,50,"Etäisyys: "+osuu
    Text 10,100,"pix: "+GetPixel(MouseX(),MouseY())
    
    DrawScreen
    
Forever

Function HitPossible(obj1,obj2,MaxDistance)
    
    SX1#=ObjectSizeX(obj2)/2
    SY1#=ObjectSizeY(obj2)/2
    x1#=ObjectX(obj1)+ScreenWidth()/2
    y1#=-ObjectY(obj1)+ScreenHeight()/2
    x2#=ObjectX(obj2)+ScreenWidth()/2
    y2#=-ObjectY(obj2)+ScreenHeight()/2
    angle1#=ObjectAngle(obj1)
    'Lock SCREEN()
    For a=0 To MaxDistance-1
        CX#=x1#+Cos(angle1#)*a
        CY#=y1#-Sin(angle1#)*a
        
        If CY#<=SY1#+y2# And CY#>=-SY1#+y2# And CX#<=x2#+SX1# And CX#>=x2#-SX1# Then 'laatikko tarkastus
           If GetPixel(cx,cy) <> -16777216 Then Return a '  väri tarkistus
        EndIf
        Dot cx#,cy#
    Next a
    'Unlock
EndFunction
Last edited by Jonhu on Wed Jan 14, 2009 4:02 pm, edited 1 time in total.
Tekeillä pikkupelejä ja ohjelmia :)

User avatar
temu92
Web Developer
Web Developer
Posts: 1226
Joined: Mon Aug 27, 2007 9:56 pm
Location: Gamindustri
Contact:

Re: Tyhmät kysymykset

Post by temu92 » Wed Jan 14, 2009 3:42 pm

Mikset käytä ObjectsOverlapia? Tuo on vaikka kuinka paljon vaikeammin tehty kun sillä se onnistuisi seuraavasti:

Code: Select all

If ObjectsOverlap(object1, object2, 3) Then Print "Zomgz! Pikselintarkka törmäys!"

Jonhu
Active Member
Posts: 186
Joined: Mon Aug 04, 2008 5:45 pm

Re: Tyhmät kysymykset

Post by Jonhu » Wed Jan 14, 2009 3:46 pm

temu92 wrote:Mikset käytä ObjectsOverlapia? Tuo on vaikka kuinka paljon vaikeammin tehty kun sillä se onnistuisi seuraavasti:

Code: Select all

If ObjectsOverlap(object1, object2, 3) Then Print "Zomgz! Pikselintarkka törmäys!"
Menee vähän säädoksi ainakin minun mielestäni, jos joudut testailemaan useaa pistettä tuolla tavalla. Ideana on, että tuo functio kertoo osuuko objekti, jos jatkaa samaan suuntaan liikettä.. Laatikkokosketuksella toimii ihan hyvin, mutta tuo pikselintarkka ei toimi.
Tekeillä pikkupelejä ja ohjelmia :)

User avatar
temu92
Web Developer
Web Developer
Posts: 1226
Joined: Mon Aug 27, 2007 9:56 pm
Location: Gamindustri
Contact:

Re: Tyhmät kysymykset

Post by temu92 » Wed Jan 14, 2009 5:17 pm

Jaa tuollaista yrität. Jos käytät objektien omia kulmia, voit tarkistaa mahdolliset tulevat törmäykset käytämällä PickObject:ia. En muista nyt juuri sen tarkkoja ominaisuuksia (eli saiko pikselintarkkana).

Locked