Kirjautuminen

Haku

Tehtävät

Opasarkisto: Visual Basic: Korttipeliohjelmointi

Kirjoittaja: Antti Laaksonen

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


Windowsin mukana tulevan cards.dll-kirjaston avulla voi helposti tehdä näyttäviä korttipelejä. Tässä oppaassa kerrotaan, kuinka kirjastoa voi käyttää Visual Basicista käsin. Teemme myös esimerkkiprojektin, joka esittelee kyseisen kirjaston käyttöä.

Johdanto

Windowsin pasianssi kuuluu todennäköisesti maailman pelatuimpiin tietokonepeleihin. Alunperin pasianssi ei erillistä DLL-kirjastoa tarvinnut, vaan kortit olivat pelissä itsessään. Sittemmin sellaiset pelit kuin vapaakenttä ja hertta alkoivat käyttää cards.dll:ta ja nykypäivänä monet Windowsille tehdyt korttipelit käyttävät tätä kirjastoa.

Kirjaston käyttämiseen on useita syitä. Ensinnäkin kortit löytyvät valmiiksi Windowsista, jolloin peliohjelman koko pienenee. Kortit ovat myös selkeät ja melko tyylikkäät. Tämän lisäksi kirjaston funktioita on helppo käyttää.

Kirjaston funktiot

Kirjasto sisältää viisi funktiota: cdtInit, cdtDraw, cdtDrawExt, cdtAnimate ja cdtTerm. Funktiot määritellään käyttöön esimerkiksi moduulitiedostossa seuraavaan tapaan.

'Pelikortit sisältävän kirjasto nimi voi olla myös cards32.dll - vaihda tarvittaessa.

Declare Function cdtInit Lib "cards.dll" (dx As Long, dy As Long) As Long

Declare Function cdtDrawExt Lib "cards.dll" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long, ByVal dx As Long, ByVal dy As Long, ByVal iCard As Long, ByVal iDraw As Long, ByVal clr As Long) As Long

Declare Function cdtDraw Lib "cards.dll" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long, ByVal iCard As Long, ByVal iDraw As Long, ByVal clr As Long) As Long

Declare Function cdtAnimate Lib "cards.dll" (ByVal hdc As Long, ByVal cd As Long, ByVal X As Long, ByVal Y As Long, ByVal ispr As Long) As Long

Declare Function cdtTerm Lib "cards.dll" () As Long

Aina ensimmäiseksi on kutsuttava cdtInit-funktiota, joka alustaa pakan ja palauttaa kortin leveyden ja korkeuden. Tärkein funktioista on cdtDraw, joka piirtää halutun kortin ruudulle. cdtDrawExt on muuten sama kuin cdtDraw, paitsi että se osaa venyttää korttia. cdtAnimate laittaa korttien kääntöpuolet elämään. Esimerkiksi kädestä nousee ässä ja robotin valot liikkuvat. Viimeinen funktio on cdtTerm, joka lopettaa kirjaston käyttämisen.

Funktioiden käyttö tarkemmin

Tässä listassa on selostettuna kaikki parametrit, joita edellä mainituille funktioille voi antaa. Pituuksissa on huomattava, että cards.dll käyttää pikseleitä, kun taas Visual Basicin yksikkö on oletuksena twip.

Animaation tekeminen

Eräissä pakkavaihtoehdoissa on animaatio. Näitä ovat robotti (56), yölinna (63), palmuranta (64) ja ässäkäsi (65). Robotissa mittarit liikkuvat ja valot vilkkuvat, yölinnassa lepakot "lentävät" taivaalla, palmurannassa aurinko saa aurinkolasit ja näyttää kieltä, ja ässäkädessä hihasta nousee silloin tällöin neljäs ässä. Animaation kuvat vaihtuvat 250 millisekunnin välein. Palmurannassa ja ässäkädessä animaatio näytetään noin minuutin välein, muissa jatkuvasti.

Esimerkkiohjelma

Tähän oppaaseen liittyy esimerkkiohjelma, joka sisältää yksinkertaisen esimerkin jokaisen yllämainitun funktion käytöstä. Voit kopioida paketin tästä (6,4 kt).

Kommentit

Bill Keltanen [24.09.2003 17:09:36]

#

Ei toimi mulla... :( Se sanoo: "Cannot find "cards.dll""

ZcMander [31.12.2003 17:33:29]

#

Mulla taas löytää mutta korttien kääntöpuolet on menny sekasin win XP Omat kuvatiedostot default kuvista on tullut korttien kääntöpuolet :/

miiro [11.01.2004 18:14:16]

#

Ei mulkaan löydä cards.dllää vaikka laitan filun samaan kansioon ohjelman kanssa ja normaalisti se kai on windows/systeemissä ja vaikka on siellä niin ei toimi...eli se sanoo: "Cannot find "cards.dll"" elikä runtime errori 38

VB6.0 - Win98

Sami M [24.02.2004 18:46:33]

#

Kun kokeilen tuota aukeaa vain pelkkää tyhjää. onko se ihan normaalia?

miiro [05.03.2004 18:39:01]

#

runtime error 48 kans
valmiis exes nimittäin - mikä bugaa? missä cards.dll? Miksei sitä löydy?

CMouse [15.06.2004 20:51:25]

#

Mulla tuli vaan jotain valituksia ettei voi avata sitä frm tiedostoo, mul on VB4.0, voi vaikuttaa asiaan :D :D

NixDu [28.12.2004 11:30:18]

#

Toimii oikein muuten, mutta ku painaa animaatio, niin pitäisi aueta toi robotin kuva mutta aukeaa Fisu pakka jo ei edes liiku!

Sami M [09.03.2005 23:59:44]

#

Nyt kun kokeilin tuota Visual Basic 5.0:ssa, niin tuli tälläinen error:

"Compile error:

Constants, fixed-lenght strings, arrays, and Declate statements not allowed as Public members of object modules"

Voisiko joku kertoa, että mikä on vikana?

Gary534 [27.05.2005 19:20:16]

#

Tää ei toimi :( Koska se ei löydä "cards.dll" vaikka mulla on visualbasicin uusin versio.

tuomas [12.06.2005 11:50:18]

#

kokeilkaas cards32.dll nimellä.

aloitteleva [22.12.2005 21:12:49]

#

Kiitos tästä Antti, oli paljon apua.

moptim [02.09.2006 09:57:48]

#

Minun XP:ssä ei ole robottikorttia vaan kultakala, ja animaatio ei toimi.

moptim [25.11.2006 18:06:40]

#

Sami M: pistäpä declare hommelien alkuun Private-sana (ja suoraan formin alkuun)

karlez [25.01.2007 22:56:33]

#

kyllä täällä päin toimii ilman mitään ihmeitä :o ja sama täällä kultakala näkyy, ei robotti ja animaatio ei näy.

gamehouse [04.05.2008 21:39:22]

#

Minullakin näkyy robotin tilalla kultakala. Johtuisikohan se XP Professional- versiosta?

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