Page 115 of 154

Re: Tyhmät kysymykset

Posted: Fri Jan 09, 2009 6:07 pm
by Jani
Miten saan suoritettua tiedostosta luetun komennon?
Tai voisiko joku tehdä semmosen?

Re: Tyhmät kysymykset

Posted: Fri Jan 09, 2009 6:47 pm
by temu92
Parseroimalla tekstitiedostosta sen komennon ja sitten suorittamalla sen, duh.

Re: Tyhmät kysymykset

Posted: Fri Jan 09, 2009 6:56 pm
by Jani
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...

Re: Tyhmät kysymykset

Posted: Fri Jan 09, 2009 7:07 pm
by Awaclus
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

Re: Tyhmät kysymykset

Posted: Fri Jan 09, 2009 8:21 pm
by temu92
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.

Re: Tyhmät kysymykset

Posted: Fri Jan 09, 2009 8:53 pm
by Jani
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

Re: Tyhmät kysymykset

Posted: Sat Jan 10, 2009 12:50 pm
by Jani
Minä taas...
Onko mahdollista laittaa laatikko vinoon?
Jos ei, niin voisiko joku tehdä semmoisen funktion?

Re: Tyhmät kysymykset

Posted: Sat Jan 10, 2009 1:06 pm
by temu92
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.

Re: Tyhmät kysymykset

Posted: Sat Jan 10, 2009 1:10 pm
by -Z-
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

Re: Tyhmät kysymykset

Posted: Sat Jan 10, 2009 1:23 pm
by E.T.
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

Re: Tyhmät kysymykset

Posted: Sat Jan 10, 2009 1:24 pm
by E.T.
EDIT:

Miksi viesti tuli kahdesti?


Re: Tyhmät kysymykset

Posted: Sat Jan 10, 2009 2:22 pm
by IceCube

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

Re: Tyhmät kysymykset

Posted: Sat Jan 10, 2009 4:54 pm
by E.T.
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

Re: Tyhmät kysymykset

Posted: Sat Jan 10, 2009 11:54 pm
by Boxi
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?

Re: Tyhmät kysymykset

Posted: Sat Jan 10, 2009 11:59 pm
by temu92
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.

Re: Tyhmät kysymykset

Posted: Sun Jan 11, 2009 12:20 am
by Henkru
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.

Re: Tyhmät kysymykset

Posted: Wed Jan 14, 2009 2:36 pm
by Jonhu
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

Re: Tyhmät kysymykset

Posted: Wed Jan 14, 2009 2:42 pm
by temu92
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!"

Re: Tyhmät kysymykset

Posted: Wed Jan 14, 2009 2:46 pm
by Jonhu
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.

Re: Tyhmät kysymykset

Posted: Wed Jan 14, 2009 4:17 pm
by temu92
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).