Tyhmät kysymykset (I/2010)

Voit pyytää apua ohjelmointiongelmiin täältä.
Locked
User avatar
Bambi
Member
Posts: 87
Joined: Sat Nov 24, 2007 12:51 pm

Re: Tyhmät kysymykset (I/2010)

Post by Bambi »

Miten tähän rogueliketyyppisen luolanteko"algoritmiin" saisi vielä sellaisen tarkistuksen, joka tarkastaa että huoneeseen myös päästään jotakin kautta? Tässä funktioni:

Code: Select all

Function AlustaKentta()
    For x = 0 To KENTTA_LEVEYS
    For y = 0 To KENTTA_KORKEUS
        kentta(x,y) = 1 '0 = ei seinää, 1 = seinä
    Next y
    Next x
EndFunction

Function TeeHuone(wid,heig,x,y,fill=0)
    rwid = x+wid 'leveys
    rheg = y+heig 'korkeus
    
    For xx = x To rwid
    For yy = y To rheg
        kentta(xx,yy) = fill
    Next yy
    Next xx
EndFunction 

Function TeeLuola()
    'luodaan aloitushuone about keskelle ruutua
    randx = 22
    randy = 22
    TeeHuone(5,5,randx,randy)
    
    'luodaan luola
    For a=0 To 100
        ax=Rand(-15,15)
        ay=Rand(-15,15)
        
        TeeHuone(3,4,randx+ax,randy+ay)
    Next a 
EndFunction 
Oon testannu monia eri tapoja (lähinnä vain randomisti erilaisia tarkistusjuttuja ilman sen suurempaa miettimistä, mitä mistäkin tapahtuu) eikä tähän mennessä ole tuottanut tulosta. Harkitsin myös A*-algoritmiä, mutta menisi liian hitaaksi ja työlääksi..
User avatar
Jare
Devoted Member
Posts: 877
Joined: Mon Aug 27, 2007 10:18 pm
Location: Pori
Contact:

Re: Tyhmät kysymykset (I/2010)

Post by Jare »

Bambi wrote:Miten tähän rogueliketyyppisen luolanteko"algoritmiin" saisi vielä sellaisen tarkistuksen, joka tarkastaa että huoneeseen myös päästään jotakin kautta? Tässä funktioni:

...

Oon testannu monia eri tapoja (lähinnä vain randomisti erilaisia tarkistusjuttuja ilman sen suurempaa miettimistä, mitä mistäkin tapahtuu) eikä tähän mennessä ole tuottanut tulosta. Harkitsin myös A*-algoritmiä, mutta menisi liian hitaaksi ja työlääksi..
Ei taida olla juuri muita vaihtoehtoja kuin A*:lla tai jollain tehokkaammalla reitinhakualgoritmilla testaaminen. Minkä kokoisia kentät ovat (taulukon ulottuvuudet)? Nopeutta hakuun saa toki aloittamalla haun mahdollisimman läheltä uutta huonetta, esimerkiksi lähimmästä huoneesta, jonka jo tiedetään olevan saavutettavissa.
DisturbedTK
Newcomer
Posts: 9
Joined: Tue Dec 29, 2009 7:12 pm

Re: Tyhmät kysymykset (I/2010)

Post by DisturbedTK »

Mistäkö johtuu, kun pyöritän objectia, sen ympärille muodostuu musta laatikko?
otto90x
Advanced Member
Posts: 349
Joined: Mon Aug 27, 2007 9:00 pm
Location: Lapinjärvi, Finland
Contact:

Re: Tyhmät kysymykset (I/2010)

Post by otto90x »

Bambi wrote:Miten tähän rogueliketyyppisen luolanteko"algoritmiin" saisi vielä sellaisen tarkistuksen, joka tarkastaa että huoneeseen myös päästään jotakin kautta?
Voit myös käyttää sellaista algoritmia, että joka huone on varmasti kiinni toisissaan. RogueBasin on loistava tietolähde muihinkin roguelike peleihin liittyviin ongelmiin.
DisturbedTK wrote:Mistäkö johtuu, kun pyöritän objectia, sen ympärille muodostuu musta laatikko?
Jos tahdot pyörittää objektia niin käytä objektien maskivärinä mustaa, eli RGB arvoa 0,0,0, muilla maskiväreillä tulee objektin ympärille musta laatikko. Tämä on siis CoolBasicin bugi/ominaisuus.
Otto Martikainen a.k.a. MetalRain, otto90x, kAATOSade.
Runoblogi, vuodatusta ja sekoiluja.
Viltzu
Guru
Posts: 1132
Joined: Sun Aug 26, 2007 5:45 pm
Location: Alavieska
Contact:

Re: Tyhmät kysymykset (I/2010)

Post by Viltzu »

otto90x wrote:
DisturbedTK wrote:Mistäkö johtuu, kun pyöritän objectia, sen ympärille muodostuu musta laatikko?
Jos tahdot pyörittää objektia niin käytä objektien maskivärinä mustaa, eli RGB arvoa 0,0,0, muilla maskiväreillä tulee objektin ympärille musta laatikko. Tämä on siis CoolBasicin bugi/ominaisuus.
Ja ennenkuin Disturbed kysyt, jos välttämättä haluat mustaa käyttää itse tekeleessä, käytä RGB värinä vaikka 1,0,0.
En siis meinaa maskiväriä nyt, jos laitat maskiväriksi 1,0,0 niin mustalaatikko ei häivy.
DisturbedTK
Newcomer
Posts: 9
Joined: Tue Dec 29, 2009 7:12 pm

Re: Tyhmät kysymykset (I/2010)

Post by DisturbedTK »

Viltzu wrote:
otto90x wrote:
DisturbedTK wrote:Mistäkö johtuu, kun pyöritän objectia, sen ympärille muodostuu musta laatikko?
Jos tahdot pyörittää objektia niin käytä objektien maskivärinä mustaa, eli RGB arvoa 0,0,0, muilla maskiväreillä tulee objektin ympärille musta laatikko. Tämä on siis CoolBasicin bugi/ominaisuus.
Ja ennenkuin Disturbed kysyt, jos välttämättä haluat mustaa käyttää itse tekeleessä, käytä RGB värinä vaikka 1,0,0.
Juu empä mie nyt niin urpo ole, joskus parivuotta sitten kysynnyt juuri samaa asiaa täällä, päässyt vain unohtumaan
BlueDeath
Newcomer
Posts: 18
Joined: Tue Feb 02, 2010 2:02 pm

Re: Tyhmät kysymykset (I/2010)

Post by BlueDeath »

Taas tällainen n00b kysymys:

<!--n00b_question-->
Kun ohjelmassani on pääsilmukka (Forever), niin pitäisi nappia painamalla tyhjentää ikkunan sisältö. No, kokeilin Cls-komentoa. Mutta ei toiminut, koska silmukassa on DrawScreen, eli näyttö päivittyy kokoajan. On myös pakko olla pääsilmukka, koska muuten buttonit ei toimi. Onnistuuko tämä ollenkaan?
<!--[end]n00b_question-->
Awaclus
Forum Veteran
Posts: 2939
Joined: Tue Aug 28, 2007 2:50 pm

Re: Tyhmät kysymykset (I/2010)

Post by Awaclus »

BlueDeath wrote:Taas tällainen n00b kysymys:

<!--n00b_question-->
Kun ohjelmassani on pääsilmukka (Forever), niin pitäisi nappia painamalla tyhjentää ikkunan sisältö. No, kokeilin Cls-komentoa. Mutta ei toiminut, koska silmukassa on DrawScreen, eli näyttö päivittyy kokoajan. On myös pakko olla pääsilmukka, koska muuten buttonit ei toimi. Onnistuuko tämä ollenkaan?
<!--[end]n00b_question-->

Code: Select all

Repeat
    If KeyHit (cbkeyspace) Then Gosub Tyhjennys
Forever
Tyhjennys:
    Cls
    WaitKey
DisturbedTK
Newcomer
Posts: 9
Joined: Tue Dec 29, 2009 7:12 pm

Re: Tyhmät kysymykset (I/2010)

Post by DisturbedTK »

Elikkä ny tarvittais "tarkempaa törmäystä". Ohjelmassani olen pistänny pallon tekeen jotain kun osuu oikeaan datakerrokseen. Ongelmana on vain se, että jotain tapahtuu vasta kun ollaan pallon kordinaateissa, eikä sillon kun pallo koskettaa tilen reunaa.

koodi:

Code: Select all

If GetMap(3, ObjectX(ball), ObjectY(ball)) = 1 Then
jotain tällästä kokeilin ilman tulosta:

Code: Select all

If GetMap(3, ObjectX(ball)+10 Or ObjectX(ball)-10, ObjectY(ball)+10 Or ObjectY(ball)-10) = 1 Then
User avatar
Jare
Devoted Member
Posts: 877
Joined: Mon Aug 27, 2007 10:18 pm
Location: Pori
Contact:

Re: Tyhmät kysymykset (I/2010)

Post by Jare »

DisturbedTK wrote:Elikkä ny tarvittais "tarkempaa törmäystä". Ohjelmassani olen pistänny pallon tekeen jotain kun osuu oikeaan datakerrokseen. Ongelmana on vain se, että jotain tapahtuu vasta kun ollaan pallon kordinaateissa, eikä sillon kun pallo koskettaa tilen reunaa.
En takaa että tää toimii koska en testannu mutta antaa ainakin suuntaa.

Code: Select all

If GetMap(3, ObjectX(ball)+Cos(ObjectAngle(ball))*ObjectSizeX(ball), ObjectY(ball)+Sin(ObjectAngle(ball))*ObjectSizeY(ball)) = 1 Then
DisturbedTK
Newcomer
Posts: 9
Joined: Tue Dec 29, 2009 7:12 pm

Re: Tyhmät kysymykset (I/2010)

Post by DisturbedTK »

Jare wrote:
DisturbedTK wrote:Elikkä ny tarvittais "tarkempaa törmäystä". Ohjelmassani olen pistänny pallon tekeen jotain kun osuu oikeaan datakerrokseen. Ongelmana on vain se, että jotain tapahtuu vasta kun ollaan pallon kordinaateissa, eikä sillon kun pallo koskettaa tilen reunaa.
En takaa että tää toimii koska en testannu mutta antaa ainakin suuntaa.

Code: Select all

If GetMap(3, ObjectX(ball)+Cos(ObjectAngle(ball))*ObjectSizeX(ball), ObjectY(ball)+Sin(ObjectAngle(ball))*ObjectSizeY(ball)) = 1 Then
Juu ei. Ja paha lähteen korjaan kun ei ole tullut käytettyyn cosinia ja siniä.
ristis
Moderator
Moderator
Posts: 101
Joined: Sat Sep 08, 2007 4:32 pm
Location: Espoo
Contact:

Re: Tyhmät kysymykset (I/2010)

Post by ristis »

Bambi wrote:Miten tähän rogueliketyyppisen luolanteko"algoritmiin" saisi vielä sellaisen tarkistuksen, joka tarkastaa että huoneeseen myös päästään jotakin kautta?
Koodiin perehtymättä, mikäli ongelmasi liittyy luolan generointiin:
Kannattaa tehdä algoritmista sellainen, että se ei alun alkaenkaan voi tehdä huoneita joihin ei ole pääsyä.
User avatar
Jare
Devoted Member
Posts: 877
Joined: Mon Aug 27, 2007 10:18 pm
Location: Pori
Contact:

Re: Tyhmät kysymykset (I/2010)

Post by Jare »

DisturbedTK wrote:
Jare wrote:
DisturbedTK wrote:Elikkä ny tarvittais "tarkempaa törmäystä". Ohjelmassani olen pistänny pallon tekeen jotain kun osuu oikeaan datakerrokseen. Ongelmana on vain se, että jotain tapahtuu vasta kun ollaan pallon kordinaateissa, eikä sillon kun pallo koskettaa tilen reunaa.
En takaa että tää toimii koska en testannu mutta antaa ainakin suuntaa.

Code: Select all

If GetMap(3, ObjectX(ball)+Cos(ObjectAngle(ball))*ObjectSizeX(ball), ObjectY(ball)+Sin(ObjectAngle(ball))*ObjectSizeY(ball)) = 1 Then
Juu ei. Ja paha lähteen korjaan kun ei ole tullut käytettyyn cosinia ja siniä.
Pystytkö näyttämään vaikka koko ohjelmasi koodin niin virheen löytäminen voi olla helpompaa? Tai ehkä mä oon vaan sokee jollekin omalle virheelleni tossa laittamassani koodissa. :P
DisturbedTK
Newcomer
Posts: 9
Joined: Tue Dec 29, 2009 7:12 pm

Re: Tyhmät kysymykset (I/2010)

Post by DisturbedTK »

Jare wrote: Pystytkö näyttämään vaikka koko ohjelmasi koodin niin virheen löytäminen voi olla helpompaa? Tai ehkä mä oon vaan sokee jollekin omalle virheelleni tossa laittamassani koodissa. :P
Juu en mie lähes valmista peliä ihan viitti tänne pastee, mutta teinpä ny nopean korvikkeen:

Code: Select all

Const PAINOVOIMA = -0.1 'painoviman voimakkuus
                        'pienempi->suurempi pv.
                        'positiiviset arvot->
                        'painovoima ylöspäin?!
yPlus#=0                'Tämä hallitsee hyppyä


'Asetetaan ruutu hieman zoomattuun tilaan
SCREEN 320,240,0,cbsizable 
SetWindow "Painovoimaesimerkki",3 'suurenna ruudulle

'JOS PELI TÖKKII TAI PÄTKII TAI NYKII, MUUTA:
' 1) cbSizable -> cbFullScreen
' 2) poista rivi 23

FrameLimit 40 'rajoita nopeutta
'-------------------------------------------------
'lataa kartta, siirrä sitä ylöspäin ja animoi se.
kenttä=LoadMap("Media\cdm2.til","Media\tileset.bmp")
PositionObject kenttä,0,50
PlayObject kenttä,0,0,0.5

'lataa animaatiosarja oikealle, maskaa ja piilota se


'sama vasemmalle
ball=LoadObject("Media\fireball.bmp",360)

'Tämä on varsinainen ball, joka piirretään ja
'jota hallitaan. Sille asetetaan törmäys->kartta
'Tätä EI PIILOTETA.
SetupCollision ball,kenttä,1,4,2
'-------------------------------------------------
'Pääsilmukka
Repeat

    DrawGame
    vauhti=0 'oletuksena ei liikettä

    If RightKey() Then 
        vauhti=2 'vauhtia oikealle
        TurnObject ball,-6
    ElseIf LeftKey() Then
        vauhti=-2 'vauhtia vasemmalle
        TurnObject ball,6
        'pysäytä animaatio, jos ei liikuta
    EndIf
    
    'liikuta balla
    TranslateObject ball,vauhti,yPlus#
    yPlus=yPlus+PAINOVOIMA 'päivitä painovoima    
    
    UpdateGame 'päivitä törmäys
    CloneCameraPosition ball 'liimaa kamera
    
    maassa=0 'ilmassa jollei toisin käy ilmi
    törmäykset=CountCollisions(ball)
    'katsotaan tärmätäänkö kattoon tai lattiaan
    For i=1 To törmäykset
        If GetCollision(ball,i)=kenttä
            'lattia
            If CollisionAngle(ball,i)=90 Then 
                yPlus#=-1
                maassa=1 'jalat on maassa
            EndIf
            'katto
            If CollisionAngle(ball,i)=270 Then 
                yPlus#=-1
            EndIf
        EndIf
    Next i 
    

    
If GetMap(0, ObjectX(ball)+Cos(ObjectAngle(ball))*ObjectSizeX(ball), ObjectY(ball)+Sin(ObjectAngle(ball))*ObjectSizeY(ball)) = 3 Then
        Text 0,0,"DED"
    EndIf
       
    
    'HYPPY (vain jos jalat maassa)
    If UpKey() And maassa Then 
        yPlus#=4.5 'voimaa ylös päin
    EndIf

    DrawScreen 'piirrä näyttö

Until EscapeKey()

Pitäisi olla kaikki oleellinen
User avatar
Jare
Devoted Member
Posts: 877
Joined: Mon Aug 27, 2007 10:18 pm
Location: Pori
Contact:

Re: Tyhmät kysymykset (I/2010)

Post by Jare »

DisturbedTK, tässä pitäisi olla kohtalaisen toimiva ratkaisu. Idea on siinä että erikoistile tulee merkitä hit-kerrokseen ja sitten tarkistaa törmäys samassa loopissa seinien kanssa. Tilen numeroa käytetään tunnistamaan törmäys erikoistileen jopa ilman datakerrosta.

Edit: tällä hetkellä tuo näyttää tekstin aina kun osuu tuohon siniseen seinään.

Tutki rivejä 71-74

Code: Select all

Const PAINOVOIMA = -0.1 'painoviman voimakkuus
                        'pienempi->suurempi pv.
                        'positiiviset arvot->
                        'painovoima ylöspäin?!
yPlus#=0                'Tämä hallitsee hyppyä


'Asetetaan ruutu hieman zoomattuun tilaan
SCREEN 320,240,0,cbsizable 
SetWindow "Painovoimaesimerkki",3 'suurenna ruudulle

'JOS PELI TÖKKII TAI PÄTKII TAI NYKII, MUUTA:
' 1) cbSizable -> cbFullScreen
' 2) poista rivi 23

FrameLimit 40 'rajoita nopeutta
'-------------------------------------------------
'lataa kartta, siirrä sitä ylöspäin ja animoi se.
kenttä=LoadMap("Media\cdm2.til","Media\tileset.bmp")
PositionObject kenttä,0,50
PlayObject kenttä,0,0,0.5

'lataa animaatiosarja oikealle, maskaa ja piilota se


'sama vasemmalle
ball=LoadObject("Media\fireball.bmp",360)

'Tämä on varsinainen ball, joka piirretään ja
'jota hallitaan. Sille asetetaan törmäys->kartta
'Tätä EI PIILOTETA.
SetupCollision ball,kenttä,1,4,2
'-------------------------------------------------
'Pääsilmukka
Repeat

    DrawGame
    vauhti=0 'oletuksena ei liikettä

    If RightKey() Then 
        vauhti=2 'vauhtia oikealle
        TurnObject ball,-6
    ElseIf LeftKey() Then
        vauhti=-2 'vauhtia vasemmalle
        TurnObject ball,6
        'pysäytä animaatio, jos ei liikuta
    EndIf
    
    'liikuta balla
    TranslateObject ball,vauhti,yPlus#
    yPlus=yPlus+PAINOVOIMA 'päivitä painovoima    
    
    UpdateGame 'päivitä törmäys
    CloneCameraPosition ball 'liimaa kamera
    
    maassa=0 'ilmassa jollei toisin käy ilmi
    törmäykset=CountCollisions(ball)
    'katsotaan tärmätäänkö kattoon tai lattiaan
    For i=1 To törmäykset
        If GetCollision(ball,i)=kenttä
            'lattia
            If CollisionAngle(ball,i)=90 Then 
                yPlus#=-1
                maassa=1 'jalat on maassa
            EndIf
            'katto
            If CollisionAngle(ball,i)=270 Then 
                yPlus#=-1
            EndIf
			
			'Erikoistile
			If GetMap(0, CollisionX(ball,i)-Cos(CollisionAngle(ball,i))*ObjectSizeX(ball),collisiony(ball,i)-Sin(CollisionAngle(ball,i))*ObjectSizeY(ball)+yPlus) = 22 Then
				Text 0,0,"DED"
			EndIf
        EndIf
    Next i 
    
    'HYPPY (vain jos jalat maassa)
    If UpKey() And maassa Then 
        yPlus#=4.5 'voimaa ylös päin
    EndIf

    DrawScreen 'piirrä näyttö

Until EscapeKey()
DisturbedTK
Newcomer
Posts: 9
Joined: Tue Dec 29, 2009 7:12 pm

Re: Tyhmät kysymykset (I/2010)

Post by DisturbedTK »

Jare wrote:DisturbedTK, tässä pitäisi olla kohtalaisen toimiva ratkaisu. Idea on siinä että erikoistile tulee merkitä hit-kerrokseen ja sitten tarkistaa törmäys samassa loopissa seinien kanssa. Tilen numeroa käytetään tunnistamaan törmäys erikoistileen jopa ilman datakerrosta.

Edit: tällä hetkellä tuo näyttää tekstin aina kun osuu tuohon siniseen seinään.

Tutki rivejä 71-74

Code: Select all

Const PAINOVOIMA = -0.1 'painoviman voimakkuus
                        'pienempi->suurempi pv.
                        'positiiviset arvot->
                        'painovoima ylöspäin?!
yPlus#=0                'Tämä hallitsee hyppyä


'Asetetaan ruutu hieman zoomattuun tilaan
SCREEN 320,240,0,cbsizable 
SetWindow "Painovoimaesimerkki",3 'suurenna ruudulle

'JOS PELI TÖKKII TAI PÄTKII TAI NYKII, MUUTA:
' 1) cbSizable -> cbFullScreen
' 2) poista rivi 23

FrameLimit 40 'rajoita nopeutta
'-------------------------------------------------
'lataa kartta, siirrä sitä ylöspäin ja animoi se.
kenttä=LoadMap("Media\cdm2.til","Media\tileset.bmp")
PositionObject kenttä,0,50
PlayObject kenttä,0,0,0.5

'lataa animaatiosarja oikealle, maskaa ja piilota se


'sama vasemmalle
ball=LoadObject("Media\fireball.bmp",360)

'Tämä on varsinainen ball, joka piirretään ja
'jota hallitaan. Sille asetetaan törmäys->kartta
'Tätä EI PIILOTETA.
SetupCollision ball,kenttä,1,4,2
'-------------------------------------------------
'Pääsilmukka
Repeat

    DrawGame
    vauhti=0 'oletuksena ei liikettä

    If RightKey() Then 
        vauhti=2 'vauhtia oikealle
        TurnObject ball,-6
    ElseIf LeftKey() Then
        vauhti=-2 'vauhtia vasemmalle
        TurnObject ball,6
        'pysäytä animaatio, jos ei liikuta
    EndIf
    
    'liikuta balla
    TranslateObject ball,vauhti,yPlus#
    yPlus=yPlus+PAINOVOIMA 'päivitä painovoima    
    
    UpdateGame 'päivitä törmäys
    CloneCameraPosition ball 'liimaa kamera
    
    maassa=0 'ilmassa jollei toisin käy ilmi
    törmäykset=CountCollisions(ball)
    'katsotaan tärmätäänkö kattoon tai lattiaan
    For i=1 To törmäykset
        If GetCollision(ball,i)=kenttä
            'lattia
            If CollisionAngle(ball,i)=90 Then 
                yPlus#=-1
                maassa=1 'jalat on maassa
            EndIf
            'katto
            If CollisionAngle(ball,i)=270 Then 
                yPlus#=-1
            EndIf
			
			'Erikoistile
			If GetMap(0, CollisionX(ball,i)-Cos(CollisionAngle(ball,i))*ObjectSizeX(ball),collisiony(ball,i)-Sin(CollisionAngle(ball,i))*ObjectSizeY(ball)+yPlus) = 22 Then
				Text 0,0,"DED"
			EndIf
        EndIf
    Next i 
    
    'HYPPY (vain jos jalat maassa)
    If UpKey() And maassa Then 
        yPlus#=4.5 'voimaa ylös päin
    EndIf

    DrawScreen 'piirrä näyttö

Until EscapeKey()
Eipä toimi, tuon kanssa kun lähtee vähän aikaa leikkimään niin johan alkaa DED villkumaan

E: ongelma syntyy näköjään vain omalla hahmolla, jatkan tutkiskelua huomenna
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 saisin tästä sellasen että jos ampuu vihua niin se ja bullet tuhoutuu ja
xptä tulee 50 sit ku xp on 50 lvl nousee 2

Code: Select all

Type BULLETS
    Field obj
End Type

FrameLimit 40

vihu=LoadObject("media\guy.bmp")

pelaaja=LoadObject("Media\soldier.bmp",72)

bullet=LoadObject("Media\bullet.bmp")
ShowObject bullet,OFF

ClsColor cbdark

AddText "Arrows to turn, SPACE to shoot"

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
    
    If KeyDown(cbkeyspace) And reload=0
         
        newBullet.BULLETS= New(BULLETS)
        newBullet\obj=CloneObject(bullet)
        CloneObjectPosition newBullet\obj,pelaaja
        CloneObjectOrientation newBullet\obj,pelaaja
        MoveObject newBullet\obj,24 
    
        reload=4
    EndIf
    
    i=0
    For iBullet.BULLETS= Each BULLETS
        
        MoveObject iBullet\obj,6
        
        If Distance2(iBullet\obj,pelaaja)>200 Then 
            DeleteObject iBullet\obj
            Delete iBullet
        EndIf
        
        i=i+1
        
    Next iBullet
    
    If reload>0 Then reload=reload-1
    
    Text 30,30,"Bulets to update: "+i
    
    DrawScreen

Until EscapeKey()
User avatar
Jonez
Devoted Member
Posts: 575
Joined: Mon Aug 27, 2007 8:37 pm

Re: Tyhmät kysymykset (I/2010)

Post by Jonez »

Tarkista iBullet-silmukassa esim. ObjectsOverlapilla ovatko iBullet\obj ja vihu päällekkäin. Jos ovat, tuhoa ammus ja lisää muuttujaan "xp" 50 esim. näin: xp = xp + 50. Levelointi tapahtuu kun xp >= tarvittavaLuku (tässä on ongelmansa. Yritä keksiä mikä).

Kannattaa käyttää iBullet-silmukassa erillistä "onkoTuhottu"-muuttujaa, joka asetetaan nollaksi (=False) joka kierroksen alussa. Jos onkoTuhottu = True silmukan lopussa, ammus tuhotaan. Tämä siksi, että monesti ammus on mahdollista tuhota useita kertoja silmukan sisällä. Jos tuhoat sen kerran ja teet sen perään uuden tarkistuksen ammukselle, seuraa MAV koska ammusta ei ole. Edit. Siis sen sijaan että tuhoaisit ammuksen (muualla kuin silmukan lopussa), asetatkin muuttujan onkoTuhottu arvon todeksi (=True)
-Vuoden 2008 aloittelijan ystävä -palkinnon voittaja-
Image <- protestipelikilpailun voittaja.
Space War
jaahas
Advanced Member
Posts: 307
Joined: Fri Feb 05, 2010 11:36 pm
Location: Tornio

Re: Tyhmät kysymykset (I/2010)

Post by jaahas »

mikä täs on vikana?
kun otan lainaa saa tonnin mut sitku ostan kassan joka maksaa 1000e niin rahat meneeki -1000e ja sit viel pitäs laittaa et jos ei rahat riitä niin tyhjentää sen screenin ja keskellä lukee rahat ei riitä ja sit 4 sek päästä se menee alku:
voisko joku auttaa?

Code: Select all

FrameLimit 40
SCREEN 1000,800
alku1:
CloseInput()
Repeat
txt$=Input("mitä tehdään?:")
If KeyHit(cbkeyreturn) Then
If txt = "ei" Then Goto hävisit
If txt = "joo" Then i=i+1000 : Goto alku
EndIf
Text 400, 300, "otetaanko lainaa?"
Text 455, 320, "ei"
Text 450, 340, "joo"
DrawScreen
Forever
alku:
CloseInput()
Repeat
txt$=Input("mitä tehdään?:")
If KeyHit(cbkeyreturn) Then
If txt = "osta kassa" Then Goto yli1
If txt = "hanki mainosta" Then Goto yli2
If txt = "palkkaa työntekijöitä" then goto yli3
If txt = "osta toinen tontti" Then Goto yli4
If txt = "osta lisää tavaraa" then goto yli5
If txt = "remontoi" Then Goto yli6
If txt = "ota laina" Then Goto yli7
EndIf
Line 300,0,300,800
Line 0,100,1000000,1000
Line 700,0,700,800
Text 10, 100, "osta kassa"
Text 10, 120, "hanki mainosta"
Text 10, 140, "palkkaa työntekijöitä"
Text 10, 160, "osta toinen tontti"
Text 10, 180, "osta lisää tavaraa"
Text 10, 200, "remontoi"
Text 310, 10, "rahat:"+i
Text 410, 10, "e"
Text 710, 10, "menot:"+r
Text 710, 30, "tulot:"+u
Text 310, 30, "työntekijöitä:"+o
Text 310, 50, "kassoja:"+p
Text 710, 50, "lainaa maksettavana:"+t
DrawScreen
Forever
yli1:
CloseInput()
Repeat
p=0
i=0
txt$=Input("mitä tehdään?")
If KeyHit(cbkeyreturn) Then
If txt = "ok" Then p=p+1 : i=-1000 : Goto alku
If txt = "palaa" Then Goto alku
EndIf
Text 400, 300, "kassa maksaa 1000e"
Text 400, 320, "ostetaanko kassa? (ok)"
Text 400, 340, "ei osteta kassaa? (palaa)"
DrawScreen
Forever
hävisit:
CloseInput()
Repeat
txt=Input("alkuun?:")
If KeyHit(cbkeyreturn) Then 
If txt = "alkuun" Then Goto alku1
EndIf
Text 300, 300, "sinulla ei ole rahaa pyörittää kauppaa"
Text 390, 320, "alkuun (alkuun)"
Text 400, 340, "lopeta (ESC)"
DrawScreen
Forever
yli2:
yli3:
yli4:
yli5:
yli6:
yli7:
User avatar
Jonez
Devoted Member
Posts: 575
Joined: Mon Aug 27, 2007 8:37 pm

Re: Tyhmät kysymykset (I/2010)

Post by Jonez »

Kun kassa ostetaan asetat muuttujan i arvon suoraan -1000:een sen sijaan että vähentäisit siitä arvon 1000. Siis teet näin: "i = -1000" kun sinun pitäisi tehdä näin: "i = i - 1000".

Tehdäksesi tuon odotus-ikkunan, tee uusi "huone" kuten tähänkin asti, mutta käytä komentoa Wait ja siirry sen jälkeen takaisin. Esim. Wait 4000 pysäyttää ohjelman suorituksen neljäksi sekunniksi.
-Vuoden 2008 aloittelijan ystävä -palkinnon voittaja-
Image <- protestipelikilpailun voittaja.
Space War
Locked