Tyhmät kysymykset (I/2011)

Voit pyytää apua ohjelmointiongelmiin täältä.
Locked
User avatar
MaGetzUb
Guru
Posts: 1715
Joined: Sun Sep 09, 2007 12:35 pm
Location: Alavus

Re: Tyhmät kysymykset (I/2011)

Post by MaGetzUb » Wed Mar 09, 2011 4:28 pm

Koitappas tätä :) :

Code: Select all


//Vihut Tyyppikokoelma, sisältää objektimuuttujan ja latausaika-muuttujan. 
Type Vihut
    Field obj                'Itse objekti
    Field reload            'Vihollisen latausaika
End Type 

//Ammus tyyppikokoelma, sisältää lentävän luodin objektimuuttujan.
Type AMMUS
    Field obj                
End Type 


SCREEN 800, 600


imglife = LoadImage("Media\life.jpg") //Ladataan energiapalkki kuva, joka merkitsee pelaajan energiamäärää.
Global ukko //Tehdään allaolevasta ukosta "globaali" eli tämä sama muuttuja näkyy jokapuolella koodia, myös 
            //repeat-silmukan alapuolella.
ukko=LoadObject("Media\soldier.bmp",72)
ObjectFloat ukko, 120 'Asetetaan pelaajalle energia

vihu = LoadObject("Media\soldier.BMP", 72) 

Global pati //Laitetaan panos näkymään kaikkialla.
pati=LoadObject("Media\bullet.bmp")

ShowObject pati,OFF
ShowObject vihu, OFF



//Luodaan viholliset, tehdään niitä 10
For i = 0 To 10
    pahis.Vihut = New(Vihut)
    pahis\obj = CloneObject(Vihu)
    SetupCollision pahis\obj, ukko, 2, 2, 2 //Viholliset törmäävät pelaajaan.
    PositionObject pahis\obj,Rand(-400, 400), Rand(-300, 300) //Sijoitetaan viholliset satunnaisiin kohtiin ruudulla.
    ObjectFloat pahis\obj, 100 'Asetetaan pahikselle energia
Next i
aloitsuaika = Timer()

//Viholliset törmäävät nyt toisiinsa.
For pahis.Vihut = Each Vihut
    For pahis2.Vihut = Each Vihut
        If pahis <> pahis2 Then SetupCollision pahis\obj, pahis2\obj, 2, 2,2
    Next pahis2
Next pahis

Repeat
    ClearText 
    currentTime = (Timer() - aloitsuaika)/1000 //Tehdään muuttuja, josta lasketaan 
                                               //aloitusaikamuuttujan ja nykyisen ajan välinen erotus.
    AddText "Aikaa mennyt: "+currentTime       //Kirjoitetaan ruutuun tarvittavat tekstit
    AddText "Nuolista ohjaa, CTRL=ampuu"

    //Ukon liikutus..
    If LeftKey() Then TurnObject ukko,5
    If RightKey() Then TurnObject ukko,-5
    If UpKey() Then MoveObject ukko,3.5
    If DownKey() Then MoveObject ukko,-2.45    
    //Painetaan oikeaa kontrollia, niin käytetään itse tekemää "komentoa" ts. funktiota nimeltään ObjAmmu
    If KeyDown(cbKeyRControl) And reload=0 Then    
        ObjAmmu(ukko)
        reload=5       
    EndIf
    
    If reload>0 Then reload=reload-1

    DrawGame

    //Kun käydään viholliset lävitse lasketaan samalla niiden määrä
    Vihollisia = 0 //Asetetaan vihollisten määrä aina aluksi nollaan
    //Vihollisten läpikäynti 
    For pahis.Vihut = Each Vihut
        //Piirretään pahikselle energia
        Vihollisia = Vihollisia + 1 //Nyt lisätään Vihollisia-muuttujaan niin montakertaa 1, kuin vihollisia on.
        DrawToWorld 0, 0, ON  
            CenterText ObjectX(pahis\obj), ObjectY(pahis\obj), ObjectFloat(pahis\obj), 2
        DrawToWorld 0, 0, OFF 
        
        //Käännetään vihollinen osoittamaan pelaajaa kohti.
        PointObject pahis\obj, ukko
        
        //Jos etäisyys vihollisen ja pelaajan välillä on liian suuri, liikutetaan vihollista pelaajaa kohti.
        If Distance2(pahis\obj, ukko) > 120 Then 
            MoveObject pahis\obj, 0.6
        Else
            //Muuten jos etäisyys pelaajan ja vihollisen välillä on tarpeeksi vähän niin vihollinen avaa tulen.
            If pahis\reload = 0 Then 
                ObjAmmu(pahis\obj)
                pahis\reload = 45
            EndIf 
            
            If pahis\reload > 0 Then pahis\reload = pahis\reload - 1
        EndIf 
        //Joe vihollisen energia-arvo on tasan tai meni alle nollan, niin tuhotaan vihollinen.
        If ObjectFloat(pahis\obj) =< 0 Then 
            DeleteObject pahis\obj
            Delete pahis
        EndIf
    Next Pahis
    

    ukonenergia = ObjectFloat(ukko)
    DrawImageBox imglife, 0, 540, 0, 0, Float(ImageWidth(imglife))/(120.0)*ukonenergia, 20
    
    If Vihollisia = 0 Then MakeError "Voitit! Tapoit kaikki viholliset! Aikaa meni: "+currentTime+"s"
    If ObjectFloat(ukko) =< 0 Then MakeError "Kuolit! Selvisit: "+currentTime+"s"

    Gosub Sub_PäivitäPanokset

    DrawScreen
Until EscapeKey()

//Tässä Tehdään oma komento. Kaikki aloittelijat eivät vielä tunne tätä koodiosaa. 
//Tätä komentoa käytetään esim rivillä 64. :)
Function ObjAmmu(ampuja)
        luoti.AMMUS = New(AMMUS)
        luoti\obj=CloneObject(pati)
        CloneObjectPosition luoti\obj,ampuja                
        CloneObjectOrientation luoti\obj,ampuja  
        
        //Jos ampuja on eri objekti, kuin pelaaja laitetaan panos törmäämään pelaaja-objektiin.
        If ampuja <> ukko Then SetupCollision luoti\obj, ukko, 2, 2, 2 
      
        For pahis.Vihut = Each Vihut
           If pahis\obj <> ampuja Then SetupCollision luoti\obj, pahis\obj, 2, 2, 2
           //Jos yksi vihuista ampuu,
           //Ei anneta tälle viholliselle ja panokselle törmäystunnistusta
        Next pahis
EndFunction 

Sub_PäivitäPanokset:
    //Panosten peruspäivitys
    For luoti.AMMUS = Each AMMUS
        MoveObject luoti\obj,6
        If CountCollisions(luoti\obj) Then 'Johonkin törmättiin, sen täytyi olla vihollinen, tai pelaaja.. 
            törmättyobjekti = GetCollision(luoti\obj, 1) 'Tämä komento ON todella kätevä, tällä saadaan
                                                         'objektin kahva (englanniksi handle), kahva on muuttujan nimi
                                                         'eli ukko(<- tämä) = LoadObject("ukko.png"). Kahva on oikeasti vain viittaus
                                                         'tietokoneen muistiosoitteeseen, jossa se data on. Eli "ukko" ei ole kuvatiedosto.
                                                         'Vaan se osoittaa sijainnin, missä kuvatiedoston data on. (Kuvadatakin on monien sokkeloiden päässä vasta)
            energia# = ObjectFloat(törmättyobjekti) 'Tutkitaan törmätyn objektin energia-arvo ja otetaan muuttuja (energia# <-) talteen.
            uusienergia# = energia# - 10 '"tehdään" uusi energia-arvo, eli energia muuttujasta vähennetään kymmenen.
            ObjectFloat törmättyobjekti, uusienergia 'Asetetaan törmätylle objektille uusi energia-arvo.
            DeleteObject luoti\obj
            Delete luoti
            //Jos ei törmätty mihinkään, ja luoti jatkoi ruudun ulkopuolelle niin... tuhotaan se.
        ElseIf ObjectX(luoti\obj)<-400 Or ObjectX(luoti\obj)>400 Or ObjectY(luoti\obj)<-300 Or ObjectY(luoti\obj)>300 Then     
            DeleteObject luoti\obj
            Delete luoti
        EndIf        
    Next luoti   
Return 
Last edited by MaGetzUb on Thu Mar 10, 2011 8:51 pm, edited 1 time in total.
Solar Eclipse
Meneillä olevat Projektit:
We're in a simulation, and God is trying to debug us.

User avatar
Bajamaja
Newcomer
Posts: 23
Joined: Thu Feb 17, 2011 8:02 pm

Re: Tyhmät kysymykset (I/2011)

Post by Bajamaja » Thu Mar 10, 2011 4:52 pm

Parin tunnin evotuksen ja useiden yritysten jälkeen totesin etten osaa tehdä pisteytyssysteemiä peliini...

koodi on tässä:

Code: Select all

Type TATIT
 Field tat
End Type


Type AMMUS
  Field obj
End Type


FrameLimit 40

SCREEN 1000,900

Slurp = LoadSound ("Media\Slurppaus.wav")

Musa = PlaySound ("Media\EpicFail.mp3")

hero = LoadObject ("Media\Hero1.bmp",360)

lol = LoadObject ("Media\Ammus.bmp",360)

ampu = LoadSound ("Media\ampu.wav")

tatti = LoadObject ("Media\Tatti.bmp",360)

tohveli = LoadObject ("Media\Tohveli.bmp",360)

keskitohveli = LoadObject ("Media\Tohveli2.png",360)

PositionObject tohveli, 1010, 30




Repeat



 GhostObject keskitohveli,1
 ShowObject lol,OFF
 ShowObject tatti,OFF









 PointObject tohveli,keskitohveli
 
 
 MoveObject tohveli,0,10




Gosub Musiikki
  Gosub Liiku
Gosub Tatteilu
 Gosub Ammu
  











 DrawScreen
 
Forever






End


 
  
Liiku:

  
 If KeyDown (cbkeyW) Then MoveObject hero,5
 If KeyDown (cbkeyS) Then MoveObject hero,-4
 If KeyDown (cbkeyD) Then TurnObject hero,-6
 If KeyDown (cbkeyA) Then TurnObject hero,6
Return 

Tatteilu:



If Odotus=0 Then 
 ok.TATIT = New (TATIT)
ok\tat=CloneObject (tatti)

 CloneObjectPosition ok\tat,tohveli


PlaySound Slurp

Odotus = 100



EndIf


 If Odotus>0 Then Odotus=Odotus-1
 For ok.TATIT = Each TATIT
 


 If ObjectsOverlap (hero,ok\tat,2) Then
Gosub Fail
  EndIf

PointObject ok\tat,hero

MoveObject ok\tat,3




 For pum.AMMUS = Each AMMUS




If ObjectsOverlap (pum\obj,ok\tat,2) Then
 Gosub osuma
Exit 

EndIf



 Next pum
Next ok


Return


auts:
 
 DeleteObject ok\tat
 Delete ok
Return



Ammu:

 If KeyDown (cbkeyRcontrol) And reload=0 Then 
pum.AMMUS = New (AMMUS)
pum\obj=CloneObject (lol)
 
 CloneObjectPosition pum\obj,hero
 CloneObjectOrientation pum\obj,hero
 TurnObject pum\obj, Rand(-4,4)

PlaySound ampu 
 
reload=5
EndIf 

If reload>0 Then reload=reload-1



For pum.AMMUS = Each AMMUS



 MoveObject pum\obj,30
 If ObjectX (pum\obj)<-1000 Or ObjectX (pum\obj)>1000 Or ObjectY (pum\obj)<-1000 Or ObjectY (pum\obj)>1000
DeleteObject pum\obj
Delete pum

EndIf



Next pum
 
 
 Return 
 
 



Musiikki:

 If SoundPlaying(Musa)=0 Then
 Musa = PlaySound ("Media\EpicFail.mp3")


EndIf 





Return

  Osuma:

Pisteet = Pisteet + 1
  DeleteObject pum\obj
  DeleteObject ok\tat
  Delete pum
 Delete ok

 

Return







FAIL:
 
 StopSound Musa
 DeleteSound Musa
 

 
 ClearObjects
 
Color cbRed
Text 200, 200, "FAILED!! Kuolit noob!"
DrawScreen

 Wait 5000
End

Aiemmin samasta rojektista laittanut koodin, tämä ei siitä paljonkaan eroa..

Kiitos jo etukäteen, jos joku viitsii auttaa. ^^

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

Re: Tyhmät kysymykset (I/2011)

Post by Jonez » Thu Mar 10, 2011 5:17 pm

Suosittelen jättämään turhat sata väliä jokaisen komennon välistä, ja sisentämään. Korjasin pääsilmukkasi sellaiseksi miltä sen pitäisi näyttää:

Code: Select all

Repeat
    PointObject tohveli,keskitohveli
    MoveObject tohveli,0,10

    Gosub Musiikki
    Gosub Liiku
    Gosub Tatteilu
    Gosub Ammu
    
    DrawScreen
Forever
Luulen että ihmiset auttaisivat herkemmin jos saisivat enemmän selvää koodistasi. Emme kuitenkaan voi testata peliäsi koska meillä ei ole tarvittavaa mediaa.

Mutta asiaan. Mitä tarkoitat ettet saa pisteytyssysteemiä toimimaan? Kaiken järjen mukaan muuttujan "pisteet" pitäisi kasvaa yhdellä, kun ammus osuu tattiin. Selitä tarkemmin mikä on ongelmasi.
-Vuoden 2008 aloittelijan ystävä -palkinnon voittaja-
Image <- protestipelikilpailun voittaja.
Space War

User avatar
Bajamaja
Newcomer
Posts: 23
Joined: Thu Feb 17, 2011 8:02 pm

Re: Tyhmät kysymykset (I/2011)

Post by Bajamaja » Thu Mar 10, 2011 10:28 pm

Jostain syystä ei muuttuja "pisteet" ole kasvanut mihinkään suuntaan vaikka olen yrittänyt laittaa sen nousemaan ammuksen osuessa tattiin... Samankaltainen ongelma on tullut kun olen yrittänyt saada HPta ukolle, ja parhaimillaan sain sen laskemaan sadasta kahdeksaankymmeneen kun tatti osuu ukkoon, mutta heti kun tatti ei enään ole ukon luona, se nousee takaisin sataan..

Tällä hetkellä olen poistanut molemmat muuttujat koodista..

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

Re: Tyhmät kysymykset (I/2011)

Post by Jonez » Fri Mar 11, 2011 12:00 am

Lisääppä tuohon viimeksi postaamaasi koodiin riville 75:

Code: Select all

Text 20, 20, pisteet
Lyön satasesta vetoa että pisteet toimivat. Eli kun ammut vihollisen, pisteet lisääntyvät yhdellä.
-Vuoden 2008 aloittelijan ystävä -palkinnon voittaja-
Image <- protestipelikilpailun voittaja.
Space War

User avatar
Wingman
Devoted Member
Posts: 594
Joined: Tue Sep 30, 2008 4:30 pm
Location: Ruudun toisella puolella

Re: Tyhmät kysymykset (I/2011)

Post by Wingman » Fri Mar 11, 2011 9:39 am

Bajamaja wrote:Jostain syystä ei muuttuja "pisteet" ole kasvanut mihinkään suuntaan vaikka olen yrittänyt laittaa sen nousemaan ammuksen osuessa tattiin... Samankaltainen ongelma on tullut kun olen yrittänyt saada HPta ukolle, ja parhaimillaan sain sen laskemaan sadasta kahdeksaankymmeneen kun tatti osuu ukkoon, mutta heti kun tatti ei enään ole ukon luona, se nousee takaisin sataan..

Tällä hetkellä olen poistanut molemmat muuttujat koodista..
arvaan, että pääloopissasi oli rivit 'pisteet=0' ja 'elämät=100'. Siirtämällä ne loopin ulkopuolelle, sen pitäisi toimia
- - - -

User avatar
Bajamaja
Newcomer
Posts: 23
Joined: Thu Feb 17, 2011 8:02 pm

Re: Tyhmät kysymykset (I/2011)

Post by Bajamaja » Fri Mar 11, 2011 3:47 pm

Jonez wrote:Lisääppä tuohon viimeksi postaamaasi koodiin riville 75:

Code: Select all

Text 20, 20, pisteet
Lyön satasesta vetoa että pisteet toimivat. Eli kun ammut vihollisen, pisteet lisääntyvät yhdellä.
Wingman wrote:
Bajamaja wrote:Jostain syystä ei muuttuja "pisteet" ole kasvanut mihinkään suuntaan vaikka olen yrittänyt laittaa sen nousemaan ammuksen osuessa tattiin... Samankaltainen ongelma on tullut kun olen yrittänyt saada HPta ukolle, ja parhaimillaan sain sen laskemaan sadasta kahdeksaankymmeneen kun tatti osuu ukkoon, mutta heti kun tatti ei enään ole ukon luona, se nousee takaisin sataan..

Tällä hetkellä olen poistanut molemmat muuttujat koodista..
arvaan, että pääloopissasi oli rivit 'pisteet=0' ja 'elämät=100'. Siirtämällä ne loopin ulkopuolelle, sen pitäisi toimia
Kiitoksia, nyt toimii. ^^

Ratkaisu olikin siis näin yksinkertainen.. :oops:

DJ-Filbe
Devoted Member
Posts: 854
Joined: Sat Feb 20, 2010 3:18 pm

Re: Tyhmät kysymykset (I/2011)

Post by DJ-Filbe » Fri Mar 11, 2011 5:54 pm

Mitenköhän onnistuisi yksinkertaisimmin tiedoston uploadaaminen nettiin coolbasicin kautta? Tarkoituksena kokeilla chatin tekemistä niin, että keskustelijat voivat liittää avatarin profiiliinsa chatista käsin ja lähettää tiedostoja toisilleen.

Chatin muu toteutus on tehty HTTPGetillä, eli netissä olevien tiedostojen kautta (en halua tästä päänaukomisia, näen tämän itse parhaaksi tavaksi omiin tarkoituksiini), ja menisi kyllä tuhottomasti aikaa uppia tiedostoa httpgetillä.

User avatar
ItzRaines
Active Member
Posts: 211
Joined: Sat Feb 05, 2011 7:59 pm

Re: Tyhmät kysymykset (I/2011)

Post by ItzRaines » Fri Mar 11, 2011 11:08 pm

1. Minkälaisen koodin tarvitsee, että tietty toiminto tehdään kun MITÄ TAHANSA näppäintä painetaan?

2. Kun vihollinen vahingoittaa pelaajaa koskemalla siihen kuoleminen tapahtuu nopeasti, koska vihu piirittää pelaajaa koko ajan. Tarkoitus olisi saada vahingoittuminen tapahtumaan esim. noin 5 sekunnin välein, vaikka vihu koskettaisi pelaajaa koko ajan.

3. Kun pelaaja kuolee näyttöön piirretään teksti "terminoitu". Tämähän ei vielä mitään muuta, niin kuinka pysäytän myös pelin, ettei hahmoa voi enää liikuttaa kuolemisen jälkeen. Taustalla kuitenkin vielä näkyisi pelikenttä.

Edit: Jos jollakin on taitoa vaativampaan niin tausta voisi myös hieman tummentua, mutta "terminoitu" teksti pysyisi normina. :D

Tässä se koodi:

Code: Select all

SetWindow "eXc.Version 1.0 By:ItzRaines"

SCREEN 800,600,0,1
FrameLimit 100
playerpoints = 0
font = LoadFont("arial",32,1,1)
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

Playerhealth=100

Locate 580,570
Color cbDarkGreen
AddText "beta version 0.1"

Locate 600,0
Color cbDarkGreen
AddText "Health:"

Locate 280,50
Color cbDarkGreen
AddText "Try to survive"

/////// PÄÄSILMUKKA ///////
Repeat
    Gosub CheckButtons
    Gosub EnemyAI
    Gosub CheckBullets
    Gosub DrawGUI
       
    // Siirretään kameraa pelaajan mukana
    CloneCameraPosition player
    
    Color cbDarkGreen
    Text 0,570,"FPS:"+FPS()
     
    DrawScreen

Until EscapeKey()


/////// ALIOHJELMAT ///////
// Aliohjelma jossa ladataan pelissä tarvittava media
LoadMedia:
    // Ladataan kartta ja animoidaan se
    map = LoadMap("Media\cdm2.til", "Media\Tileset.bmp")
    PlayObject map,0,0,0.5
   
    // Ladataan panosobjektin grafiikat ja piilotetaan objekti
    bulletobject = LoadObject("Media\bullet.bmp", 72)
    ShowObject bulletobject, OFF
   
    // Ladataan pelaaja ja asetetaan törmäyksentunnistus kartan seinien ja pelaaja välille
    player = LoadObject("Media\player.bmp", 90)
    SetupCollision player,map,2,4,2
   
    // Ladataan vihollinen ja piilotetaan objekti
    enemyobject = LoadObject("Media\Enemy.bmp", 72)
    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,5
    If RightKey() Then TurnObject player,-5   
   
    // Tarkistetaan painetaanko ampumisnäppäintä ja jos,
    // niin luodaan ammus ja törmäystunnistus sille
    If KeyHit(cbkeylcontrol) Then
        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
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, 5
        If ObjectsOverlap (enem\obj,player) Then playerhealth = playerhealth -5
        Locate 280,90
        If playerhealth = 0 Then AddText  "Terminated"
        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 pisteet näytölle 
    
    Color cbDarkGreen : Text 10,0, playerpoints
Return

// Aliohjelma, jossa määritetään kaksi vihollista 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
Feuer
Devoted Member
Posts: 520
Joined: Tue Jun 16, 2009 11:13 am
Contact:

Re: Tyhmät kysymykset (I/2011)

Post by Feuer » Fri Mar 11, 2011 11:24 pm

Ensimmäinen onnistuu GetKey()llä:

Code: Select all

Repeat
    If GetKey() Then MakeError "Anykeytä painettiin"
    
    Line 30,30,203,203
    DrawScreen
Forever
Asus P8P67 LE/Intel Core i5 2500K/ GTX560/ 8GT RAM/750GT HDDt + 120GT SSD + 13" Macbook Pro
Blogi - Peräpohjola - MERPG

User avatar
temu92
Web Developer
Web Developer
Posts: 1226
Joined: Mon Aug 27, 2007 9:56 pm
Location: Gamindustri
Contact:

Re: Tyhmät kysymykset (I/2011)

Post by temu92 » Sat Mar 12, 2011 1:26 am

ItzRaines wrote:2. Kun vihollinen vahingoittaa pelaajaa koskemalla siihen kuoleminen tapahtuu nopeasti, koska vihu piirittää pelaajaa koko ajan. Tarkoitus olisi saada vahingoittuminen tapahtumaan esim. noin 5 sekunnin välein, vaikka vihu koskettaisi pelaajaa koko ajan.

3. Kun pelaaja kuolee näyttöön piirretään teksti "terminoitu". Tämähän ei vielä mitään muuta, niin kuinka pysäytän myös pelin, ettei hahmoa voi enää liikuttaa kuolemisen jälkeen. Taustalla kuitenkin vielä näkyisi pelikenttä.
2. Katso funktio timer()

3. About näin:

Code: Select all

if hahmo_kuollut = false then
    // hahmon liikuttaminen etc
    if keydown(nappula) then *liikuttaminen*
else
    // Tekstin tulostus
    Text 20, 20, "You be dead, mon"
endif

User avatar
Bajamaja
Newcomer
Posts: 23
Joined: Thu Feb 17, 2011 8:02 pm

Re: Tyhmät kysymykset (I/2011)

Post by Bajamaja » Sun Mar 13, 2011 9:50 pm

Pääni tuottaa lisää tyhmiä kysymyksiä. Osaako kukaan neuvoa miten palihahmon saa "osoittamaan" hiirtä kohti? Kiitoksia taas etukäteen jos joku osaa auttaa.. ^^'

User avatar
Frozen
Advanced Member
Posts: 282
Joined: Fri Jan 01, 2010 5:46 pm
Location: Suomi

Re: Tyhmät kysymykset (I/2011)

Post by Frozen » Sun Mar 13, 2011 9:58 pm

Bajamaja wrote:Pääni tuottaa lisää tyhmiä kysymyksiä. Osaako kukaan neuvoa miten palihahmon saa "osoittamaan" hiirtä kohti? Kiitoksia taas etukäteen jos joku osaa auttaa.. ^^'

Code: Select all

aim=GetAngle(ScreenWidth()/2,ScreenHeight()/2,MouseX(),MouseY())
RotateObject omaukkeli,aim
EDIT:

taas tupla vastaus.. mut mun oma oli kyl huonompi :D

Last edited by Frozen on Sun Mar 13, 2011 10:01 pm, edited 1 time in total.
Image
Työn alla:
Jotakin epäjulkaistua

User avatar
Sly_Jack0
Devoted Member
Posts: 612
Joined: Mon Dec 10, 2007 9:25 am

Re: Tyhmät kysymykset (I/2011)

Post by Sly_Jack0 » Sun Mar 13, 2011 9:59 pm

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.

Last edited by Sly_Jack0 on Mon Mar 14, 2011 3:24 pm, edited 2 times in total.

User avatar
JATothrim
Tech Developer
Tech Developer
Posts: 606
Joined: Tue Aug 28, 2007 6:46 pm
Location: Kuopio

Re: Tyhmät kysymykset (I/2011)

Post by JATothrim » Mon Mar 14, 2011 2:44 pm

Sly_Jack0 wrote:

Code: Select all

RotateObject objekti,GetAngle(ObjectX(objekti),ObjectY(objekti),MouseWX(),mouseWY())
Väitän että tuo koodi tulee kääntämään objektia päin prinkkalaa, mutta on kuitenkin parempi kuin Frozenin, koska se ottaa huomioon objektin sijainnin. ;)
-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'.

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

Re: Tyhmät kysymykset (I/2011)

Post by Jonez » Mon Mar 14, 2011 3:30 pm

JATothrim wrote:
Sly_Jack0 wrote:

Code: Select all

RotateObject objekti,GetAngle(ObjectX(objekti),ObjectY(objekti),MouseWX(),mouseWY())
Väitän että tuo koodi tulee kääntämään objektia päin prinkkalaa, mutta on kuitenkin parempi kuin Frozenin, koska se ottaa huomioon objektin sijainnin. ;)
Sanoisin että väität oikein, koska y-akseli on väärinpäin kuvien koordinaatteissa suhteessa maailmakoordinaatteihin. Ongelma korjaantuu jos vaihtaa GetAnglen y-akselit negatiivisiksi, tai sitten itse GetAngle-funktion palauttaman arvon negatiiviseksi.

Edit. no Sly_Jack0 ehtikin jo editoida viestinsä... :)
-Vuoden 2008 aloittelijan ystävä -palkinnon voittaja-
Image <- protestipelikilpailun voittaja.
Space War

User avatar
ItzRaines
Active Member
Posts: 211
Joined: Sat Feb 05, 2011 7:59 pm

Re: Tyhmät kysymykset (I/2011)

Post by ItzRaines » Tue Mar 15, 2011 7:04 pm

Kun piirrän aseen kuvan näytölle niin se ikävästi piiloutuu kentän taakse. Missä vika?
Vaikka tilesterillä asetan "hit" kohdat niin ukko menee läpi seinistä että tyhjää vain. Onko tähänkin ratkaisu?
En nyt vaivaudu koodia pastaamaan kun siitä ei varmaankaan olisi näihin hyötyä.

User avatar
valscion
Moderator
Moderator
Posts: 1587
Joined: Thu Dec 06, 2007 8:46 pm
Location: Espoo
Contact:

Re: Tyhmät kysymykset (I/2011)

Post by valscion » Tue Mar 15, 2011 7:10 pm

ItzRaines wrote:Kun piirrän aseen kuvan näytölle niin se ikävästi piiloutuu kentän taakse. Missä vika?
Sinun pitää kutsua komentoa DrawGame ennen kuin piirrät kuvia. Muuten kuvat jäävät objektien (tässä tapauksessa kartan) alle.
ItzRaines wrote:Vaikka tilesterillä asetan "hit" kohdat niin ukko menee läpi seinistä että tyhjää vain. Onko tähänkin ratkaisu?
Et aseta törmäystä oikein kartan ja ukon välille tai sitten kävelet koko ajan HIT-kerroksen päällä ukkosi kanssa, jolloin ei törmäyksiä voida tarkistaa. Kai käytät objektia etkä kuvaa ukon kohdalla?
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

User avatar
JATothrim
Tech Developer
Tech Developer
Posts: 606
Joined: Tue Aug 28, 2007 6:46 pm
Location: Kuopio

Re: Tyhmät kysymykset (I/2011)

Post by JATothrim » Tue Mar 15, 2011 8:18 pm

ItzRaines wrote:Kun piirrän aseen kuvan näytölle niin se ikävästi piiloutuu kentän taakse. Missä vika?
Vaikka tilesterillä asetan "hit" kohdat niin ukko menee läpi seinistä että tyhjää vain. Onko tähänkin ratkaisu?
En nyt vaivaudu koodia pastaamaan kun siitä ei varmaankaan olisi näihin hyötyä.
Tilesterillä piti muistaakseni valita HIT kerros aktiiviseksi (tämä on kohta jossa useat failaavat) ja käyttää sitten tilenumero 1:stä seinien maalauksessa. Lisäksi overkerros kannataa ottaa kokonaan pois päältä, että ylipäätään näet mihin olet maalaamassa törmäyksiä. Tämä informaation hyvin häilyvää, kun en ole käyttänyt tilesteriä n. 3 vuoteen, mutta muistan tehneeni onnistuneesti toimivia karttoja tilesterillä.

SetupCollision törmääväobj, <tilemapobj>, 2,4,2 //Jokaisellelle objektille aina erikseen, eli myös klooneille, kytkee objektille pysyvästi päälle törmäykset.
-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'.

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

Re: Tyhmät kysymykset (I/2011)

Post by Kokkelkhan » Tue Mar 15, 2011 10:54 pm

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.
Päräjää...!

Locked