Tyhmät kysymykset (I/2009)

Voit pyytää apua ohjelmointiongelmiin täältä.
koodaaja
Moderator
Moderator
Posts: 1583
Joined: Mon Aug 27, 2007 11:24 pm
Location: Otaniemi - Mikkeli -pendelöinti

Re: Tyhmät kysymykset

Post by koodaaja »

kauhu wrote:luulen että, en tarvii enää muuta neuvoa , kun yks oon tajunnu et miten tehää se että jos mennää vaikka oven kohalle niin se menee siihen toiseen huoneeseen tai taloon jne , mutta mulla tulee aina mavi siinä kun koitan saada että kartta vaihtuis. se aina mavittaa :o Eli osaan että jos mennään johonkin kohtaa kartassa niin tulee näkyville joku toinen objekti tai jotai, mutta en tajuu kun aina kun se latais uuden kartan niin " TöK " " memory acces violation" se memory acces violation tulee kait siinä kun poistan sen vanhan mapin pois ja kun meen taas pois sieltä talosta niin se latais sen alunperisen mapin , mutta ei toimi :x
Onko se siirtyminen funktiossa? Silloin kartan on oltava globaali. Ja kannattaa tehdä se niin, että sinulla on yksi iso kartta, joka on jaettu pieniin huoneisiin. Sitten voit vain objektia siirtämällä liikkua paikasta toiseen.
kauhu

Re: Tyhmät kysymykset

Post by kauhu »

Muutes eihän se noin toimi, kun haluan nimet niitten vihujen päälle olin tehny näin

Code: Select all


For i = 0 To 9
    vihu.vihut = New(vihut)
    vihu\obj = CloneObject(mastermovia)
    PositionObject vihu\obj,Rand(-ScreenWidth()/2,ScreenWidth()/2),Rand(-ScreenHeight()/2,ScreenHeight()/2)
    vihu\hyökkäys = Rand(2,6)
    vihu\suojaus = Rand(2,4)
    vihu\enkat =100
    vihu\nimi$="Movia"

Next i

Repeat

For vihu.vihut = Each vihut
     Text ObjectX(vihu\obj),ObjectY(vihu\obj)+24,nimi
   Next vihu




niin eihän se tossa tiiä minkä vihun päälle pitäis laittaa tollanen nimi. ja sit siin sena alla lukee "0" mistäs moinen en ole missää
n halunnu mitään nollaa sen kohalle.
User avatar
Jonez
Devoted Member
Posts: 575
Joined: Mon Aug 27, 2007 8:37 pm

Re: Tyhmät kysymykset

Post by Jonez »

Yritäs saada sitä kieliasua vähän luettavammaks, kun ei tosta sun selityksestä oikein saa selvää.

Se nolla näytetään siksi, koska et pyydä sitä konetta missään vaiheessa näyttämään vihun nimeä (eli arvoa muuttujasta vihu\nimi), vaan arvon kokonaislukumuuttujasta 'nimi', joka oletuksena on tietenkin nolla.

Muista myös, että sun pitää määritellä se tyyppimuuttuja merkkijonomuuttujaksi.
-Vuoden 2008 aloittelijan ystävä -palkinnon voittaja-
Image <- protestipelikilpailun voittaja.
Space War
koodaaja
Moderator
Moderator
Posts: 1583
Joined: Mon Aug 27, 2007 11:24 pm
Location: Otaniemi - Mikkeli -pendelöinti

Re: Tyhmät kysymykset

Post by koodaaja »

kauhu wrote:

Code: Select all


For i = 0 To 9
    vihu.vihut = New(vihut)
    vihu\obj = CloneObject(mastermovia)
    PositionObject vihu\obj,Rand(-ScreenWidth()/2,ScreenWidth()/2),Rand(-ScreenHeight()/2,ScreenHeight()/2)
    vihu\hyökkäys = Rand(2,6)
    vihu\suojaus = Rand(2,4)
    vihu\enkat =100
    vihu\nimi$="Movia"

Next i

Repeat

For vihu.vihut = Each vihut
     DrawtoWorld ON, ON, ON
     Text ObjectX(vihu\obj),ObjectY(vihu\obj)+24,vihu\nimi
     DrawtoWorld OFF, OFF, OFF
   Next vihu


Eli ei tulosteta mitään randomimuuttujaa, vaan sen vihun nimi. Ja piirtäminen täytyy asettaa maailman koordinaatteihin.
Kerosiinipelle

Re: Tyhmät kysymykset

Post by Kerosiinipelle »

Tosi alkeellinen kysymys: Miten saa ammuksen törmäämään bottiin tai seinään?
koodaaja
Moderator
Moderator
Posts: 1583
Joined: Mon Aug 27, 2007 11:24 pm
Location: Otaniemi - Mikkeli -pendelöinti

Re: Tyhmät kysymykset

Post by koodaaja »

Kerosiinipelle wrote:Tosi alkeellinen kysymys: Miten saa ammuksen törmäämään bottiin tai seinään?
Onko ammus typeillä toteutettu? Ja kartta tilemappi? Jos on, niin näin:

Code: Select all

If GetMap(2, ObjectX(luoti\obj), ObjectY(luoti\obj)) Then 
    DeleteObject luoti\obj
    Delete luoti
EndIf
Sitten tuo vihulaiseen, toivon että myös viholliset ovat typeillä tehtyjä:

Code: Select all

For vihu.VIHUT = Each VIHUT
    If ObjectsOverlap(vihu\obj, luoti\obj, 3) Then
        vihu\health = vihu\health - 3
        DeleteObject luoti\obj
        Delete luoti
    EndIf
Next vihu
Suunnilleen noin, toki joudut soveltamaan omaan koodiisi.
Kerosiinipelle

Re: Tyhmät kysymykset

Post by Kerosiinipelle »

koodaaja wrote:
Kerosiinipelle wrote:Tosi alkeellinen kysymys: Miten saa ammuksen törmäämään bottiin tai seinään?
Onko ammus typeillä toteutettu? Ja kartta tilemappi? Jos on, niin näin:

Code: Select all

If GetMap(2, ObjectX(luoti\obj), ObjectY(luoti\obj)) Then 
    DeleteObject luoti\obj
    Delete luoti
EndIf
Sitten tuo vihulaiseen, toivon että myös viholliset ovat typeillä tehtyjä:

Code: Select all

For vihu.VIHUT = Each VIHUT
    If ObjectsOverlap(vihu\obj, luoti\obj, 3) Then
        vihu\health = vihu\health - 3
        DeleteObject luoti\obj
        Delete luoti
    EndIf
Next vihu
Suunnilleen noin, toki joudut soveltamaan omaan koodiisi.
Seinään törmääminen mavaa, vihut ovat objekteja.
Kerosiinipelle

Re: Tyhmät kysymykset

Post by Kerosiinipelle »

Anteeksi tuplapostaus, mutta vieraiden viestejä ei voi editoida.

Mavaus ei johdu siitä, että niiden nimet eivät ole luoti ja obj.
koodaaja
Moderator
Moderator
Posts: 1583
Joined: Mon Aug 27, 2007 11:24 pm
Location: Otaniemi - Mikkeli -pendelöinti

Re: Tyhmät kysymykset

Post by koodaaja »

Kerosiinipelle wrote:
koodaaja wrote:
Kerosiinipelle wrote:Tosi alkeellinen kysymys: Miten saa ammuksen törmäämään bottiin tai seinään?
Onko ammus typeillä toteutettu? Ja kartta tilemappi? Jos on, niin näin:

Code: Select all

If GetMap(2, ObjectX(luoti\obj), ObjectY(luoti\obj)) Then 
    DeleteObject luoti\obj
    Delete luoti
EndIf
Sitten tuo vihulaiseen, toivon että myös viholliset ovat typeillä tehtyjä:

Code: Select all

For vihu.VIHUT = Each VIHUT
    If ObjectsOverlap(vihu\obj, luoti\obj, 3) Then
        vihu\health = vihu\health - 3
        DeleteObject luoti\obj
        Delete luoti
    EndIf
Next vihu
Suunnilleen noin, toki joudut soveltamaan omaan koodiisi.
Seinään törmääminen mavaa, vihut ovat objekteja.
Toki ne objekteja ovat, niitä kun käytetään melkein kaikissa ei-isometrisissä peleissä tätä nykyä. Mutta typessä voi olla objekteja, ja useimmiten onkin. Ja tuon poistamisen jälkeenhän ei luotia saa mitenkään koskea, sitä kun ei enää ole. Muuten iskee MAV. Kun en koodistasi mitään tiedä, vähän vaikea sanoa miten tuo kannattaa tehdä.
Kerosiinipelle

Re: Tyhmät kysymykset

Post by Kerosiinipelle »

Blaa blaa blaa

DeleteObject luoti\obj
Delete luoti
EndIf
Next vihu[/code]

Suunnilleen noin, toki joudut soveltamaan omaan koodiisi.
Seinään törmääminen mavaa, vihut ovat objekteja.[/quote]

Toki ne objekteja ovat, niitä kun käytetään melkein kaikissa ei-isometrisissä peleissä tätä nykyä. Mutta typessä voi olla objekteja, ja useimmiten onkin. Ja tuon poistamisen jälkeenhän ei luotia saa mitenkään koskea, sitä kun ei enää ole. Muuten iskee MAV. Kun en koodistasi mitään tiedä, vähän vaikea sanoa miten tuo kannattaa tehdä.[/quote]

Koodin tähän vaikuttavat kohdat:

Code: Select all


Type AMMUS 'luo kokoelma, jonka nimi on AMMUS
    Field obj
End Type 

Type AMMUS2 'luo kokoelma, jonka nimi on AMMUS
    Field obj2
End Type 

jack = LoadObject ("guy.bmp",72)

ObjectPickable jack, 2 'aseta se poimittavaksi

pati=LoadObject("bullet.bmp")
ShowObject pati,OFF

pati2=LoadObject("bigbullet.bmp")
ShowObject pati2,OFF

kartta = LoadMap("cdm2.til","tileset.bmp")
ObjectPickable kartta, ON 'aseta se poimittavaksi
PlayObject kartta,0,0,1 'animoi kartta

john = LoadObject ("guy.bmp",72)
ObjectPickable john, 2 'aseta se poimittavaksi
PositionObject john, 32,150 'sijoita ylemmäs

SetupCollision jack, john, 2, 2, 2
SetupCollision john, jack, 2, 2, 2
'kartta-törmäykset on hyvä esitellä viimeiseksi
SetupCollision jack, kartta, 1, 4, 2
SetupCollision john, kartta, 1, 4, 2

Repeat

    If KeyDown(cbKeyA) Then TurnObject jack,5
    If KeyDown(cbKeyD) Then TurnObject jack,-5
    If KeyDown(cbKeyW) Then MoveObject jack,2
    If KeyDown(cbKeyS) Then MoveObject jack,-1.5
    If KeyDown(cbKeyQ) Then MoveObject jack,0,-2
    If KeyDown(cbKeyE) Then MoveObject jack,0,2

    
    If LeftKey() Then TurnObject john,5
    If RightKey() Then TurnObject john,-5
    If UpKey() Then MoveObject john,1.6
    If DownKey() Then MoveObject john,-1
    If KeyDown(cbKeyn) Then MoveObject john,0,-1.6
    If KeyDown(cbKeyb) Then MoveObject john,0,1.6

    CloneCameraPosition jack    

   ObjectPick jack
    e=PickedObject()
    
    'jos poiminta osui omaan
    If e=john Then
        Color cbGreen
        Circle PickedX()-4,PickedY()+4,8,OFF
    EndIf
    
    'jos poiminta osui karttaan
    If e=kartta Then
        Color cbWhite
        Circle PickedX()-4,PickedY()+4,8,OFF    
    EndIf
    
    '------------------------
    
        ObjectPick john
    ei=PickedObject()
  'jos poiminta osui omaan
    If ei=jack Then
        Color cbGreen
        Circle PickedX()-4,PickedY()+4,8,OFF
    EndIf
    
    'jos poiminta osui karttaan
    If ei=kartta Then
        Color cbWhite
        Circle PickedX()-4,PickedY()+4,8,OFF    
    EndIf
    
    '-----------------------------------
    
        If KeyDown(cbKeyF) And reload=0 Then    
        luoti.AMMUS = New(AMMUS) 'luo uusi ammus
        luoti\obj=CloneObject(pati) 'tee klooni
        'asetetaan pati samaan paikkaan
        CloneObjectPosition luoti\obj,jack               
        'käännetään pati samaan suuntaan
        CloneObjectOrientation luoti\obj,jack           
        reload=0.1 'aseen lataus        
    EndIf
    'päivitä aseen lataaminen
    If reload>0 Then reload=reload-1

    'Päivitä kaikki ammukset
    For luoti.AMMUS = Each AMMUS
        MoveObject luoti\obj,6
        
     
    Next luoti
    
    '----------------------
    
            If KeyDown(cbKeyM) And reload2=0 Then    
        luoti2.AMMUS2 = New(AMMUS2) 'luo uusi ammus
        luoti2\obj2=CloneObject(pati2) 'tee klooni
        'asetetaan pati samaan paikkaan
        CloneObjectPosition luoti2\obj2,john                
        'käännetään pati samaan suuntaan
        CloneObjectOrientation luoti2\obj2,john          
        reload2=40 'lataus        
    EndIf
    'päivitä aseen lataaminen
    If reload2>0 Then reload2=reload2-1

    'Päivitä kaikki ammukset
    For luoti2.AMMUS2 = Each AMMUS2
        MoveObject luoti2\obj2,6
        
       
    Next luoti2
    
    '-------------------
    
If GetMap(2, ObjectX(luoti\obj), ObjectY(luoti\obj)) Then
    DeleteObject luoti\obj
    Delete luoti
EndIf


If GetMap(2, ObjectX(luoti2\obj2), ObjectY(luoti2\obj2)) Then
    DeleteObject luoti2\obj2
    Delete luoti2
EndIf
        
        '--------------------------------

    DrawScreen 'piirrä näyttö

Forever
En koodia ole vielä tässä yksinkertaistetussa muodossa testannut koska CB tilttasi jostain syystä painaessani ctrl+v. Mutta sen pitäisi toimia.
koodaaja
Moderator
Moderator
Posts: 1583
Joined: Mon Aug 27, 2007 11:24 pm
Location: Otaniemi - Mikkeli -pendelöinti

Re: Tyhmät kysymykset

Post by koodaaja »

MAV iski. En jaksa koko koodia katsoa läpi, mutta voin suoraan sanoa, että kaksi ammustyyppiä on täysin turhaa, yhteenkin voisi tallentaa kaiken.
Kerosiinipelle

Re: Tyhmät kysymykset

Post by Kerosiinipelle »

koodaaja wrote:MAV iski. En jaksa koko koodia katsoa läpi, mutta voin suoraan sanoa, että kaksi ammustyyppiä on täysin turhaa, yhteenkin voisi tallentaa kaiken.
MAV tulee siitä seinääntörmäyksestä. Ja voiko ne tallentaa yhteen ammustyyppiin, jos toinen on konepistooli ja toinen raketinheitin? Ja kahdelle eri tyypille?
tuhoojabotti
Advanced Member
Posts: 485
Joined: Tue Aug 28, 2007 3:53 pm
Location: Suomi, Finland
Contact:

Re: Tyhmät kysymykset

Post by tuhoojabotti »

Ne koodit (joidenka pitäisi tuhota padit) pitää olla siellä for luoti.AMMUS=each AMMUS /---koodi---/next luoti ja se luoti2 homma
Imagedev.tuhoojabotti.com — “Programmer (noun): An organism that turns caffeine into code.”
Kerosiinipelle

Re: Tyhmät kysymykset

Post by Kerosiinipelle »

tuhoojabotti wrote:Ne koodit (joidenka pitäisi tuhota padit) pitää olla siellä for luoti.AMMUS=each AMMUS /---koodi---/next luoti ja se luoti2 homma
Jes! Tämä toimi!

Ja sitten seuraava kysymys:

Miten saada luoti osumaan ei-type-vihollisiin? ObjectsOverlapilla ei toiminut.
koodaaja
Moderator
Moderator
Posts: 1583
Joined: Mon Aug 27, 2007 11:24 pm
Location: Otaniemi - Mikkeli -pendelöinti

Re: Tyhmät kysymykset

Post by koodaaja »

Kerosiinipelle wrote:
tuhoojabotti wrote:Ne koodit (joidenka pitäisi tuhota padit) pitää olla siellä for luoti.AMMUS=each AMMUS /---koodi---/next luoti ja se luoti2 homma
Jes! Tämä toimi!

Ja sitten seuraava kysymys:

Miten saada luoti osumaan ei-type-vihollisiin? ObjectsOverlapilla ei toiminut.
Jos ne ovat objekteja, ObjectsOverlap toimii. Käyt vain vihutaulukon läpi luodin läpikäyntiloopissa. Jos et käytä taulukoita etkä typejä, on turha kuvitella saavasi hyvää peliä (ilman suuria vaikeuksia ja turhaa kikkailua) aikaan ;D Eli nyt ryhdyt toteuttamaan vihuja typeillä.
Kerosiinipelle

Re: Tyhmät kysymykset

Post by Kerosiinipelle »

koodaaja wrote:
Kerosiinipelle wrote:
tuhoojabotti wrote:Ne koodit (joidenka pitäisi tuhota padit) pitää olla siellä for luoti.AMMUS=each AMMUS /---koodi---/next luoti ja se luoti2 homma
Jes! Tämä toimi!

Ja sitten seuraava kysymys:

Miten saada luoti osumaan ei-type-vihollisiin? ObjectsOverlapilla ei toiminut.
Jos ne ovat objekteja, ObjectsOverlap toimii. Käyt vain vihutaulukon läpi luodin läpikäyntiloopissa. Jos et käytä taulukoita etkä typejä, on turha kuvitella saavasi hyvää peliä (ilman suuria vaikeuksia ja turhaa kikkailua) aikaan ;D Eli nyt ryhdyt toteuttamaan vihuja typeillä.
No ei pelissä ole tarkoituskaan olla suuria vihumassoja.

Näinkö sen vihu-pati törmäyksen pitäisi toimia (tai pati-vihu törmäyksen):

Code: Select all

If ObjectsOverlap(luoti\obj,vihu,3) Then
*Blaa blaa*
EndIf
Tuo ainakin minulla mavaa.
Guest

Re: Tyhmät kysymykset

Post by Guest »

Miten olisi paras toteuttaa törmäystunnistus (objekteilla vai piirtämällä CoolBasic:in piirtokomennoilla esimerkiksi neliönmuotoinen alue)?
Yritin tehdä peliini seinän jota päin mentäessä pelaaja pysähtyy; tein seinän kuvatiedostoksi piirtäen sen paintilla ja liitin sen peliin, nyt kun törmään siihen piirtämääni kuvaan pelaaja luisuu oudosti. Kun yritin parannella sitä, pelaaja menee seinän läpi. Ajattelin myös, että jos tekisin monta seinää peliin kuvatiedostona, se varmasti olisi raskasta ja varmaan kuormittaisi paljon muistia.
Tiedättekö te viisaammat mikä olisi vialla ja miten toteuttaisin seinät peliini?

Vielä viimeinen kysymys:
Onko totta kun jotkut sanovat ettei ohjelmointia voi oppia ellei ole hyvä matikkapää? Vai onko mahdollista oppia esimerkiksi joillakin kursseilla ohjelmointia vaikka ei olisi hyvä matematiikassa?
User avatar
esa94
Guru
Posts: 1855
Joined: Tue Sep 04, 2007 5:35 pm

Re: Tyhmät kysymykset

Post by esa94 »

Oli sinulla hyvä matikkapää tai sitten ei, joudut kuitenkin käyttämään matematiikkaa ohjelmoidessa. Mietitään esimerkiksi pelihahmon elkkuja. Yksinkertaisimmillaan vähennät niistä yhden kerrallaan Yksinkertaista, mutta silti matematiikkaa. Pieniin projekteihin ei tarvitse kuitenkaan mitään hyvää matikkapäätä, kunhan osaa perusteet. Vähintään.
koodaaja
Moderator
Moderator
Posts: 1583
Joined: Mon Aug 27, 2007 11:24 pm
Location: Otaniemi - Mikkeli -pendelöinti

Re: Tyhmät kysymykset

Post by koodaaja »

Kerosiinipelle: se toimii. Vika on muualla koodissa. Ja jos sinulla on enemmän kuin yksi vihu kerrallaan olemassa, käytä typejä tai taulukoita.

Guest: Tutustuhan tilekarttoihin, niillä saat toimivat törmäykset seiniin yhdellä komennolla. Ja jos kolmiulotteinen ( ja kaksiulotteinen ) hahmotuskyky ovat kunnossa ja osaat käyttää vektoreita, ei tule mitään ongelmia. Jos tämä avaruudellinen hahmotuskyky ei ole kunnossa, se on aika pitkälti voi voi, jos haluat mitään isompaa graafista tehdä. Vektorit taas oppii helposti, ja on syytäkin oppia, jos haluat mitään kunnollista aikaan saada. Eli vaikka tekstiä kirjoittaa näytölle.
koppanen
Newcomer
Posts: 7
Joined: Tue Aug 28, 2007 4:59 pm

Re: Tyhmät kysymykset

Post by koppanen »

ööö nyt meni sormi suuhun... miteen mää muutan sen et kuinka lähelt se kamera sitä ukkoo seuraa..?
Locked