Kirjautuminen

Haku

Tehtävät

Opasarkisto: Peliohjelmointi Visual Basicilla: Osa 1 - Suunnittelu

  1. Osa 1 - Suunnittelu
  2. Osa 2 - Grafiikka ja pelitasot
  3. Osa 3 - Kokonaisuus ja viimeistely

Kirjoittaja: Antti Laaksonen. Vuosi: 2003.

Huomio! Tämä opas on vanhentunut. Oppaan sisältöön ei voi enää luottaa. Opas on säilytetty vain sen historiallisen arvon vuoksi.

Keskustelualueelle tulevien viestien perusteella pelien tekeminen Visual Basicilla on monia Ohjelmointiputkan kävijöitä kiinnostava aihe. Tämän opassarjan tarkoituksena on esittää alusta loppuun kokonaisen pelin ohjelmoiminen. Oppaan lukijan on hallittava Visual Basic -ohjelmoinnin perusteet. Esimerkkipeli on toteutettu VB:n kuutosversiolla, mutta se toiminee vähäisin muutoksin myös aiemmilla versiolla. VB.NETin kanssa koodi ei kuitenkaan ole yhteensopivaa.

Peli-idea

Ennen kuin peliä voi alkaa ohjelmoida, täytyy tietenkin keksiä hyvä idea. Hyvän peli-idean tunnistaa siitä, että peliä saattaisi itsekin pelata mielellään. Jos peli on omasta mielestä tylsä, niin ei kannata luottaa siihen, että kukaan muukaan pitäisi siitä. Toisaalta täytyy myös arvioida, onko pelin toteuttaminen mahdollista omilla taidoilla.

Kun idea sitten tulee, sitä kannattaa punnita jonkin aikaa mielessä ennen toimeen ryhtymistä. Usein nimittäin käy niin, että alkuinnostuksen jälkeen kiinnostus pelin tekemiseen hiipuu. Laajojen ja seikkaperäisten suunnitelmien kirjoittaminen pienistä peleistä on kuitenkin minusta ajanhukkaa. Sitä paitsi vasta pelin toteuttamisen aikana saattaa tulla vaikka mitä uusia ideoita.

Tämän opassarjan pelin nimi on Jalokivijahti. Pelin päähenkilö on keltainen, veikeä pallo, joka on joutunut sokkeloon. Sokkelosta ei olekaan ulospääsyä ennen kuin kaikki jalokivet on löydetty. Tehtävään tuovat haastetta lukitut ovet, joiden avaimet täytyy löytää sokkelon syövereistä. Peli-idea ei ole kovinkaan omaperäinen, ja sokkeloiden selvittäminen käy hyvin helposti. Mutta tämähän onkin vain esimerkki!

Voit kopioida valmiin pelin tästä (63 kt). Paketissa on mukana lähdekoodi, käännetty ohjelma sekä kaikki muut pelin tarvitsemat tiedostot.

Kuvat

Jalokivijahdissa pelitasot koostuvat palikoista, joiden koko on 32 x 32 pikseliä. Pallo liikkuu palikoiden kokoisin askelin neljään suuntaan ja ottaa mukaansa mahdollisesti käytävillä olevat jalokivet ja avaimet. Kuvien piirtäminen onkin helppoa, koska pallon tausta on aina sama. Seuraavassa kuvassa ovat kaikki pelin palikat. Kuva on tallennettu pelin hakemistoon nimellä kuvat.bmp.

Käyttöliittymä

Nyt on aika avata Visual Basic ja suunnitella pelin käyttöliittymä. Aivan ensimmäiseksi kannattaa vaihtaa formin ScaleMode-ominaisuuden arvoksi 3 eli Pixel. Jostain syystä oletusmittayksikkönä on hankala twip, joka vastaa 1/567 senttimetriä. Pikseli on kuitenkin kaikin puolin järkevämpi yksikkö, sillä yksi pikseli on yksi kuvapiste näytöllä. Sitä paitsi Windowsin grafiikkafunktioiden parametrit täytyy antaa pikseleinä. Jos joskus on tarvetta tehdä muunnoksia pikselin ja twipin välillä, muuntokertoimet saadaan muuttujista Screen.TwipsPerPixelX ja Screen.TwipsPerPixelY.

Palikoiden leveys on 32 pikseliä ja niitä on ikkunassa vierekkäin 12 kappaletta (pelitason koko on 10 x 10 palikkaa, minkä lisäksi jokaisessa reunassa on yksi palikkarivistö). Sen vuoksi pelitason muodostavan kuvakehyksen (PictureBox) leveys (Width) on 384 pikseliä. Korkeus (Height) on myöskin 384 pikseliä, koska palikat ovat neliön muotoisia. Toiseen kuvakehykseen ladataan kaikkien palikoiden kuvat. Tämän kuvakehyksen korkeus on 32 pikseliä ja leveys 428 pikseliä (kuvia on 13, minkä lisäksi niiden välillä on 12 pikselin levyistä valkoista viivaa). Pelaaja ei saa tietenkään nähdä tätä kuvakehystä, minkä vuoksi se sijoitetaan ikkunan "ulkopuolelle" muuttamalla formin kokoa väliaikaisesti.

On huomattava, että kuvakehysten reunukset (BorderStyle) sekä kolmiulotteinen varjostus (Appearance) pienentävät todellista kuva-alaa. Tämän takia näiden ominaisuuksien arvoksi täytyy asettaa 0, jotta kuvat mahtuisivat tarkalleen niille varattuihin tiloihin.

Lisäksi peli-ikkunan ylälaidassa näkyvät pelitason numero, kerättävien jalokivien määrä sekä jäljellä oleva aika. Nämä tiedot näkyvät tavallisessa otsikossa (LabelBox), jonka taustaväri (BackColor) on valkoinen ja reunustus (BorderStyle) on 1 eli Fixed Single. Formilla täytyy olla myös yksi ajastin (Timer).

Peli-ikkuna

Ikkunan koon on tarkoitus olla muuttumaton, minkä vuoksi on hyvä vaihtaa formin BorderStyle-ominaisuuden arvoksi 1 eli Fixed Single sekä asettaa MaxButton-ominaisuuden arvoksi False. Nyt pelaaja pystyy ainoastaan pienentämään ikkunan; venyttäminen tai koko näytölle suurentaminen ei ole mahdollista. Tämän lisäksi kannattaa tietenkin kirjoittaa sopiva teksti ikkunan otsikkoriville (formin Caption-ominaisuus) sekä piirtää pelille kunnollinen kuvake (Icon-ominaisuus).

Jalokivijahdissa valikkoja on vain yksi. Valikoita tehdessä kannattaa muistaa määrittää jokaiselle valikkokohdalle pikavalinta (&-merkki alleviivattavan kirjaimen eteen) sekä tärkeimmille valinnoille myös pikanäppäin. Esimerkiksi Jalokivijahdissa uuden pelin pikanäppäin on jonkinlaiseksi standardiksi muodostunut F2. Valikkokohtien väliin saa viivan laittamalla tekstiksi pelkästään "-". Kolmea pistettä taas kuuluu käyttää silloin, kun valinnasta avautuu uusi ikkuna.


Kommentit

The Ohjelmoija [24.12.2003 14:50:20]

Lainaa #

Jes! Tällaista olen odottanut.

*Hyvää Joulua!*

Hellami [24.12.2003 22:10:19]

Lainaa #

Heh... joko mun ehdotus meni läpi... tai sit jonkun muun??

Hellami [24.12.2003 22:12:46]

Lainaa #

Jaa... en lukenu etusivun tekstiä... mun moka
*Ja HYVÄÄ JOOULUA KAIKILLE*

Tp [28.12.2003 22:25:06]

Lainaa #

Toimiskohan tuo Visual Basicin 11 versiolla?

Tp [28.12.2003 22:26:09]

Lainaa #

Siis 1 versiolla. Meni hieman väärin.

Antti Laaksonen [29.12.2003 00:24:27]

Lainaa #

Suoraan ei toimi, mutta pienin muutoksin pitäisi toimia. Ainakin API-funktioiden määrittelyt täytynee muuttaa 16-bittisiksi ja Public-sanat pitää korvata Global-sanoilla.

Graphic [01.01.2004 18:13:36]

Lainaa #

Minulla on tuo MaxButton ja MinButton kummatkin False alunperin. Tuossahan ei kerrota asiasta mitään, että MinButton täytyy laitttaa True-arvoon?

Graphic [01.01.2004 18:33:11]

Lainaa #

Ja versio on Visual studia 6.0 Enterprise edit

Graphic [01.01.2004 18:56:17]

Lainaa #

en saa viivaa laittamalla pelkästään viivaa (-) mikäköhän on vikana?

Antti Laaksonen [03.01.2004 11:27:14]

Lainaa #

Oletin, että MaxButton ja MinButton olisivat oletuksena aina True, mutta ilmeisesti näin ei sitten ole. Viivan toimimattomuudesta en osaa sanoa.

Graphic [08.01.2004 10:04:46]

Lainaa #

testi

Graphic [08.01.2004 10:05:27]

Lainaa #

kiitoksia.

Zapi [07.06.2004 18:14:39]

Lainaa #

Siisti peli

Gwaur [07.06.2004 22:45:53]

Lainaa #

Liian helppo peli ;<

SirDayBat [09.06.2004 18:05:01]

Lainaa #

se on kuule esimerkkipeli! jos tahot vaikeampia tjsp tee itse ;D

Meitsi [21.10.2004 23:52:54]

Lainaa #

Toi peli on just helmi! Laaksonen, millä teit nuo ääniefektit?

nikkenakkerton [14.02.2005 21:43:02]

Lainaa #

näyttää aika yksinkertailesta, mutta varmasti toimivalta ;)

nikkenakkerton [14.02.2005 21:43:18]

Lainaa #

näyttää aika yksinkertailesta, mutta varmasti toimivalta ;)

nikkenakkerton [14.02.2005 21:43:19]

Lainaa #

näyttää aika yksinkertailesta, mutta varmasti toimivalta ;)

nikkenakkerton [14.02.2005 21:44:01]

Lainaa #

näyttää aika yksinkertailesta, mutta varmasti toimivalta ;)

nikkenakkerton [14.02.2005 21:44:02]

Lainaa #

näyttää aika yksinkertailesta, mutta varmasti toimivalta ;)

Dareon [28.03.2005 17:59:42]

Lainaa #

^ Älykästä, hieno opas todellakin.

Kingi [02.04.2005 22:33:35]

Lainaa #

Jos haluaa läpäistä tuon pelin nopeasti niin poistaa tiedostot 2.tas - 5.tas ja korvaa ne 1.tas:in kopiolla, jotka on nimetty 2.tas 3.tas jne.
Tuossa vain tuommoinen vinkki...

Kingi [02.04.2005 22:40:53]

Lainaa #

oikeastaan vielä helpompaa on kun laittaa enne 1.tas tiedoston kopiontia sen sisällöksi:
al########
##########
##########
##########
##########
##########
##########
##########
##########
##########

Gary534 [11.05.2005 17:52:19]

Lainaa #

Näyttää hyvälle niin kuin se onkin koska olen muunnellut pikkasen tuota ohjelmaa sillä tavalla että tyyppi liikuu pienemmän askeleen kerralla ja tietysti olen tehnyt paremmat kuvat kuin nyt tuossa ladattavassa zipissä siinä on ihan erilainen ajastin myös ja siinä on hakku, Jos hakun ottaa niin tyypillä näyttää myös olevan hakku ja siinä on myös viholliset jotka osaa ampua ja liikkua.

Gary534 [11.05.2005 17:53:41]

Lainaa #

ja voisiko nikkenakkero lopettaa ton lauseen kopioimisen kiitos.

Computer [31.01.2006 19:18:12]

Lainaa #

Tästä se alkaa

Tekoäly [18.02.2006 10:07:20]

Lainaa #

Todella mielenkiintoista ;)

SuperNörtti [02.03.2006 20:29:41]

Lainaa #

Muokkasin kivat äänet ja kuvat... Oisin sählänny muiden juttujen kanssa jos ois Visual Basic. Toisessa versiossa on tupakkaa polttava verinen jätkä, mutta tavalliset äänet. Toinen on mulle ittelleni vaan omilla äänillä. Täältä löytyy bittikartta: http://www.freewebs.com/ladattavat/Ladattavat/kuvat2.bmp

edit: Pistän varmaan mun kentätkin.

edit2: Tässä ne nyt olis: http://www.freewebs.com/ladattavat/Ladattavat/jakijakentat2.zip

edit3: Huomasin, ettei tuo kenttälinkki toimi minun Firefoxillani. Kopioikaa se vaan osoitepalkkiin.

SuperNörtti [19.04.2006 17:33:44]

Lainaa #

Voisikos gary jaella muille tuota sen versiota?

Hacker [31.03.2008 21:39:02]

Lainaa #

Olis kiva tuollaisia jotain rakentaa, mutta voisi ensin perusteet ohjelmoinnista opetella. :)

Tomppa32 [17.01.2010 12:44:57]

Lainaa #

Tein Jakijaan tasoeditorin sekä muokkasin kuvat kivemman näköisiksi, tasoeditori ja kuvat löytyvät kotisivultani.
http://koti.mbnet.fi/tompz/index.php?l=ohjelmat/tasoeditori

Kirjoita kommentti

Huomio! Kommentoi tässä ainoastaan tämän oppaan hyviä ja huonoja puolia. Älä kirjoita muita kysymyksiä tähän. Jos koodisi ei toimi tai tarvitset muuten vain apua ohjelmoinnissa, lähetä viesti keskusteluun.

Muista lukea kirjoitusohjeet.
Tietoa sivustosta