Tyhmät kysymykset (I/2010)

Voit pyytää apua ohjelmointiongelmiin täältä.
Locked
jaahas
Advanced Member
Posts: 307
Joined: Fri Feb 05, 2010 11:36 pm
Location: Tornio

Re: Tyhmät kysymykset (I/2010)

Post by jaahas »

Hene wrote:
DatsuniG wrote:
Hene wrote:Otin uudeksi harjoitusprojektiksi opetella noita vihollissysteemejä ja tarvitsisin hieman apua...

Miten voisi toteuttaa seuraavanlaisen systeemin:
Pelaaja ohjaa objektia A yrittäen napata tietokoneen ohjaamaa objektia B. Jos objektin A ja B välinen etäisyys on pienempi kuin 100 pikseliä, objekti B liikkuu objektia A pakoon (Suurin ongelma nurkat).
Tarkistat funktiolla Distance2 pelaajan ja botin välisen etäisyyden. Tässä on pieni esimerkki kuinka toteuttaa botin liikkuminen tilekartoilla:

Code: Select all

map = LoadMap("Media\cdm2.til","Media\tileset.bmp")
obj = LoadObject("Media/guy.bmp", 72)

dis = 32    // Kuinka lähellä seinän tulee olla ennenkuin botti reagoi         
Repeat
    MoveObject obj, 1
    // Tarkistetaan onko objectin edessä törmäyskerros
    If GetMap(2, ObjectX(obj) + Cos(ObjectAngle(obj)) * Dis, ObjectY(obj) + Sin(ObjectAngle(obj)) * Dis) Then 
        // Edessä oli, joten katsotaan kumpaan suuntaan käännytään
        If GetMap(1, ObjectX(obj) + Cos(ObjectAngle(obj) + 90) * Dis, ObjectY(obj) + Sin(ObjectAngle(obj) + 90) * Dis) = 0 Then
            // Vasemmalla tyhjää, käännytään sinne
            RotateObject obj, ObjectAngle(obj) + 90
        ElseIf GetMap(1, ObjectX(obj) + Cos(ObjectAngle(obj) - 90) * Dis, ObjectY(obj) + Sin(ObjectAngle(obj) - 90) * Dis) = 0 Then
            // Oikealla tyhjää, käännytään sinne
            RotateObject obj, ObjectAngle(obj) - 90
        Else 
            // Umpikuja, käännytään ympäri
            RotateObject obj, ObjectAngle(obj) + 180
        EndIf 
        // Kääntymisen voisi tehdä myös turnobjectilla, mutta silloin reagointietäisyyttä tulisi kasvattaa
    EndIf 
    DrawScreen
Forever 
Thänksit!

Mihinkös kohtaan tuo positionobject pitäisi lätkäistä? Heittää jatkuvasti memorian acces violationia vaikka kokeiltu ties mitä kohtaa... :/
kokkeile laittaa se ennen repeatia
EDIT:

toimiko?

EDIT:

mikä täs on vikana miks se tuhoaa kaikki vihut ko ampuu ja sen panoksen ei tartte edes osua?

Code: Select all

Type PISLAT
      Field fieldi
End Type

Type VIHUT
      Field fieldi
End Type
      
FrameLimit 20

SCREEN 975,495
tausta=LoadImage("kuvat\mappi.png")

jätkä=LoadObject("kuvat\jätkä.png")

pisla=LoadObject("kuvat\pistooli.png")

vihu=LoadObject("kuvat\vihu.png")
ShowObject vihu,OFF

seinä=LoadObject("kuvat\seinä.png")

ammus=LoadObject("kuvat\pati.png")
ShowObject ammus,OFF

hiiri=LoadObject("kuvat\hiiri.png")

hp=300

Repeat

If Timer() - aika > 3000

vihu1.VIHUT = New (VIHUT)
vihu1\fieldi = CloneObject (vihu)

PositionObject vihu1\fieldi,-500,Rand(-200,250)

aika = Timer()

EndIf

PositionObject hiiri,MouseWX(),MouseWY()

If MouseHit(1) Then

pisla1.PISLAT = New (PISLAT)
pisla1\fieldi = CloneObject (ammus)


CloneObjectPosition pisla1\fieldi,pisla
ResetObjectCollision pisla1\fieldi
PointObject pisla1\fieldi,hiiri
reload=5

EndIf

If reload>0 Then reload=reload-1

For vihu1.VIHUT = Each VIHUT
If ObjectsOverlap (vihu1\fieldi,seinä,1)=False Then
MoveObject vihu1\fieldi,1
EndIf
If ObjectsOverlap (vihu1\fieldi,seinä,1) Then
hp=hp-1
EndIf
Next vihu1

PositionObject jätkä,270,50
PositionObject pisla,266,50
PositionObject seinä,140,0

DrawImage tausta,0,0

Color cbred
Box 10,10,300,10,OFF
Box 10,10,hp,10

For pisla1.PISLAT = Each PISLAT
MoveObject pisla1\fieldi,20
Next pisla1

For vihu1.VIHUT = Each VIHUT
For pisla1.PISLAT = Each PISLAT
If ObjectsOverlap (pisla1\fieldi, vihu1\fieldi, 2) Then
DeleteObject pisla1\fieldi
Delete pisla1
ObjectInteger vihu1\fieldi,ObjectInteger(vihu1\fieldi) - 20
EndIf
If ObjectInteger(vihu1\fieldi)=0 Then
DeleteObject vihu1\fieldi
Delete vihu1
EndIf
Next pisla1
Next vihu1

DrawScreen

Forever
[/edit]
Last edited by jaahas on Sun Mar 21, 2010 9:04 pm, edited 2 times in total.
User avatar
Jonez
Devoted Member
Posts: 575
Joined: Mon Aug 27, 2007 8:37 pm

Re: Tyhmät kysymykset (I/2010)

Post by Jonez »

Koodissa vihu tuhotaan heti kun ObjectInteger( vihu1\fieldi1 ) = 0. Tämä tarkistus tehdään kuitenkin ammus-silmukassa, eli tarkastusta ei tehdä jos ammuksia ei ole. Vihu tuhoutuu heti ammuttaessa, koska jokaisen vihun ObjectInteger() = 0.

Siis:
1. Vihu syntyy. Hp = 0, mutta kone ei vielä tätä tiedä.
2. Sinä ammut. Nyt vihun hp-tarkastus tehdään (välittömästi, ammuksen ei tarvitse osua vihuun).
3. Koska Hp (eli ObjectInteger() ) = 0, vihu tuhotaan.

Pieni neuvo: tarkasta mieluummin onko ObjectInteger( vihu1\fieldi1 ) <= 0, koska myöhemmin saattaa tulla tapauksia jossa hp tippuu alle nollan. Tämänhetkisellä systeemillä vihu ei kuole jos hp < 0. Vain jos hp = 0.

Ja varoitus. Tämänhetkinen koodi mavittaa helposti jos ObjectInteger( vihu1\fieldi1 ) = 20. Tämä johtuu siitä, että tämä kohta koodissa:

Code: Select all

If ObjectInteger(vihu1\fieldi)=0 Then
    DeleteObject vihu1\fieldi
    Delete vihu1
EndIf
on pisla1-silmukassa. Selvennys:

Oletetaan että vihuja on olemassa ainakin yksi, ja ammuksia vähintään kaksi. Olet siis ampunut kerran, ja heti sen perään ampunut toisen. Ensimmäinen ammus osuu viholliseen. Nyt käy näin:
1. Osuma tarkastetaan. Ammus tuhotaan. Vihun hp menee nolliin ja vihu tuhotaan.
2. Ammus-silmukka hyppää alkuun, seuraavan ammuksen tarkastusvuoro.
3. Tehdään tarkastus ammuksen ja vihun välillä (ObjectsOverlap()). Tässä tarkastuksessa oleva vihu on kuitenkin tuhottu. --> MAV.

Kannattaa tehdä vaikka muuttuja vihuTuhottu, joka saa arvon TRUE jos vihun hp <= 0. Tämän muuttujan arvo sitten tarkastetaan vihu-silmukan lopussa. Siis aivan lopussa. Ja jos vihuTuhottu = True, vihu tuhotaan. Näin vältymme mavilta. Arvo pitää muistaa asettaa falseksi aina vihu-silmukan alussa.
-Vuoden 2008 aloittelijan ystävä -palkinnon voittaja-
Image <- protestipelikilpailun voittaja.
Space War
User avatar
wilizucoder
Member
Posts: 81
Joined: Sat Sep 08, 2007 11:24 pm
Location: Espoo
Contact:

Re: Tyhmät kysymykset (I/2010)

Post by wilizucoder »

Miten saa tehtyä niin, että kun painaa esim. z-nappulaa (keyhit komennolla), niin pelihahmo (loadanimobject) toistaa tietyn animaation loppuun??? Saan tuon animaation toimimaan komennolla keydown, mutta en ymmärrä, miten tuon saisi toimimaan keyhit-komennon kanssa? Kiitos niille, jotka viitsivät auttaa :)
Sly_Jack0
Devoted Member
Posts: 612
Joined: Mon Dec 10, 2007 8:25 am

Re: Tyhmät kysymykset (I/2010)

Post by Sly_Jack0 »

wilizucoder wrote:Miten saa tehtyä niin, että kun painaa esim. z-nappulaa (keyhit komennolla), niin pelihahmo (loadanimobject) toistaa tietyn animaation loppuun??? Saan tuon animaation toimimaan komennolla keydown, mutta en ymmärrä, miten tuon saisi toimimaan keyhit-komennon kanssa? Kiitos niille, jotka viitsivät auttaa :)

Code: Select all

FrameLimit 40

obj = LoadAnimObject("media/zerorun1.bmp",47,51,0,12)

Repeat

	If KeyHit(cbKeyZ) And ObjectPlaying(obj) = False
		playing = True
	EndIf
	
	If playing = True	
		PlayObject obj,0,12,0.25,OFF
	EndIf
	
	If ObjectFrame(obj) > 11
		playing = False
	EndIf
	
	DrawScreen

Forever
User avatar
wilizucoder
Member
Posts: 81
Joined: Sat Sep 08, 2007 11:24 pm
Location: Espoo
Contact:

Re: Tyhmät kysymykset (I/2010)

Post by wilizucoder »

Yritin soveltaa tuota Sly-Jackin koodia omaani, en tajua, mikä mättää, animaatio ei toimi kuten pitäisi :shock: :?:

Code: Select all

Const PAINOVOIMA = -0.2 
yPlus#=0                


SCREEN 800,600
FrameLimit 40 


kenttä=LoadMap("oma Media\testikartta.til","oma Media\space_tileset.bmp")
PositionObject kenttä,0,50
PlayObject kenttä,0,0,0.5

oikea=LoadAnimObject("oma Media\anim_ukkeli_oikea.bmp",25,25,0,11)
ShowObject oikea,OFF
ObjectRange oikea,27,27 

vasen=LoadAnimObject("oma Media\anim_ukkeli_vasen.bmp",25,25,0,11)
ShowObject vasen,OFF
ObjectRange vasen,27,27 

pelihahmo=CloneObject(oikea)
SetupCollision pelihahmo,kenttä,1,4,2
ObjectRange pelihahmo,27,27 
PositionObject pelihahmo,-175,-100
'-------------------------------------------------

Repeat

    vauhti=0

    If RightKey() Then 
        PaintObject pelihahmo,oikea 
        If maassa Then PlayObject pelihahmo,1,6,0.2
        vauhti=3 
    ElseIf LeftKey() Then
        PaintObject pelihahmo,vasen
        If maassa Then PlayObject pelihahmo,1,6,0.2
        vauhti=-3 
    Else 
        PlayObject pelihahmo,0
    EndIf

    If KeyHit(cbkeyz) And ObjectPlaying(pelihahmo)=False 
        lyönti=True
    EndIf 
    If lyönti = True    
        PlayObject pelihahmo,7,10,0.15,OFF
    EndIf
    If ObjectFrame(pelihahmo) > 9  
        lyönti = False
    EndIf 
 
    
    TranslateObject pelihahmo,vauhti,yPlus#
    yPlus=yPlus+PAINOVOIMA   
    
    UpdateGame 
    CloneCameraPosition pelihahmo 
    
    maassa=0 'ilmassa jollei toisin käy ilmi
    törmäykset=CountCollisions(pelihahmo)
 
    For i=1 To törmäykset
        If GetCollision(pelihahmo,i)=kenttä
            'lattia
            If CollisionAngle(pelihahmo,i)=90 Then 
                yPlus#=-1
                maassa=1 
            EndIf
       
            If CollisionAngle(pelihahmo,i)=270 Then 
                yPlus#=-1
            EndIf
        EndIf
    Next i 
       
    'jos ollaan ilmassa, näytä toisenlainen kuva
    If törmäykset=0 Then PlayObject pelihahmo,7
    
    'HYPPY (vain jos jalat maassa)
    If KeyHit(200) And maassa Then 
        yPlus#=9
    EndIf
    
    If ObjectX(pelihahmo)<=-220 And ObjectY(pelihahmo)=150 Then End 
    
    
    DrawGame
    Text 10,10,"X "+ObjectX(pelihahmo)
    Text 10,30,"Y "+ObjectY(pelihahmo)
    Text 10,50,"FPS "+FPS() 

DrawScreen 
Until EscapeKey()
legend
Advanced Member
Posts: 371
Joined: Wed Nov 18, 2009 8:06 pm

Re: Tyhmät kysymykset (I/2010)

Post by legend »

wilizucoder wrote:Kysymys...
Virheesi oli, että yritit pyöritää lyöntiä niin kaun kuin se menee lopppuun, mutta pyöritit heti sen jälkeen paikallaan olemis kuvan. (Sekavaa)
Joten sinun täytyy lisätä siihen ehtolauseke ennen liikkumista.
Korjattu versio.

Code: Select all

Const PAINOVOIMA = -0.2 
yPlus#=0                


SCREEN 800,600
FrameLimit 40 


kenttä=LoadMap("oma Media\testikartta.til","oma Media\space_tileset.bmp")
PositionObject kenttä,0,50
PlayObject kenttä,0,0,0.5

oikea=LoadAnimObject("oma Media\anim_ukkeli_oikea.bmp",25,25,0,11)
ShowObject oikea,OFF
ObjectRange oikea,27,27 

vasen=LoadAnimObject("oma Media\anim_ukkeli_vasen.bmp",25,25,0,11)
ShowObject vasen,OFF
ObjectRange vasen,27,27 

pelihahmo=CloneObject(oikea)
SetupCollision pelihahmo,kenttä,1,4,2
ObjectRange pelihahmo,27,27 
PositionObject pelihahmo,-175,-100
'-------------------------------------------------

Repeat

    vauhti=0

    If lyönti = OFF
        If RightKey() Then 
            PaintObject pelihahmo,oikea 
            If maassa Then PlayObject pelihahmo,1,6,0.2
            vauhti=3 
        ElseIf LeftKey() Then
            PaintObject pelihahmo,vasen
            If maassa Then PlayObject pelihahmo,1,6,0.2
            vauhti=-3 
        Else 
            PlayObject pelihahmo,0
        EndIf
    EndIf

    If KeyHit(cbkeyz) And ObjectPlaying(pelihahmo)=False 
        lyönti=True
    EndIf 
    If lyönti = True    
        PlayObject pelihahmo,7,10,0.15,OFF
    EndIf
    If ObjectFrame(pelihahmo) > 9  
        lyönti = False
    EndIf 

    
    TranslateObject pelihahmo,vauhti,yPlus#
    yPlus=yPlus+PAINOVOIMA   
    
    UpdateGame 
    CloneCameraPosition pelihahmo 
    
    maassa=0 'ilmassa jollei toisin käy ilmi
    törmäykset=CountCollisions(pelihahmo)

    For i=1 To törmäykset
        If GetCollision(pelihahmo,i)=kenttä
            'lattia
            If CollisionAngle(pelihahmo,i)=90 Then 
                yPlus#=-1
                maassa=1 
            EndIf
       
            If CollisionAngle(pelihahmo,i)=270 Then 
                yPlus#=-1
            EndIf
        EndIf
    Next i 
       
    'jos ollaan ilmassa, näytä toisenlainen kuva
    If törmäykset=0 Then PlayObject pelihahmo,7
    
    'HYPPY (vain jos jalat maassa)
    If KeyHit(200) And maassa Then 
        yPlus#=9
    EndIf
    
    If ObjectX(pelihahmo)<=-220 And ObjectY(pelihahmo)=150 Then End 
    
    
    DrawGame
    Text 10,10,"X "+ObjectX(pelihahmo)
    Text 10,30,"Y "+ObjectY(pelihahmo)
    Text 10,50,"FPS "+FPS() 

DrawScreen 
Until EscapeKey()
Last edited by legend on Sun Mar 21, 2010 7:08 pm, edited 3 times in total.
Hene
Active Member
Posts: 122
Joined: Wed Apr 22, 2009 8:13 pm

Re: Tyhmät kysymykset (I/2010)

Post by Hene »

Kiitokset Jaahasille, nyt toimii (Muistelin kokeilleeni ennen repeattia, mutta en ilmeisesti sittenkään muistanut : D)

Miksi Timer näyttää kuluneen ajan alkavan aina seiskalla (Tyyliin 7345408), vaikka aika olisi mikä?
"Baby," I said. "I'm a genius but nobody knows it but me."
jaahas
Advanced Member
Posts: 307
Joined: Fri Feb 05, 2010 11:36 pm
Location: Tornio

Re: Tyhmät kysymykset (I/2010)

Post by jaahas »

Jonez wrote:Koodissa vihu tuhotaan heti kun ObjectInteger( vihu1\fieldi1 ) = 0. Tämä tarkistus tehdään kuitenkin ammus-silmukassa, eli tarkastusta ei tehdä jos ammuksia ei ole. Vihu tuhoutuu heti ammuttaessa, koska jokaisen vihun ObjectInteger() = 0.

Siis:
1. Vihu syntyy. Hp = 0, mutta kone ei vielä tätä tiedä.
2. Sinä ammut. Nyt vihun hp-tarkastus tehdään (välittömästi, ammuksen ei tarvitse osua vihuun).
3. Koska Hp (eli ObjectInteger() ) = 0, vihu tuhotaan.

Pieni neuvo: tarkasta mieluummin onko ObjectInteger( vihu1\fieldi1 ) <= 0, koska myöhemmin saattaa tulla tapauksia jossa hp tippuu alle nollan. Tämänhetkisellä systeemillä vihu ei kuole jos hp < 0. Vain jos hp = 0.

Ja varoitus. Tämänhetkinen koodi mavittaa helposti jos ObjectInteger( vihu1\fieldi1 ) = 20. Tämä johtuu siitä, että tämä kohta koodissa:

Code: Select all

If ObjectInteger(vihu1\fieldi)=0 Then
    DeleteObject vihu1\fieldi
    Delete vihu1
EndIf
on pisla1-silmukassa. Selvennys:

Oletetaan että vihuja on olemassa ainakin yksi, ja ammuksia vähintään kaksi. Olet siis ampunut kerran, ja heti sen perään ampunut toisen. Ensimmäinen ammus osuu viholliseen. Nyt käy näin:
1. Osuma tarkastetaan. Ammus tuhotaan. Vihun hp menee nolliin ja vihu tuhotaan.
2. Ammus-silmukka hyppää alkuun, seuraavan ammuksen tarkastusvuoro.
3. Tehdään tarkastus ammuksen ja vihun välillä (ObjectsOverlap()). Tässä tarkastuksessa oleva vihu on kuitenkin tuhottu. --> MAV.

Kannattaa tehdä vaikka muuttuja vihuTuhottu, joka saa arvon TRUE jos vihun hp <= 0. Tämän muuttujan arvo sitten tarkastetaan vihu-silmukan lopussa. Siis aivan lopussa. Ja jos vihuTuhottu = True, vihu tuhotaan. Näin vältymme mavilta. Arvo pitää muistaa asettaa falseksi aina vihu-silmukan alussa.
kiitos
EDIT:

miten saan et pislalla ampuu aina 3 sekunnin välein täs olis pätkä koodista

Code: Select all

If MouseHit(1) Then

pisla1.PISLAT = New (PISLAT)
pisla1\fieldi = CloneObject (ammus)


CloneObjectPosition pisla1\fieldi,pisla
ResetObjectCollision pisla1\fieldi
PointObject pisla1\fieldi,hiiri
reload=5

EndIf
EndIf
[/edit]
legend
Advanced Member
Posts: 371
Joined: Wed Nov 18, 2009 8:06 pm

Re: Tyhmät kysymykset (I/2010)

Post by legend »

Hene wrote: ... Miksi Timer näyttää kuluneen ajan alkavan aina seiskalla (Tyyliin 7345408), vaikka aika olisi mikä?
Ohjeista wrote:Kertoo järjestelmän ajastimen erittäin tarkasti. Järjestelmän ajastin lähtee nollasta kun tietokone käynnistetään.
Jos halauat mitatata aikaa nollasta niin ota alkuun ajastimen luku muistiin ja poista se sitten aina kun tulostat ajan.

Esim.

Code: Select all

    A = Timer() 'talteen

    Repeat
        Text 0,0, Timer() 'kone on ollut päällä
        Text 0,20, Timer() -A 'ohjelma on ollut päällä
        DrawScreen
    Forever 

Jaahakselle:

Otat ajan, milloin ammuit viimeksi ja sitten vertaa, milloin nykyinen aika on yli 3 sekuntia.

Code: Select all

If MouseHit(1) Then

    If Timer() > AmpumisAika  'katsotaan onko ampumis aika mennyt ohi
    
        pisla1.PISLAT = New (PISLAT)
        pisla1\fieldi = CloneObject (ammus)
        
        
        CloneObjectPosition pisla1\fieldi,pisla
        ResetObjectCollision pisla1\fieldi
        PointObject pisla1\fieldi,hiiri
        
        AmpumisAika = Timer() + 3000 '3 sekunttia
    
    EndIf
EndIf
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 »

Hene wrote:Kiitokset Jaahasille, nyt toimii (Muistelin kokeilleeni ennen repeattia, mutta en ilmeisesti sittenkään muistanut : D)

Miksi Timer näyttää kuluneen ajan alkavan aina seiskalla (Tyyliin 7345408), vaikka aika olisi mikä?
Timer() palauttaa prosessorin ilmoittaman laskurin (millisekunteina), joka voi olla mitä tahansa 0 - 2^32. Jos haluat mitata kauanko aikaa on kulunut tee näin:

Code: Select all

aloitusaika% = Timer()
Wait 1000
kulunutaika% = Timer() - aloitusaika
Print kulunutaika
WaitKey
-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'.
jaahas
Advanced Member
Posts: 307
Joined: Fri Feb 05, 2010 11:36 pm
Location: Tornio

Re: Tyhmät kysymykset (I/2010)

Post by jaahas »

legend wrote:
Hene wrote: ... Miksi Timer näyttää kuluneen ajan alkavan aina seiskalla (Tyyliin 7345408), vaikka aika olisi mikä?
Ohjeista wrote:Kertoo järjestelmän ajastimen erittäin tarkasti. Järjestelmän ajastin lähtee nollasta kun tietokone käynnistetään.
Jos halauat mitatata aikaa nollasta niin ota alkuun ajastimen luku muistiin ja poista se sitten aina kun tulostat ajan.

Esim.

Code: Select all

    A = Timer() 'talteen

    Repeat
        Text 0,0, Timer() 'kone on ollut päällä
        Text 0,20, Timer() -A 'ohjelma on ollut päällä
        DrawScreen
    Forever 

Jaahakselle:

Otat ajan, milloin ammuit viimeksi ja sitten vertaa, milloin nykyinen aika on yli 3 sekuntia.

Code: Select all

If MouseHit(1) Then

    If Timer() > AmpumisAika  'katsotaan onko ampumis aika mennyt ohi
    
        pisla1.PISLAT = New (PISLAT)
        pisla1\fieldi = CloneObject (ammus)
        
        
        CloneObjectPosition pisla1\fieldi,pisla
        ResetObjectCollision pisla1\fieldi
        PointObject pisla1\fieldi,hiiri
        
        AmpumisAika = Timer() + 3000 '3 sekunttia
    
    EndIf
EndIf
kiitos
EDIT:

mikäs täs funktios on vikana?

Code: Select all

h=0

level=1

Repeat

If KeyHit(cbkeyspace) Then h=h+1

muunto (level,h,jk,km)

If jk = km Then Goto loppu

Forever

loppu:

Repeat

Text 100,100,"toimiko?"

DrawScreen

Forever

Function muunto (levelf,muuttuja,muuttuja1,muuttuja2)

muuttuja1=1

muut = levelf=levelf+10

If muut=muuttuja Then muuttuja1=muuttuja2

End Function
[/edit]
legend
Advanced Member
Posts: 371
Joined: Wed Nov 18, 2009 8:06 pm

Re: Tyhmät kysymykset (I/2010)

Post by legend »

Jaahakselle:
Functioilla on omat muuttujat, ellet ole määritellyt niitä globaaleiksi.
Esimerkki: (Koita soveltaa tätä)

Code: Select all

    Txt1$ = "Toimii 1"
    Global Txt2$
    Txt2 = "Toimii 2"
    Const Txt5 = "Toimii 5" 'ei tarvitse $ merkkiä, vakioissa
    
    Tulosta("Toimii 3")
    
    WaitKey
    

    Function Tulosta(Vastaanotettu$)
        Print Txt1 'ei globaali
        Print Txt2 'globaali
        Print Vastaanotettu$ 'vastaanotettu
        Print Korjaa("toimii 4") 'functiosta saatu
        Print Txt5 'vakio
    EndFunction
    
    Function Korjaa(Txt$) 'functio joka palauttaa tekstin ensimmäisen kirjaimen isona + loput
       Return Upper(Left(Txt$,1)) + Mid(Txt$,2)
    EndFunction
jaahas
Advanced Member
Posts: 307
Joined: Fri Feb 05, 2010 11:36 pm
Location: Tornio

Re: Tyhmät kysymykset (I/2010)

Post by jaahas »

miten saan sen oikean hiiren katoamaan että siinä näkyy vain se mun tekemä hiiri?
Awaclus
Forum Veteran
Posts: 2939
Joined: Tue Aug 28, 2007 2:50 pm

Re: Tyhmät kysymykset (I/2010)

Post by Awaclus »

jaahas wrote:miten saan sen oikean hiiren katoamaan että siinä näkyy vain se mun tekemä hiiri?
Manuaalia saa käyttää. ShowMouse
jaahas
Advanced Member
Posts: 307
Joined: Fri Feb 05, 2010 11:36 pm
Location: Tornio

Re: Tyhmät kysymykset (I/2010)

Post by jaahas »

Chaosworm wrote:
jaahas wrote:miten saan sen oikean hiiren katoamaan että siinä näkyy vain se mun tekemä hiiri?
Manuaalia saa käyttää. ShowMouse
ei löydy
EDIT:

aijaa tota showmousea voi käyttää tähänki

jaahas
Advanced Member
Posts: 307
Joined: Fri Feb 05, 2010 11:36 pm
Location: Tornio

Re: Tyhmät kysymykset (I/2010)

Post by jaahas »

en oikein osaa tehdä funktioita joten voiko joku tehä mulle tallennus funktion?
EDIT:

tai miten teen tallennus funkion?

MrMonday
Advanced Member
Posts: 378
Joined: Fri Oct 10, 2008 2:35 pm

Re: Tyhmät kysymykset (I/2010)

Post by MrMonday »

jaahas wrote:en oikein osaa tehdä funktioita joten voiko joku tehä mulle tallennus funktion?
EDIT:

tai miten teen tallennus funkion?

Mene editorin "Komennot"-osioon ja sieltä valitset "TIEDOSTOT"-kohdan.. Sitten sieltä katsot komentoja joilla voi tallentaa esim. muuttujien arvot tiedostoon..
Ainakin itse tein joskus sen niin, ja toimi hyvin.. mutta tosiaan, tutustu kunnolla edellä mainittuihin komentoihin..
Nassi_Setä
Advanced Member
Posts: 281
Joined: Sat Jun 28, 2008 5:19 pm
Location: Hämeessä miä

Re: Tyhmät kysymykset (I/2010)

Post by Nassi_Setä »

@Jaahas.: oletan että osaat jotain funktioista, joten funktiossasi pitää avata tiedosto(jos ei löydy se tekee sen) OpenToWrite tai OpenToEdit.
Sitten kirjoittaa esim. pallon koordinaatit tiedostoon ja sulkea se.
(huono) esimerkki:

Code: Select all

SCREEN 400,300

Global x,y

x=200
y=150

AddText "Enter - Tallenna"
AddText "Backspace - Lataa"

Repeat 

//palluran liikuttelu

    If LeftKey() Then x-1
    If RightKey() Then x+1 
    
    If UpKey() Then y-1
    If DownKey() Then y+1
//lataus ja tallennus funktiot

    If KeyHit(28) Then Tallenna(x,y)            //jos entteriä >> tallennetaan
    
    If KeyHit(14) Then Lataa("tallennus.dat")   //jos kumitustäppäintä >> ladataan

//piirretään vaihdetaan piirtoväri ja piirretään pallura

    Color cbRed
    
    Circle x,y,30
    
//Ja pakolliset asiat

    DrawScreen
    
Until EscapeKey()

//tallennus
Function Tallenna(x_,y_)            //Tallennus funkkari
    f=OpenToWrite("tallennus.dat")  //avataan filu jos filua ei ole ohjelma tekee sen
    WriteLine f,x_                  //kirjoitetaan filuun x 
    WriteLine f,y_                  //kirjoitetaan y
    CloseFile f                     //Suljetaan filu
EndFunction

//lataus
Function Lataa(polku$)              //lataus funktio
    f=OpenToRead(polku$)   //avataan filu lukemista varten
    x=ReadLine(f)                   //luetaan filusta X:n ja
    y=ReadLine(f)                   //Y:n paikat
    CloseFile f                     //suljetaan filu
EndFunction 
\../(-_-)\../ <---klick MyBrute Image
Jotain evilii on tekeillä....
RMS-74
Newcomer
Posts: 5
Joined: Sat Sep 26, 2009 3:24 pm
Contact:

Re: Tyhmät kysymykset (I/2010)

Post by RMS-74 »

Miten vaihdetaan pelihahmon animoitu objecti lennossa toiseen animoituun objectiin, jotka ovat eri kokoisia?
Niin että se on samassa kohtaa aina edellisen objectin kanssa (kävelevä/ryömivä)
Eli pitäisi saada kävelevä ukkeli ryömimään > kävelemään > ryömimään

Kannattaako toteuttaa TYPEllä vai millä?
sankja
Newcomer
Posts: 30
Joined: Thu Jan 29, 2009 10:32 pm

Re: Tyhmät kysymykset (I/2010)

Post by sankja »

Nassi_Setälle kysymys: Vaikka tuo tallennus ja lataus esimerkkisi toimiikin hyvin,niin ihmettelen seuraavaa...
Miten tuossa Nassi_Setän tallennus esimerkissä tuo latausjuttu pitäs ymmärtää, koska x ja y ladataan tiedostosta readline komennolla eli merkkeinä,niin miten circle käsky voi tulkita ne numeroiksi.Ja miten readline voi yleensäkään tallentaa x:ään ja y:hyn lataus kohdassa,kun ne eivät edes ole merkkijono muuttujia.
Voisiko Nassi_Setä tai joku muu valaista asiaa? :shock:
Locked