[VB.net] 再談使圖片捲動的「拉霸遊戲機」(六) - 實做一個水果盤遊戲機

水果盤的主要元件「圖片捲動控制項」及把它們做成九個一組的「拉霸控制項」都完成了,就可以繼續安排使用者介面的佈局和計算得分的邏輯,配上音效後基本上已經可以運作了。

先說一下計算獎分的條件:
1.因為允許了 User 自行選擇結果圖片的開出範圍,所以獎分的計算要有充分的靈活彈性。否則當 User 只選擇一種圖片時盤盤都是清一色莊家會輸光光。
2.使用圖片數越少則連成線的機率越大,所以有必要先建立一張機率表做為參考。

...繼續閱讀 »

[VB.net] 再談使圖片捲動的「拉霸遊戲機」(四) - 做成九格水果盤

直覺上做成九格的工程不大,可是實際上並不容易,因為一個實用的「水果盤」除了要能正常的呈現出所要的圖片外,還要能精確的控制轉出的結果,以及對隨機轉出的結果有自動判讀的能力。
例如「控制轉出的結果」:
1.我要轉出任意「一條連線」的結果,但不能每次都是連在同一個位置,也不能總是同一個號碼的三連線。
2.我要轉出任意「三條連線」的結果,但任意三條連線成立的同時,因為連線位置間的相互關係有可能讓結果多於三條連線,這要避免。
3.我要精準的控制把 「135792468」號的圖片分別出現在井字圖的第1到9的空格裡,要自然的「轉出來」而不是突然蹦出來。
4.其他…

...繼續閱讀 »

[VB.net] 再談使圖片捲動的「拉霸遊戲機」(三) - 做成獨立的控制項

要做成九個一組的水果盤控制項,首先要把捲動功能做成單一的控制項(Control),然後再用九個拼成新的控制項。
接下來就先把前文的「拉霸遊戲機2」發展成獨立的控制項:
先考量對外至少需要有哪些屬性、方法、事件:
屬性:
1.[停止]  唯寫屬性,設為 True 時可將停止轉動。
2.[忙碌中] 唯讀屬性,控制項轉動中為 True,停止時為 False。
3.[播放速度]讀寫屬性,提供可設定每二次畫格移動的間隔毫秒數。
4.[畫格總數]唯讀屬性,提共外部取得所有圖片的總高度。
5.[結果圖號]唯讀屬性,傳回轉動停止時所在的圖片編號。
6.[捲動方向]讀寫屬性,供讀取或設定轉動的方向。

方法:
1.[啟動]開起始一次畫好的轉動。
2.[停止]停止轉動。
3.[圖片變色]當圖片成為三連線之一時,或其他特定條件下(例如有設 luckey number)用來強化圖片呈現效果。

...繼續閱讀 »

[VB.net] 再談使圖片捲動的「拉霸遊戲機」(二) - 控制捲動結果和加上運動函數

經過初步測試圖片捲動看似可以了,但是要實際拿來用的話還要補上很多東西,先處理這些吧:
1.要能控制轉動的結果,也就是要讓它正確的轉出事先定義的結果圖片。
2.要能從前一次轉動最後停駐的那張圖片開始運轉,不能每回都從第一張開始。
3.每次的轉動時間長度要不同,這樣將來要做水果盤遊戲時才不會九格幾乎同時停止。
4.要加上運動函數讓轉動顯得自然(起動時由慢至快→然後維持在最高速→停止前由快漸慢到停止)。

...繼續閱讀 »

[VB.net] 再談圖片輪播「拉霸遊戲機」如何讓影像在圖片中捲動(一) - 先讓它會動

前面貼文談過的(圖片輪播器)是用整張圖片置換的方式,畫格安排的要點是要使最後一張畫格和第一張畫格的差異最小,如此週而復始可達到視覺上的流暢,進而有「無縫接合」的質感。
這回再來試做一個類似「拉霸遊戲機」那種讓多張圖片首尾銜接,在一個圖框裡循環轉動的控制項。

...繼續閱讀 »

[VB.net] 程式中使用外掛字形檔的方法(二)經由資源檔載入外掛的字形

前文實作了外掛自訂字形的基本方法,藉由編譯時把要加掛的字形檔屬性[複製到輸出目錄]設為 True,使在建立封裝包時把字形檔加入組建資料夾。之後 User 在安裝程式後字形檔就會帶進去供使用了。
但是有時我們不想字形檔直接外露在用戶的資料夾,或是一些小型的 demo 程式不需經過封裝的過程,只想建立一個單獨的 exe 執行檔的情況下就可以用 PrivateFontCollection 類別的 AddMemoryFont() 方法了。
接下來再實作一個直接從資源包帶入字形的 demo 程式:

...繼續閱讀 »

[VB.net] 程式中使用外掛字形檔的方法(一)經由實體字形檔載入

有些場合我們會用到一些特殊的字形到程式裡,像是條碼形的 39 碼或是在遊戲程式中放上「數位效果」的字形…
當然我們可以先安裝字形檔再從程式中引用它們,但要 User 先安裝字形才能執行程式不是理想的做法,而且 User 未必喜歡在它的系統上加裝一些其他的字形,所以我們經常會用暫時安裝的手法把字形檔帶過去,當程式執行中使用它,再於程式結束時移除它們。

...繼續閱讀 »

[Vb.net] 如何在表單顯示動態的圖示 Icon (三)製作圖片輪播控制項

雖然 VB.net 可以直接使用 GIF or SWF 呈現動畫效果,但為了顯示的流暢(同步)和能建立動態的表單圖示,和方便一些細節的控制,這裡還是自己做一個控制來用。
1.首先要建立一組或多組連續的影格來用。
2.為了應用上的方便我先把一系列的影格圖片合併成一張圖,要用時再根據圖寬除以圖高來得到共有多少個影格。
3.下面是幾個例子

...繼續閱讀 »

[Vb.net] 如何在表單顯示動態的圖示Icon(一)

有時我們會想用動態圖做為表單的 Icon,也可在表單最小化時動態呈現在最下方的工作列。
最初想法簡單的以為用一個 Gif 動態圖取代 Icon 的 image 就成了,可是在 icon 中找不到和 Image 或 bitmap 相關的直接屬性可以設定。
後來找到了(MSDN 的說明)後用以下方法達成了目的...

...繼續閱讀 »

[VB6][VB.net] 發送「魔術封包」執行「網路喚醒」的實作。

最近工作上要用到 WOL 功能,把過去用在 VB6 上面的方法改用 VB2010 重新整理了一下:
發送「魔術封包」對電腦執行「網路喚醒」(Wake On Lan)的作法。(各通訊 Port 用途參考)
附帶說明一下:
主機要能被喚醒,網卡需支援 WOL 且主機 BIOS 要開啟此功能,同時網卡進階設定要選接收魔法封包(Magic Packet)。

...繼續閱讀 »

[VB.net] 如何實現「非同步下載」檔案?(五)做成「使用者控制項」。

上篇貼文已經做到了利用多執行緒手法完成了 FTP 下載部分的非同步作業,並且解決了 WebClient 的 DownloadFileAsync() 中向 FTP 下載時的幾個問題:
1.FTP 下載前先行取回檔案長度的問題(使用 Socket 直接向 Server 查詢來解決)。
2.FTP 下載時 ProgressBar 顯示的問題。(經由取得檔案長度得到解決)。
3.第一次下載初始等待時間較長的問題。(使用 Socket 做為主要元件得到解決)。
4.等待間 UI 被鎖住,開始下載後才進入非同步作業。(使用多執行緒解決)。

...繼續閱讀 »

[VB.net] 如何實現「非同步下載」檔案?(四)讓自製的下載方法也能做到非同步(ASYNC)。

1.若只要防止介面被鎖住,Application.DoEvents() 方法可以動態調整各工作的先後順序。
2.所以若要下載中能顯示 ProgressBar、UI 不會被鎖住、下載也不會停滯的話,就要使用以下「非同步(ASYNC)」技術了。
3.另開執行緒(跨執行緒處理 UI 更新需用 Invoke 方法配合 Delegate 委派,完成時的 Callback 回呼程序也要自理)。
4.使用工具箱的 BackgroundWorker 控制項(不需另外處理 UI 更新,也不必自理事件回呼)。

...繼續閱讀 »

[VB.net] 如何實現「非同步下載」檔案?(二)從 FTP 下載時如何先得到 File Size。

前文提到使用 System.Net.WebClient 類別的 DownloadFileAsync() 方法從 FTP Server 下載檔案時,由於事先沒有該檔案的長度資料,以致在需要用到 ProgressBar 時呈現進度會有不便之處。
接下來就要分享一下從 FTP 取得檔案長度的手法。
1.先從 VS.net 的現有類別下手,在 System.Net 命名空間有個 FtpWebRequest 類別,顧名思義應該是向 FTP 發出要求的可用物件。
2.另外在 FtpWebRequest 裡面有一個方法叫做 GetResponse(),看起來正是我要的東西。
3.查看了這兩個物件的用法,試寫了一段程式碼:

...繼續閱讀 »