Tyhmät kysymykset (I/2011)

Voit pyytää apua ohjelmointiongelmiin täältä.
Locked
DJ-Filbe
Devoted Member
Posts: 854
Joined: Sat Feb 20, 2010 2:18 pm

Re: Tyhmät kysymykset (I/2011)

Post by DJ-Filbe »

Viltzu wrote:
DJ-Filbe wrote:Pitkä kansiopolku. Miten voin tarkistaa ennen OpenToWriteä, onko kansiota tai kansiopuuta olemassa ja luoda ne (ts. "OpenToWrite2" -funktio)?
Aivot ei tänään pelaa niin en jaksa keskittyä...
FileExists ?
Miten parsin polusta kansiot, ja luon ne jos puuttuvat. Okei, ehkä jaksan koodata itse...
DJ-Filbe
Devoted Member
Posts: 854
Joined: Sat Feb 20, 2010 2:18 pm

Re: Tyhmät kysymykset (I/2011)

Post by DJ-Filbe »

Anteeksi tuplaposti.
Chr(34) ei auta jostain syystä opentowritefailediin, kun käsitellään tiedostoa, jonka nimessä on välilyönti. Mitäs teen?

Code: Select all

SCREEN 800,600
AddText "Avataan pakettia"
DrawScreen
a=OpenToRead(CommandLine())
AddText "Avattu"
DrawScreen
Repeat
	f$=ReadString(a)
	f=Mid(f,InStr(f,"Pictures")+9)
	f=Replace(f," ", Chr(32))
	f=Replace(f,Chr(92),Chr(47))
	fs=ReadInt(a)
	AddText f
	AddText fs+"t"
	DrawScreen
	b=OpenToWrite2(f)
	For i=1 To fs
		WriteByte b, ReadByte(a)
		SetWindow ""+i
	Next i
	CloseFile b
	
Until EOF(a)
CloseFile a

Function opentowrite2(f$)
tmps$=""
	For i=1 To Int(CountWords(f,"/"))-1
		If FileExists(tmps+GetWord(f,i,"/")) = 0 Then 
			MakeDir tmps+GetWord(f,i,"/")
		EndIf
		
		tmps=tmps+GetWord(f,i,"/")+"/"
		SetWindow "cw"+i
	Next i
	
	Return opentowrite(f)
EndFunction
User avatar
Jonez
Devoted Member
Posts: 575
Joined: Mon Aug 27, 2007 8:37 pm

Re: Tyhmät kysymykset (I/2011)

Post by Jonez »

Ei sen välilyönnin pitäisi vaikuttaa, enkä oikein ymmärtänyt ongelmaakaan :/

Sain tällaisen systeemin kuitenkin toimimaan (eli siis tämän perusteella alkuperäisen koodisi pitäisi toimia niin kuin minä sen ymmärsin):

Code: Select all

SCREEN 800,600
AddText "Avataan pakettia"
DrawScreen

a = OpenToWrite( "test.txt" )
    WriteString a, "Jee\joo\Pictures\joku\m uu\te sti.txt"
    WriteInt a, 2
    WriteByte a, 10
    WriteByte a, 11
CloseFile a

a=OpenToRead("test.txt")
AddText "Avattu"
DrawScreen
Repeat
   f$=ReadString(a)
   f=Mid(f,InStr(f,"Pictures")+9)
 '  f=Replace(f," ", Chr(32))
   f=Replace(f,Chr(92),Chr(47))
   fs=ReadInt(a)
   AddText f
   AddText fs+"t"
   DrawScreen
   WaitKey
   b=OpenToWrite2(f)

    For i=1 To fs
      WriteByte b, ReadByte(a)
      SetWindow ""+i
   Next i
   CloseFile b
   
Until EOF(a)
CloseFile a

a = OpenToRead( "joku\m uu\te sti.txt" )
    Print ReadByte( a )
    Print ReadByte( a )
CloseFile a
WaitKey


Function opentowrite2(f$)
tmps$=""
   For i=1 To Int(CountWords(f,"/"))-1
      If FileExists(tmps+GetWord(f,i,"/")) = 0 Then 
         MakeDir tmps+GetWord(f,i,"/")
      EndIf
      
      tmps=tmps+GetWord(f,i,"/")+"/"
      SetWindow "cw"+i
   Next i
   
   Return OpenToWrite(f)
EndFunction
Edit. Ainiin, kannattaa laittaa se CountWords muuttujaan siinä OpenToWrite2-funkkarissa. Veikkaisin että näin silmukkasi on n-kertaa nopeampi, jossa n on CountWordsin palauttama luku. CountWords käy itse silmukassa merkkijonon läpi, eli ei mikään maailman nopein funktio.
-Vuoden 2008 aloittelijan ystävä -palkinnon voittaja-
Image <- protestipelikilpailun voittaja.
Space War
Ihminen
Newcomer
Posts: 34
Joined: Tue Jun 14, 2011 9:13 pm

Re: Tyhmät kysymykset (I/2011)

Post by Ihminen »

Onkos cb:llä mahdollista tehä kännykkäpeliä? :o
User avatar
Jonez
Devoted Member
Posts: 575
Joined: Mon Aug 27, 2007 8:37 pm

Re: Tyhmät kysymykset (I/2011)

Post by Jonez »

Eipä oikeastaan. Dll:n avulla ehkä, mutta se vaatisi jonkin toisen ohjelmointikielen tuntemusta.
-Vuoden 2008 aloittelijan ystävä -palkinnon voittaja-
Image <- protestipelikilpailun voittaja.
Space War
Dimple
Active Member
Posts: 103
Joined: Wed Nov 17, 2010 5:43 pm

Re: Tyhmät kysymykset (I/2011)

Post by Dimple »

Jonez wrote:Eipä oikeastaan. Dll:n avulla ehkä, mutta se vaatisi jonkin toisen ohjelmointikielen tuntemusta.
En kyllä keksi miten se onnistuisi Dll:n avulla. Cb kuitenkin kääntää aina exe:ksi, joten sen kännykän pitäisi pystyä ajamaan se. Eri asia sitten jos joku tekee kääntäjän jollekin kännykkäalustalle.
User avatar
Akuji
Member
Posts: 60
Joined: Fri Oct 08, 2010 5:59 pm
Location: Turku

Re: Tyhmät kysymykset (I/2011)

Post by Akuji »

Mikä tässä koodissa on vikana? Aluksi molemmat kaksi vihollista ampuvat pelaajaa nopeasti, kuten pitääkin. Mutta heti kun olen ampunut toisen vihun, niin sen jälkeen toisen vihun ampuminen hidastuu huomattavasti. Mistä tämä voisi johtua?

Code: Select all

    SCREEN 800,600,0,1
    FrameLimit 40

    playerpoints = 0
    font = LoadFont("Verdana",32,1,1)
    SetFont font

    Locate 150,20
    AddText "Elämät"

    // Luodaan tyyppikokoelma ammuksia varten
    Type BULLETS
        Field obj
    End Type

    Type LUOTI
        Field obj
    End Type
    

    // Ladataan media
    GoSub LoadMedia

    // Määritetään tyyppikokoelma vihollisille ja luodaan pari vihollista
    Type ENEMIES
        Field obj
        Field energy
        Field tyyppi
    End Type
    GoSub MakeEnemies

    health=100
    elkut=100


    /////// PÄÄSILMUKKA ///////
    Repeat
        GoSub CheckButtons
        GoSub EnemyAI
        GoSub CheckBullets
        GoSub CheckBullets2
        GoSub DrawGUI

        // Siirretään kameraa pelaajan mukana
        CloneCameraPosition player

        // Tarkistetaan onko taustamusiikki pysähtynyt ja käynnistetään tarvittaessa uudelleen
        If SoundPlaying(backgroundmusic) = 0 Then
            backgroundmusic = PlaySound("Media\SK_Battle2.mp3", 40)
        EndIf

        DrawScreen

    Until EscapeKey()


    /////// ALIOHJELMAT ///////
    // Aliohjelma jossa ladataan pelissä tarvittava media
    LoadMedia:
        // Ladataan kartta ja animoidaan se
        map = LoadMap("Media\cdm2.til", "Media\Tileset.bmp")
        PlayObject map,0,0,0.5

        // Ladataan panosobjektin grafiikat ja piilotetaan objekti
        bulletobject = LoadObject("Media\bigbullet.bmp", 72)
        ShowObject bulletobject, OFF

        teleportti=LoadObject("media\fireball.bmp")
        PositionObject teleportti,0,500


        // Ladataan pelaaja ja asetetaan törmäyksentunnistus kartan seinien ja pelaaja välille
        player = LoadObject("Media\soldier.bmp", 72)
        SetupCollision player,map,2,4,2

        // Ladataan vihollinen ja piilotetaan objekti
        enemyobject = LoadObject("Media\guy.bmp", 72)
        ShowObject enemyobject, OFF

        enemyobject2=LoadObject("media\soldier.bmp",72)
        ShowObject enemyobject2,OFF

        // Ladataan äänet
        backgroundmusic = PlaySound("Media\SK_Battle2.mp3", 40)
        shot = LoadSound("Media\gun 1.wav")
        scream = LoadSound("Media\scream1.wav")
        scream2 = LoadSound("media\scream2.wav")
    Return

    // Aliohjelma joka tarkistaa näppäinpainallukset
    CheckButtons:
        If UpKey() Then MoveObject player,4
        If DownKey() Then MoveObject player,-4
        If LeftKey() Then TurnObject player,5
        If RightKey() Then TurnObject player,-5   

        // Tarkistetaan painetaanko ampumisnäppäintä ja jos,
        // niin luodaan ammus ja törmäystunnistus sille
        If KeyHit(cbkeySpace) Then
            PlaySound shot, 40
            blt.BULLETS = New(BULLETS)
            blt\obj = CloneObject(bulletobject)
            CloneObjectPosition blt\obj, player
            CloneObjectOrientation blt\obj, player
            MoveObject blt\obj,15
            SetupCollision blt\obj,map,2,4,1
            ResetObjectCollision blt\obj

    EndIf

    Return


    // Aliohjelma, jossa tehdään viholliselle alkeellinen tekoäly
    EnemyAI:
        For enem.ENEMIES = Each ENEMIES
            // Tarkistetaan näkeekö vihollisobjekti pelaajaobjekti ja
            // jos näkee niin aloitetaan liikuttamaan pelaajaa kohti
            If ObjectSight(enem\obj,player) And reload=0 Then

            PlaySound shot,50
            bl.LUOTI = New(LUOTI)
            bl\obj = CloneObject(bulletobject)
            CloneObjectPosition bl\obj,enem\obj
            CloneObjectOrientation bl\obj, enem\obj
            MoveObject bl\obj,15
            SetupCollision bl\obj,map,2,4,1
            ResetObjectCollision bl\obj

            reload=150 'lataa 1/4 sekunnissa (koska framelimit 40)

    EndIf

        PointObject enem\obj, player
        MoveObject enem\obj, 1
    'lataaminen
    If reload>0 Then reload-1
        Next enem
    Return

    // Aliohjelma, jossa läpikäydään ammukset
    CheckBullets:
        For blt.BULLETS = Each BULLETS
            MoveObject blt\obj, 10
            For enem.ENEMIES = Each ENEMIES

                // Tarkistetaan osuuko ammus viholliseen
                If ObjectsOverlap(blt\obj, enem\obj, 2) Then
                    deleteobj = 1
                    enem\energy = enem\energy - 20
                    playerpoints = playerpoints + 5
                EndIf
            Next enem
            bulcollisions = CountCollisions(blt\obj)
            For i = 1 To bulcollisions
                // Tarkistetaan onko ammus osunut seinään
                If GetCollision(blt\obj, i) > 1 Then deleteobj = 1
            Next i
            If deleteobj = 1 Then
                DeleteObject blt\obj
                Delete blt
                deleteobj = 0
            EndIf
        Next blt
    Return


    CheckBullets2:
     For bl.LUOTI = Each LUOTI
            MoveObject bl\obj, 10
            For enem.ENEMIES = Each ENEMIES

                // Tarkistetaan osuuko ammus viholliseen
                If ObjectsOverlap(bl\obj, player, 2) Then health-2
                If ObjectsOverlap(bl\obj,player,2) Then elkut-2
                If ObjectsOverlap(bl\obj,player,2) Then
                deleteobj = 1
EndIf


            Next enem
            bulcollisions = CountCollisions(bl\obj)
            For i = 1 To bulcollisions
                // Tarkistetaan onko ammus osunut seinään
                If GetCollision(bl\obj, i) > 1 Then deleteobj = 1
            Next i
            If deleteobj = 1 Then
                DeleteObject bl\obj
                Delete bl
                deleteobj = 0
            EndIf
        Next bl

        If health <1 Then
        GoTo hävisit
        EndIf

    Return




    // Aliohjelma jossa piirretään "käyttöliittymä"
    DrawGUI:
        DrawGame
        DrawToWorld ON
        // Käydään viholliset läpi
        For enem.ENEMIES = Each ENEMIES
            PosX = ObjectX(enem\obj) - (ObjectSizeX(enem\obj)/2)
            PosY = ObjectY(enem\obj) + ObjectSizeY(enem\obj)
            EnWidth = enem\energy / 3
            Color cbWhite
            Box PosX,PosY,33,6
            Color cbRed
            Box PosX+1,PosY-1,EnWidth-2,4
            If enem\energy <= 0 Then
                // Jos energia nollassa, niin toistetaan huuto ja poistetaan vihollistyyppi
                    If enem\tyyppi = 1 Then
                PlaySound scream ,100
    ElseIf enem\tyyppi = 0 Then
                PlaySound scream2,100
    EndIf
                DeleteObject enem\obj
                Delete enem
            EndIf
        Next enem
        DrawToWorld OFF


        If ObjectsOverlap(player,teleportti,2) Then
    PositionObject player,0,-500
    EndIf  

        // Kirjoitetaan pisteet näytölle (ensimmäinen on varjostus)
        Color cbBlack : Text 12,12, playerpoints
        Color cbWhite : Text 10,10, playerpoints

        Color cbBlack : Text 252,22, elkut
        Color cbWhite : Text 250,20, elkut
    Return

    // Aliohjelma, jossa määritetään kaksi vihollista ja niiden energia
    MakeEnemies:
        enem.ENEMIES = New(ENEMIES)
        enem\obj = CloneObject(enemyobject)
        PositionObject enem\obj,0,-500
        SetupCollision enem\obj,map,2,4,1
        SetupCollision enem\obj,player,2,2,2
        SetupCollision player,enem\obj,2,2,2
        ResetObjectCollision enem\obj
        enem\tyyppi = 1
        enem\energy = 100

        enem.ENEMIES = New(ENEMIES)
        enem\obj = CloneObject(enemyobject)
        PositionObject enem\obj,-70,500
        SetupCollision enem\obj,map,2,4,1
        SetupCollision enem\obj,player,2,2,2
        SetupCollision player,enem\obj,2,2,2
        ResetObjectCollision enem\obj
        PaintObject enem\obj,enemyobject2
        enem\tyyppi = 0
        enem\energy = 100

    Return

    hävisit:
    DrawScreen
    Wait 2000
    End
Awaclus
Forum Veteran
Posts: 2939
Joined: Tue Aug 28, 2007 2:50 pm

Re: Tyhmät kysymykset (I/2011)

Post by Awaclus »

Akuji wrote:Mikä tässä koodissa on vikana? Aluksi molemmat kaksi vihollista ampuvat pelaajaa nopeasti, kuten pitääkin. Mutta heti kun olen ampunut toisen vihun, niin sen jälkeen toisen vihun ampuminen hidastuu huomattavasti. Mistä tämä voisi johtua?
Siitä, että käytät samaa reload-muuttujaa kummallekin vihulle. Toisin sanoen, silloin kun vihollisia on kaksi, vähennät muuttujan arvoa kahdesti loopissa, mutta kun vihollisia on yksi, vähennät sen arvoa vain kerran loopissa.
User avatar
Jonez
Devoted Member
Posts: 575
Joined: Mon Aug 27, 2007 8:37 pm

Re: Tyhmät kysymykset (I/2011)

Post by Jonez »

Akuji:
Kun kerran käytät tyyppejä, kannattaa laittaa vihollisten kentäksi se reload. Ja vielä toinen asia: ei ole mitään järkeä tehdä kahta eri tyyppikokoelmaa ammuksille. Tee vain yksi kokoelma.
-Vuoden 2008 aloittelijan ystävä -palkinnon voittaja-
Image <- protestipelikilpailun voittaja.
Space War
Guest

Re: Tyhmät kysymykset (I/2011)

Post by Guest »

Ajattelin vain kysyä kun en ole kauhean hyvä coolbasicin ja tilesterin kanssa niin miten saa karttaan laavan polttamaan ja tappamaan sinut heti kun astut sen päälle? tarvitseeko se säätää tilesterin data kerroksesta vai jollain koodilla? haluaisin myös tietää miten peliin luodaan elämäpisteet.
Viltzu
Guru
Posts: 1132
Joined: Sun Aug 26, 2007 5:45 pm
Location: Alavieska
Contact:

Re: Tyhmät kysymykset (I/2011)

Post by Viltzu »

Vieras wrote:Ajattelin vain kysyä kun en ole kauhean hyvä coolbasicin ja tilesterin kanssa niin miten saa karttaan laavan polttamaan ja tappamaan sinut heti kun astut sen päälle? tarvitseeko se säätää tilesterin data kerroksesta vai jollain koodilla? haluaisin myös tietää miten peliin luodaan elämäpisteet.
Kyllä, merkkaa kartan datakerrokseen laavan sijainti, tarkista aina onko pelaajan alla datakerroksessa mitään ja jos on niin sitte kuolkoot pois. Tai vaihtoehtoisesti käyt alussa koko kartan läpi ja otat merkille missä on ne laavat sillee ja blaa. Ehkä ei olisi pitänyt alkaa kirjoittaan tätä viestiä ku ei oikein jaksas. Mut ehkä nyt osaat. ;D
Ja elämän voit tehdä tekemällä muuttujan, jossa on pelaajan elämä.

Tästä linkistä on apua.
Guest

Re: Tyhmät kysymykset (I/2011)

Post by Guest »

Huomasin erään ongelman kokeilessani luoda ukolle elämäpisteet. kun painan f5 niin ohjelma ei näytä enää ukkoa mutta sitä pystyy liikuttamaan. mikä vika?
voisiko joku auttaa?
MrMonday
Advanced Member
Posts: 378
Joined: Fri Oct 10, 2008 2:35 pm

Re: Tyhmät kysymykset (I/2011)

Post by MrMonday »

Vieras wrote:Ajattelin vain kysyä kun en ole kauhean hyvä coolbasicin ja tilesterin kanssa niin miten saa karttaan laavan polttamaan ja tappamaan sinut heti kun astut sen päälle? tarvitseeko se säätää tilesterin data kerroksesta vai jollain koodilla? haluaisin myös tietää miten peliin luodaan elämäpisteet.
Tilesteristä valitset kerroksista kohdan "data" ja annat sille haluamasi luvun, esimerkiksi 2. (oliko 0 ja 1 varattuja?) ja kirjoitat koodiisi tarkastuksen onko pelaaja laavan päällä, eli seuraavasti:

Code: Select all

if getmap2(3,objectx(pelaaja),objecty(pelaaja))=2 then pelaaja_kuolee
eli getmap2:sen ensimmäinen parametri kertoo mitä kerrosta tarkastellaan (tässä tapauksessa kolmatta kerrrosta, eli "data"-kerrosta) seuraavat kaksi parametriä kertovat, mistä kohtaa karttaa tarkistus tehdään. getmap2() palauttaa sijainnin tileinä (getmap() palauttaa pikseleissä) ja mikäli pelaajan kohdalla on data-kerroksessa 2, niin suoritetaan "pelaaja_kuolee"-kohta, johon siis koodaat pelaajan kuolemisen. Tilekarttaan "maalataan" dataa samalla tavalla kun näkyvät tiletkin, mutta data-kerrokseen tallentuu vain luvut. toivottavasti oli apua :) Lisää selvyyttä asiaan tuonee manuaali ja sieltä komennot: getmap2(),objectx() ja objecty(). ja katso myös komentojen esimerkit.
Guest

Re: Tyhmät kysymykset (I/2011)

Post by Guest »

tuli taas toinen kysymys mieleen. mikä piirtohjelma tai mikä tallennus muoto pitää olla että coolbasic osaa lukea sen?
olen kokeillut painttia bmp muotoon ja cb valittaa että kuvaa ei voi ladata.
laitoin myös 256 väin bmp:ksi niin se kyllä avaa kuvan mutta sen avaamiseen menee 10min.
toimisiko 16 värinen tai 24 bittinen bmp?
Dimple
Active Member
Posts: 103
Joined: Wed Nov 17, 2010 5:43 pm

Re: Tyhmät kysymykset (I/2011)

Post by Dimple »

Kyllä CB osaa bmp:tä lukea. Itse käytän yleensä kuitenkin png:tä, koska se pakkaa kuvan pienempään tilaan, mutta laatu säilyy silti samana. Kaikki tuetut formaatit löytyvät varmasti manuaalista.

Millä koodilla lataat sitä kuvaa? Minkälainen se kuva on? Jos lataamisessa menee 10 min, niin se kuva on varmaan aika iso.
Guest

Re: Tyhmät kysymykset (I/2011)

Post by Guest »

pitää taas että miten omatekemistä kuvista saa valkoiset reunat pois?
sillä aina kun laitan omatekemän kuvan esim. objektiksi niin kuvan ympärillä on valkoista aluetta?
miten saisin vain itse kuvan näkymään eikä valkoisia alueita sen ympärillä?
Latexi95
Guru
Posts: 1166
Joined: Sat Sep 20, 2008 5:10 pm
Location: Lempäälä

Re: Tyhmät kysymykset (I/2011)

Post by Latexi95 »

Vieras wrote:pitää taas että miten omatekemistä kuvista saa valkoiset reunat pois?
sillä aina kun laitan omatekemän kuvan esim. objektiksi niin kuvan ympärillä on valkoista aluetta?
miten saisin vain itse kuvan näkymään eikä valkoisia alueita sen ympärillä?
Koitappa katsoa MaskObjectin ohjeet. Laita vain objektin latauksen jälkeen MaskObject objektin_nimi 255,255,255
User avatar
Laurenzo
Member
Posts: 85
Joined: Mon Apr 25, 2011 8:28 am
Location: Tampere
Contact:

Re: Tyhmät kysymykset (I/2011)

Post by Laurenzo »

Kuinka onnistuu se että kiekko pysyy koko-ajan mailan lavalla (Mailan lapa on erillinen objekti) ellei vastustaja riistä kiekkoa tai syötetä toiselle pelaajalle?
(Jatkan jääkiekkopelin tekoa)
Aloittelija koodari joka
osaa jo jotain (ehkä) :)
KOTISIVU
User avatar
esa94
Guru
Posts: 1855
Joined: Tue Sep 04, 2007 5:35 pm

Re: Tyhmät kysymykset (I/2011)

Post by esa94 »

Monellakin tapaa

tässähän foorumi on koko ajan tekemässä peliä puolestasi joten mikset vaikka vaihteeksi itse kokeile jotain
jorre

Re: Tyhmät kysymykset (I/2011)

Post by jorre »

Eli kysyisin mitenkäs olisi mahdollista tehä vuoropohjainen coolbasic peli, tai oikeastaan miten saada Wait:tiin käsky että se odottaa että tietty luku on tietyn verran? (Onko henkilö liikkunut vai ei)

Pyytäisin mahd. nopeata vastausta, ja pahoittelen tyhmästä kysymyksestä.
Locked