2009-09-17 44 views
2

我正在爲我的OOP紙介紹打牌。遊戲本身符合規格要求,但我現在正在爲了自己的滿足感和學習而玩耍。用於紙牌遊戲的c#picturebox繼承

我有一個卡類,包含和圖像,它的等級和套件。在GUI我使用圖片框來顯示存儲在各自的卡(其被存儲在一個卡陣列中的甲板類),所以圖像,

cardPictureBox1.Image = card1.show(); 
cardPictureBox2.Image = card2.show(); 
cardPictureBox3.Image = card3.show(); 
... 
etc 

這將有可能使卡類的繼承PictureBox控件,因此屏幕上的內容實際上是卡片的一個實例(而不是一個保存其圖像值的盒子),這將戲劇性地減少人們爲了獲得其他卡片而必須跳過的環球數量相關信息。

回答

3

您可以創建一個從PictureBox繼承而不是從UserControl繼承的UserControl(名爲Card或ucCard或其他),而不是擁有Card類。在C#中最簡單的方法是添加一個用戶控件與你想要的名稱,然後在代碼

public partial class ucCard : UserControl 

頂線更改爲

public partial class ucCard : PictureBox 

你ucCard控制可能會擁有一切一個PictureBox的屬性(包括圖像,你可以在其中存儲卡片的位圖)。當你建立你的項目時,編譯器會在引用AutoScaleMode的一行上刪除 - 只需刪除這一行並重建。

然後,您可以添加卡片所需的任何其他屬性和方法,例如正面和背面的正裝和排名以及位圖(背面可以是靜態的,以便所有卡片都可以共享),也可以添加翻轉()方法在正面和背面圖像之間切換。

就OOP而言,神聖三位一體的被遺忘部分似乎是封裝。在這種情況下,由於卡片是用戶與UI交互的UI中的可視元素,因此將其封裝爲UserControl非常合適。正如你已經注意到的那樣,這將使應用程序更簡單,讓你的生活更輕鬆。

+0

謝謝你們兩位!我不會將任何繼承權交給他們;我只是對它感到好奇,它會對遊戲產生什麼樣的變化(線數,性能等),當然還有如何去做。 – Windos 2009-09-17 05:58:44

2

是否有可能使卡 類的繼承圖片框 控制等什麼是屏幕上的是 「實際上是」一卡 CALSS(而不是一個盒子持有的 圖像實例它的價值),這將會減少他的球數量 人們將不​​得不跳到 獲得卡其他相關信息。

是的,但你想嗎?不,它將您的業務邏輯和模型非常緊密地耦合到您的GUI層。

如果你正在寫一篇關於面向對象的論文,你應該鼓勵良好的編程習慣,並阻止偷工減料。你最好鞭打一個快速的MVC,這樣當你改變你的模型時,GUI會自動更新自己。

+0

我認爲他正在寫一篇論文*作爲他正在進行的OOP課程的介紹,而不是寫一篇論文來教授課程。 – MusiGenesis 2009-09-17 03:15:41