• <label id="pxtpz"><meter id="pxtpz"></meter></label>
      1. <span id="pxtpz"><optgroup id="pxtpz"></optgroup></span>

        當(dāng)前位置:雨林木風(fēng)下載站 > 技術(shù)開發(fā)教程 > 詳細(xì)頁面

        用Delphi再現(xiàn)Windows紙牌游戲

        用Delphi再現(xiàn)Windows紙牌游戲

        更新時間:2022-05-14 文章作者:未知 信息來源:網(wǎng)絡(luò) 閱讀次數(shù):

        使用過Windows 98的用戶對其自帶的紙牌游戲一定不會陌生,在您的鼠標(biāo)點(diǎn)擊、拖動等操作之下,撲克牌上下翻飛、騰挪組合;在您不經(jīng)意的操作中,其實(shí)您已經(jīng)觸發(fā)了一系列預(yù)設(shè)事件,這些事件過程的響應(yīng)最終讓您體會到成功的喜悅和失敗的痛苦。但您想不想體會一下借助于某種開發(fā)工具自己去編程實(shí)現(xiàn)的感覺呢,充分體會Delphi的事件驅(qū)動機(jī)制,這將是另外一番享受,并且理解了事件驅(qū)動機(jī)制后,再作其他更深層次的開發(fā),這樣您會變得更加得心應(yīng)手。

          一、單張牌的實(shí)現(xiàn)

          Delphi編程環(huán)境中提供了圖形按鈕控件,設(shè)計(jì)時采用了一個按鈕就是一張牌,我們可以將選定的圖形(如BMP圖形,大小合適)作為其背面和前面。在Delphi中,圖形的裝入顯示的方法為:

          圖形按鈕.glyph.loadfromfile('圖形文件路徑+文件名')

          在設(shè)計(jì)中可以事先準(zhǔn)備52張撲克正面圖形和幾張背景圖形,用控件(控件數(shù)組)動態(tài)生成的方法(Create(Self))逐一調(diào)用。

          二、關(guān)于圖形按鈕

          在游戲中要對撲克牌進(jìn)行正確的操作還要借助在其圖形按鈕上增加幾個屬性(如圖1)


        圖1

          HS:標(biāo)識一張牌的花色(方塊、黑桃、紅心或梅花)。

          DS:標(biāo)識一張牌的點(diǎn)數(shù)(1-13即A-K)。

          HB:標(biāo)識一張牌的黑色和紅色。

          Over:標(biāo)識本張牌上面是否有牌壓著。

          Look:標(biāo)識本張牌的正面或背面。

          Area:指定本張牌的操作區(qū)域,在設(shè)計(jì)中將各操作區(qū)定義為如圖2所示各操作區(qū)。

          發(fā)牌源區(qū)(Source):即左上角兩疊牌。

          回歸區(qū)(Home):即右上角四門回收處。

          操作拖放區(qū)(Operate):即下排(7疊)主要拖放區(qū)。

          PTR屬性:用于支持多張撲克牌的拖動操作,為一指針,指向單張牌。筆者用此屬性來實(shí)現(xiàn)一疊牌的拉單向鏈表。也可以再加一屬性拉雙向鏈表方便操作。

          三、撲克牌的操作

          撲克牌的操作多數(shù)是通過Delphi提供的事件驅(qū)動編程實(shí)現(xiàn)的,開始一個拖動牌操作:Delphi是從OnMouseDown事件開始。請參考OnMouseDown模塊。

          接受/拒絕被拖動的牌:這里由OnDragOver事件決定,要接受被拖動的牌,必須把圖形按鈕的Accept屬性設(shè)為TRUE。

          釋放處理被拖動的牌:這里由EndDrag和DragDrop事件被激發(fā)來處理,這里選用了DragDrop事件來處理,因?yàn)樵撌录挥挟?dāng)DragOver事件的Accept設(shè)為TRUE時,只有這個事件被激發(fā)。


        圖2

          另外,撲克牌的位置改動是通過Top和Left屬性實(shí)現(xiàn)的。

          這里在設(shè)計(jì)時,52個控件共享Click、OnMouseDown、OnDragOver、OnDragDrop事件。

          在運(yùn)行時是動態(tài)賦予的。程序中如下例賦予事件代碼:

          Mainpk[i].OnMouseDown:=pk1mousedown;

          Mainpk[i].OnDragOver:=pk1DragOver;

          Mainpk[i].OnDragDrop:=pk1Dragdrop;

          Mainpk[i].OnClick:=pk1Click;

          四、程序的實(shí)現(xiàn)

          程序開始時先動態(tài)生成52張牌(圖形按鈕),賦予花色、點(diǎn)數(shù)、正面圖形等,接著利用Delphi提供的隨機(jī)函數(shù)RANDOM(), 將52張牌次序打亂,完成洗牌。接著開始發(fā)牌,動態(tài)賦予事件代碼。之后由接受用戶選擇進(jìn)入游戲,游戲處理過程實(shí)際上就是相應(yīng)事件代碼在運(yùn)作。

          游戲調(diào)試通過后,筆者還查閱了其他相關(guān)資料,有的系統(tǒng)還提供了專門的關(guān)于撲克牌方面類庫或API函數(shù)供程序員直接調(diào)用,減少了程序員的設(shè)計(jì)復(fù)雜性,有興趣的讀者也可以不妨一試。

        溫馨提示:喜歡本站的話,請收藏一下本站!

        本類教程下載

        系統(tǒng)下載排行

        主站蜘蛛池模板: 久久水蜜桃亚洲AV无码精品 | 亚洲成a人片在线网站| 免费无码午夜福利片| 日韩特黄特色大片免费视频| 亚洲夂夂婷婷色拍WW47| 国产精品69白浆在线观看免费| 中文字幕亚洲综合精品一区| 亚洲高清免费在线观看| 精品亚洲AV无码一区二区三区| 无码人妻精品一二三区免费| 亚洲第一区二区快射影院| 永久免费看mv网站入口| 又硬又粗又长又爽免费看| 好看的亚洲黄色经典| 无码国产精品一区二区免费式芒果| 日木av无码专区亚洲av毛片| 亚欧在线精品免费观看一区 | 亚洲人成人无码.www石榴| 在线观看人成视频免费| 亚洲乱妇熟女爽到高潮的片 | 女人与禽交视频免费看| 精品成人一区二区三区免费视频 | 亚洲av无码乱码国产精品| 真实国产乱子伦精品免费| 亚洲综合激情视频| 免费看又爽又黄禁片视频1000| 国产成人亚洲综合a∨| 亚洲国产精品无码久久一区二区| 99国产精品视频免费观看| 久久亚洲国产成人影院| 国产a v无码专区亚洲av| 日本黄色动图免费在线观看| 亚洲中文字幕无码爆乳app| 亚洲国模精品一区| 香港a毛片免费观看| 天堂亚洲国产中文在线| 亚洲乱色熟女一区二区三区丝袜 | 无遮挡a级毛片免费看| 亚洲国产精品无码中文字| 在线观看免费a∨网站| 日本高清不卡aⅴ免费网站|