aloittelijan ongelma!

Voit pyytää apua ohjelmointiongelmiin täältä.
Post Reply
ToSSUNorSu
Newcomer
Posts: 11
Joined: Mon Dec 30, 2013 1:40 pm

aloittelijan ongelma!

Post by ToSSUNorSu »

Hei! Olen täysin aloittelijakoodaaja ja latasin coolbasicin 2 pv sitten. Sitä ennen en ole koodannut joten kokemusta on tasan 2 pv :D . Tutoriaalit tehtyäni päätin aloittaa ensimmäisen oman pelini tekemisen, joka on melkeimpä tutoriaalien yhdistelmä ja täysin alkeellinen verrattuna projekteista katsomiini peleihin. Tosin aloittelijalta ei muuta sovi toivoakkaan :D . Nyt eteeni tuli kuitenkin ongelma. Olen laittanut musiikin, joka tietenkin loppuu aikanaan. Tutoriaaleissa oli yksi kappale "musiikit", jossa on ohjeet, miten äänen saa uudelleen käyntiin (soundplaying jne) Kun yritin laittaa sitä omaan koodiini, ruutuun tulee vain Memory access violation ilmoitus. Virhe on luultavasti rivillä 48. Missä voisi olla vika? Yritän saada lähdekoodini näkyviin, toivottavasti onnistuu :D
EDIT:

Nyt toimii! Kiitos :D

Code: Select all

Type ammus
Field obj
End Type





FrameLimit 40


arial=LoadFont("arial", 30)

Color cbRed
SetFont arial




'lataukset:
Text 180,180,"Loading..." 
DrawScreen 
kartta = LoadMap ("Media\cdm2.til","Media\tileset.bmp")
 PlayObject kartta, 0, 0, 1
 
 pelaaja = LoadObject ("media\guy.bmp",360)
 pati = LoadObject ("media\Bullet.bmp")
 ShowObject pati,OFF
 
 musiikki = LoadSound ("Media\SK_Battle2.mp3")
 PlaySound musiikki
 ampumisääni = LoadSound ("Media\Blaster.wav")
 
 SetupCollision pelaaja, kartta, 1, 4, 2
 
 

 
 ' näppäimet:
 Repeat
 

 If LeftKey() Then TurnObject pelaaja, 3
 If RightKey() Then TurnObject pelaaja, -3
 If UpKey() Then MoveObject pelaaja, 3
 If DownKey() Then MoveObject pelaaja, -3
 
 If SoundPlaying(musiikki)=0 Then 
 musiikki = PlaySound ("Media\SK_Battle2.mp3")
Endif
      
 
 
 If KeyDown (cbKeyRControl) And reload=0 Then    
        PlaySound ampumisääni
        EndIf
        
        luoti.ammus = New(ammus)
        luoti\obj=CloneObject(pati)
        
      SetupCollision luoti\obj, kartta, 2, 4, 1
        
        
        CloneObjectPosition luoti\obj,pelaaja                
        CloneObjectOrientation luoti\obj,pelaaja
        ResetObjectCollision luoti\obj
        reload=5  
        EndIf
        
 

 If reload>0 Then reload=reload-1

    'Päivitä kaikki ammukset
    For luoti.ammus = Each ammus
    tuhoaLuoti = 0
        
        MoveObject luoti\obj,6 
       
        
    If GetMap (2, ObjectX (luoti\obj), ObjectY(luoti\obj)) Then
        tuhoaLuoti = 1
    EndIf
    
    If tuhoaLuoti
        DeleteObject luoti\obj
        Delete luoti
    EndIf
    
     Next luoti
    
   CloneCameraPosition pelaaja
 
 
 UpdateGame 
 
 DrawScreen
 
Forever
Last edited by ToSSUNorSu on Mon Dec 30, 2013 3:12 pm, edited 1 time in total.
User avatar
Ruuttu
Devoted Member
Posts: 688
Joined: Thu Aug 30, 2007 5:11 pm
Location: Finland, Sipoo

Re: aloittelijan ongelma!

Post by Ruuttu »

Näin se toimii:

Code: Select all

musiikki = LoadSound("Media\SK_Battle2.mp3")
toisto = PlaySound(musiikki)

Repeat
    If SoundPlaying(toisto) = 0 Then
        toisto = PlaySound(musiikki)
    EndIf

    DrawScreen
Forever
Kuten manuaali kertoo, SoundPlaying haluaa parametriksi "kanavamuuttujan, jonka sait PlaySound-funktiolta".

Mutta,
kun on kyse taustamusiikista, ääntä ei oikeastaan kannattaisi ladata muistiin LoadSoundilla, vaan se kannattaisi "streamata" suoraan kovalevyltä, näin:

Code: Select all

toisto = PlaySound("Media\SK_Battle2.mp3")

Repeat
    If SoundPlaying(toisto) = 0
        toisto = PlaySound("Media\SK_Battle2.mp3")
    EndIf

    DrawScreen
Forever
Yrität käyttää koodissasi ikäänkuin kumpaakin tapaa, lataat äänen, mutta myös toistat sitä suoraan kovalevyltä.
ToSSUNorSu
Newcomer
Posts: 11
Joined: Mon Dec 30, 2013 1:40 pm

Re: aloittelijan ongelma!

Post by ToSSUNorSu »

Edellinen ongelma on nyt takana ja uusi ongelma edessä... Oman kuva lisääminen koodiin ei onnistu :( tämä ongelma ilmeni jo tutoriaaleissa, mutta jätin sen sikseen. Nyt se tuli kuitenkin vastaan ja joudun kysymään apua taas täältä. Eli kun suoritan komennon sotilas = LoadObject ("Esimkansio\omakuva.bmp"). se käynnistää pelin oikein, mutta sitten tulee ilmoitus can't load object. Yritin tallentaa kuvaa jopa pelin mukana tulleeseen media- kansioon, mutta sama ongelma. Musiikeilla ja muilla objecteilla sama ongelma. Eli Viisaat: Kertokaas, mikä voisi olla ongelmana :D
User avatar
Ruuttu
Devoted Member
Posts: 688
Joined: Thu Aug 30, 2007 5:11 pm
Location: Finland, Sipoo

Re: aloittelijan ongelma!

Post by Ruuttu »

Suhteellisiin tiedostopolkuihin vaikuttaa, mistä kansiosta ohjelmasi ajetaan. Tallentamattomalla projektilla se on CoolBasicin asennushakemisto, tallennetulla projektilla ajettavan kooditiedoston hakemisto.

Voit laittaa koodisi alkuun tämän,

Code: Select all

Print CurrentDir()

StartSearch

count = 0
Repeat
    file$=FindFile()
    If file$="" Then Exit
    count + 1
    Print file$
    If count > 20 Then WaitKey
Forever

EndSearch
WaitKey
ja näet, missä hakemistossa ohjelmasi pyörii, ja mitä tiedostoja ja kansioita se näkee.
ToSSUNorSu
Newcomer
Posts: 11
Joined: Mon Dec 30, 2013 1:40 pm

Re: aloittelijan ongelma!

Post by ToSSUNorSu »

Kiitos tuosta koodista, se auttoi paljon ja viestisi selvensi muutenkin tilannetta. Kun lisäsin yhden tietokoneeni valmiista kuvista kyseiseen kansioon se toimi hyvin. Mutta Gimpillä tekemäni muunnos soldierista ei toimi. Tallensin kuvani Gimpillä bmp muotoon ja lisäsin samaan kansioon, jossa edellinen kuvani toimi. Mutta silti tulee ilmoitus ''can't load image soldier2'' joksi nimesin siis kuvani. Mikä voisi olla vialla?

PS. Toivottavasti viestistä saa jtn selvää :D
User avatar
Ruuttu
Devoted Member
Posts: 688
Joined: Thu Aug 30, 2007 5:11 pm
Location: Finland, Sipoo

Re: aloittelijan ongelma!

Post by Ruuttu »

GIMP tuottaa oletuksena sellaisia BMP-tiedostoja, että CoolBasic ei osaa niitä avata. Voit korjata tämän valitsemalla tallennuksen yhteydessä yhteensopivuusasetuksista ("Compatibility Options"), että tiedosto luodaan ilman väriprofiilia ("Do not write color space information").

BMP ei pakkaa kuvia hyvin, tai ollenkaan, ja tiedostot saattavat paisua järjettömän kokoisiksi. Kannattaa siksi tutustua myös PNG ja JPEG -muotoihin.
ToSSUNorSu
Newcomer
Posts: 11
Joined: Mon Dec 30, 2013 1:40 pm

Re: aloittelijan ongelma!

Post by ToSSUNorSu »

Kiitos aktiivisesta avusta. Se on auttanut todella paljon. Nyt tähänmennessä kaikki toimii. Kiitos myös vinkistä tallennusmuodon suhteen. Rupenkin heti tutkimaan niitä :D Jätän nyt kuintenkin pelin tekemisen sikseen ja lähinnä testailen erilaisia koodi ''viritelmiä". Hyvää uuttavuotta! :)
ToSSUNorSu
Newcomer
Posts: 11
Joined: Mon Dec 30, 2013 1:40 pm

Re: aloittelijan ongelma!

Post by ToSSUNorSu »

Jatkan nyt tähän, kun uskon, että uuden ketjun aloittaminen olisi turhaa. Eli olen tekemässä projektia, josta saattaa tulla koulutyöni, jos se onnistuu. Eli kyseessä olisi yksinkertainen "testi" tekijänoikeuslain osaamisesta. Peliin voi tulla myös lisäominaisuuksia, joita olen jo hieman suunnitellut. Koodin voisi varmasti tehdä yksinkertaisemmin, mutta haluan sen pysyvän yksinkertaisena, jotta osaisin selittää sen itse. Nyt eteen tuli kuitenkin ongelma. Valikko toimii hyvin, mutta kun aloittaa pelin, ensimmäinen kysymys toimii hyvin, mutta kun painaa vastauksen, niin peli hyppääkin koodin loppuun. Mikä voisi olla vialla? Ps. Pelissä on itsetehtyjä kuvia, joten koodia ei voi ajaa. Muokatkaa koodia tai vastatkaa lukemisen perusteella :D
EDIT:

Nyt toimii. Kiitos nopeasta vastauksesta :)

Code: Select all

SCREEN 600, 400
taulu=LoadImage ("media\taulu.bmp")
tausta=LoadImage ("media\pelin tausta.bmp")

valikko:

Repeat

ClearText

DrawImage taulu, 0, 0
Color cbwhite
Locate 200, 150
AddText "Paina P aloittaaksesi"
AddText ""
AddText "Paina E lopettaaksesi"
AddText ""
AddText "Paina T nähdäksesi tekijät"



If KeyHit (cbkeyp) Then Goto peli 'tämä toimii kai nyt
If KeyHit (cbkeye) Then End
If KeyHit (cbkeyt) Then Gosub tekijät
DrawScreen
Forever


'-----------------------------------------------------------------------
 

tekijät:
Repeat
ClearText

Locate 30, 30
AddText "Koodaaja: Tommi"
AddText ""
AddText "Musiikki:"
AddText ""
AddText "Palaa valikkoon painamalla V"

If KeyHit (cbkeyv) Then Goto valikko
DrawScreen
Forever

'---------------------------------------------------------------------------








peli:



Repeat 
pisteet=0
ClearText

DrawImage tausta, 0, 0
AddText "pisteet"+pisteet
Locate 35, 35
AddText "Saan ottaa kuvahausta kuvan työhöni"
AddText ""
AddText "1. Kyllä saan"
AddText ""
AddText "2. En saa"


If KeyHit (cbkey1) Then pisteet=pisteet+0
Goto kysymys2
If KeyHit (cbkey2) Then pisteet=pisteet+1
Goto kysymys2
DrawScreen
Forever


'--------------------------------------------------------------------------

kysymys2:

Repeat
ClearText

DrawImage tausta, 0, 0
AddText "pisteet"+pisteet
Locate 30, 30
AddText "Saan julkaista kaveristani kuvan ilman "
AddText "hänen lupaansa"
AddText "1. Kyllä saan"
AddText ""
AddText "2. En saa"


If KeyHit (cbkey1) Then pisteet=pisteet+0
Goto kohta3
If KeyHit (cbkey2) Then pisteet=pisteet+1
Goto kohta3
If KeyHit (cbkeyz) Then Goto kohta3
DrawScreen
Forever
'-----------------------------------------------------------------------------

kohta3:

Repeat
ClearText
DrawImage tausta, 0, 0
AddText "pisteet"+pisteet
Locate 30, 30
AddText "saan julkaista nettisivullani sheakspearen runon"
AddText ""
AddText "1. Kyllä saan"
AddText ""
AddText "2. En saa"

If KeyHit (cbkey1) Then pisteet=pisteet+1 : Goto kohta4
If KeyHit (cbkey2) Then pisteet=pisteet+0 : Goto kohta4
If KeyHit (cbkeyz)Then Goto kohta4 
DrawScreen
Forever
'------------------------------------------------------------------------------------
kohta4:

Repeat
ClearText
DrawImage tausta, 0, 0
AddText "pisteet"+pisteet
Locate 30, 30
AddText "saan kopioida omaan toisen kuvan omaan käyttööni"
AddText ""
AddText "1. Kyllä saan"
AddText ""
AddText "2. En saa"


If KeyHit (cbkey1) Then pisteet=pisteet+1 : Goto kohta5
If KeyHit (cbkey2) Then pisteet=pisteet+0 : Goto kohta5
If KeyHit (cbkeyz)Then Goto kohta5 
DrawScreen
Forever 
'------------------------------------------------------------------------------
kohta5:

Repeat
ClearText
DrawImage tausta, 0, 0
AddText "pisteet"+pisteet
Locate 30, 30
AddText "Saan ladata youtubesta musiikkia, jota käytän"
AddText "julkisesti levitettävässä pelissä"
AddText "1. Kyllä saan"
AddText ""
AddText "2. En saa"


If KeyHit (cbkey1) Then pisteet=pisteet+0 : Goto loppu
If KeyHit (cbkey2) Then pisteet=pisteet+1 : Goto loppu
If KeyHit (cbkeyz)Then Goto loppu
DrawScreen
Forever
'---------------------------------------------------------------------------------

loppu:

Repeat
ClearText
DrawImage tausta, 0, 0
If pisteet<3 Then
Locate 30, 30
AddText "Mediataitosi ovat ruosteessa. kertaa vielä"
AddText ""
ElseIf pisteet>2 And pisteet<5 Then
Locate 30, 30
AddText "Mediataitosi ovat keskitasoa. Vielä voi parantaa"
AddText ""
ElseIf pisteet<6 Then
Locate 30, 30
AddText "Mediataitosi ovat mahtavat. Osaat kaiken"
AddText ""
EndIf

Locate 40, 40
AddText "Palaa valikkoon painamalla B"
If KeyHit (cbkeyb) Then Goto valikko 
DrawScreen

Forever
Last edited by ToSSUNorSu on Wed Feb 05, 2014 4:58 pm, edited 1 time in total.
Latexi95
Guru
Posts: 1166
Joined: Sat Sep 20, 2008 5:10 pm
Location: Lempäälä

Re: aloittelijan ongelma!

Post by Latexi95 »

ToSSUNorSu wrote:Jatkan nyt tähän, kun uskon, että uuden ketjun aloittaminen olisi turhaa. Eli olen tekemässä projektia, josta saattaa tulla koulutyöni, jos se onnistuu. Eli kyseessä olisi yksinkertainen "testi" tekijänoikeuslain osaamisesta. Peliin voi tulla myös lisäominaisuuksia, joita olen jo hieman suunnitellut. Koodin voisi varmasti tehdä yksinkertaisemmin, mutta haluan sen pysyvän yksinkertaisena, jotta osaisin selittää sen itse. Nyt eteen tuli kuitenkin ongelma. Valikko toimii hyvin, mutta kun aloittaa pelin, ensimmäinen kysymys toimii hyvin, mutta kun painaa vastauksen, niin peli hyppääkin koodin loppuun. Mikä voisi olla vialla? Ps. Pelissä on itsetehtyjä kuvia, joten koodia ei voi ajaa. Muokatkaa koodia tai vastatkaa lukemisen perusteella :D

Code: Select all

SCREEN 600, 400
taulu=LoadImage ("media\taulu.bmp")
tausta=LoadImage ("media\pelin tausta.bmp")

valikko:

Repeat

ClearText

DrawImage taulu, 0, 0
Color cbwhite
Locate 200, 150
AddText "Paina P aloittaaksesi"
AddText ""
AddText "Paina E lopettaaksesi"
AddText ""
AddText "Paina T nähdäksesi tekijät"




If KeyHit (cbkeyp) Then Goto peli 'tämä toimii kai nyt
If KeyHit (cbkeye) Then End
If KeyHit (cbkeyt) Then Gosub tekijät
DrawScreen
Forever


'-----------------------------------------------------------------------
 

tekijät:
Repeat
ClearText

Locate 30, 30
AddText "Koodaaja: Tommi"
AddText ""
AddText "Musiikki:"
AddText ""
AddText "Palaa valikkoon painamalla V"

If KeyHit (cbkeyv) Then Goto valikko
DrawScreen
Forever

'---------------------------------------------------------------------------








peli:



Repeat 
pisteet=0
ClearText

DrawImage tausta, 0, 0
AddText "pisteet"+pisteet
Locate 35, 35
AddText "Saan ottaa kuvahausta kuvan työhöni"
AddText ""
AddText "1. Kyllä saan"
AddText ""
AddText "2. En saa"


If KeyHit (cbkey1) Then Goto kysymys2
DrawScreen
Forever


'--------------------------------------------------------------------------

kysymys2:

Repeat
ClearText

DrawImage tausta, 0, 0
AddText "pisteet"+pisteet
Locate 30, 30
AddText "Saan julkaista kaveristani kuvan ilman "
AddText "hänen lupaansa"
AddText "1. Kyllä saan"
AddText ""
AddText "2. En saa"


If KeyHit (cbkey1) Then pisteet=pisteet+0 : Goto kohta3
If KeyHit (cbkey2) Then pisteet=pisteet+1 : Goto kohta3
If KeyHit (cbkeyz) Then Goto kohta3
DrawScreen
Forever
'-----------------------------------------------------------------------------

kohta3:

Repeat
ClearText
DrawImage tausta, 0, 0
AddText "pisteet"+pisteet
Locate 30, 30
AddText "saan julkaista nettisivullani sheakspearen runon"
AddText ""
AddText "1. Kyllä saan"
AddText ""
AddText "2. En saa"

If KeyHit (cbkey1) Then pisteet=pisteet+1 : Goto kohta4
If KeyHit (cbkey2) Then pisteet=pisteet+0 : Goto kohta4
If KeyHit (cbkeyz)Then Goto kohta4 
DrawScreen
Forever
'------------------------------------------------------------------------------------
kohta4:

Repeat
ClearText
DrawImage tausta, 0, 0
AddText "pisteet"+pisteet
Locate 30, 30
AddText "saan kopioida omaan toisen kuvan omaan käyttööni"
AddText ""
AddText "1. Kyllä saan"
AddText ""
AddText "2. En saa"


If KeyHit (cbkey1) Then pisteet=pisteet+1 : Goto kohta5
If KeyHit (cbkey2) Then pisteet=pisteet+0 : Goto kohta5
If KeyHit (cbkeyz)Then Goto kohta5 
DrawScreen
Forever 
'------------------------------------------------------------------------------
kohta5:

Repeat
ClearText
DrawImage tausta, 0, 0
AddText "pisteet"+pisteet
Locate 30, 30
AddText "Saan ladata youtubesta musiikkia, jota käytän"
AddText "julkisesti levitettävässä pelissä"
AddText "1. Kyllä saan"
AddText ""
AddText "2. En saa"


If KeyHit (cbkey1) Then pisteet=pisteet+0 : Goto loppu
If KeyHit (cbkey2) Then pisteet=pisteet+1 : Goto loppu
If KeyHit (cbkeyz)Then Goto loppu
DrawScreen
Forever
'---------------------------------------------------------------------------------

loppu:
Repeat
ClearText
DrawImage tausta, 0, 0
If pisteet=1 Or pisteet=2 Then
Locate 30, 30
AddText "mediataitosi ovat ruosteessa. kertaa vielä"
ElseIf pisteet=3 Or pisteet=4 Then
Locate 30, 30
AddText "Mediataitosi ovat keskitasoa. Vielä voi parantaa"
ElseIf pisteet=5 Then
Locate 30, 30
AddText "Mediataitosi ovat mahtavat. Osaat kaiken"
EndIf

Locate 40, 40
AddText "Palaa valikkoon painamalla B"
If KeyHit (cbkeyb) Then Goto valikko 
DrawScreen

Forever
KeyHit/KeyDown/KeyUp päivitetään DrawScreenin yhteydessä. Kun painat nappia, pompataan seuraavaan kysymykseen, mutta koska DrawScreeniä ei olla kutsuttu välissä KeyHit palauttaa yhä True. Joten taas pompataan seuraavaan kysymykseen jne. Lisää ClearKeys komento labeleiden jälkeen, että KeyHitin arvo resetoituu.
Post Reply