撲克游戲林林總總,同一種游戲各地玩法亦不盡相同。編程愛(ài)好者多喜歡編寫(xiě)一些本地玩法的撲克游戲。那么,編寫(xiě)自己的撲克游戲該從何處入手呢?
撲克游戲編程關(guān)鍵有兩點(diǎn):一是撲克牌面的繪制;二是撲克游戲規(guī)則的算法實(shí)現(xiàn)。
初學(xué)撲克游戲編程的愛(ài)好者可從一些簡(jiǎn)單的游戲、借用一些現(xiàn)有資源開(kāi)始。本文擬借用Windows自帶的Cards.dll和簡(jiǎn)單的21點(diǎn)游戲?yàn)槔?,介紹撲克游戲編程的初步方法。
一、 撲克牌面繪制
Cards.dll支持Windows自帶的游戲,如Solitaire(紙牌游戲)。如果我們知道如何使用Cards.dll中的API函數(shù),那么,我們就能像Windows自帶的游戲一樣繪制撲克牌面。我們需要使用其中三個(gè)基本函數(shù):cdtInit, cdtDrawExt,和 cdtTerm。并且需要兩個(gè)變量:width和height用于初始化函數(shù)cdtInit進(jìn)行初始化。下面給出這些接口函數(shù)的聲明及參數(shù)說(shuō)明。
Private width As Integer = 0
Private height As Integer = 0
Declare Function cdtInit Lib "cards.dll" (ByRef width As Integer, _
ByRef height As Integer) As Boolean
參數(shù)說(shuō)明:width,height返回牌默認(rèn)寬和高,單位為pixels。
Declare Function cdtDrawExt Lib "cards.dll" (ByVal hdc As IntPtr, _
ByVal x As Integer, ByVal y As Integer, ByVal dx As Integer, _
ByVal dy As Integer, ByVal card As Integer, _
ByVal mode As Integer, ByVal color As Long) As Boolean
參數(shù)說(shuō)明:hdc(handle to a device context)句柄;
x,y指定牌左上角坐標(biāo)位;
dx,dy指定牌寬和高;
card需要繪制的牌,0-51[A(草花、方塊、紅桃、黑桃),2,…,K];53-65牌背面;
mode 指定繪制方式,牌面向上為0,牌面向下為1;
color 指定背景色。
Declare Sub cdtTerm Lib "cards.dll" ()
無(wú)參數(shù)。
我們需要在游戲開(kāi)始時(shí)調(diào)用cdtInit對(duì)cards.dll進(jìn)行初始化,這樣我們才能使用cards.dll中的cdtDrawEx等函數(shù);每繪制一張牌,我們都要調(diào)一次cdtDrawExt函數(shù);當(dāng)我們結(jié)束游戲時(shí),調(diào)用一次cdtTerm以結(jié)束cards.dll的使用。
撲克游戲編程關(guān)鍵有兩點(diǎn):一是撲克牌面的繪制;二是撲克游戲規(guī)則的算法實(shí)現(xiàn)。
初學(xué)撲克游戲編程的愛(ài)好者可從一些簡(jiǎn)單的游戲、借用一些現(xiàn)有資源開(kāi)始。本文擬借用Windows自帶的Cards.dll和簡(jiǎn)單的21點(diǎn)游戲?yàn)槔?,介紹撲克游戲編程的初步方法。
一、 撲克牌面繪制
Cards.dll支持Windows自帶的游戲,如Solitaire(紙牌游戲)。如果我們知道如何使用Cards.dll中的API函數(shù),那么,我們就能像Windows自帶的游戲一樣繪制撲克牌面。我們需要使用其中三個(gè)基本函數(shù):cdtInit, cdtDrawExt,和 cdtTerm。并且需要兩個(gè)變量:width和height用于初始化函數(shù)cdtInit進(jìn)行初始化。下面給出這些接口函數(shù)的聲明及參數(shù)說(shuō)明。
Private width As Integer = 0
Private height As Integer = 0
Declare Function cdtInit Lib "cards.dll" (ByRef width As Integer, _
ByRef height As Integer) As Boolean
參數(shù)說(shuō)明:width,height返回牌默認(rèn)寬和高,單位為pixels。
Declare Function cdtDrawExt Lib "cards.dll" (ByVal hdc As IntPtr, _
ByVal x As Integer, ByVal y As Integer, ByVal dx As Integer, _
ByVal dy As Integer, ByVal card As Integer, _
ByVal mode As Integer, ByVal color As Long) As Boolean
參數(shù)說(shuō)明:hdc(handle to a device context)句柄;
x,y指定牌左上角坐標(biāo)位;
dx,dy指定牌寬和高;
card需要繪制的牌,0-51[A(草花、方塊、紅桃、黑桃),2,…,K];53-65牌背面;
mode 指定繪制方式,牌面向上為0,牌面向下為1;
color 指定背景色。
Declare Sub cdtTerm Lib "cards.dll" ()
無(wú)參數(shù)。
我們需要在游戲開(kāi)始時(shí)調(diào)用cdtInit對(duì)cards.dll進(jìn)行初始化,這樣我們才能使用cards.dll中的cdtDrawEx等函數(shù);每繪制一張牌,我們都要調(diào)一次cdtDrawExt函數(shù);當(dāng)我們結(jié)束游戲時(shí),調(diào)用一次cdtTerm以結(jié)束cards.dll的使用。