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öä.
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ää.
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.
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.
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.
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).
Ei toimi mulla... :( Se sanoo: "Cannot find "cards.dll""
Mulla taas löytää mutta korttien kääntöpuolet on menny sekasin win XP Omat kuvatiedostot default kuvista on tullut korttien kääntöpuolet :/
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
Kun kokeilen tuota aukeaa vain pelkkää tyhjää. onko se ihan normaalia?
runtime error 48 kans
valmiis exes nimittäin - mikä bugaa? missä cards.dll? Miksei sitä löydy?
Mulla tuli vaan jotain valituksia ettei voi avata sitä frm tiedostoo, mul on VB4.0, voi vaikuttaa asiaan :D :D
Toimii oikein muuten, mutta ku painaa animaatio, niin pitäisi aueta toi robotin kuva mutta aukeaa Fisu pakka jo ei edes liiku!
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?
Tää ei toimi :( Koska se ei löydä "cards.dll" vaikka mulla on visualbasicin uusin versio.
kokeilkaas cards32.dll nimellä.
Kiitos tästä Antti, oli paljon apua.
Minun XP:ssä ei ole robottikorttia vaan kultakala, ja animaatio ei toimi.
Sami M: pistäpä declare hommelien alkuun Private-sana (ja suoraan formin alkuun)
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.
Minullakin näkyy robotin tilalla kultakala. Johtuisikohan se XP Professional- versiosta?
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.