Tyhmät kysymykset (I/2010)

Voit pyytää apua ohjelmointiongelmiin täältä.
Pate5
Artist
Artist
Posts: 551
Joined: Tue Aug 28, 2007 4:53 pm
Location: Vantaa

Re: Tyhmät kysymykset (I/2010)

Post by Pate5 »

Code: Select all

Function TileToWorldX(tx,tilew,map)
    wx=tx*tilew-ObjectSizeX(map)/2
    Return wx
EndFunction

Function TileToWorldY(ty,tileh,map)
    wy=ty*tileh-ObjectSizeY(map)/2
    Return -wy
EndFunction 
Peräisin vanhasta CBKK:sta.
CoolBasic henkilökuntaa
Graafikko
JATothrim
Tech Developer
Tech Developer
Posts: 606
Joined: Tue Aug 28, 2007 6:46 pm
Location: Kuopio

Re: Tyhmät kysymykset (I/2010)

Post by JATothrim »

Pate5 wrote:

Code: Select all

Function TileToWorldX(tx,tilew,map)
    wx=tx*tilew-ObjectSizeX(map)/2
    Return wx
EndFunction

Function TileToWorldY(ty,tileh,map)
    wy=ty*tileh-ObjectSizeY(map)/2
    Return -wy
EndFunction 
Peräisin vanhasta CBKK:sta.
Ja toimivat vain mikäli karttaa ei ole menty liikuttamaan (0,0) koordinaateista.
-On selkeästi impulsiivinen koodaaja joka...
ohjelmoi C++:lla rekursiivisesti instantioidun templaten, jonka jokainen instantiaatio instantioi sekundäärisen singleton-template-luokan, jonka jokainen instanssi käynistää säikeen tulostakseen 'jea'.
1234213112

Re: Tyhmät kysymykset (I/2010)

Post by 1234213112 »

KOitin tehä jotai tekoälyy mut ei siit mitää tullu =D täs nyt ois tää koodi
seuraat vähä aikaa sitä nii jää aina jumittaa jos kulma on esim tasan 90,tasan 180 jne.

Code: Select all

FrameLimit 40
map= LoadMap("Media\cdm2.til","Media\tileset.bmp")
PlayObject map,0,0,0.5
ObjectPickable map,ON
guy= LoadObject("Media\soldier.bmp",72)
Repeat
    MoveObject guy,nopeus
    TurnObject guy,kääntö
    If LeftKey() Then TurnObject guy,5
    If RightKey() Then TurnObject guy, -5
    If UpKey() Then MoveObject guy,2
    If DownKey() Then MoveObject guy, -2
ObjectPick guy
    CloneCameraPosition guy
DrawGame
DrawToWorld ON
Circle PickedX()-5,PickedY()+5,10
If Distance(ObjectX(guy),ObjectY(guy),PickedX(),PickedY())<100 Then
Text 0,0,"seinä on lähellä"
Text 0,20,"objektin kulma "+ObjectAngle(guy)
If ObjectAngle(guy)<90 Then
Text 0,40,"seinä on oikealla-ylhäällä" 
aika=8
kääntö=4
nopeus=0
ElseIf ObjectAngle(guy)>90 And ObjectAngle(guy)<180 Then
Text 0,40,"seinä on vasemmalla-ylhäällä" 
aika=8
kääntö=-4
nopeus=0
ElseIf ObjectAngle(guy)>180 And ObjectAngle(guy)<270 Then
Text 0,40,"seinä on vasemmalla-alhaalla" 
aika=8
kääntö=-4
nopeus=01
ElseIf ObjectAngle(guy)>270 Then
Text 0,40,"seinä on oikealla-alhaalla"
aika=8 
kääntö=4
nopeus=0
EndIf
EndIf
If aika=>1 Then aika=aika-1 
If Distance(ObjectX(guy),ObjectY(guy),PickedX(),PickedY())>100 And aika=<0 Then
kääntö=0
nopeus=2
EndIf 
Text 0,60,"kääntö kulma "+kääntö
Text 0,80,"nopeutesi "+nopeus
Text 0,100,"ajastus "+aika
    DrawScreen
Until EscapeKey() 
JATothrim
Tech Developer
Tech Developer
Posts: 606
Joined: Tue Aug 28, 2007 6:46 pm
Location: Kuopio

Re: Tyhmät kysymykset (I/2010)

Post by JATothrim »

1234213112 wrote:KOitin tehä jotai tekoälyy mut ei siit mitää tullu =D täs nyt ois tää koodi
seuraat vähä aikaa sitä nii jää aina jumittaa jos kulma on esim tasan 90,tasan 180 jne.

Code: Select all

FrameLimit 40
map= LoadMap("Media\cdm2.til","Media\tileset.bmp")
PlayObject map,0,0,0.5
ObjectPickable map,ON
guy= LoadObject("Media\soldier.bmp",72)
Repeat
    MoveObject guy,nopeus
    TurnObject guy,kääntö
    If LeftKey() Then TurnObject guy,5
    If RightKey() Then TurnObject guy, -5
    If UpKey() Then MoveObject guy,2
    If DownKey() Then MoveObject guy, -2
ObjectPick guy
    CloneCameraPosition guy
DrawGame
DrawToWorld ON
Circle PickedX()-5,PickedY()+5,10
If Distance(ObjectX(guy),ObjectY(guy),PickedX(),PickedY())<100 Then
Text 0,0,"seinä on lähellä"
Text 0,20,"objektin kulma "+ObjectAngle(guy)
If ObjectAngle(guy)<90 Then
Text 0,40,"seinä on oikealla-ylhäällä" 
aika=8
kääntö=4
nopeus=0
ElseIf ObjectAngle(guy)>90 And ObjectAngle(guy)<180 Then
Text 0,40,"seinä on vasemmalla-ylhäällä" 
aika=8
kääntö=-4
nopeus=0
ElseIf ObjectAngle(guy)>180 And ObjectAngle(guy)<270 Then
Text 0,40,"seinä on vasemmalla-alhaalla" 
aika=8
kääntö=-4
nopeus=01
ElseIf ObjectAngle(guy)>270 Then
Text 0,40,"seinä on oikealla-alhaalla"
aika=8 
kääntö=4
nopeus=0
EndIf
EndIf
If aika=>1 Then aika=aika-1 
If Distance(ObjectX(guy),ObjectY(guy),PickedX(),PickedY())>100 And aika=<0 Then
kääntö=0
nopeus=2
EndIf 
Text 0,60,"kääntö kulma "+kääntö
Text 0,80,"nopeutesi "+nopeus
Text 0,100,"ajastus "+aika
    DrawScreen
Until EscapeKey() 
Sinun pitää ottaa huomioon myös guy objektin kulma, koska liikutat sitä TurnObject:lla ja MoveObject:lla. Teen paremman vastauksen mikäli jaksat sisentää koodisi.
-On selkeästi impulsiivinen koodaaja joka...
ohjelmoi C++:lla rekursiivisesti instantioidun templaten, jonka jokainen instantiaatio instantioi sekundäärisen singleton-template-luokan, jonka jokainen instanssi käynistää säikeen tulostakseen 'jea'.
1232412

Re: Tyhmät kysymykset (I/2010)

Post by 1232412 »

oon kyl ottanu objektin kulma huomio,koska sen mukaa sitä objektii käännetäänki 4 tai -4,vai mitä tarkotit sillä?
naputtelija
Devoted Member
Posts: 718
Joined: Wed Nov 03, 2010 7:56 pm
Location: Joku piste pohjoisessa.

Re: Tyhmät kysymykset (I/2010)

Post by naputtelija »

Pyromanius wrote:Miksi tämä MAVittaa?

Code: Select all

file$ = Trim(Replace(CommandLine(), Chr(34), ""))
filu=OpenToRead(file)
mj$ = ReadString(filu)
Kyllä, ohjelma saa oikean polun. Ja kyllä, tiedostossa on sisältöä. Ja kyllä, se myös saa ladattua sen.
Ongelma on readstringissä, ilman sitä toimii.

Missä voisi olla vika?
CloseFile puuttuu? Tai sitten kannattaisi käyttää readlineä.
<Ize> Pitäs tehä allekirjotus..
<Ize> Vois keksiä jonkin nasahtavan sanonnan..
<Ize> Siitä tulis upea legenda ja kaikki vaihtaisivat allekirjoituksensa siihen.
<Ize> Ehkä ei kuitenkaa...
User avatar
Kille
Active Member
Posts: 249
Joined: Wed Aug 26, 2009 3:50 pm
Location: Juankoski

Re: Tyhmät kysymykset (I/2010)

Post by Kille »

naputtelija wrote:
Pyromanius wrote:Miksi tämä MAVittaa?

Code: Select all

file$ = Trim(Replace(CommandLine(), Chr(34), ""))
filu=OpenToRead(file)
mj$ = ReadString(filu)
Kyllä, ohjelma saa oikean polun. Ja kyllä, tiedostossa on sisältöä. Ja kyllä, se myös saa ladattua sen.
Ongelma on readstringissä, ilman sitä toimii.

Missä voisi olla vika?
CloseFile puuttuu? Tai sitten kannattaisi käyttää readlineä.
avaat tiedoston file-muuttujaan mutta yrität lukea filu-muuttujasta.
ZEPPELIN
Jatkoa tulossa... tällä kertaa lataus ei kestä viikkoa
Viltzu
Guru
Posts: 1132
Joined: Sun Aug 26, 2007 5:45 pm
Location: Alavieska
Contact:

Re: Tyhmät kysymykset (I/2010)

Post by Viltzu »

Kille wrote:
naputtelija wrote:
Pyromanius wrote:Miksi tämä MAVittaa?

Code: Select all

file$ = Trim(Replace(CommandLine(), Chr(34), ""))
filu=OpenToRead(file)
mj$ = ReadString(filu)
Kyllä, ohjelma saa oikean polun. Ja kyllä, tiedostossa on sisältöä. Ja kyllä, se myös saa ladattua sen.
Ongelma on readstringissä, ilman sitä toimii.

Missä voisi olla vika?
CloseFile puuttuu? Tai sitten kannattaisi käyttää readlineä.
avaat tiedoston file-muuttujaan mutta yrität lukea filu-muuttujasta.
Mit vit? Kysymys esitettiin 41 sivulla ja siihen on jo vastattu. Ja hän avaa filu muuttujaan. file:ssä on vain osoite missä tiedosto on.
Ilmeisesti ongelma on ReadStringissä, 41 sivulla esitettiin, että tiedostoon ei ole kirjoitettu WriteStringillä joten se ei löydä mitä lukea. Tjps. Readline korjannee ongelman. (Tai kirjoittaa writestringillä)

Naputtelija: ei ole tarpeen vastata enää jos kysymyksee on jo ratkaisu, varsinkaa jos kysymys on noin vanha.
JATothrim
Tech Developer
Tech Developer
Posts: 606
Joined: Tue Aug 28, 2007 6:46 pm
Location: Kuopio

Re: Tyhmät kysymykset (I/2010)

Post by JATothrim »

1232412 wrote:oon kyl ottanu objektin kulma huomio,koska sen mukaa sitä objektii käännetäänki 4 tai -4,vai mitä tarkotit sillä?
Kun sisensin koodin puolestasi löysin vian. Iffi hässäkkän ehdot tekevät juuri sitä, mitä olet kirjoittanut sinne: kääntele ja liikuta objektia kaikilla muilla kulmilla, paitsi tasakulmilla 0, 90, 180 ja 270. Käytä <= ja >= operaattoreita, tai käsittele tasakulmat erikseen. :)
Last edited by JATothrim on Sat Jan 01, 2011 3:00 am, edited 1 time in total.
-On selkeästi impulsiivinen koodaaja joka...
ohjelmoi C++:lla rekursiivisesti instantioidun templaten, jonka jokainen instantiaatio instantioi sekundäärisen singleton-template-luokan, jonka jokainen instanssi käynistää säikeen tulostakseen 'jea'.
naputtelija
Devoted Member
Posts: 718
Joined: Wed Nov 03, 2010 7:56 pm
Location: Joku piste pohjoisessa.

Re: Tyhmät kysymykset (I/2010)

Post by naputtelija »

Kannattaisi tarkastaa viestin oikeinkirjoitus, sillä se lisää uskottavuutta. Tai jos tuo oli jotain murretta niin kirjoituksissa kannattaa käyttää edes vähän kirjakielisempää tekstiä.

Or if you are from england/USA, remember that we also have english forums!
<Ize> Pitäs tehä allekirjotus..
<Ize> Vois keksiä jonkin nasahtavan sanonnan..
<Ize> Siitä tulis upea legenda ja kaikki vaihtaisivat allekirjoituksensa siihen.
<Ize> Ehkä ei kuitenkaa...
DJ-Filbe
Devoted Member
Posts: 854
Joined: Sat Feb 20, 2010 2:18 pm

Re: Tyhmät kysymykset (I/2010)

Post by DJ-Filbe »

Mites se menikään se asetus, että tietyntyyppiset tiedostot avataan tietyssä ohjelmassa? Pitäisi saada tehtyä cb-ohjelma, joka linkittää noita tiedostopäätteitä ohjelmiin.
24243

Re: Tyhmät kysymykset (I/2010)

Post by 24243 »

Mite saan ,nii ettei peli aina jumitu ku kutsun funktioo?Siin funktios vihollis käännetään oikeelle tai vasemalle kunnes seinii ei enää näy,nii kaikki muu aina jumittuu käännön ajaksi.
JATothrim
Tech Developer
Tech Developer
Posts: 606
Joined: Tue Aug 28, 2007 6:46 pm
Location: Kuopio

Re: Tyhmät kysymykset (I/2010)

Post by JATothrim »

24243 wrote:Mite saan ,nii ettei peli aina jumitu ku kutsun funktioo?Siin funktios vihollis käännetään oikeelle tai vasemalle kunnes seinii ei enää näy,nii kaikki muu aina jumittuu käännön ajaksi.
Laittaisitko funktiosi näkyville? Kristallipalloni kuva on kovin sumea. ;)
Muista että ohjelmaa ajetaan rivi riviltä ja CB-ohjelmissa kaikki tapahtuu yksitellen. Saattaa olla että tapasi kääntää objektia vie yksinkertaisesti vain liian kauan tai ohjelma jää kääntelemään objektia ikuisesti löytämättä ratkaisua.
Last edited by JATothrim on Sun Jan 02, 2011 7:34 pm, edited 1 time in total.
-On selkeästi impulsiivinen koodaaja joka...
ohjelmoi C++:lla rekursiivisesti instantioidun templaten, jonka jokainen instantiaatio instantioi sekundäärisen singleton-template-luokan, jonka jokainen instanssi käynistää säikeen tulostakseen 'jea'.
242142

Re: Tyhmät kysymykset (I/2010)

Post by 242142 »

Code: Select all

Function käännetään_vasemmalle(_obj)
Repeat
ObjectPick _obj
TurnObject _obj,3
DrawScreen
 
Until(Distance(ObjectX(_obj),ObjectY(_obj),PickedX(),PickedY())>80)

End Function  
User avatar
valscion
Moderator
Moderator
Posts: 1599
Joined: Thu Dec 06, 2007 7:46 pm
Location: Espoo
Contact:

Re: Tyhmät kysymykset (I/2010)

Post by valscion »

242142 wrote:

Code: Select all

Function käännetään_vasemmalle(_obj)
Repeat
ObjectPick _obj
TurnObject _obj,3
DrawScreen
 
Until(Distance(ObjectX(_obj),ObjectY(_obj),PickedX(),PickedY())>80)

End Function  
Objektia pyöritetään ikuisesti, sillä et liikuta sitä mihinkään, jolloin tuo Distance-funktion palauttama arvo ei muutu mihinkään. Jos etäisyys poimittuihin koordinaatteihin on aluksi pienempi kuin 80, jää ohjelma ikuiseen silmukkaan tuon Until-ehtolauseen takia. Lisää tuonne Repeat-silmukkaan sisälle ennen drawscreeniä komento MoveObject _obj, joku_määrä_liikettä, niin jossain vaiheessa silmukasta SAATETAAN päästä pois. Kuitenkin tuossa voi ehkä käydä niin, että objekti ei koskaan pääse tarpeeksi kauas poimituista koordinaateista vaikka sitä kuinka liikuteltaisiin ja pyöriteltäisiin.

Suosittelen rekisteröitymistä foorumeille, varsinkin jos aiot vielä jatkaa koodailua CB:n parissa :).
cbEnchanted, uudelleenkirjoitettu runtime. Uusin versio: 0.4.1 — Nyt myös sorsat GitHubissa!
NetMatch - se kunnon nettimättö-deathmatch! Avoimella lähdekoodilla varustettu
vesalaakso.com
2324

Re: Tyhmät kysymykset (I/2010)

Post by 2324 »

Siis ei see jää ikuisesti sinne. laitan ton koko koodin niin ymmärrätte.
juu ja tiiän et ton kääntymisen ois voinu tehä yhelläki funktiol ,mut kokeilin nyt aluks saada toimii oikei=)

Code: Select all

FrameLimit 60 'rajoita nopeutta
SCREEN 800,600
kartta = LoadMap("Media\cdm2.til","Media\tileset.bmp")
PlayObject kartta,0,0,1
ObjectPickable kartta,ON
ukko = LoadObject ("Media\guy.bmp",72)
pelaaja = LoadObject ("Media\guy.bmp",72)
obj1=MakeObject()
obj2=MakeObject()

SetupCollision ukko, kartta, 1, 4, 2
PositionObject ukko,-180,-200

Repeat

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

objx=ObjectX(ukko)
objy=ObjectY(ukko)
ang=ObjectAngle(ukko)

CloneObjectPosition obj1,ukko
RotateObject obj1,ang+20
CloneObjectPosition obj2,ukko
RotateObject obj2,ang-20


    CloneCameraPosition pelaaja

DrawGame
DrawToWorld ON

If tehdään=0 Then
ObjectPick ukko

ukko_pickx=PickedX()
ukko_picky=PickedY()
Circle PickedX() -5,PickedY()+5,10,ON
ObjectPick obj1

obj1_pickx=PickedX()
obj1_picky=PickedY()
Circle PickedX() -5,PickedY()+5,10,ON
ObjectPick obj2

obj2_pickx=PickedX()
obj2_picky=PickedY()
Circle PickedX() -5,PickedY()+5,10,ON



If Distance(objx,objy,obj2_pickx,obj2_picky)>60 Then
nopeus=2
Else
käännetään_vasemmalle(ukko)
nopeus=0
EndIf 

If Distance(objx,objy,obj1_pickx,obj1_picky)>60 Then
nopeus=2
Else
käännetään_oikealle(ukko)
nopeus=0
EndIf 
EndIf 

MoveObject ukko,nopeus

    DrawScreen

Forever

Function käännetään_vasemmalle(_obj)
Repeat
ObjectPick _obj
TurnObject _obj,3
DrawScreen
 
Until(Distance(ObjectX(_obj),ObjectY(_obj),PickedX(),PickedY())>80)

End Function  


Function käännetään_oikealle(_obj)
Repeat
ObjectPick _obj
TurnObject _obj,-3
DrawScreen 
Until(Distance(ObjectX(_obj),ObjectY(_obj),PickedX(),PickedY())>80)
End Function 
User avatar
valscion
Moderator
Moderator
Posts: 1599
Joined: Thu Dec 06, 2007 7:46 pm
Location: Espoo
Contact:

Re: Tyhmät kysymykset (I/2010)

Post by valscion »

2324 wrote:Siis ei see jää ikuisesti sinne. laitan ton koko koodin niin ymmärrätte.
juu ja tiiän et ton kääntymisen ois voinu tehä yhelläki funktiol ,mut kokeilin nyt aluks saada toimii oikei=)
Aa katsos, en tajunnut että se objekti poimii uudet koordinaatit siinä loopissa. Mutta siis niin, lagaaminen johtuu suurelta osin siitä että kutsut aina DrawScreeniä joka loopin kierros. Otappa DrawScreenit pois noista funktioista, niin johan huomaat eron ;)
cbEnchanted, uudelleenkirjoitettu runtime. Uusin versio: 0.4.1 — Nyt myös sorsat GitHubissa!
NetMatch - se kunnon nettimättö-deathmatch! Avoimella lähdekoodilla varustettu
vesalaakso.com
20242

Re: Tyhmät kysymykset (I/2010)

Post by 20242 »

Juu nyt se toimii,mut mite saisin ton objektin kääntymää siihe oikeesee kulmaa,samanlail kun drawscreenin kanssa =)
SPuntte
Tech Developer
Tech Developer
Posts: 650
Joined: Mon Aug 27, 2007 9:51 pm
Location: Helsinki, Finland
Contact:

Re: Tyhmät kysymykset (I/2010)

Post by SPuntte »

Jos homma toimii oikein DrawScreenin kansa, mutta jää jumiin ilman DrawScreeniä, ongelmana on todennäköisesti UpdateGamen puute. Lisää se poimintasilmukoihin ja kokeile, auttaako.
CoolBasic henkilökuntaa
Tech-kehittäjä
CoolBasic Classic, Cool VES

CoolPhysicsEngine | MissileSystem | Jana-ympyrä -törmäys | cbSimpleTexture | CoolCPLX
TheFish
Developer
Developer
Posts: 477
Joined: Mon Aug 27, 2007 9:28 pm
Location: Joensuu

Re: Tyhmät kysymykset (I/2010)

Post by TheFish »

20242 wrote:Juu nyt se toimii,mut mite saisin ton objektin kääntymää siihe oikeesee kulmaa,samanlail kun drawscreenin kanssa =)
Jos nyt ymmärsin oikein, ongelma on siinä, että muu peli pysähtyy siksi aikaa kun objekti kääntyy? Tämä johtuu tietenkin siitä, että käännät objektia eri loopissa varsinaisen pelisi pääloopin sijasta. Saat sen korjattua korvaamalla tuon repeat..until loopin if-lauseella.

Pseudona:

Code: Select all

function kaannetaan_vasemmalle(_obj)
    poimi objekti
    if etaisyys_poimittuun < 80 then
        käännä _obj
    endif
end function
CoolBasic henkilökuntaa
Kehittäjä
Locked