Odottaa viisaampien apua!

Voit pyytää apua ohjelmointiongelmiin täältä.
Post Reply
A13
Newcomer
Posts: 4
Joined: Thu Jul 02, 2009 9:03 pm

Odottaa viisaampien apua!

Post by A13 »

Hey!

Muutama päivä sitten latasin cb:n ja tietysti ne oppitunnitkin hiihtelin läpi. Jotain jäi ymmärtämättä oppitunneista, mutta mielestäni myös erittäin olennainen jäi opettamatta: toki voin koodata ruudulle kaksi ukkelia, jotka ammuskelevat toisiaan, mutta miten saada erilaisten tekojen seuraukset toimimaan? Tarkoitan, että jos heppuun osuu kuti, niin kuinka saada heppu kuolemaan? Tai jos auto ylittää maalilinjan, niin kuinka saada peli päättymään? Sanon suoraan, että olen toistaiseksi aivan totaalinen käsi tämän koodauksen kanssa, mutta ihmiset täällä ovat vaikuttaneet rennoimmilta kuin muilla foorumeilla, mikä tuli minulle pienoisena yllätyksenä... Tulen varmasti kyselemään täällä lähes kaikkeen apua, ja olisikin mahtavaa jos joku vaivaantuisi auttamaan minua...
tässä avauspostauksessa nyt ei mitään varsinaista kysymystä ollut, mutta niitä kyllä riittää, jos jaksatte kuunnella!
User avatar
esa94
Guru
Posts: 1855
Joined: Tue Sep 04, 2007 5:35 pm

Re: Odottaa viisaampien apua!

Post by esa94 »

A13 wrote:Hey!

Muutama päivä sitten latasin cb:n ja tietysti ne oppitunnitkin hiihtelin läpi. Jotain jäi ymmärtämättä oppitunneista, mutta mielestäni myös erittäin olennainen jäi opettamatta: toki voin koodata ruudulle kaksi ukkelia, jotka ammuskelevat toisiaan, mutta miten saada erilaisten tekojen seuraukset toimimaan? Tarkoitan, että jos heppuun osuu kuti, niin kuinka saada heppu kuolemaan? Tai jos auto ylittää maalilinjan, niin kuinka saada peli päättymään? Sanon suoraan, että olen toistaiseksi aivan totaalinen käsi tämän koodauksen kanssa, mutta ihmiset täällä ovat vaikuttaneet rennoimmilta kuin muilla foorumeilla, mikä tuli minulle pienoisena yllätyksenä... Tulen varmasti kyselemään täällä lähes kaikkeen apua, ja olisikin mahtavaa jos joku vaivaantuisi auttamaan minua...
tässä avauspostauksessa nyt ei mitään varsinaista kysymystä ollut, mutta niitä kyllä riittää, jos jaksatte kuunnella!
Anna meidän vain auttaa itseäsi. :)
JATothrim
Tech Developer
Tech Developer
Posts: 606
Joined: Tue Aug 28, 2007 6:46 pm
Location: Kuopio

Re: Odottaa viisaampien apua!

Post by JATothrim »

A13 wrote:Hey!

Muutama päivä sitten latasin cb:n ja tietysti ne oppitunnitkin hiihtelin läpi. Jotain jäi ymmärtämättä oppitunneista, mutta mielestäni myös erittäin olennainen jäi opettamatta: toki voin koodata ruudulle kaksi ukkelia, jotka ammuskelevat toisiaan, mutta miten saada erilaisten tekojen seuraukset toimimaan? Tarkoitan, että jos heppuun osuu kuti, niin kuinka saada heppu kuolemaan? Tai jos auto ylittää maalilinjan, niin kuinka saada peli päättymään? Sanon suoraan, että olen toistaiseksi aivan totaalinen käsi tämän koodauksen kanssa, mutta ihmiset täällä ovat vaikuttaneet rennoimmilta kuin muilla foorumeilla, mikä tuli minulle pienoisena yllätyksenä... Tulen varmasti kyselemään täällä lähes kaikkeen apua, ja olisikin mahtavaa jos joku vaivaantuisi auttamaan minua...
tässä avauspostauksessa nyt ei mitään varsinaista kysymystä ollut, mutta niitä kyllä riittää, jos jaksatte kuunnella!
Giyäh! :D Terve tuloa tänne. Kuvaamasi tilanne muistuttaa omaani kun aloitin koodaamisen. Nyt minulla on (ahh) tuohon tyhjentävä vastaus: Ohjelmointi on juuri tuota; Ongelmien ratkaisemista!
Kokeneena osaan lepoisasti seuraavan tapahtuma sarjan: "Haluan saada pelihahmon hypäämään" -> "Mikä, millainen? Kuinka? Miten?" -> "Kirjoitan Randoom koodia" -> "Etsin tarvittavaa materiaalia, tietoa, mallia tapahtumalle" -> "Ensimmäinen kokeilu" -> "AHAAAAAAAAAAAA!!!!" -> "Ratkaisu, koodin kirjoittaminen paremmaksi" Tämä ketju ei siis ole lähellekkään fakta, vaan pätee enimmäkseen minuun. :)
Lyhyempänä: Yrityksen ja erehdyksen kautta, älä jää jahkailemaan vaan kokeile, _mutta_ kokemuksen kautta opit pois-sulkemaan täysin mahdottomat/huonot vaihtoehdot. :mrgreen:
-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'.
regalis
Advanced Member
Posts: 268
Joined: Mon Aug 27, 2007 9:44 pm

Re: Odottaa viisaampien apua!

Post by regalis »

A13 wrote:Jotain jäi ymmärtämättä oppitunneista, mutta mielestäni myös erittäin olennainen jäi opettamatta: toki voin koodata ruudulle kaksi ukkelia, jotka ammuskelevat toisiaan, mutta miten saada erilaisten tekojen seuraukset toimimaan? Tarkoitan, että jos heppuun osuu kuti, niin kuinka saada heppu kuolemaan? Tai jos auto ylittää maalilinjan, niin kuinka saada peli päättymään?
Kyllä niissä oppitunneissa on moniakin esimerkkejä jonkun teon seurauksista. Esimerkiksi oppitunnissa Ammukset 2 poistetaan luodit kun ne menevät rajan yli.

Luodinosumien tarkistukseen on todella monia eri tapoja, mutta perusperiaate on usein tämä:

Code: Select all

If LuotiOsuu Then
    PelaajanHP = PelaajanHP - 1
    DeleteObject luoti\obj
    Delete luoti
EndIf

If PelaajanHP =< 0 Then
    PelaajaKuolee()
EndIf
Tietenkään tuollaisenaan tämä koodinpätkä ei riitä: LuotiOsuu-muuttujan arvo ei muutu missään vaiheessa, eikä tuota PelaajaKuolee()-funktiota ole olemassa. Luodin osumisen voisi tarkistaa vaikka jollain näistä tavoista:

- tarkistetaan ovatko luoti ja pelaaja päällekkäin ObjectsOverLap-funktiolla
- katsotaan distance-funktiolla onko luoti tarpeeksi lähellä pelaajaa
- jos luoti ja pelaaja ovat kuvia (eivätkä objekteja), tarkistaan niiden päällekkäisyys ImagesCollide, tai ImagesOverlap -funktiolla.

PelaajaKuolee()-funktiossa taas voitaisiin vaikka tehdä popup "GAME OVER" tai jotain vastaavaa.
User avatar
-Z-
Devoted Member
Posts: 682
Joined: Tue Aug 28, 2007 3:33 pm
Location: In ur danmaku, grazin ur bullets

Re: Odottaa viisaampien apua!

Post by -Z- »

Funktiot on mielestäni vähän liian kehittyneitä aloittelijan opetella. Itse ainakin olin hyvän aikaa hukassa niiden kera. Aloittelijan kannattaa opetella ensin kaikki olennainen, sitten opetella ne vähän paremmin, ja siitä hioa ne täydellisyyteen opettelemalla peruskommennot ja niiden sovellukset ulkoa. Siis kaikki tyyppeihin asti. Sitten funktiot, muistipalat, ymsmyms. Tie ohjelmointiin on kivikkoinen ja sen varrella kuten päässäkin odottaa vain työtä ja turhautumista. Työkin on sellaista sorttia, että palkka on erittäin vaihtelevaa.

Mutta tervetuloa foorumeille. Porukka on täällä tosiaan keskiverto-nettiyhteisöä asiallisempaa ja avuliaampaa.

Ja älä lannistu mun puheista :D Neljä vuotta tätä tehty, eikä mitään valmista. Mutta olenkin poikkeustapaus.
"Fallout 3 (#10) marked a shift in the industry, a move that saw the western RPG begin to surpass its Japanese counterparts." -IGN top 100 RPGs of all time
Hene
Active Member
Posts: 122
Joined: Wed Apr 22, 2009 8:13 pm

Re: Odottaa viisaampien apua!

Post by Hene »

Ei koodauksen opettelemiseen kovin kauaa mene, kunhan muistaa pyytää apua. Itselläni reilut 3kk CoolBasicilla koodausta takana ja aika hyvin hommat hanskassa. Tietysti kokoajan tulee jotain mitä ei osaa, silloin kannattaa vaan kysyä suoraan : )

Itse suosittelen tuohon Mestari & Oppipoika (viewtopic.php?f=13&t=25) -kampanjaan liittymistä. Itselläni on tuo "mestari" auttanut erittäin paljon varsinkin sillon, kun koodissa useampi häikkä ja koko koodia ei kuitenkaan viitsisi vielä paljastaa kaikille yleisillä foorumeilla.

Mutta tervetuloa minunkin puolestani : )
"Baby," I said. "I'm a genius but nobody knows it but me."
A13
Newcomer
Posts: 4
Joined: Thu Jul 02, 2009 9:03 pm

Re: Odottaa viisaampien apua!

Post by A13 »

Vastauksista päätellen voinkin aloittaa pommitamisen heti ;)

Tänään säätäessäni jotain tylsähkön autopelin tapaista, tuli esille eräs kysymys: onko mahdollista yhdistää objectlife -koodiin muita koodeja, tässä tapauksessa makeerroria. Yritin epätoivoisesti näin:

objectlife kaara, 1000 then makeerror "Voitit pelin"

Kuten arvata saattaa, lopputulos oli kehnonlainen... Niinpä kysyisinkin (yllätys yllätys), että miten koodin saa toimimaan? Ajatuksena on, että objektin poistuessa kone ilmoittaisi voitosta...
User avatar
valscion
Moderator
Moderator
Posts: 1599
Joined: Thu Dec 06, 2007 7:46 pm
Location: Espoo
Contact:

Re: Odottaa viisaampien apua!

Post by valscion »

A13 wrote:Vastauksista päätellen voinkin aloittaa pommitamisen heti ;)

Tänään säätäessäni jotain tylsähkön autopelin tapaista, tuli esille eräs kysymys: onko mahdollista yhdistää objectlife -koodiin muita koodeja, tässä tapauksessa makeerroria. Yritin epätoivoisesti näin:

objectlife kaara, 1000 then makeerror "Voitit pelin"

Kuten arvata saattaa, lopputulos oli kehnonlainen... Niinpä kysyisinkin (yllätys yllätys), että miten koodin saa toimimaan? Ajatuksena on, että objektin poistuessa kone ilmoittaisi voitosta...
Lainaus ObjectLife komennon kohdasta cb-manuaalista: "Komentoa voi käyttää myös funktiona, jolloin se palauttaa objektin jäljellä olevan elinajan kokonaislukuna."

Komennon käyttäminen funktiona tarkoittaa sitä että siinä käytetään sulkeita ja annetaan funktiolle parametri, eli joku asia, tässä tapauksessa objektimuuttuja. Joten "ObjectLife(kaara)" palauttaa kaara-objektin elinajan ja voit tarkistaa, onko se 1000 ja tekemällä MakeErrorin tähän tapaan:

Code: Select all

If ObjectLife(kaara) = 1000 Then MakeError "Voitit pelin"
Muista siis myös tuo "If" sana sieltä, se aloittaa juuri sen ehtolauseen.

Tuossa koodinpätkässä siis tarkistetaan, onko ObjectLife(kaara) arvo _TASAN_ 1000. Joten jos sattumoisin kaara-objektin elinaika meneekin alle 1000 ennen kuin ehtolausetta suoritetaan, niin MakeErroria ei synny. Siis kannattaa käyttää alla olevaa koodia, joka tarkistaa, onko kaara-objektin elinaika _ALLE_ 1000.

Code: Select all

If ObjectLife(kaara) < 1000 Then MakeError "Voitit pelin"
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
A13
Newcomer
Posts: 4
Joined: Thu Jul 02, 2009 9:03 pm

Re: Odottaa viisaampien apua!

Post by A13 »

Kiitos paljon!

Ilmaisin itseni epäselvästi, ja viimeistään jäätävä koodiyritelmäni ratkaisi väärinkäsityksen muodostumisen. Tarkotukseni oli aiheuttaa error, jos kaaran elämä loppuu. Koitin tollasta, lopputuloksena MAV:

If ObjectLife(kaara) = 0 Then MakeError "Voitit pelin"
Koodiapina
Forum Veteran
Posts: 2396
Joined: Tue Aug 28, 2007 4:20 pm

Re: Odottaa viisaampien apua!

Post by Koodiapina »

Muuttuja "kaara" ei sisällä muistiosoitetta ladattuun objektiin kun kyseinen koodi suoritetaan.
User avatar
valscion
Moderator
Moderator
Posts: 1599
Joined: Thu Dec 06, 2007 7:46 pm
Location: Espoo
Contact:

Re: Odottaa viisaampien apua!

Post by valscion »

A13 wrote:Kiitos paljon!

Ilmaisin itseni epäselvästi, ja viimeistään jäätävä koodiyritelmäni ratkaisi väärinkäsityksen muodostumisen. Tarkotukseni oli aiheuttaa error, jos kaaran elämä loppuu. Koitin tollasta, lopputuloksena MAV:

If ObjectLife(kaara) = 0 Then MakeError "Voitit pelin"
Kun objektin elinaika loppuu, se tuhotaan automaattisesti. Kun yrität käyttää jo tuhottua objektia, tuottaa se MAVin.

Käytä mielummin jotain muuttujaa, jonka arvoa vähennät joka kierros loopissa. Kun muuttujan arvo on nolla (tai vähemmän) niin tehdään MakeError.
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
Jonez
Devoted Member
Posts: 575
Joined: Mon Aug 27, 2007 8:37 pm

Re: Odottaa viisaampien apua!

Post by Jonez »

Grandi, muista että kyseessä on aloittelija. Hienot ohjelmointiin liittyvät lauseet eivät välttämättä auta asiaa...

Grandi tarkoittaa siis, että et ole ladannut objektia nimeltä "kaara" (tai jos olet ladannut, olet jo ehtinyt poistaa sen). Objekti ladattaisiin siis näin: objekti = LoadObject( "polku\kaara.png", pyöritysarvo )

Eli joko et ole muistanut ladata kyseistä objektia, tai sitten olet vahingossa ladannut sen esim. kuvana (LoadImage).

Pieni esimerkki. miten asia tehdään:

Code: Select all

FrameLimit 40

cow = LoadObject( "Media\cow.bmp" ) 

ObjectInteger cow, 50
Repeat

    If KeyDown( CbKeySpace ) Then
        hp = ObjectInteger( cow )
        ObjectInteger cow, hp - 1
    EndIf
    
    If ObjectInteger( cow ) < 0 Then
        MakeError "Peli loppui!"
    EndIf       

    Text 20, 20, "Space poistaa hp:ta"
    Text 20, 40, "Health: " + ObjectInteger( cow )
    DrawScreen
Forever
Suosittelen tekemään kuten VesQ sanoi. Silloin laittaisit ObjectIntegerin sijalle esimerkiksi muuttujan hp tyyliin:
hp = 50
---
hp = hp - 1
---
If hp < 0 Then ...
-Vuoden 2008 aloittelijan ystävä -palkinnon voittaja-
Image <- protestipelikilpailun voittaja.
Space War
Post Reply