【发布时间】:2015-11-13 16:43:07
【问题描述】:
我正在尝试在一个类中创建一个可以绘制扑克牌的函数。我还在掌握在 Winforms 中绘图,所以请耐心等待。
到目前为止的基本类如下所示:
Public Class Card
Public Suit As Char
Public Value As String
Public Sub New(_Suit As Char, _Value As String)
Suit = _Suit
Value = _Value
End Sub
Public Sub Draw()
End Sub
End Class
在 Card 类中,我想创建一个子 Draw,它绘制一个白色矩形,添加数字、西装符号等。我有绘制白色矩形的代码,但我不知道如何使其适应在类中使用。我只有这个事件处理程序:
Private Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles Me.Paint
Dim p As Pen
p = New Pen(Color.Black, 2)
Dim rekt = New Rectangle(New Point(10, 10), New Size(90, 126))
Me.CreateGraphics.DrawRectangle(p, rekt)
CreateGraphics.FillRectangle(Brushes.White, rekt)
End Sub
这会在表单加载时自动创建一个白色矩形。当我将此事件处理程序中的代码 C&P 到 Draw 函数中时,它不起作用,因为 CreateGraphics 不是 Card 类的成员。
是否有一个简单的解决方案,或者我应该从根本上解决这个问题?
【问题讨论】:
-
除非这是学习练习,否则您可以store the deck in an imagelist and load them from there。 CreateGraphics 几乎从来都不是正确的做法。使用由绘制事件提供的图形对象。将 e.Graphics 传递给 Card.Draw,卡片可以自己绘制
-
...同样对于通用 Card 类,它们将具有 Suit、Rank 和 Value。在 BlackJack 和 Baccarat(以及 Euchre 等其他游戏)中,某些牌的价值与排名不同
-
我不明白价值和排名可能是不同的东西,但我目前不打算编写一个我需要担心的游戏:)。
-
使用图像更有意义,我只是想看看以编程方式绘制的卡片是否可行。您能否更详细地解释使用图形对象并传递 e.Graphics 的含义?我真的不明白这在代码方面意味着什么。
-
嗯,在二十一点中,杰克值 10,但等级仍然是 11/J;在百家乐中,它仍然是 Jack,但值为 0。查看在绘制事件中传递的参数:
e As PaintEventArgs它为您提供了一个图形对象
标签: vb.net class visual-studio-2012 event-handling