從 C++ 向 C# 遷移
發布日期: 1/24/2005 | 更新日期: 1/24/2005
John Kennedy
Microsoft Corporation
下載 Road07102002-code.exe。
本頁內容
紙牌游戲
圖形和 SDE
聲音效果
與生活中的許多事情一樣,有時要學習某些知識的唯一方式就是親自去嘗試。當然,也有一些很顯著的例外。我可不建議通過這種方式去學習外科手術(哈哈),但是對於學習智能設備擴展 (SDE) 和用 C# 編寫適用於 Pocket PC 的程序,這絕對是一個很好的方式。
誠然,我們會越來越多地接觸到 Microsoft .NET Compact Framework,不管是在本專欄還是在實際的開發環節中,這一點不容置疑。更加不容置疑的是,C# 是 .NET Compact Framework 用得最多的一種語言。用 C# 開發了一些程序之後,我對它的易用性、靈活性和優雅得體有著越來越深的印象。當然,當前發行的 Beta 版在某些地方還存在著所謂的操作“欠佳”的情況,但這不久就會得到解決。我堅信,一旦您繼續了解一些新概念,您就會真正地喜歡使用 C# 和 .Net Compact Framework。
紙牌游戲
我們以前在本專欄中討論過 XML Web 服務,但有些讀者希望我能夠使用智能設備擴展來創建其他一些連接性不大的編程項目。並不是每個軟件都需要連接到 Internet,因此這個新平台中有些很強大的功能往往會被忽視。
所以在本月的專欄中,我們將演練一下如何開發一個適用於 Pocket PC 的更加傳統的應用程序 — 實際上是一個游戲,它采用 C# 編寫並使用 .Net Compact Framework。使用 C# 進行開發與使用 eMbedded Visual C++ 進行開發之間存在著一些很明顯的差異,對於在編寫這個程序時所碰到的一些很明顯的問題,我希望拿出來與大家分享一下。
所要討論的游戲非常簡單。一個舊版本的紙牌匹配游戲 — Pelmanism。然而,要闡明一些重要的區別和方法還是很復雜的,所以即使您認為它很容易,也不妨試試。如果您要加載並試玩,可以下載源代碼。
這個游戲的設計十分簡單,正如您在以下屏幕截圖中所看到的。(這些照片是我的團隊(即 Visual C++ 小組)的所有成員。您可能會認為,現在當我找他們要求拍照時,他們會更加謹慎了。當然,我更願意使用 Drew Barrymore 的照片,但有著嚴格的流程……)。屏幕上有十六張紙牌,玩家通過點擊指示筆來“翻轉它們”。如果紙牌相匹配,它們就會從屏幕中消失。我將留給讀者一個練習 — 添加代碼以便統計翻轉次數、保存成績等等。是的,這表明我在偷懶。不過要知道,我也忙乎了一天呢!第一個人在問我花多少時間在 Xbox 上玩 Halo 時懷著一種很鄙夷的目光。
圖 1. 您知道,我被 Xbox 團隊逼著討論這張圖的許可權。當然,實際上這是個謊言。
返回頁首
圖形和 SDE
C# 程序與 eMbedded Visual C++ 的工作方式有著很大的不同,它從 Visual Basic 繼承了窗體 的概念。從技術角度看,改變並不大,但我希望能夠引起您的注意。您可能也知道,窗體其實就是一個頁面,您可以在其中添加控件、顯示文本、從中接收屏幕點擊消息等等。當我們在 Visual Studio .Net 中創建一個默認項目時,系統會自動為我們提供一個默認窗體。
圖 2. 一個空白窗體,准備讓我們展現自己的想象力和才干。
您可以發現,窗體的左邊是一組控件,我們可以將它們拖放到窗體中,也就是拖放到我們的程序中。與使用 eMbedded Visual C++ 工具箱相比,您會發現,編輯器中控件的可視化外觀與因此而創建的源代碼之間的聯系更加緊密。試試一些控件並觀察代碼。Visual Studio 保持跟蹤的方式給人的印象很深。
一句話警告源代碼中有些地方不要手動進行更改。由於某種原因我忽視了這個告誡,當我在設計器中調整窗體時就丟失了代碼,所以要謹記。
可以在窗體中添加的一個控件是 PictureBox,這是一個顯示圖像的控件。我打算對游戲所顯示的每張紙牌都使用一個 PictureBox。它與最初采用 C++ 編寫這個程序的方式有所不同。如果用 C++ 創建,我就需要創建窗口(現在我們稱之為窗體)並獲得 HDC(顯示上下文句柄),然後使用 BitBlt 將一大堆圖形數據變為實際的圖形。這次,我打算使用十六個 PictureBox 控件,並使用它們的方法來定義它們顯示什麼圖像。您將會看到,這種方式是相當得體的。
當然,知道我們要顯示十六張紙牌,您可能會試著將十六個 PictureBox 拖到窗體中,然後調整它們的大小並將它們排列整齊。這是個好主意,但通過編程方式處理每個控件很快就會變成一項很瑣碎的事情。