Tyhmät kysymykset (I/2009)

Voit pyytää apua ohjelmointiongelmiin täältä.
Locked
User avatar
Jonez
Devoted Member
Posts: 575
Joined: Mon Aug 27, 2007 8:37 pm

Re: Tyhmät kysymykset

Post by Jonez » Wed Feb 20, 2008 5:49 pm

Koska yrität käyttää objektia jota ei ole olemassa:

Käydään läpi kohta kohdalta:

1. Aloitamme silmukan alusta
2. Tietyssä kohtaa tarkastamme onko pelihahmo smaragdin kohdalla.
3. Jos on, poistamme smaragdin
4. Nyt kun smaragdi on poistettu, menemme silmukan loppuun ja palaamme sieltä alkuun.5
5. Tarkastamme uudestaan onko pelihahmo smaragdin kohdalla. Enää ei objektia "smaragdi" ole, joten tulee mav.

Tee vaikka muuttuja joka kertoo onko smaragdi tuhottu. Ennen törmäyksentarkistusta katsot onko smaragdi enää olemassa. Jos ei ole, törmäyksentarkistusta ei tehdä.
-Vuoden 2008 aloittelijan ystävä -palkinnon voittaja-
Image <- protestipelikilpailun voittaja.
Space War

BulletStorm

Re: Tyhmät kysymykset

Post by BulletStorm » Thu Feb 21, 2008 1:17 pm

Eli, jos minulla on luoti joka ei ole pallo, vaan viiva, kuinka saan sen osoittamaan samaan suuntaan kuin pelaaja sinä hetkenä kun se ammuttiin?

Jos et tajunnut, tässä on esimerkki:

Ampuminen nyt:
Image


Ampuminen miten sen haluan:
Image

Tiedä sitten onko tyhmä vai järkevä kysymys, mutta itse en ainakaan onnistunut tehtävässä.

User avatar
Murskaaja
Member
Posts: 92
Joined: Tue Aug 28, 2007 8:19 pm
Contact:

Re: Tyhmät kysymykset

Post by Murskaaja » Thu Feb 21, 2008 2:49 pm

BulletStorm wrote:Eli, jos minulla on luoti joka ei ole pallo, vaan viiva, kuinka saan sen osoittamaan samaan suuntaan kuin pelaaja sinä hetkenä kun se ammuttiin?
Jos käytät objekteja, tuo hoituu helposti yhdellä komennolla: Cloneobjectorientation objekti, kohde_objekti

Teinpä vielä nopean esimerkin vaikka tuskin sille on tarvetta:

Code: Select all

bulletimage = MakeImage(6,2)

Color 255,0,0
DrawToImage bulletimage
    Box 0,0,6,2
DrawToScreen

masterbullet = MakeObject(72)
PaintObject masterbullet,-bulletimage
ShowObject masterbullet, OFF

soldier = LoadObject("media\soldier.bmp",72)

Type BULLETS
    Field obj
End Type

Repeat
    MoveObject soldier, (UpKey()-DownKey())*3
    TurnObject soldier, (LeftKey()-RightKey())*5
    
    If KeyDown(157) And reload < Timer() Then
        bullet.BULLETS = New(BULLETS)
        bullet\obj = CloneObject(masterbullet)
        CloneObjectPosition bullet\obj, soldier
        CloneObjectOrientation bullet\obj, soldier
        MoveObject bullet\obj, 20
        reload = Timer()+100
    EndIf
    
    For bullet.BULLETS = Each BULLETS
        MoveObject bullet\obj, 5
        If Distance2(bullet\obj, soldier) > 300 Then
            DeleteObject bullet\obj
            Delete bullet
        EndIf
    Next bullet
    
    DrawScreen
Forever
ASCII star wars Xtreme | Cool Bombers | Combat (kehitteillä)

RedShadow productions

BulletStorm

Re: Tyhmät kysymykset

Post by BulletStorm » Thu Feb 21, 2008 3:07 pm

Murskaaja wrote:
BulletStorm wrote:Eli, jos minulla on luoti joka ei ole pallo, vaan viiva, kuinka saan sen osoittamaan samaan suuntaan kuin pelaaja sinä hetkenä kun se ammuttiin?
Jos käytät objekteja, tuo hoituu helposti yhdellä komennolla: Cloneobjectorientation objekti, kohde_objekti

Teinpä vielä nopean esimerkin vaikka tuskin sille on tarvetta:

Code: Select all

Koodia...
Jännää sinänsä, että kun kerran kokeilin tuota, se ei toiminut. No, kokeilen vielä kerran.

EDIT: Kävi näin:

Image
Last edited by BulletStorm on Thu Feb 21, 2008 3:49 pm, edited 1 time in total.

Eräs Vierailija

Re: Tyhmät kysymykset

Post by Eräs Vierailija » Thu Feb 21, 2008 3:25 pm

Sattuuko kukaan tietämään kuinka saa tasohyppelypelissä ohjelman tarkistamaan onko edessäpäin mitään ja kertomaan mitä se on?

User avatar
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 » Thu Feb 21, 2008 4:24 pm

BulletStorm wrote:
Murskaaja wrote:
BulletStorm wrote:Eli, jos minulla on luoti joka ei ole pallo, vaan viiva, kuinka saan sen osoittamaan samaan suuntaan kuin pelaaja sinä hetkenä kun se ammuttiin?
Jos käytät objekteja, tuo hoituu helposti yhdellä komennolla: Cloneobjectorientation objekti, kohde_objekti

Teinpä vielä nopean esimerkin vaikka tuskin sille on tarvetta:

Code: Select all

Koodia...
Jännää sinänsä, että kun kerran kokeilin tuota, se ei toiminut. No, kokeilen vielä kerran.

EDIT: Kävi näin:

Image
Luoti on toki piirrettävä niin, että kuvassa viiva on vaaka-asennossa, CB kun olettaa sen olevan niinpäin. (piirretäänhän ukotkin niin, että ne "katsovat" oikealle)

BulletStorm

Re: Tyhmät kysymykset

Post by BulletStorm » Thu Feb 21, 2008 4:37 pm

koodaaja wrote:
Luoti on toki piirrettävä niin, että kuvassa viiva on vaaka-asennossa, CB kun olettaa sen olevan niinpäin. (piirretäänhän ukotkin niin, että ne "katsovat" oikealle)
Niin se onkin tehty. Jos pelaaja on vaaka-asennossa, viiva näyttäisi tulevan aseesta, mutta kun pelaaja osoittaa vähänkin muualle, luoti ei ole "oikeinpäin".

User avatar
Harakka
Advanced Member
Posts: 430
Joined: Mon Aug 27, 2007 9:08 pm
Location: Salo
Contact:

Re: Tyhmät kysymykset

Post by Harakka » Thu Feb 21, 2008 4:45 pm

EDIT: Ei mitään, ajattelin väärin. Koodi toimii ainakin minulla.
Peli piirtokomennoilla - voittaja, Virtuaalilemmikkipeli - voittaja,
Sukellusvenepeli - voittaja, Paras tileset - voittaja
Vaihtuva päähenkilö - voittaja, Autopeli - voittaja sekä
Hiirellä ohjattava peli - voittaja B)

User avatar
tuhoojabotti
Advanced Member
Posts: 485
Joined: Tue Aug 28, 2007 3:53 pm
Location: Suomi, Finland
Contact:

Re: Tyhmät kysymykset

Post by tuhoojabotti » Thu Feb 21, 2008 5:26 pm

onkos latauksen lomassa muistettu pyöritys arvo? eli loadobject(plku,p-arvo) jos pyöritys arvoa ei anneta se on 0 ja luoti ei näytä pyörivän vaikka sitä kääntää kyllähän sen kulma muuttuu mutta sitä ei nää...
Imagedev.tuhoojabotti.com — “Programmer (noun): An organism that turns caffeine into code.”

BulletStorm

Re: Tyhmät kysymykset

Post by BulletStorm » Thu Feb 21, 2008 5:26 pm

Njoo sainpa ton nyt toimimaan. Kiitoos.

Koviz

Re: Tyhmät kysymykset

Post by Koviz » Fri Feb 22, 2008 7:12 pm

Pelissäni on kummallekin pelaajalle omat ruudut, jotka olen tehnyt (ottox90:täkö?) tekemallä funktiolla. Nyt on ongelmaa efektien kanssa. Kun pelaaja ampuu toisen pelaajan niin verta pitäisi lentää, mutta koska funktio tekee pelaajien ruudut kuvista niin veri jää ilmeisesti sen alle. Objecteilla verta ei voi tehdä, koska se on pitemmän päälle liian raskasta. Niin miten tuon veren saisi piirtymään pelaajien ruuduille?

User avatar
otto90x
Advanced Member
Posts: 349
Joined: Mon Aug 27, 2007 9:00 pm
Location: Lapinjärvi, Finland
Contact:

Re: Tyhmät kysymykset

Post by otto90x » Fri Feb 22, 2008 8:23 pm

Oletan että käytät pelissäsi tilekarttoja ja haluat veren näkyvän kartan päällä mutta kuitenkin joidenkin objektien alla. Tässä ratkaisu:
"Verta" saa enteristä lisättyä hahmon eteen.

Code: Select all

SCREEN 1024,768

Type veri
    Field aika
    Field x
    Field y
End Type

Global isäntäveriimage, kartta

isäntäveriimage=makeimage(10,10)
drawtoimage isäntäveriimage
color cbred
circle 0,0,10,1
drawtoscreen

kartta = LoadMap("Media\cdm2.til","Media\tileset.bmp") 'ladataan kartta

Const vihumäärä=5

Dim vihu_obj(vihumäärä)
Dim vihu_pic(vihumäärä)

ukko = LoadObject ("Media\guy.bmp",72)
ShowObject ukko,OFF

For i=1 To vihumäärä
    vihu_obj(i)=CloneObject(ukko)
    SetupCollision vihu_obj(i),kartta,2,4,2
Next i

For i=1 To vihumäärä
    vihu_pic(i)=MakeImage(300,300)
Next i

Repeat

    For i=1 To vihumäärä-1
        TurnObject vihu_obj(i),Rand(-20,20)
        MoveObject vihu_obj(i),3
    Next i
   
    If UpKey() Then MoveObject vihu_obj(5),3
    If LeftKey() Then TurnObject vihu_obj(5),3
    If RightKey() Then TurnObject vihu_obj(5),-3
   
    x=ObjectX(vihu_obj(5))
    y=ObjectY(vihu_obj(5))
    ang=ObjectAngle(vihu_obj(5))
   
    If KeyDown(cbkeyreturn) Then addveri( x+Cos(Ang)*20,-y-Sin(ang)*20  )
   
   
    For i=1 To 5
        camera(vihu_pic(i),ObjectX(vihu_obj(i)),ObjectY(vihu_obj(i)))
    Next i
   
    DrawImage vihu_pic(1),0,0
    DrawImage vihu_pic(2),310,0
    DrawImage vihu_pic(3),620,0
    DrawImage vihu_pic(4),0,310
    DrawImage vihu_pic(5),310,310
   
    DrawScreen

Forever

Function camera(img,x,y)

l=ImageWidth(img)
k=ImageHeight(img)

UpdateGame

DrawToImage img
ClsColor cbblack
Cls
PositionCamera x,y
PositionCamera CameraX()+((ScreenWidth()-l)/2),CameraY()-((ScreenHeight()-k)/2)
DrawGame
päivitäveret()  // ------------ tänne verien piirto
SetMap kartta,OFF,OFF //--piilotetaan kaikki objektit (myös kartat) joiden ei haluta piirtyvän veren päälle
DrawGame
SetMap kartta,ON,ON //--palautetaan näkyvyys
DrawToScreen

EndFunction

Function addveri(_x,_y)
    v.veri=New(veri)
    v\x=_x
    v\y=_y
    v\aika=Timer()
End Function

Function päivitäveret()
    For v.veri=Each veri
        DrawImage isäntäveriimage,v\x,v\y
        If v\aika+5000<Timer() Then // viiden sekunnin ajastin
            Delete v
        EndIf
    Next v
End Function
Ota huomioon että karttamuuttuja (ja muut veren alle jäävät objektit) täytyy nyt esitellä camera funktiossa joten niiden kannattaa olla globaaleja tai voit muokata camera funktion siten että tarvittavat muuttujat tuodaan funktioon parametrinä. Tai sitten voit tehdä erillisen piilotus/näyttö funktion joka piilottaa ja palauttaa veren alle jäävät objektit.

EDIT: Ääh, pientä korjailua.
Otto Martikainen a.k.a. MetalRain, otto90x, kAATOSade.
Runoblogi, vuodatusta ja sekoiluja.

User avatar
Akatsuki
Member
Posts: 56
Joined: Thu Jan 03, 2008 2:39 pm
Location: Ylöjärvi
Contact:

Re: Tyhmät kysymykset

Post by Akatsuki » Sat Feb 23, 2008 10:34 am

No taas esitän yhden tyhmän kysymyksen... Tai oikeastaan kaksi pientä :D

1. Millä koodilla saa tehtyy sinne peliruudun sille siniselle alueelle missä on myös tärkeä [X] nappi niin pistettyy pelin nimen(tai jotain kirjoitusta)
2. Mitenkäs sais sellaisen kehykset vaikka joku sinisen laatikon sisällä koko peli ja jotain nappeja siinä reunojen ulkopuolella että niitä vois painella(esim valikko nappi tai inventory tai pelkä joku super komento)
Aluksi käytän tätä koodia vaan koristeena.(huom. sen pitäisi niinkuin muuttaa ne kehykset missä peli on)
Älä kysy multa!

User avatar
Eräs cb koodaaja
Active Member
Posts: 126
Joined: Wed Aug 29, 2007 3:55 pm

Re: Tyhmät kysymykset

Post by Eräs cb koodaaja » Sat Feb 23, 2008 10:47 am

Ekaan kysymykseen : SetWindow "Pelin nimi"
Tokaa en oikein ymmärtänyt, mutta ruudun ulkopuolelle ei voi piirtää mitään ilman dlliä jos sitä tarkoitit.
Tiimit ja tuotokset:
RE:Ydintuho
Drahtlose:Infernalisch, Pienet pelit

User avatar
Akatsuki
Member
Posts: 56
Joined: Thu Jan 03, 2008 2:39 pm
Location: Ylöjärvi
Contact:

Re: Tyhmät kysymykset

Post by Akatsuki » Sat Feb 23, 2008 10:50 am

Eräs cb koodaaja wrote:Ekaan kysymykseen : SetWindow "Pelin nimi"
Tokaa en oikein ymmärtänyt, mutta ruudun ulkopuolelle ei voi piirtää mitään ilman dlliä jos sitä tarkoitit.
Oikeestaan ruudun sisälle kehykset...
Älä kysy multa!

User avatar
Eräs cb koodaaja
Active Member
Posts: 126
Joined: Wed Aug 29, 2007 3:55 pm

Re: Tyhmät kysymykset

Post by Eräs cb koodaaja » Sat Feb 23, 2008 11:06 am

Siis en oikeen tajua. Haluatko siis ikkunoita tämän cb:n ikkunan sisään? ->Katso SDK:sta Ikkunamoottori.
Tiimit ja tuotokset:
RE:Ydintuho
Drahtlose:Infernalisch, Pienet pelit

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

Re: Tyhmät kysymykset

Post by Jonez » Sat Feb 23, 2008 11:10 am

No kehykset joudut itse piirtämään jollain tapaa. Joko esim. paintilla, tai käyttäen cb:n piirtokomentoja. Voit ladata ohjelmaan kuvia funktiolla LoadImage. Sun pitää siis piirtää ne kehykset ohjelmaan käyttäen komentoa DrawImage. Katso manuaalista esimerkkejä.

Oman nappulan teko on sinäsä hankalampi homma. Joudut käyttämään joko omaa tai muiden tekemää funktiota. Tähän mennessä olet todennäköisesti tutustunut vain cb:n sisäisiin funktioihin (Input(), Timer() jne). Funktio siis on eräänlainen pieni ohjelma erillään pääohjelmasta, joka voi palauttaa arvon. Funktioita voi kutsua milloin vain.

Funktiot on aika hankala asia aloittelijalle, mutta täysin yksinkertaisia sitten kun ne osaa. Kannattaa katsoa manuaalista 'Function'.

Tein tässä nopean esimerkin nappulasta, joka on toteutettu aika huonolla funktiolla. Sun ei periaatteessa pidä tajuta tästä funktiosta muuta kuin:
1. Sille annetaan arvoja (rivi 11): Piirrettävä teksti ja laatikon koordinaatit. Voit myös antaa sille oman leveyden ja pituuden jos haluat. Kokeile muuttaa rivi 11 tällaiseksi: If Nappula( "Ruoki", 20, 20, 100, 100 ) Then
2. Funktio osaa piirtää annettujen arvojen perusteella ruudulle laatikon, joka muuttaa väriä riippuen hiiren sijainnista.
3. Jos hiiri on laatikon sisällä ja hiiren 1-nappula päästetään, funktio osaa palauttaa arvon 1. Itse ohjelma taas vähentää muuttujasta 'nälkä' 10 aina kun funktio palauttaa arvon 1.

Edit. Ainiin se funkkari :)

Code: Select all

nälkä = 100
Repeat
    
    //Lisätään nälkää 500 millisekunnin välein.
    If nälkä_time + 500 < Timer() Then
        nälkä_time = Timer()
        nälkä = nälkä + Rand( 2, 4 )
    EndIf
    
    //Kutsutaan nappula-funktiota. Annetaan arvot: Ruoki, 20 ja 20, joissa 20, 20 on koordinaatit mihin funktio piirretään.
    If Nappula( "Ruoki", 20, 20 ) Then
        nälkä = nälkä - 10
    EndIf
    
    Color cbWhite
    Text 200, 20, "Nälkä: " + nälkä
    
    DrawScreen
Forever

//NAPPULA-FUNKTIO. Funktio tekee seuraavat asiat: Piirtää laatikon ja kirjoittaa annetun sanan keskelle laatikkoa.
//Laatikko muuttaa väriä sen mukaan onko hiiri laatikon päällä ja onko hiiren 1-nappula pohjassa.
//Funktio myös tarkastaa päästetäänkö hiiren nappula pohjasta. Jos päästetään, funktio PALAUTTAA PÄÄOHJELMAAN arvon 1.
Function Nappula( _txt$, _x, _y, _width = 0, _height = 0 )
    _tWidth = TextWidth( _txt$ )
    _tHeight = TextHeight( _txt$ )

    If _width < _tWidth Then _width = _tWidth + 20
    If _height < _tHeight Then _height = _tHeight + 10

    If MouseX() > _x And MouseX() < _x + _width Then
        If MouseY() > _y And MouseY() < _y + _height Then
            bMouseOn = True
        EndIf
    EndIf

    If bMouseOn = True Then
        If MouseDown( 1 ) Then
            Color 100, 100, 100   
        Else
            Color 220, 220, 220
        EndIf
    Else
        Color 180, 180, 180
    EndIf
    Box _x, _y, _width, _height

    Color 100, 100, 100

    Box _x, _y, _width, _height, 0

    Color cbBlack

    Text _x + _width / 2 - _tWidth / 2, _y + _height / 2 - _tHeight / 2, _txt$

    //Tässä funtkio palauttaa arvon True, eli yksi, JOS hiiren 1-nappula päästetään pohjasta.
    //JOS funktio palauttaa arvon 1, niin rivillä 11 oleva ehtolauseke toteutuu ja nälkä = nälkä - 10.
    If MouseUp( 1 ) Then Return True
End Function
Edit. Ja täytyy lisätä tähän vielä täyttä offtopikkia. Mua suoraan sanottuna ärsyttää kun nykyään näkee niin paljon vastauksia ongelmiin tyyliin: "Katso SDK". Aloittelijoiden kuuluu oppia asiat kantapään kautta. Sitten kun osaa niin voi hyvin ruveta käyttämään SDK:ta. Muistatte varmaan sen jutun pyörästä?
-Vuoden 2008 aloittelijan ystävä -palkinnon voittaja-
Image <- protestipelikilpailun voittaja.
Space War

User avatar
Turtle Productions
Member
Posts: 91
Joined: Thu Dec 20, 2007 12:11 pm
Location: Espoo

Re: Tyhmät kysymykset

Post by Turtle Productions » Sat Feb 23, 2008 2:06 pm

Miten saisin tehtyä sellaisen tilekartan goto(tai jtn muuta) että kun tässä kartassani menee alas josta pääsisi ulos, kun on ovella, menee kaupunkiin.
En osaa tätä, oon noobi :P

Code: Select all

labra:

FrameLimit 40 'rajoita nopeutta

kartta = LoadMap("Media\firetownlab.til","Media\tileset.bmp")

ukko = LoadObject ("Media\guy.bmp",72)


Repeat
SetupCollision ukko, kartta, 1,4,2
    'Ukon ohjaus
    If LeftKey() Then TurnObject ukko,5
    If RightKey() Then TurnObject ukko,-5
    If UpKey() Then MoveObject ukko,7
    If DownKey() Then MoveObject ukko,-7

DrawGame

    CloneCameraPosition ukko

    DrawScreen

Forever
kaupunki:


FrameLimit 40 'rajoita nopeutta

kartta = LoadMap("Media\firetown.til","Media\tileset.bmp")

ukko = LoadObject ("Media\guy.bmp",72)

Repeat
SetupCollision ukko, kartta, 1,4,2
    'Ukon ohjaus
    If LeftKey() Then TurnObject ukko,5
    If RightKey() Then TurnObject ukko,-5
    If UpKey() Then MoveObject ukko,7
    If DownKey() Then MoveObject ukko,-7

DrawGame

    CloneCameraPosition ukko

    DrawScreen

Forever
+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+
|T|u|r|t|l|e| |P|r|o|d|u|c|t|i|o|n|s|
+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+

User avatar
Eräs cb koodaaja
Active Member
Posts: 126
Joined: Wed Aug 29, 2007 3:55 pm

Re: Tyhmät kysymykset

Post by Eräs cb koodaaja » Sat Feb 23, 2008 2:29 pm

Vaihtoehto 1: Laita karttaan oven kohdalle dataa ja luet sitä ohjelmassa GetMapilla. Jos ukon kohdalla on dataa siirrytään vaikka gotolla toiseen koohtaan koodissa.

Vaihtoehto 2: Laita oven kohdalle ovi-objekti ja tarkasta koodissa Objectsoverlapilla onko ukko oven kohdalla.
Tiimit ja tuotokset:
RE:Ydintuho
Drahtlose:Infernalisch, Pienet pelit

User avatar
Turtle Productions
Member
Posts: 91
Joined: Thu Dec 20, 2007 12:11 pm
Location: Espoo

Re: Tyhmät kysymykset

Post by Turtle Productions » Sat Feb 23, 2008 2:42 pm

Ok kiitos :)
+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+
|T|u|r|t|l|e| |P|r|o|d|u|c|t|i|o|n|s|
+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+

Locked