Tyhmät kysymykset (I/2011)

Voit pyytää apua ohjelmointiongelmiin täältä.
Locked
Latexi95
Guru
Posts: 1166
Joined: Sat Sep 20, 2008 5:10 pm
Location: Lempäälä

Re: Tyhmät kysymykset (I/2011)

Post by Latexi95 »

Kokkelkhan wrote:Olen pohtinut pääni puhki yrittäessäni saada eräänlaista energia systeemia toimimaan. Eli tarkoitus olisi tehdä rutiini (funktio mahdollisesti?) joka vähentäisi energiaa aina tietyn määrän kun joku ehto kävisi toteen, ja sitten palauttaisi vähennetyn energian kun ehto ei ole enää tosi.
Tässä ongelma tiivistettynä:

Code: Select all

var1=0
energy=100

if var1=true then
    energy=energy-30
elseif var1=false then
    energy=energy+30
endif
Tälläinen toteutushan ei tietenkään toimi koska energiaa vähennettäisiin loputtomiin.

Ehdotuksia? Esimerkkejä? Kiitos.
Siis haluaisit, että energiaa vähennettäisiin kertaalleen vain ehdon toteutuessa?
Voisit tehdä toisen muuttujan, johon tallennat sen, onko energia jo vähennetty.

Code: Select all

var1=0
vähennetty = false
energy=100

if var1=true and vähennetty = false then
    energy=energy-30
    vähennetty = true
elseif var1=false and vähennetty = true then
    energy=energy+30
    vähennetty = false
endif
Nyt energiaa lisätään/vähennetään vain kun var1 muuttuu.
User avatar
Timblex
Advanced Member
Posts: 252
Joined: Sun Apr 11, 2010 10:37 am
Location: Kouvola

Re: Tyhmät kysymykset (I/2011)

Post by Timblex »

Muistelisin että jossain oli kysymys jossa kysyttiin miten saa cooltown-talojen katot läpinäkyviksi
selasin ongelmia kahteenkymmeneen asti mutta en löytänyt eli:
miten saan cooltown-talojen katot läpinäkyviksi :?:
Entinen timpe99...
Demokisa 2013 demo valmis, Check it out!
User avatar
Jonez
Devoted Member
Posts: 575
Joined: Mon Aug 27, 2007 8:37 pm

Re: Tyhmät kysymykset (I/2011)

Post by Jonez »

Veikkaan, että cooltownissa sisäseiniä ei ikinä piirretä, eli jos saat katon läpinäkyväksi, ei se silti näytä hyvältä (sisäseinät puuttuvat). Mutta ainahan voit tehdä neljästä eri talosta seinät yhdelle talolle, jolloin saat myös sisäseinät näkyviksi. Ja ilman kattoa.
-Vuoden 2008 aloittelijan ystävä -palkinnon voittaja-
Image <- protestipelikilpailun voittaja.
Space War
User avatar
Timblex
Advanced Member
Posts: 252
Joined: Sun Apr 11, 2010 10:37 am
Location: Kouvola

Re: Tyhmät kysymykset (I/2011)

Post by Timblex »

sainkin katon helposti läpinäkyväksi :oops:
mutta tein niin että myös etuseinä muuttuu läpinäkyväksi niin näyttää kuin talo katoaisi
Entinen timpe99...
Demokisa 2013 demo valmis, Check it out!
User avatar
Timblex
Advanced Member
Posts: 252
Joined: Sun Apr 11, 2010 10:37 am
Location: Kouvola

Re: Tyhmät kysymykset (I/2011)

Post by Timblex »

Taas kysymys :roll:
miten saan objektin kääntymään hiireen päin :?:
Entinen timpe99...
Demokisa 2013 demo valmis, Check it out!
Dimple
Active Member
Posts: 103
Joined: Wed Nov 17, 2010 5:43 pm

Re: Tyhmät kysymykset (I/2011)

Post by Dimple »

timpe99 wrote:Taas kysymys :roll:
miten saan objektin kääntymään hiireen päin :?:
Sly_Jack0 wrote:

Code: Select all

RotateObject objekti,-GetAngle(ObjectX(objekti),ObjectY(objekti),MouseWX(),mouseWY())
EDIT:

Lisäsin miinuksen GetAngle():n eteen. Nyt toimii oikein. Kiitos JATothrim, kun huomasit koodini toimimattomuuden.

User avatar
Kokkelkhan
Newcomer
Posts: 6
Joined: Tue Mar 15, 2011 9:25 pm
Location: Pk-seutu

Re: Tyhmät kysymykset (I/2011)

Post by Kokkelkhan »

Dimple wrote:
timpe99 wrote:Taas kysymys :roll:
miten saan objektin kääntymään hiireen päin :?:
Sly_Jack0 wrote:

Code: Select all

RotateObject objekti,-GetAngle(ObjectX(objekti),ObjectY(objekti),MouseWX(),mouseWY())
Mielestäni ehdottomasti kätevin tapa olisi kiinnittää objecti hiireen:

Code: Select all

hiiri=Makeobject()
obj1=Loadobject("media/soldier.bmp",72)

Repeat
   Positionobject hiiri,MouseWX(),MouseWY()
   Pointobject obj1,hiiri

   Drawscreen
Forever
Päräjää...!
Sly_Jack0
Devoted Member
Posts: 612
Joined: Mon Dec 10, 2007 8:25 am

Re: Tyhmät kysymykset (I/2011)

Post by Sly_Jack0 »

Kokkelkhan wrote:Mielestäni ehdottomasti kätevin tapa olisi kiinnittää objecti hiireen:

Code: Select all

hiiri=Makeobject()
obj1=Loadobject("media/soldier.bmp",72)

Repeat
   Positionobject hiiri,MouseWX(),MouseWY()
   Pointobject obj1,hiiri

   Drawscreen
Forever
Mitenkä niin tämä on kätevin? Enemmän koodia ja yksi turha objekti.
Awaclus
Forum Veteran
Posts: 2939
Joined: Tue Aug 28, 2007 2:50 pm

Re: Tyhmät kysymykset (I/2011)

Post by Awaclus »

Sly_Jack0 wrote:
Kokkelkhan wrote:Mielestäni ehdottomasti kätevin tapa olisi kiinnittää objecti hiireen:

Code: Select all

hiiri=Makeobject()
obj1=Loadobject("media/soldier.bmp",72)

Repeat
   Positionobject hiiri,MouseWX(),MouseWY()
   Pointobject obj1,hiiri

   Drawscreen
Forever
Mitenkä niin tämä on kätevin? Enemmän koodia ja yksi turha objekti.
Jos tarkoituksena on pelkästään obj1:n kääntäminen, niin tämähän on kaikkein vähiten kätevä tapa toteuttaa haluttu tulos. Mutta ainakin minä olen yleensä räiskintäpeleissä halunnut kääntää myöskin targettia sitä mukaa kun pelaajahahmoa käännetään, jolloin tarvitaan hiirelle oma objekti joka tapauksessa muutenkin, ja myöskin PositionObject -rivi tarvitaan, joten ainakin koodin pituuden kannalta sen jälkeen tuommoinen PointObject on lyhyempi kuin jokin aikaisemmin mainituista.
6yrdyh

Re: Tyhmät kysymykset (I/2011)

Post by 6yrdyh »

Miten saan objektin2 pysymään objektin1 vasemmalla puolella kokoajan? Eli sitä objekti1 voi liikuttaa ja käännellä ja ton objekti2 pitää pysyä kokoajan sen vasemmalla puolella n.30pikselin päässä.
User avatar
Ilmuri
Developer
Developer
Posts: 277
Joined: Sun Aug 26, 2007 2:46 pm
Location: \o

Re: Tyhmät kysymykset (I/2011)

Post by Ilmuri »

6yrdyh wrote:Miten saan objektin2 pysymään objektin1 vasemmalla puolella kokoajan? Eli sitä objekti1 voi liikuttaa ja käännellä ja ton objekti2 pitää pysyä kokoajan sen vasemmalla puolella n.30pikselin päässä.
CloneObjectPosition, CloneObjectOrientation, TurnObject, MoveObject.
CoolBasic henkilökuntaa
Kehittäjä
CoolBasic Classic
User avatar
ItzRaines
Active Member
Posts: 211
Joined: Sat Feb 05, 2011 6:59 pm

Re: Tyhmät kysymykset (I/2011)

Post by ItzRaines »

Yritän vaihtaa eri aseeseen vaihtamalla kokonaan ukko objektia. Ainoa ongelma on se, että playermp40 objekti on näkymätön, sekä se ilmestyy samaan paikkaan, kuin aloitettaessa peli. Sen pitäisi ilmestyä juuri samaan kohtaan, kuin edellinen player objekti oli.

Code: Select all

SCREEN 800,600,0,1
FrameLimit 100
playerpoints = 0
Playerhealth=100
clip=8
font = LoadFont("arial",30,1,0)
SetFont font

// Luodaan tyyppikokoelma ammuksia varten
Type BULLETS
    Field obj
End Type

// Ladataan media
Gosub LoadMedia

// Määritetään tyyppikokoelma vihollisille ja luodaan pari vihollista
Type ENEMIES
    Field obj
    Field energy
End Type
Gosub MakeEnemies

/////// PÄÄSILMUKKA ///////
Repeat
    Gosub CheckButtons
    Gosub EnemyAI
    Gosub CheckBullets
    Gosub DrawGUI
       
    // Siirretään kameraa pelaajan mukana
    CloneCameraPosition player
    
    Color cbDarkGreen
    Text 280,564,"FPS:"+FPS()
    
    Color cbDarkGreen : Text 280,468, playerpoints
    Color cbDarkGreen : Text 560,468,"Health:"+playerhealth 
    Color cbdarkgreen : Text 450,564,"Clip:"+clip
     
    DrawScreen

Until EscapeKey()


/////// ALIOHJELMAT ///////
// Aliohjelma jossa ladataan pelissä tarvittava media
LoadMedia:
    // Ladataan kartta ja animoidaan se
    map = LoadMap("media/finalbeta.til", "media/Tileset.bmp")
    
    colt = LoadImage("media/colt.bmp")
    
    screenbox = LoadImage("media/screenbox.bmp")
   
    // Ladataan panosobjektin grafiikat ja piilotetaan objekti
    bulletobject = LoadObject("Media\bullet.bmp", 90)
    ShowObject bulletobject, OFF
   
    // Ladataan pelaaja ja asetetaan törmäyksentunnistus kartan seinien ja pelaaja välille
    player = LoadObject("Media\Player_Colt.bmp", 90)
    ShowObject player, ON
    SetupCollision player,map,2,4,2
    //Pelaaja aseella Mp 40
    playermp40 = LoadObject("media\Player_Mp 40.bmp",90)
    ShowObject playermp40, OFF
    SetupCollision playermp40,map,2,4,2
    // Ladataan vihollinen ja piilotetaan objekti
    enemyobject = LoadObject("Media\Enemy_Bar1918.bmp", 90)
    ShowObject enemyobject, OFF
   
    shot = LoadSound("Media\gun 2.wav")
    scream = LoadSound("Media\scream1.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,8
    If RightKey() Then TurnObject player,-8
    If KeyHit(cbkeyc) Then 
        player = playermp40
        ShowObject playermp40, ON
        clip=32
        ShowObject player, OFF
    EndIf
    // Tarkistetaan painetaanko ampumisnäppäintä ja jos,
    // niin luodaan ammus ja törmäystunnistus sille
    If KeyHit(cbkeylcontrol) Then
        clip=clip-1
        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
    If clip=-1 Then clip=8
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) Then
            PointObject enem\obj, player
            MoveObject enem\obj, 4
        If ObjectsOverlap (enem\obj,player) Then playerhealth = playerhealth -5
       
        EndIf
    Next enem
Return

// Aliohjelma, jossa läpikäydään ammukset
CheckBullets:
    For blt.BULLETS = Each BULLETS
        MoveObject blt\obj, 50
        For enem.ENEMIES = Each ENEMIES
            // Tarkistetaan osuuko ammus viholliseen
            If ObjectsOverlap(blt\obj, enem\obj, 2) Then
                deleteobj = 1
                enem\energy = enem\energy - 40
                playerpoints = playerpoints + 10
            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

// 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 cbBlue
        Box PosX+1,PosY-1,EnWidth-2,4
        If enem\energy <= 0 Then
            // Jos energia nollassa, niin toistetaan huuto ja poistetaan vihollistyyppi
            PlaySound scream,40
            DeleteObject enem\obj
            Delete enem
        EndIf
    Next enem
    DrawToWorld OFF
   
    // Kirjoitetaan muuttujat näytölle 
    
    DrawImage colt,40,472
    DrawImage screenbox,0,460
Return

// Aliohjelma, jossa määritetään viholliset 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\energy = 100
   
    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\energy = 100
    
     enem.ENEMIES = New(ENEMIES)
    enem\obj = CloneObject(enemyobject)
    PositionObject enem\obj,-500,0
    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\energy = 100
   
    enem.ENEMIES = New(ENEMIES)
    enem\obj = CloneObject(enemyobject)
    PositionObject enem\obj,560,0
    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\energy = 100
    
Return
User avatar
Timblex
Advanced Member
Posts: 252
Joined: Sun Apr 11, 2010 10:37 am
Location: Kouvola

Re: Tyhmät kysymykset (I/2011)

Post by Timblex »

Miksi ihmeessä keksin vastauksen kysymykseeni aina vasta juuri sen jälkeen kun olen kysynyt sitä foorumilla
Entinen timpe99...
Demokisa 2013 demo valmis, Check it out!
User avatar
valscion
Moderator
Moderator
Posts: 1599
Joined: Thu Dec 06, 2007 7:46 pm
Location: Espoo
Contact:

Re: Tyhmät kysymykset (I/2011)

Post by valscion »

ItzRaines wrote:Yritän vaihtaa eri aseeseen vaihtamalla kokonaan ukko objektia. Ainoa ongelma on se, että playermp40 objekti on näkymätön, sekä se ilmestyy samaan paikkaan, kuin aloitettaessa peli. Sen pitäisi ilmestyä juuri samaan kohtaan, kuin edellinen player objekti oli.
CloneObjectPosition ja CloneObjectOrientation ovat ne komennot joita tarvitset. Lisää tietoa manuaalista ;)
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
Awaclus
Forum Veteran
Posts: 2939
Joined: Tue Aug 28, 2007 2:50 pm

Re: Tyhmät kysymykset (I/2011)

Post by Awaclus »

timpe99 wrote:Miksi ihmeessä keksin vastauksen kysymykseeni aina vasta juuri sen jälkeen kun olen kysynyt sitä foorumilla
Tämä oli ensimmäinen tyhmä kysymys koko viestiketjun historiassa. Onnittelut ontopicista.
User avatar
ItzRaines
Active Member
Posts: 211
Joined: Sat Feb 05, 2011 6:59 pm

Re: Tyhmät kysymykset (I/2011)

Post by ItzRaines »

Minulle ei selvinnyt oikein tuon Timerin käyttö, joten jos joku viitsisi hyvää hyvyyttään muuttamaan koodini sellaiseksi, että vihu vahingoittaa pelaajaa joka 3 sekunti.

Code: Select all

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) Then
            PointObject enem\obj, player
            MoveObject enem\obj, 4
        If ObjectsOverlap (enem\obj,player) Then playerhealth = playerhealth -5
        EndIf
    Next enem
Return
User avatar
TukeKoodi
Active Member
Posts: 142
Joined: Thu Feb 03, 2011 7:40 pm
Location: C:\Työpöytä

Re: Tyhmät kysymykset (I/2011)

Post by TukeKoodi »

ItzRaines wrote:Minulle ei selvinnyt oikein tuon Timerin käyttö, joten jos joku viitsisi hyvää hyvyyttään muuttamaan koodini sellaiseksi, että vihu vahingoittaa pelaajaa joka 3 sekunti.

Code: Select all

EnemyAI:
    aika = Timer()//Huom. TÄÄ ENNEN REPEATTIA, MUUTEN EI TOIMI!!
    For enem.ENEMIES = Each ENEMIES
        // Tarkistetaan näkeekö vihollisobjekti pelaajaobjekti ja
        // jos näkee niin aloitetaan liikuttamaan pelaajaa kohti
        If ObjectSight(enem\obj,player) Then
            PointObject enem\obj, player
            MoveObject enem\obj,  4
            If Timer() -aika > 3000 Then
            //enemlife = enemlife -???
            aika = Timer() //Päivitetään aika
            EndIf
        If ObjectsOverlap (enem\obj,player) Then playerhealth = playerhealth -5
        EndIf
    Next enem
Return
Noin pitäis toimia. Siirrät siis ton ennen for...each...nextii olevan aika = Timer():in enne repeattia ja poistat sen tosta.
Aloittelija, koodaaja, jotain...
CbFUN :D
User avatar
ItzRaines
Active Member
Posts: 211
Joined: Sat Feb 05, 2011 6:59 pm

Re: Tyhmät kysymykset (I/2011)

Post by ItzRaines »

Yritin aiemmin saamieni ohjeiden mukaan tehdä kenttää uudestaan, mutta mikään ei muutu. Sama bugitus seinissä.
Jos joku nyt kertoisi ohjeet, joilla saa varmasti oikeanlaisen ja toimivan kentän.
Image
Edit: Niin ja älkää kysykö mitään tuosta healthista :oops:
User avatar
TukeKoodi
Active Member
Posts: 142
Joined: Thu Feb 03, 2011 7:40 pm
Location: C:\Työpöytä

Re: Tyhmät kysymykset (I/2011)

Post by TukeKoodi »

Sori offtopic, mut onks toi alakulmas oleva 1911 pistooli piirretty ite? Aika siistin näkönen ;)
Aloittelija, koodaaja, jotain...
CbFUN :D
koodaaja
Moderator
Moderator
Posts: 1583
Joined: Mon Aug 27, 2007 11:24 pm
Location: Otaniemi - Mikkeli -pendelöinti

Re: Tyhmät kysymykset (I/2011)

Post by koodaaja »

Yleensä ongelma hit-kerroksen kanssa muodostuu siitä, että tilesterillä valitakseen kerroksen pitää klikata sen nimeä eikä vieressä olevaa boksia. Bokseista valitaan vain kerrosten näkyvyys. Nimen painamisen jälkeen kun valitsee vasemman yläkulman tilen ja sillä piirtää seinien päältä, pitäisi kaiken toimia hyvin.
Locked