Elkuista vaan...

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

Elkuista vaan...

Post by Latexi95 »

Miten saa tehtyä tyypi objectille toimivat elkut?
Yritin tehdä ne objectintegerin avulla mutta huonolla menestyksellä.
Neuvoja kaivattais...
Character
Active Member
Posts: 113
Joined: Thu Nov 27, 2008 2:16 pm

Re: Elkuista vaan...

Post by Character »

Esim. Näin:

Code: Select all

Type OBJEKTIT
    Field obj //objekti
    Field hp //elkut
EndType

---------------

//Päivitetään objektit

For objekti.OBJEKTIT = Each OBJEKTIT
    If jotain_tapahtuu Then
        objekti\hp = objekti\hp - 2 //muuta haluamaksesi
    EndIf
    //----
    If objekti\hp < 1 Then //jos hp on pienempi kuin yksi niin poistetaan objekti
        DeleteObject objekti\obj
        Delete objekti
    EndIf
Next objekti
Eli luodaan instanssi "hp". Kun "jotain_tapahtuu", vähennetään elkkiä ja jos elkit loppuvat, poistetaan objekti.
Muuta "jotain_tapahtuu" haluamaksesi. esimerkiksi: ObjectsOverlap(pelaaja, objekti\obj)
jesperx96
Active Member
Posts: 190
Joined: Sun Nov 23, 2008 9:35 am
Location: Lappajärvi

Re: Elkuista vaan...

Post by jesperx96 »

Mitenkä saa asetettua, paljonko elkkua on alussa?
We see the lines in chalk
The warning signs in where we walk
In the shadows of the cities maze
To try and fight for better days
rami123
Advanced Member
Posts: 354
Joined: Mon Jun 23, 2008 8:20 pm
Location: Kittilä

Re: Elkuista vaan...

Post by rami123 »

jesperx96 wrote:Mitenkä saa asetettua, paljonko elkkua on alussa?
tuo ennen noita vähentämisiä

Code: Select all

objecti/hp=100 
EDIT:

NO ei mitt sitte..

Last edited by rami123 on Sat May 16, 2009 9:56 pm, edited 1 time in total.
Koodiapina
Forum Veteran
Posts: 2396
Joined: Tue Aug 28, 2007 4:20 pm

Re: Elkuista vaan...

Post by Koodiapina »

rami123 wrote:tuo ennen noita vähentämisiä

Code: Select all

objecti/hp=100 
Eikös se ole \ eikä /?
jesperx96
Active Member
Posts: 190
Joined: Sun Nov 23, 2008 9:35 am
Location: Lappajärvi

Re: Elkuista vaan...

Post by jesperx96 »

No kiitos kuitenkin. Oliko se noin helppoa?
We see the lines in chalk
The warning signs in where we walk
In the shadows of the cities maze
To try and fight for better days
User avatar
valscion
Moderator
Moderator
Posts: 1599
Joined: Thu Dec 06, 2007 7:46 pm
Location: Espoo
Contact:

Re: Elkuista vaan...

Post by valscion »

jesperx96 wrote:No kiitos kuitenkin. Oliko se noin helppoa?
No, siis aina kun teet uuden objektin tyyppi-kokoelmaan, asetat siinä samalla sen HP:ksi 100 tai mitä ikinä haluatkaan. Esim.

Code: Select all

Type LEHMAT
    Field obj //objekti
    Field hp //elkut
EndType


master_lehma = LoadObject("Media\cow.bmp") // Ladataan objektiksi lehmä, josta luodaan kopioita
ShowObject master_lehma, OFF // Ei näyteta kopioitavaa lehmää

//---------------

Repeat

    If KeyHit(cbKeySpace) Then // Jos painettiin välinäppäintä...
        newLehma.LEHMAT = New(LEHMAT) // Luodaan uusi lehmä kokoelmaan
        newLehma\obj = CloneObject(master_lehma) // Kopioidaan master_lehma objekti (nopea tapa)
        PositionObject newLehma\obj, Rand(-200,200), Rand(-150,150)
        //vvvvvvvvvvvvvvvvvvvvvvvvvvvvv
        newLehma\hp = Rand(1,10) // <---------------- Elkuiksi 1-10
        //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        ObjectPickable newLehma\obj, 1 // Asetetaan niin, että objekti voidaan poimia hiirellä
    EndIf
    
    // Poimitaan objektit
    CameraPick MouseX(), MouseY()
    
    // Tallennetaan poimitun objektin tunnus tähän muuttujaan
    e=PickedObject()
    
    DrawGame // Ettei teksti jäisi lehmien alle piiloon
    
    //Päivitetään objektit
    For lehma.LEHMAT = Each LEHMAT
        If e=lehma\obj Then // Jos poimittu objekti oli tämä lehma
            teksti$ = "HP: " + lehma\hp // Ruudulla näytettävä teksti
            If MouseUp(1) Then
                // Jos painettiin hiirtä, vähennä hp:ta
                lehma\hp = lehma\hp - 1 //muuta haluamaksesi
            EndIf
        EndIf
        //----
        If lehma\hp < 1 Then //jos hp on pienempi kuin yksi niin poistetaan objekti
            DeleteObject lehma\obj
            Delete lehma
        EndIf
    Next lehma
    
    If e Then
        Text 0,0, teksti$
    Else
        Text 0, 0, "Luo lehmä painamalla välilyöntiä"
        Text 0,17, "Vie hiiri lehmän päälle ja"
        Text 0,30, "klikkaa sitä vähentääksesi elkkua"
    EndIf
    
    DrawScreen

Forever
Tuossa samalla on esimerkki kuinka objekteja voi poimia ruudulta :)
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
jesperx96
Active Member
Posts: 190
Joined: Sun Nov 23, 2008 9:35 am
Location: Lappajärvi

Re: Elkuista vaan...

Post by jesperx96 »

Joo kyllä tyypeistä tiesin jo perusteet, en vaan tiennyt että fieldeille voi asettaa kokonaislukuarvoja :)
We see the lines in chalk
The warning signs in where we walk
In the shadows of the cities maze
To try and fight for better days
koodaaja
Moderator
Moderator
Posts: 1583
Joined: Mon Aug 27, 2007 11:24 pm
Location: Otaniemi - Mikkeli -pendelöinti

Re: Elkuista vaan...

Post by koodaaja »

jesperx96 wrote:Joo kyllä tyypeistä tiesin jo perusteet, en vaan tiennyt että fieldeille voi asettaa kokonaislukuarvoja :)
Niinno, objektin kahvakin on kokonaisluku, määräytyypi latausjärjestyksen mukaan.

Code: Select all

If LoadObject("media/guy.bmp", 360) <>0 Then // jos lataus onnistuu. tässä voisi olla <>0:n sijaan =1, jos haluttaisiin olla varmoja objektin numerosta
    Repeat
        TurnObject 1, 1 //pyöritellään objektia 1
        DrawScreen
    Forever
EndIf
Ei missään nimessä suositeltava tapa käyttää objekteja (virhealtis ja epäkäytännöllinen), mutta hyvä tietää että ne ovat vain numeroita jotka osoittavat tiettyihin objekteihin.

Ja $- sekä #-merkeillä voidaan käyttää fieldeissä myös merkkijonoja ja liukulukuja (myös "as string" ja kaverit toiminevat, en nyt muista)
jesperx96
Active Member
Posts: 190
Joined: Sun Nov 23, 2008 9:35 am
Location: Lappajärvi

Re: Elkuista vaan...

Post by jesperx96 »

No niin. Yritin tehdä ihan perus putkiräiskintää, mutta tuli ongelma. Nimittäin mavi, joka liittyy ilmiselvästi energian vähennykseen. En ole sisentänyt tai kommentoinut koodia, sorry. Voisitteko korjata mavin?

Code: Select all

Type VIHUT
Field hp
Field obj
EndType
Type PANOKSET
Field obj
EndType
SCREEN 1024,768,0,0
kartta=LoadMap("C:\Projekti\Media\maze.til","C:\Projekti\Media\tileset2.png")
ukko=LoadObject("Media\soldier.bmp",360)
vihu=LoadObject("Media\ukkeli2-.bmp",360)
pati=LoadObject("Media\bullet.bmp",360)
tähtäin=LoadObject("Media\crosshair.bmp",360)
SetupCollision ukko,kartta,1,4,2
ShowObject vihu,OFF
ShowObject pati,OFF
vih.VIHUT=New(VIHUT)
vih\obj=CloneObject(vihu)
PositionObject vih\obj,Rand(-512,512),Rand(-384,384)
PositionObject ukko, Rand(-512,512),Rand(-384,384)
Repeat

If KeyDown (cbkeyw) Then MoveObject ukko,2.5
If KeyDown (cbkeys) Then MoveObject ukko,-1
If KeyDown (cbkeya) Then MoveObject ukko,0,-1.5
If KeyDown (cbkeyd) Then MoveObject ukko,0,1.5

ScreenPositionObject tähtäin, MouseX(), MouseY()
CloneCameraPosition ukko
PointObject ukko,tähtäin
PointObject vihu,ukko
If reload>0 Then reload=reload-1
If MouseHit(1) And reload=0 Then
luoti.PANOKSET= New(PANOKSET)
luoti\obj=CloneObject(pati)
CloneObjectPosition luoti\obj, ukko
CloneObjectOrientation luoti\obj, ukko
reload=8
EndIf
For luoti.PANOKSET = Each PANOKSET
MoveObject luoti\obj,20
If GetMap (2,ObjectX(luoti\obj),ObjectY(luoti\obj))Then
DeleteObject luoti\obj
Delete luoti
EndIf
Next luoti
If GetMap (2,ObjectX(vih\obj),ObjectY(vih\obj))Then
DeleteObject vih\obj
Delete vih
vih.VIHUT=New (VIHUT)
vih\obj=CloneObject(vihu)
PositionObject vih\obj,Rand(-512,512),Rand(-384,384)
EndIf
If ObjectSight (ukko,vih\obj) Then 
PointObject vih\obj,ukko
MoveObject vih\obj,2
EndIf
vih\hp=100
For vih.VIHUT = Each VIHUT
If ObjectsOverlap (luoti\obj,vih\obj) Then vih\hp=vih\hp-2
If vih\hp < 1 Then 
DeleteObject vih\obj
Delete vih
EndIf
Next vih
DrawScreen
Forever
We see the lines in chalk
The warning signs in where we walk
In the shadows of the cities maze
To try and fight for better days
User avatar
esa94
Guru
Posts: 1855
Joined: Tue Sep 04, 2007 5:35 pm

Re: Elkuista vaan...

Post by esa94 »

[quote="jesperx96"]No niin. Yritin tehdä ihan perus putkiräiskintää, mutta tuli ongelma. Nimittäin mavi, joka liittyy ilmiselvästi energian vähennykseen. En ole sisentänyt tai kommentoinut koodia, sorry. Voisitteko korjata mavin?

Code: Select all

...If ObjectsOverlap (luoti\obj,vih\obj) Then vih\hp=vih\hp-2...
luoti\obj ei ole olemassa tuolla rivillä. Sinun täytyy siirtää vihulogiikka luotien tarkistusten alkuun.
jesperx96
Active Member
Posts: 190
Joined: Sun Nov 23, 2008 9:35 am
Location: Lappajärvi

Re: Elkuista vaan...

Post by jesperx96 »

Koitin niska limassa(no ei ihan) korjata tätä ja en onnistunut vaikka käänsin ja väänsin miten koodia. Voiko joku korjata sen jos on aikaa ja haluaa? MAV tulee nyt vasta kun yritän ampua. En ole vielä ihan perillä näistä tyypeistä :roll:

Code: Select all

Type VIHUT
Field hp
Field obj
EndType
Type PANOKSET
Field obj
EndType
SCREEN 1024,768,0,0
kartta=LoadMap("C:\Projekti\Media\maze.til","C:\Projekti\Media\tileset2.png")
ukko=LoadObject("Media\soldier.bmp",360)
vihu=LoadObject("Media\ukkeli2-.bmp",360)
pati=LoadObject("Media\bullet.bmp",360)
tähtäin=LoadObject("Media\crosshair.bmp",360)
SetupCollision ukko,kartta,1,4,2
ShowObject vihu,OFF
ShowObject pati,OFF
vih.VIHUT=New(VIHUT)
vih\obj=CloneObject(vihu)
PositionObject vih\obj,Rand(-512,512),Rand(-384,384)
PositionObject ukko, Rand(-512,512),Rand(-384,384)
Repeat

If KeyDown (cbkeyw) Then MoveObject ukko,2.5
If KeyDown (cbkeys) Then MoveObject ukko,-1
If KeyDown (cbkeya) Then MoveObject ukko,0,-1.5
If KeyDown (cbkeyd) Then MoveObject ukko,0,1.5

If ObjectSight (ukko,vih\obj) Then 
PointObject vih\obj,ukko
MoveObject vih\obj,2
EndIf



ScreenPositionObject tähtäin, MouseX(), MouseY()
CloneCameraPosition ukko
PointObject ukko,tähtäin
PointObject vihu,ukko

If reload>0 Then reload=reload-1
If MouseHit(1) And reload=0 Then
luoti.PANOKSET= New(PANOKSET)
luoti\obj=CloneObject(pati)
CloneObjectPosition luoti\obj, ukko
CloneObjectOrientation luoti\obj, ukko
reload=8
EndIf


vih\hp=100
For luoti.PANOKSET = Each PANOKSET
MoveObject luoti\obj,20
For vih.VIHUT= Each VIHUT
If ObjectsOverlap (vih\obj,luoti\obj) Then vih\hp= vih\hp-20
If vih\hp <1 Then 
DeleteObject vih\obj
Delete vih
EndIf
Next vih
If GetMap (2,ObjectX(luoti\obj),ObjectY(luoti\obj))=True Then
DeleteObject luoti\obj
Delete luoti
EndIf
Next luoti
DrawScreen 
Forever
We see the lines in chalk
The warning signs in where we walk
In the shadows of the cities maze
To try and fight for better days
Latexi95
Guru
Posts: 1166
Joined: Sat Sep 20, 2008 5:10 pm
Location: Lempäälä

Re: Elkuista vaan...

Post by Latexi95 »

jesperx96 wrote:Koitin niska limassa(no ei ihan) korjata tätä ja en onnistunut vaikka käänsin ja väänsin miten koodia. Voiko joku korjata sen jos on aikaa ja haluaa? MAV tulee nyt vasta kun yritän ampua. En ole vielä ihan perillä näistä tyypeistä :roll:

Code: Select all

koodia...
No virhe tuli siinä kun käsittelit vihua For->Each silmukan ulkopuolella.
Alussa se toimi koska tyypin osoitin jäi viimeksi luotuun vihuun.
Kun loit jäsenen "panoksiin" niin panoksien For->Each silmukka alkoi pyöriä ja
sen mukana myös vihujen For->Each. For->Each silmukka sotki
tyypin osoittimen paikan ja sen takia seuraavalla kerralla vihun liikutuksessa
ohjelmasi ei enää tiennyt missä tyypin jäsenessä ollaan.

Ja sitten kannattaa piiloittaa varsinainen "Master Vihu" ;)
Tuossa korjattu koodi.

Code: Select all

Type VIHUT
Field hp
Field obj
EndType
Type PANOKSET
Field obj
EndType
SCREEN 1024,768,0,0
kartta=LoadMap("C:\Projekti\Media\maze.til","C:\Projekti\Media\tileset2.png")
ukko=LoadObject("Media\soldier.bmp",360)
vihu=LoadObject("Media\ukkeli2-.bmp",360)
ShowObject vihu,OFF
pati=LoadObject("Media\bullet.bmp",360)
tähtäin=LoadObject("Media\crosshair.bmp",360)
SetupCollision ukko,kartta,1,4,2
ShowObject vihu,OFF
ShowObject pati,OFF
vih.VIHUT=New(VIHUT)
vih\obj=CloneObject(vihu)
vih\hp=100
PositionObject vih\obj,Rand(-512,512),Rand(-384,384)
PositionObject ukko, Rand(-512,512),Rand(-384,384)
Repeat

If KeyDown (cbkeyw) Then MoveObject ukko,2.5
If KeyDown (cbkeys) Then MoveObject ukko,-1
If KeyDown (cbkeya) Then MoveObject ukko,0,-1.5
If KeyDown (cbkeyd) Then MoveObject ukko,0,1.5
For vih.VIHUT=Each VIHUT
If ObjectSight (ukko,vih\obj) Then
PointObject vih\obj,ukko
MoveObject vih\obj,2
EndIf
Next vih


ScreenPositionObject tähtäin, MouseX(), MouseY()
CloneCameraPosition ukko
PointObject ukko,tähtäin


If reload>0 Then reload=reload-1
If MouseHit(1) And reload=0 Then
luoti.PANOKSET= New(PANOKSET)
luoti\obj=CloneObject(pati)
CloneObjectPosition luoti\obj, ukko
CloneObjectOrientation luoti\obj, ukko
reload=8
EndIf



For luoti.PANOKSET = Each PANOKSET
MoveObject luoti\obj,6
For vih.VIHUT= Each VIHUT
If ObjectsOverlap (vih\obj,luoti\obj) Then vih\hp= vih\hp-20
If vih\hp <1 Then
DeleteObject vih\obj
Delete vih
EndIf
Next vih
If GetMap (2,ObjectX(luoti\obj),ObjectY(luoti\obj))=True Then
DeleteObject luoti\obj
Delete luoti
EndIf
Next luoti
DrawScreen
Forever
jesperx96
Active Member
Posts: 190
Joined: Sun Nov 23, 2008 9:35 am
Location: Lappajärvi

Re: Elkuista vaan...

Post by jesperx96 »

Kiitti paljon!
We see the lines in chalk
The warning signs in where we walk
In the shadows of the cities maze
To try and fight for better days
KilledWhale
Tech Developer
Tech Developer
Posts: 545
Joined: Sun Aug 26, 2007 2:43 pm
Location: Liminka

Re: Elkuista vaan...

Post by KilledWhale »

Sisentämiseen kannattaa panostaa alusta asti, jolloin virheiden etsiminen on helpompaa, ja muiltakin saa herkemmin apua.
CoolBasic henkilökuntaa
Kehittäjä

cbFUN Kello
cbSDL
Whale.dy.fi

<@cce> miltäs tuntuu olla suomen paras
Post Reply