Tyhmät kysymykset (I/2010)

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

Re: Tyhmät kysymykset (I/2010)

Post by Bambi » Tue Feb 02, 2010 10:59 pm

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: 865
Joined: Mon Aug 27, 2007 10:18 pm
Location: Helsinki
Contact:

Re: Tyhmät kysymykset (I/2010)

Post by Jare » Wed Feb 03, 2010 6:26 am

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 8:12 pm

Re: Tyhmät kysymykset (I/2010)

Post by DisturbedTK » Wed Feb 03, 2010 7:48 pm

Mistäkö johtuu, kun pyöritän objectia, sen ympärille muodostuu musta laatikko?

User avatar
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 » Wed Feb 03, 2010 7:48 pm

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.

User avatar
Viltzu
Guru
Posts: 1132
Joined: Sun Aug 26, 2007 5:45 pm
Location: Alavieska
Contact:

Re: Tyhmät kysymykset (I/2010)

Post by Viltzu » Wed Feb 03, 2010 8:02 pm

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 8:12 pm

Re: Tyhmät kysymykset (I/2010)

Post by DisturbedTK » Wed Feb 03, 2010 8:04 pm

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 3:02 pm

Re: Tyhmät kysymykset (I/2010)

Post by BlueDeath » Thu Feb 04, 2010 3:29 pm

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 » Thu Feb 04, 2010 4:16 pm

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 8:12 pm

Re: Tyhmät kysymykset (I/2010)

Post by DisturbedTK » Thu Feb 04, 2010 5:01 pm

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: 865
Joined: Mon Aug 27, 2007 10:18 pm
Location: Helsinki
Contact:

Re: Tyhmät kysymykset (I/2010)

Post by Jare » Thu Feb 04, 2010 5:45 pm

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 8:12 pm

Re: Tyhmät kysymykset (I/2010)

Post by DisturbedTK » Thu Feb 04, 2010 6:32 pm

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ä.

User avatar
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 » Thu Feb 04, 2010 6:52 pm

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: 865
Joined: Mon Aug 27, 2007 10:18 pm
Location: Helsinki
Contact:

Re: Tyhmät kysymykset (I/2010)

Post by Jare » Thu Feb 04, 2010 7:27 pm

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 8:12 pm

Re: Tyhmät kysymykset (I/2010)

Post by DisturbedTK » Thu Feb 04, 2010 8:03 pm

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: 865
Joined: Mon Aug 27, 2007 10:18 pm
Location: Helsinki
Contact:

Re: Tyhmät kysymykset (I/2010)

Post by Jare » Thu Feb 04, 2010 9:08 pm

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 8:12 pm

Re: Tyhmät kysymykset (I/2010)

Post by DisturbedTK » Thu Feb 04, 2010 10:58 pm

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: Sat Feb 06, 2010 12:36 am
Location: Tornio

Re: Tyhmät kysymykset (I/2010)

Post by jaahas » Sat Feb 06, 2010 6:04 pm

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 » Sat Feb 06, 2010 6:14 pm

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: Sat Feb 06, 2010 12:36 am
Location: Tornio

Re: Tyhmät kysymykset (I/2010)

Post by jaahas » Sat Feb 06, 2010 10:06 pm

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 » Sat Feb 06, 2010 10:38 pm

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