Tyhmät kysymykset (I/2009)

Voit pyytää apua ohjelmointiongelmiin täältä.
Jonhu
Active Member
Posts: 186
Joined: Mon Aug 04, 2008 5:45 pm

Re: Tyhmät kysymykset

Post by Jonhu »

temu92 wrote: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).
Thx sain nyt tehty function noilla.

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
PositionObject guy,-100,100
RotateObject car,180

Const MoveSpeed=4
Const TurnSpeed=2

ObjectPickable guy,3

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)
    
    DrawGame

    Line2(ObjectX(car)+ScreenWidth()/2,ScreenHeight()/2-ObjectY(car),ObjectAngle(car),osuu)
    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
    DrawScreen

Forever

Function Line2(x#,y#,ang#,pituus#)
    Line x#,y#,x# + Cos(ang#)*pituus#,y# - Sin(ang#)*pituus#
EndFunction

Function HitPossible(obj1,obj2)
    ObjectPick obj1
    o=PickedObject()
    If o = obj2 Then   
        Return Distance(PickedX(),PickedY(),ObjectX(obj1) ,ObjectY(obj1) )
    EndIf
EndFunction
Tekeillä pikkupelejä ja ohjelmia :)
Jani
Devoted Member
Posts: 741
Joined: Fri Oct 31, 2008 4:53 pm

Re: Tyhmät kysymykset

Post by Jani »

Miksi vain luku 200 tulee oikein?

Code: Select all

nums=IntP(100,100,200,0,0,0,0,0,0)

Text 1,1,IG(nums,1)+" + "+IG(nums,2)+" = "+IG(nums,3)

DrawScreen
WaitKey

DeleteMEMBlock nums

Function IntP(i1=0,i2=0,i3=0,i4=0,i5=0,i6=0,i7=0,i8=0,i9=0)
    Integer9=MakeMEMBlock(4*9)
    PokeInt Integer9,0,i1
    PokeInt Integer9,1,i2
    PokeInt Integer9,2,i3
    PokeInt Integer9,3,i4
    PokeInt Integer9,4,i5
    PokeInt Integer9,5,i6
    PokeInt Integer9,6,i7
    PokeInt Integer9,7,i8
    PokeInt Integer9,8,i9
    Return Integer9
EndFunction

Function IG(mem,number=1)
    Return PeekInt(mem,number-1)
EndFunction
Tiedän, se on tyhmästi tehty. Tein tuon kumminkin testaus mielessä. :geek:
Dead men tell no tales. Also, Python rocks!
Codegolf: 99 bottles of beer (oneliner) - Water map partition
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 »

Muistipaloja en ole käyttänyt mutta villinä veikkauksena sanon että johtuu siitä että olet laittanut PokeIntin 2. arvon 0, 1, 2... kun Int on 4 tavua eli se pitäisi mennä 0, 4, 8...

Plus taulukot ois kova homma osata :P
phons(koulussa)

Re: Tyhmät kysymykset

Post by phons(koulussa) »

Ekaks: Miks siel on 4*9? Se hidastaa jonkun verran. Pistä mielummin 36.
Toiseks: Miks siel on PeekInt(mem,number-1). jos sinne pistää nollan ni se voi vaik MAVittaa ja jotain.
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 »

phons(koulussa) wrote:Ekaks: Miks siel on 4*9? Se hidastaa jonkun verran. Pistä mielummin 36.
Ei pitäisi vaikuttaa mitään. Jos coolbasic on tehty järkevästi kuten sen luulen olevan, kääntäjä osaa laskea tuon kertolaskun jo etukäteen eikä se hidasta ollenkaan enää ajovaiheessa. Muutenkin kertolasku on nopeimpia operaatioita matematiikassa että vaikka tekisikin ajovaiheessa, ei eroa olisi ollenkaan.
KilledWhale
Tech Developer
Tech Developer
Posts: 545
Joined: Sun Aug 26, 2007 2:43 pm
Location: Liminka

Re: Tyhmät kysymykset

Post by KilledWhale »

temu92 wrote: Ei pitäisi vaikuttaa mitään. Jos coolbasic on tehty järkevästi kuten sen luulen olevan, kääntäjä osaa laskea tuon kertolaskun jo etukäteen eikä se hidasta ollenkaan enää ajovaiheessa. Muutenkin kertolasku on nopeimpia operaatioita matematiikassa että vaikka tekisikin ajovaiheessa, ei eroa olisi ollenkaan.
CoolBasicin tavukoodi kun sattuu olemaan melko optimoimatonta tällaisia etukäteen laskettuja systeemeitä on turha toivoa. Jo coolbasicin tavukoodia tutkimalla näkee heti että näin ei tehdä. Kertolasku on toki nopea mutta coolbasic ohjelmaa ei voi koskaan optimoida liikaa :D
CoolBasic henkilökuntaa
Kehittäjä

cbFUN Kello
cbSDL
Whale.dy.fi

<@cce> miltäs tuntuu olla suomen paras
TheFish
Developer
Developer
Posts: 477
Joined: Mon Aug 27, 2007 9:28 pm
Location: Joensuu

Re: Tyhmät kysymykset

Post by TheFish »

KilledWhale wrote:CoolBasicin tavukoodi kun sattuu olemaan melko optimoimatonta tällaisia etukäteen laskettuja systeemeitä on turha toivoa. Jo coolbasicin tavukoodia tutkimalla näkee heti että näin ei tehdä. Kertolasku on toki nopea mutta coolbasic ohjelmaa ei voi koskaan optimoida liikaa :D
Riippuu vähän tilanteesta. Jos se ei ole mitenkään aikakriittinen asia, ainakin minä teen sen mieluummin koodin kannalta selkeästi kuin optimoidusti. Voi sitä muokata myöhemminkin jos siitä muodostuu pullonkaula. Tuossa nelosella ja ysillä on molemmilla oma tarkoituksensa, joten ne on selkeämpi pitää erillään (etenkin kun tuo tuntuisi olevan tarkoitettu vain muistipalan alustamiseen joka suoritetaan vain kerran).
CoolBasic henkilökuntaa
Kehittäjä
Jani
Devoted Member
Posts: 741
Joined: Fri Oct 31, 2008 4:53 pm

Re: Tyhmät kysymykset

Post by Jani »

.Jotta ei nyt viedä tulta liian pitkälle, niin pitää tämän sanon;
En tuosta toki mitään ohjelmaa tee. Tuo oli vain ensimmäinen testi muistipaloilla 8-)
Dead men tell no tales. Also, Python rocks!
Codegolf: 99 bottles of beer (oneliner) - Water map partition
Kassu
Newcomer
Posts: 22
Joined: Wed Aug 29, 2007 5:32 pm

Re: Tyhmät kysymykset

Post by Kassu »

Pitää sitten tännekin kirjottaa jotain...
...eli tietääkö kukaan miten hyvin CoolBasic toimii jos F-Secure on asennettuna? Itellä oli F-Secure muutama vuosi sitten asennettu koneelle jolloin se aina epäili cbRun.exe:ä. Tähän ei myöskään auttanut se että valitsin aina käännettäessä "luota", sillä cbRun muttuu joka kerta kun kääntää uuden/muutetun koodin, jolloin F-Secure valitti sitä että sovellus on muuttunut ja piti varmistaa että uuteenkin sovellukseen pystyi luottamaan.
Eli haluaisin siis tietää miten uusi F-Secure toimii CB:n kanssa. (Käyttöjärjestelmänä Vista)

Ja jos joku ihmettelee miksi minulla juuri nyt ei ole anti-virusta asennettuna, niin se on siksi että käytän pääsääntöisesti Mac OS X:ää ja Windowsia(offlinessä) ainoastaan CB:n takia.
Jani
Devoted Member
Posts: 741
Joined: Fri Oct 31, 2008 4:53 pm

Re: Tyhmät kysymykset

Post by Jani »

Ota se ajonaikainen tarkistus pois. tai joku semmone.
Dead men tell no tales. Also, Python rocks!
Codegolf: 99 bottles of beer (oneliner) - Water map partition
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 »

Kassu wrote:Pitää sitten tännekin kirjottaa jotain...
...eli tietääkö kukaan miten hyvin CoolBasic toimii jos F-Secure on asennettuna? Itellä oli F-Secure muutama vuosi sitten asennettu koneelle jolloin se aina epäili cbRun.exe:ä. Tähän ei myöskään auttanut se että valitsin aina käännettäessä "luota", sillä cbRun muttuu joka kerta kun kääntää uuden/muutetun koodin, jolloin F-Secure valitti sitä että sovellus on muuttunut ja piti varmistaa että uuteenkin sovellukseen pystyi luottamaan.
Eli haluaisin siis tietää miten uusi F-Secure toimii CB:n kanssa. (Käyttöjärjestelmänä Vista).
Itsellä on nyt ollu F-Secure 2008 vuoden verran ja voin sanoa että ainakin itsellä se on toiminut niin hyvin kuin vaan voi. Asetuksia tweakkaamalla sen saa olemaan valittamatta siitä että cbRun.exe muuttuu joka käännöskerralla ja muutenkin asetuksia vaihtelemalla sen saa pitämään päänsä kiinni kuitenkaan tietoturvasta paljoa tinkimättä. Ajonaikainen sovellusten tarkistus kuitenkin pitää ottaa juuri pois, se on juuri se joka sen estää.
KankiKalle
Active Member
Posts: 170
Joined: Mon Jun 23, 2008 9:04 pm

Re: Tyhmät kysymykset

Post by KankiKalle »

Kassu: Mulla ainakin kyselee että luotanko tähän ohjelmaan ja sellasta muuta blaa blaa blaata.
En muista säädinkö jotakin F-Securen asetuksia ettei koko ajan kyselisi jotakin. Ja muista suorittaa CB järjestelmänvalvojana. Vista vaati sellaista.
Väsyttää niin ettei jaksa edes mennä lepäämään.
Kassu
Newcomer
Posts: 22
Joined: Wed Aug 29, 2007 5:32 pm

Re: Tyhmät kysymykset

Post by Kassu »

Kiitos kaikille. En ihan odottanu että vastaukset tulisi näinkin nopeesti, mutta mikäs siinä. Voinkai sitten huoletta asentaa F-Securen. Ja CB:tä oon jo pyörittäny vistalla kohta pari vuotta vistalla, että se vistan järjestelmänvalvoja juttu oli jo tiedossa.
Character
Active Member
Posts: 113
Joined: Thu Nov 27, 2008 2:16 pm

Re: Tyhmät kysymykset

Post by Character »

Olen jo kysynyt tätä mutta miten saan taulukoilla tehdyt biljardipallot kolmioon???
Ei onnistu vaikka mitä yritän. :shock:

Edit: Niitä palloja on 15 kuten kasipallossa
User avatar
Jonez
Devoted Member
Posts: 575
Joined: Mon Aug 27, 2007 8:37 pm

Re: Tyhmät kysymykset

Post by Jonez »

Tässä jonkinlainen tapa asettaa ne kolmioon. Jos todella haluat tehdä bilis-pelin, ja tarvitset oikeat pallot oikeisiin paikkoihin, suosittelen piirtämään pallot kuvatiedostoon peräkkäin tyyliin: "OOOOOOOOOOOOOOO", josta ohjelma sitten valitsee aina seuraavan pallon (DrawImageBox). Toinen tapa on tietenkin koodata jokainen koordinaatti jokaiselle pallolle erikseen. Ehkä hiukan tylsä ratkaisu, mutta toimiva.

Code: Select all

//Riveillä 10 - 16 luodaan ainoastaa muoto ja koordinaatit palloille. Älä vaihda mitään muuta kuin koordinaatteja (rivit 12 - 13). 
//Niillä saat asetettua pallot mihin tahansa ja mihin muotoon tahansa.
//Jos haluat esim. kolmion toisinpäin, kuten ne biljardissa olisivat, vaihda rivin 12 koordinaatit näin: '= 50 - y * 10'

Dim pallot( 14, 1 ) 'luodaan taulukko

Const KOKO = 10

//käydään pallot läpi
For y = 0 To 4
    For x = 0 To y
        pallot( palloja, 0 ) = 30 + x * KOKO - ( y * KOKO ) / 2 //pallojen x-koordinaatit.
        pallot( palloja , 1 ) = 10 + y * KOKO                   //pallojen y-koordinaatit.   
        palloja + 1                                             //joka rivissä on 1 pallo enemmän. Lisätään tässä
    Next x
Next y

Repeat

    //piirretään pallot
    For i = 0 To 14
        Circle pallot( i, 0 ), pallot( i, 1 ), KOKO
    Next i

    DrawScreen
Forever
//Edit:
Tässä on koodi jossa pallot piirretään kuvatiedostosta. Koska tein kuvan cb:n piirtokomennoilla (se luodaan aina koodin alussa), ja olen laiska, on pallot väärässä järjestyksessä. Siitä saa kuitenkin idean hyvin selville.

Code: Select all

Dim pallot( 14, 1 ) 'luodaan taulukko

Const KOKO = 20

imgPallot = MakeImage( 15 * KOKO, KOKO )

DrawToImage imgPallot
    For i = 0 To 14
        Circle i * KOKO , 0, KOKO, 0
        Text i * KOKO + KOKO / 2 - TextWidth( i + 1 ) / 2, -KOKO / 2 + TextHeight( i + 1 ) / 2, i + 1
    Next i
DrawToScreen

//käydään pallot läpi
For y = 0 To 4
    For x = 0 To y
        pallot( palloja, 0 ) = 50 + x * ( KOKO + 1 ) - ( y * KOKO ) / 2 //pallojen x-koordinaatit.
        pallot( palloja , 1 ) = 10 + y * KOKO                   //pallojen y-koordinaatit.   
        palloja + 1                                             //joka rivissä on 1 pallo enemmän. Lisätään tässä
    Next x
Next y

Repeat

    //piirretään pallot
    For i = 0 To 14
        DrawImageBox imgPallot, pallot( i, 0 ), pallot( i, 1 ), i * KOKO, 0, KOKO, KOKO
    Next i
    
    Text 5, 130, "Kuva palloista:"
    DrawImage imgPallot, 5, 150
    DrawScreen
Forever
-Vuoden 2008 aloittelijan ystävä -palkinnon voittaja-
Image <- protestipelikilpailun voittaja.
Space War
Character
Active Member
Posts: 113
Joined: Thu Nov 27, 2008 2:16 pm

Re: Tyhmät kysymykset

Post by Character »

Kiitos paljon. Katsotaan saanko tuosta jotain irti. :D
Jani
Devoted Member
Posts: 741
Joined: Fri Oct 31, 2008 4:53 pm

Re: Tyhmät kysymykset

Post by Jani »

En löytänyt haku-toiminnolla vastausta.
Elikkä voiko Execute komennolla käynnistäessä laittaa samalla käynnistysparametrit?

EDIT: pystyi näköjään :)
Dead men tell no tales. Also, Python rocks!
Codegolf: 99 bottles of beer (oneliner) - Water map partition
rami123
Advanced Member
Posts: 354
Joined: Mon Jun 23, 2008 8:20 pm
Location: Kittilä

Re: Tyhmät kysymykset

Post by rami123 »

osaako kukaan ratkaista tätä ongelmaa?

miksi heittää mavia kun yrittää ampua? kun ammus osuu vihuun se poistaa vihun hp stä voimansa verran..

Code: Select all

hp=100
voima=5
ammukset = 20

//tapot sekä pisteet

tapot=0
tapotpisteet=1000


Repeat//// 

//pelaajan ohjaus

PointObject pelaaja,hiiri

    If LeftKey() Then TurnObject pelaaja,5
    If RightKey() Then TurnObject pelaaja,-5
    If UpKey() Then MoveObject pelaaja,2
    If DownKey() Then MoveObject pelaaja,-2    


     If MouseHit (1) And reload=0 Then    
      luoti.AMMUS = New(AMMUS) 
      luoti\obj=CloneObject(pati) 
      luotihp=2
      ammukset - 1
      CloneObjectPosition luoti\obj,pelaaja               
      CloneObjectOrientation luoti\obj,pelaaja           
      reload=5       
EndIf

    If reload>0 Then reload=reload-1

     For luoti.AMMUS = Each AMMUS
      MoveObject luoti\obj,6 

       If Distance2(luoti\obj,pelaaja)>300  Then del=ON
           

           
            If del=ON
                DeleteObject luoti\obj
                Delete luoti
                del=OFF
     

      EndIf
      Next luoti

 

   
  If ammukset = 0 Then ////ammusten loppuminen
  reload=-1
EndIf 
   
  If ammukset < 1 Then ////ampuminen
  reload=5
EndIf 


//ALIENIT
  If luo>80
   newAlien.vihut= New(vihut)
   newAlien\obj=CloneObject(vihollinen1)

    PositionObject newAlien\obj,Rand(-1600,1000),Rand(1600,-1000)

           newAlien\id=Rand(1,2)
        If newAlien\id = 1 Then 
           newAlien\hp=Rand(130,190):newAlien\dmg=Rand(2,5):newAlien\score=Rand(10,30)
        EndIf
        If newAlien\id = 2 Then 
           PaintObject newAlien\obj,vihollinen2
           newAlien\hp=Rand(300,320):newAlien\dmg=Rand(5,8):newAlien\score=Rand(15,35)
        EndIf
                    luo=0         
                EndIf
                luo+1

  For iAlien.vihut= Each vihut      
     If ObjectSight (iAlien\obj,pelaaja) Then 
     PointObject iAlien\obj,pelaaja
     MoveObject iAlien\obj,4
   EndIf 

Next iAlien
 
////TÄSSÄ ONGELMA KOHDAT ALKAA!
 For luoti.AMMUS = Each AMMUS
      MoveObject luoti\obj,6 
      If ObjectsOverlap (luoti\obj,iAlien\obj) Then 
      newAlien\hp-voima
      EndIf 
      Next luoti

phons
Guru
Posts: 1056
Joined: Wed May 14, 2008 10:11 am

Re: Tyhmät kysymykset

Post by phons »

Pistä se viimeinen For - Next lauseke sinne alienin For - Next lausekkeen sisään niin silloin se tunnistaa sen alien\obj:kin.
Image
Character
Active Member
Posts: 113
Joined: Thu Nov 27, 2008 2:16 pm

Re: Tyhmät kysymykset

Post by Character »

Miten saan pelini kansioon exenä? Tarvitaanko siihen jotain erillistä ohjelmaa vai..?
Toivottavasti edes ymmärsitte mistä on kyse..
Locked