Tyhmät kysymykset (I/2009)

Voit pyytää apua ohjelmointiongelmiin täältä.
anttimoi
Newcomer
Posts: 25
Joined: Mon Aug 11, 2008 7:33 pm

Re: Tyhmät kysymykset

Post by anttimoi »

Miten saan makeimagella tehdyn kuvan jonkun objektin grafiikaksi?
Coolbasic roguelike-projekti menossa 8)
Progress bar @@@@@10%@@@@@
Pahasti jäätymässä...
Sly_Jack0
Devoted Member
Posts: 612
Joined: Mon Dec 10, 2007 8:25 am

Re: Tyhmät kysymykset

Post by Sly_Jack0 »

PaintObject objekti,-kuva
rami123
Advanced Member
Posts: 354
Joined: Mon Jun 23, 2008 8:20 pm
Location: Kittilä

Re: Tyhmät kysymykset

Post by rami123 »

mikä tässä nyt on?
en keksi mitään ratkaisua

voititvalikon jälkeen se ei näytä noita muita???

Code: Select all

voititvalikko:

   ClearObjects 
   ClearText
   
voitit = LoadImage ("voitit.png")

Repeat 

   DrawImage voitit,0,0


Color cbred 
Text 550,600,"PAINA ENTERIÄ"




If KeyHit (cbkeyreturn) Then Goto tekijät

DrawScreen 
Forever 
////////////////////////////////////////////////////////////////////////
'----------------------------------------------------------------------
tekijät:

  ClearObjects
  ClearText

Repeat

 Color cbred 
Text 10,40, "------------------------------------"
Text 30,60, "-----------------------------------------"
Text 30,80, "---------------------------------------"
Text 30,100, "--------------------------------------"
Text 50,800, "PAINA ENTERIÄ "

If KeyHit (cbkeyreturn) Then Goto jatkuu


DrawScreen
Forever 
////////////////////////////////////////////////////////////////////////
'---------------------------------------------------------------------
jatkuu:

  ClearObjects
  ClearText 
  
Repeat
  
  Color cbred
Text 10,40, "--------------------"
Text 10,60, "---------------------------"
Text 10,80, "----------------------------"
Text 10,150,"---------------------------"
Text 40,170,"PAINA ENTERIÄ LOPETTAAKSESI"

If KeyHit (cbkeyreturn) Then End 

DrawScreen 
Forever 
EDIT:

Kiitos :D

Last edited by rami123 on Tue Dec 23, 2008 7:04 pm, edited 1 time in total.
Astigma
Moderator
Moderator
Posts: 195
Joined: Sun Aug 26, 2007 5:56 pm
Location: Kuopio, Finland
Contact:

Re: Tyhmät kysymykset

Post by Astigma »

rami123 wrote:mikä tässä nyt on?
en keksi mitään ratkaisua

voititvalikon jälkeen se ei näytä noita muita???
Laita valikon jälkeen komento ClearKeys, jotta näppäimistäpuskuri tyhjennettäisiin. Nyt Enter-näppäimen painallus jää voimaan ja ohjelman suoritus jatkuu ja jatkuu.
rami123
Advanced Member
Posts: 354
Joined: Mon Jun 23, 2008 8:20 pm
Location: Kittilä

Re: Tyhmät kysymykset

Post by rami123 »

miten korjaisin tämän kun vihollinen ilmestyy seinien sisälle niin se tuhotaan? :?

Code: Select all

 ////VIHOLLISET////
                   If luo>130'jos luonti on suurempi kuin 130, niin tehdään zombie
                    newzombi.VIHOLLISET= New(VIHOLLISET)
                    newzombi\obj=CloneObject(kirvesmies)
                    ObjectPickable newzombi\obj,1
               
                    'Asetetaan vihollinen kohtaan missä ei ole törmäystä
                    For y=1 To MapWidth()
                        For x=1 To MapWidth()
                            If GetMap2(2,x,y)=0 Then PositionObject newzombi\obj,Rand(-1600,1000),Rand(1600,-1000)
                     Next x
                    Next y
 
kokeilin tämmöstä mutta heittää mavia

Code: Select all

                   If ObjectsOverlap (newzombi\obj,kartta) Then 
                    Delete newzombi
                     DeleteObject newzombi\obj  

               EndIf
TheFish
Developer
Developer
Posts: 477
Joined: Mon Aug 27, 2007 9:28 pm
Location: Joensuu

Re: Tyhmät kysymykset

Post by TheFish »

Ei kannata poistaa seinän sisälle meneviä, vaan mieluummin estää niitä menemästä sinne alunperinkään (kuten näemmä olet jo yrittänyt). nyt pikaisesti paras mieleeni tuleva ratkaisu on loopata kartan läpi ja ottaa kaksiulotteiseen taulukkoon kaikkien ilman törmäystä olevien tilejen koordinaatit. Sitten vain otat niistä randmilla jotkin koordinaatit. Tuossa ratkaisussa on tietysti huonotkin puolensa, kuten se että tarvitaan taulukko ja zombit voivat tulla toistensa päälle. Oletettavasti sen voi tehdä paremminkin, mutta itselleni ei nyt tule mieleen miten.
Jotain tämmöistä siis:

Code: Select all

tileLeveys = objectSizeX(kartta) / MapWidth()
tileKorkeus = ObjectSizeY(kartta) / MapHeight()
dim paikat(MapHeight() * MapWidth())(1) //varaan alkuun tilaa kartan kaikille tileille ja pienennän sen myöhemmin
paikkaMaara = 0
for y = 1 to MapHeigth()
    for x = 1 to MapWidth()
        if GetMap2(2, x, y) = 0 then
            paikat(paikkaMaara)(0) = x * tileLeveys
            paikat(paikkaMaara)(1) = y * tileKorkeus
            paikkaMaara = paikkaMaara + 1
        endif 
    next x
next y
cleararray off
redim paikat(paikkaMaara)(1)

//zombin luomiskohtaan
newzombi.VIHOLLISET = new(VIHOLLISET)
newzombi\obj = cloneobject(kirvesmies)
objectpickable newzombi\obj, 1
paikka = rand(0, paikkaMaara)
positionobject newzombi\obj, paikat(paikka)(0), paikat(paikka)(1)
EDIT:

(tuossa tosin taitaa vielä mennä koordinaatit väärin, koska kartan keskusta on (0,0) koordinaateissa ja tuo olettaa että kartan vasen yläkulma olisi siinä. Korjaantuu sillä että miinustat koordinaateista puolet kartan leveydestä/korkeudesta)

Last edited by TheFish on Wed Dec 24, 2008 12:08 pm, edited 2 times in total.
CoolBasic henkilökuntaa
Kehittäjä
User avatar
esa94
Guru
Posts: 1855
Joined: Tue Sep 04, 2007 5:35 pm

Re: Tyhmät kysymykset

Post by esa94 »

rami123 wrote:miten korjaisin tämän kun vihollinen ilmestyy seinien sisälle niin se tuhotaan? :?

Code: Select all

 ////VIHOLLISET////
                   If luo>130'jos luonti on suurempi kuin 130, niin tehdään zombie
                    newzombi.VIHOLLISET= New(VIHOLLISET)
                    newzombi\obj=CloneObject(kirvesmies)
                    ObjectPickable newzombi\obj,1
               
                    'Asetetaan vihollinen kohtaan missä ei ole törmäystä
                    For y=1 To MapWidth()
                        For x=1 To MapWidth()
                            If GetMap2(2,x,y)=0 Then PositionObject newzombi\obj,Rand(-1600,1000),Rand(1600,-1000)
                     Next x
                    Next y
 
kokeilin tämmöstä mutta heittää mavia

Code: Select all

                   If ObjectsOverlap (newzombi\obj,kartta) Then 
                    Delete newzombi
                     DeleteObject newzombi\obj  

               EndIf
DeleteObject ensin, sitten vasta Delete!
Vald0
Newcomer
Posts: 5
Joined: Sat Dec 20, 2008 8:49 pm

Re: Tyhmät kysymykset

Post by Vald0 »

Osaisiko Joku Auttaa Tässä Ongelmassa :?:
Tällä Hetkellä Koodi Toimii Muuten oikein, mutta kun tuohon "CheckPointtiin" pitää aina ajaa juuri oikeasta paikasta ja oikeasta kulmasta, jos on pikkasenkin vinossa auto tai auton oikea osa ei osu tuohon pixeliin niin Kierrosta ei ikäänkuin lasketa.

Code: Select all

Check = 0 
If ObjectY (Auto1)= 590 Then Check +1
If Check = 1 Then Goto Level2
KankiKalle
Active Member
Posts: 170
Joined: Mon Jun 23, 2008 9:04 pm

Re: Tyhmät kysymykset

Post by KankiKalle »

Ihan varma en oo mutta eikös ObjectY tarvi tuossa tilanteessa kaverikseen ObjectX:än?
edit: joo en oikein tiä mistä repäsin ton ehdotukseni, oon kai vaan tottunu siihen et objecty ja objectx on melkein aina kimpas:)
Last edited by KankiKalle on Wed Dec 24, 2008 12:01 am, edited 1 time in total.
Väsyttää niin ettei jaksa edes mennä lepäämään.
phons as guest

Re: Tyhmät kysymykset

Post by phons as guest »

Tee sinne MakeObject():lla objecti pistä se siihen haluamaasi kohtaan missä on se checkpoint(mikä lienee) ja sitten If ObjectsOverLap(auto?,point). Menee vähän helpommin...
Vald0
Newcomer
Posts: 5
Joined: Sat Dec 20, 2008 8:49 pm

Re: Tyhmät kysymykset

Post by Vald0 »

KankiKalle wrote:Ihan varma en oo mutta eikös ObjectY tarvi tuossa tilanteessa kaverikseen ObjectX:än?

Code: Select all

Check = 0 
If ObjectY (Auto1)= 590 Then Check +1
If ObjectX (Auto1)= 14 Then Check +1
If Check = 2 Then Goto Level2
Ai näin ikään? Sama Ongelma mutta nyt se ei toimi edes sitä vähää Minkä se äsken toimi. Mutta kiitos kumminkin.

phons as guest wrote:Tee sinne MakeObject():lla objecti pistä se siihen haluamaasi kohtaan missä on se checkpoint(mikä lienee) ja sitten If ObjectsOverLap(auto?,point). Menee vähän helpommin...
Joo kokeilen tuota Kiitos.
User avatar
axu
Devoted Member
Posts: 854
Joined: Tue Sep 18, 2007 6:50 pm

Re: Tyhmät kysymykset

Post by axu »

Vald0 wrote:
KankiKalle wrote:Ihan varma en oo mutta eikös ObjectY tarvi tuossa tilanteessa kaverikseen ObjectX:än?

Code: Select all

Check = 0 
If ObjectY (Auto1)= 590 Then Check +1
If ObjectX (Auto1)= 14 Then Check +1
If Check = 2 Then Goto Level2
Ai näin ikään? Sama Ongelma mutta nyt se ei toimi edes sitä vähää Minkä se äsken toimi. Mutta kiitos kumminkin.

phons as guest wrote:Tee sinne MakeObject():lla objecti pistä se siihen haluamaasi kohtaan missä on se checkpoint(mikä lienee) ja sitten If ObjectsOverLap(auto?,point). Menee vähän helpommin...
Joo kokeilen tuota Kiitos.
Ongelmana on se, että katsot, onko Auto1 juuri tietyn pikselin päällä. Tämä korjautuu, jos tutkitaan onko Auto1 lähellä Checkpointtia.

Code: Select all

'Tarkastetaan, onko Auto1 15 pikselin päässä checkpointista, muuta lukua 15 isommaksi jos tämä ei riitä
If Distance(ObjectX (Auto1), ObjectY (Auto1), 14, 590) < 15 Then Check +1
Mutta nyt ongelmaksi muodostuu se, että kun ollaan checkpointin kohdalla, Check nousee joka kerta kun silmukka suoritetaan. Kannattee laittaa checkpointit esim. taulukkoon josta katsotaan ollaanko oikean checkpointin päällä.

Taulukon kanssa, oletan että tiedät taulukoiden perusteet:

Code: Select all

'Tehdään 5 checkpointtia(0,1,2,3 ja 4) sekä niiden koordinaatit, tässä tapauksessa x on 0. koordinaatti ja y on 1. koordinaatti.
'Tämä tulee koodin alkuun
Dim CheckPoint(4,1)
CheckPoint(0,0) = 590 'Ensimmäisen checkpointin X sijainti
CheckPoint(0,1) = 14  'Ensimmäisen checkpointin Y sijainti
CheckPoint(1,0) = 650 'Toisen checkpointin X sijainti
CheckPoint(1,1) = 50  'Toisen checkpointin Y sijainti
'Jatka samanlailla loppujen checkpointtien kanssa

        ...koodia...
        
'Nollataan checkpointit, tämä tulee aina kun uusi kenttä ladataan:
Check = 0

        ...koodia...

    
    'Tarkistetaan, ollaanko oikean checkpointin kohdalla. Muuttuja Check ilmaisee, minkä checkpointin kohdalla ollaan
    'Pääsilmukkaan
    If Distance(ObjectX (Auto1), ObjectY (Auto1), CheckPoint(Check,0), CheckPoint(Check,1)) < 15 Then Check +1
Toivottavasti auttoi :)
Jos tämä viesti on kirjoitettu alle 5 min. sitten, päivitä sivu. Se on saattanut jo muuttua :roll:
Image
Vald0
Newcomer
Posts: 5
Joined: Sat Dec 20, 2008 8:49 pm

Re: Tyhmät kysymykset

Post by Vald0 »

axu wrote:Ongelma on...
Kiitos, Luulen Että tuo auttoi paljon, kunhan kerkeän kokeilemaan.
Jonhu
Active Member
Posts: 186
Joined: Mon Aug 04, 2008 5:45 pm

Re: Tyhmät kysymykset

Post by Jonhu »

Onko Coolbasicillä mahdollista ohjata USB-portteja?
Onko kukaan tehnyt jotain DLL:ää, jolla tämä olisi mahdollista?

(Luulen, että kukaan ei ole vielä tehnyt DLLää tuohon tarkoitukseen Coolbasicille) :?
Yrittäisin askelmoottoria saada liikkeelle, mutta taidan joutua ohjelmoimaan C++:lla sen ohjauksen.
Tekeillä pikkupelejä ja ohjelmia :)
KilledWhale
Tech Developer
Tech Developer
Posts: 545
Joined: Sun Aug 26, 2007 2:43 pm
Location: Liminka

Re: Tyhmät kysymykset

Post by KilledWhale »

Jonhu wrote:Onko Coolbasicillä mahdollista ohjata USB-portteja?
Onko kukaan tehnyt jotain DLL:ää, jolla tämä olisi mahdollista?

(Luulen, että kukaan ei ole vielä tehnyt DLLää tuohon tarkoitukseen Coolbasicille) :?
Yrittäisin askelmoottoria saada liikkeelle, mutta taidan joutua ohjelmoimaan C++:lla sen ohjauksen.
Eipä nuita vielä taida olla. Tekemisen ei kyllä pitäisi olla ylitsepääsemättömän vaikeaa.
CoolBasic henkilökuntaa
Kehittäjä

cbFUN Kello
cbSDL
Whale.dy.fi

<@cce> miltäs tuntuu olla suomen paras
User avatar
axu
Devoted Member
Posts: 854
Joined: Tue Sep 18, 2007 6:50 pm

Re: Tyhmät kysymykset

Post by axu »

Jonhu wrote:Onko Coolbasicillä mahdollista ohjata USB-portteja?
Onko kukaan tehnyt jotain DLL:ää, jolla tämä olisi mahdollista?
Riippuu mitä tarkoitat USB porttien ohjauksella. USB tikulta lukeminen käy jos tiedetään mikä kirjaintunnus sillä on(yleensä E ->,riippuen levyasemista).
Tuommotteella pitäisi löytyä kaikki asemat.

Code: Select all

'Käydään mahdolliset kiintolevyt, levyasemat ja USB tikut ym. läpi
For Directory=Asc("A") To Asc("W")
    If  FileExists(Chr(Directory)+":/") Then Print "Drive found: "+Chr(Directory)+":/"
Next Directory

WaitKey
Jostain syystä minulla windows sanoo, että asema ei ole valmiina ja kun painan perruuta niin sitten tuo toimii(tiedä sitten mikä windows fail ;) )
Jos tämä viesti on kirjoitettu alle 5 min. sitten, päivitä sivu. Se on saattanut jo muuttua :roll:
Image
Wee
Member
Posts: 57
Joined: Wed Dec 17, 2008 8:46 pm
Location: Mavihelvetti

Re: Tyhmät kysymykset

Post by Wee »

Taitaapi olla koko cb foorumeiden aktiivisin topick :lol:
Sekä minun, että muiden osalta.

Nyt on 99 riviä pitkä lentelypelin lähdekoodi. Ongelmaksi ilmestyi taas tuo "Memory acces violation". Alla on lähdekoodi kokonaisuudessaan. Ongelma ilmeni sen jälkeen, kun lisäsin Type ammus field obj end typen, ja kaikki asteroidikloonitsydeemit.

Code: Select all

   
'Alkuvalmistelut

SCREEN 400, 300
FrameLimit 30

'Ns. menu
Text 100,120, "Paina ENTER aloittaaksesi"
Text 10,10, "Avaruuslentelypeli alpha"
Text 10,280, "(c) Veikko 'Wee' Vauhkonen 2008"
DrawScreen
WaitKey
     
ClearText
'Objecktien & kentän valmistelut
Type AMMUS 'luo kokoelma, jonka nimi on AMMUS
    Field obj 'yksi kenttä nimeltään 'obj'
End Type 
Type ASTEROIDIT'Kokoelma asteroidi
    Field obj'yksi kenttä nimeltään 'obj'
End Type

ClsColor CbGreen
pikkukivi = LoadImage("pikkukivi.png")
puska = LoadImage("puska.png")
alus = LoadObject("ship.png", 36)
pati = LoadObject("pati.png", 36)
asteroidi = LoadObject("asteroidi.png")
ShowObject pati,OFF
TurnObject alus, 90
PositionObject alus, -160, 30
'Itse pelisilmukka
Repeat
    'Asteroidit...'
    newAsteroidi.ASTEROIDIT= New(ASTEROIDIT)
    newAsteroidi\obj=CloneObject(asteroidi)
    CloneObjectPosition newAsteroidi\obj -200,Rand(40,250)
    CloneObjectOrientation newAsteroidi\obj,180
    MoveObject newAsteroidi\obj,2
    'Päivitetään asteroidit
    a=0
    For aAsteroidi.ASTEROIDIT= Each ASTEROIDIT
          MoveObject aAsteroidi\obj,2
          If ObjectX(aAsteroidi\obj)> -200 Then
              DeleteObject aAsteroidi\obj
              Delete aAsteroidi
          EndIf
          a=a+1
    Next aAsteroidi
    'Kentän taustakuvat & muu tilpehööri
    DrawImage puska,100,95
    DrawImage pikkukivi,110,97
    DrawImage pikkukivi,230,169
    DrawImage puska,140,300
    'Tekstinsyötötökokeilut ylös, ja alaspäin vas. ylänurkka
    If UpKey() Then
                     ClearText 
                     Text 2,2, "Painat nuolta ylöspäin" 
    EndIf
    If DownKey() Then 
                     ClearText 
                     Text 2,2, "Painat nuolta alaspäin"
    EndIf
    'Päiväys alareunaan
    Text 1,280, "Tänään on"
    Text 80,280,Date()  
    Text 177,280,Time()
    'FPS oikeaan alareunaan
    Text 340,280, "FPS:"
    Text 370,280,FPS()
    'Piirretään ylä-ja alaviivat kentälle
    Line 0,26,400,26
    Line 0,260,400,260
    'Aluksen liikkuminen
    If UpKey() Then MoveObject alus, 2
    If DownKey() Then MoveObject alus, -2
    'Aluksen pelikentän rajaaminen
    If ObjectX(alus)>200 Then PositionObject alus, 200,ObjectY(alus) 
    If ObjectX(alus)<-200 Then PositionObject alus, -200,ObjectY(alus)
    If ObjectY(alus)>115 Then PositionObject alus, ObjectX(alus),115
    If ObjectY(alus)<-100 Then PositionObject alus, ObjectX(alus),-100
    'Ampuminen oikealle
    If KeyDown(cbkeyspace) And aselataus=0 Then 
                luoti.AMMUS = New(AMMUS)
                luoti\obj=CloneObject(pati)
                CloneObjectPosition luoti\obj,alus
                aselataus=10
     EndIf
     If aselataus>0 Then aselataus=aselataus-1
     
      For luoti.AMMUS = Each AMMUS
        MoveObject luoti\obj,6
        If ObjectX(luoti\obj)<-180 Or ObjectX(luoti\obj)>180 Or ObjectY(luoti\obj)<-130 Or ObjectY(luoti\obj)>130 Then                
            DeleteObject luoti\obj
            Delete luoti
        EndIf        
      Next luoti
    'Se unohtumaton
    DrawScreen
Forever
 
Kiitokset jo etukäteen!
phons
Guru
Posts: 1056
Joined: Wed May 14, 2008 10:11 am

Re: Tyhmät kysymykset

Post by phons »

Miksi sulla on:

Code: Select all

    
    CloneObjectPosition newAsteroidi\obj -200,Rand(40,250)
    CloneObjectOrientation newAsteroidi\obj,180
Vaikka molemmissa on toinen parametri objekti.
Image
Wee
Member
Posts: 57
Joined: Wed Dec 17, 2008 8:46 pm
Location: Mavihelvetti

Re: Tyhmät kysymykset

Post by Wee »

Miten se pitäisi laittaa, jotta se olisi toimiva? Ei ollut oikein esimerkkiä, jos kloonia ei tahdo laittaa jonkin toisen objecktin kohdalle. Miten korjaan? Viitsisitkö selittää niin, että voisin siitä jotain oppiakkin ;-)

Yritin seuraavaa:

Code: Select all

    
    CloneObjectPosition newAsteroidi -200,Rand(40,250)
    CloneObjectOrientation newAsteroidi, 180
"This city looks so pretty, do you wanna burn here with me..."
TheFish
Developer
Developer
Posts: 477
Joined: Mon Aug 27, 2007 9:28 pm
Location: Joensuu

Re: Tyhmät kysymykset

Post by TheFish »

Wee wrote:Miten se pitäisi laittaa, jotta se olisi toimiva? Ei ollut oikein esimerkkiä, jos kloonia ei tahdo laittaa jonkin toisen objecktin kohdalle. Miten korjaan? Yritin

Code: Select all

    
    CloneObjectPosition newAsteroidi -200,Rand(40,250)
    CloneObjectOrientation newAsteroidi, 180
Jos et tahdo sitä toisen objektin kohdalle, käytä positionobject-komentoa.
CoolBasic henkilökuntaa
Kehittäjä
Locked