Miten parsin polusta kansiot, ja luon ne jos puuttuvat. Okei, ehkä jaksan koodata itse...Viltzu wrote:FileExists ?DJ-Filbe wrote:Pitkä kansiopolku. Miten voin tarkistaa ennen OpenToWriteä, onko kansiota tai kansiopuuta olemassa ja luoda ne (ts. "OpenToWrite2" -funktio)?
Tyhmät kysymykset (I/2011)
Re: Tyhmät kysymykset (I/2011)
Re: Tyhmät kysymykset (I/2011)
Anteeksi tuplaposti.
Chr(34) ei auta jostain syystä opentowritefailediin, kun käsitellään tiedostoa, jonka nimessä on välilyönti. Mitäs teen?
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
Re: Tyhmät kysymykset (I/2011)
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):
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.
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
Re: Tyhmät kysymykset (I/2011)
Onkos cb:llä mahdollista tehä kännykkäpeliä?
Re: Tyhmät kysymykset (I/2011)
Eipä oikeastaan. Dll:n avulla ehkä, mutta se vaatisi jonkin toisen ohjelmointikielen tuntemusta.
Re: Tyhmät kysymykset (I/2011)
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.Jonez wrote:Eipä oikeastaan. Dll:n avulla ehkä, mutta se vaatisi jonkin toisen ohjelmointikielen tuntemusta.
Re: Tyhmät kysymykset (I/2011)
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
Re: Tyhmät kysymykset (I/2011)
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.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?
Re: Tyhmät kysymykset (I/2011)
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.
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.
Re: Tyhmät kysymykset (I/2011)
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.
Re: Tyhmät kysymykset (I/2011)
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. ;DVieras 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.
Ja elämän voit tehdä tekemällä muuttujan, jossa on pelaajan elämä.
Tästä linkistä on apua.
Re: Tyhmät kysymykset (I/2011)
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?
voisiko joku auttaa?
Re: Tyhmät kysymykset (I/2011)
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: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.
Code: Select all
if getmap2(3,objectx(pelaaja),objecty(pelaaja))=2 then pelaaja_kuolee
Re: Tyhmät kysymykset (I/2011)
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?
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?
Re: Tyhmät kysymykset (I/2011)
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.
Millä koodilla lataat sitä kuvaa? Minkälainen se kuva on? Jos lataamisessa menee 10 min, niin se kuva on varmaan aika iso.
Re: Tyhmät kysymykset (I/2011)
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ä?
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ä?
Re: Tyhmät kysymykset (I/2011)
Koitappa katsoa MaskObjectin ohjeet. Laita vain objektin latauksen jälkeen MaskObject objektin_nimi 255,255,255Vieras 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ä?
Re: Tyhmät kysymykset (I/2011)
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)
(Jatkan jääkiekkopelin tekoa)
Aloittelija koodari joka
KOTISIVU
Re: Tyhmät kysymykset (I/2011)
Monellakin tapaa
tässähän foorumi on koko ajan tekemässä peliä puolestasi joten mikset vaikka vaihteeksi itse kokeile jotain
tässähän foorumi on koko ajan tekemässä peliä puolestasi joten mikset vaikka vaihteeksi itse kokeile jotain
Re: Tyhmät kysymykset (I/2011)
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ä.
Pyytäisin mahd. nopeata vastausta, ja pahoittelen tyhmästä kysymyksestä.