09. november 2003 - 12:27Der er
8 kommentarer og 2 løsninger
benyt et objekt i et andet objekt
Hej E.
Jeg er ved at løse en opgave på et .net kursus. Mit problem er at jeg er gået total i stå .
Opgave går ud på at man skal op rette et spil kort.
Jeg ar følgende objekt:
Public Class Kort Private _farve As Integer Private _vardi As Integer
Public Sub New(ByVal wfarve As Integer, ByVal wvardi As Integer) If wfarve > 0 And wfarve < 5 Then _farve = wfarve Else MessageBox.Show("Et korts farve skal være 1-4 ... Kort ikke oprettet", "FEJL", MessageBoxButtons.OK, MessageBoxIcon.Warning) _farve = 0 End If
If wvardi > 0 And wvardi < 14 Then _vardi = wvardi Else MessageBox.Show("Et korts værdi skal være 1-13 ... Kort ikke oprettet", "FEJL", MessageBoxButtons.OK, MessageBoxIcon.Warning) _vardi = 0 End If End Sub
Public ReadOnly Property getVaerdi() As Integer Get Return _vardi End Get End Property
Public Function getFarve() As String Dim res As String Select Case _farve Case 1 res = "klør" Case 2 res = "spar" Case 3 res = "hjerter" Case 4 res = "ruder" Case Else res = "ugyldig farve - kort ikke valid" End Select Return res End Function
Public Overrides Function toString() As String Return getFarve() & " " & VardiToString() End Function
Private Function isValid() As Boolean If _farve = 0 Or _vardi = 0 Then Return False Else Return True End If End Function
Private Function VardiToString() As String Dim res As String Select Case _vardi Case 0 res = "ugyldig værdi - kort ikke valid" Case 1 res = "es" Case 11 res = "knægt" Case 12 res = "dame" Case 13 res = "konge" Case Else res = CStr(_vardi) End Select Return res End Function End Class
Nu skal jeg så oprette et nyt objekt som benytter kort objektet til at oprette et HELT spil kort.
MEN
Hvordan kan man bruge et objekt inden i et andet. Er her en som kan oprette et spil kort(52 stk) ud fra kort klassen, og forklarer mig hvordan man gør???
Enum CardValue Ace = 1 Two = 2 Three = 3 Four = 4 Five = 5 Six = 6 Seven = 7 Eight = 8 Nine = 9 Ten = 10 Jack = 11 Queen = 12 King = 13 End Enum
Private mSuit As CardSuit Private mCardValue As CardValue
Public Property Card_Value() As CardValue Get Return mCardValue End Get Set(ByVal Value As CardValue) mCardValue = Value End Set End Property
Public Property Card_Suit() As CardSuit Get Return mSuit End Get Set(ByVal Value As CardSuit) mSuit = Value End Set End Property
End Class
Public Class Deck
Private mColCards As Collection
Public Sub New_Deck() mColCards = New Collection()
Dim intSuit As Byte = 0 Dim intVal As Byte = 0 Dim intCnt As Byte
For intSuit = 1 To 4 For intVal = 1 To 13 Dim tmpCard As New Card()
tmpCard.Card_Value = intVal tmpCard.Card_Suit = intSuit mColCards.Add(tmpCard) Next Next End Sub
Public Function Count() As Byte Return mColCards.Count End Function
Public Function GetCard() As Card Randomize() Dim CrdTmp As Card Dim bytCount As Byte = Count() Dim bytTmpCard As Byte bytTmpCard = Int(Rnd() * (bytCount - 1)) + 1 Try CrdTmp = mColCards(bytTmpCard) mColCards.Remove(bytTmpCard) Catch ex As Exception MsgBox(bytTmpCard.ToString & "/" & bytCount.ToString) End Try
Return CrdTmp End Function
End Class
Og en form der henter kort:
Public Class Form1 Inherits System.Windows.Forms.Form
#Region " Windows Form Designer generated code "
Public Sub New() MyBase.New()
'This call is required by the Windows Form Designer. InitializeComponent()
'Add any initialization after the InitializeComponent() call
End Sub
'Form overrides dispose to clean up the component list. Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) If disposing Then If Not (components Is Nothing) Then components.Dispose() End If End If MyBase.Dispose(disposing) End Sub
'Required by the Windows Form Designer Private components As System.ComponentModel.IContainer
'NOTE: The following procedure is required by the Windows Form Designer 'It can be modified using the Windows Form Designer. 'Do not modify it using the code editor. Friend WithEvents Button1 As System.Windows.Forms.Button <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent() Me.Button1 = New System.Windows.Forms.Button() Me.SuspendLayout() ' 'Button1 ' Me.Button1.Location = New System.Drawing.Point(56, 56) Me.Button1.Name = "Button1" Me.Button1.Size = New System.Drawing.Size(136, 32) Me.Button1.TabIndex = 0 Me.Button1.Text = "Button1" ' 'Form1 ' Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13) Me.ClientSize = New System.Drawing.Size(292, 273) Me.Controls.AddRange(New System.Windows.Forms.Control() {Me.Button1}) Me.Name = "Form1" Me.Text = "Form1" Me.ResumeLayout(False)
End Sub
#End Region
Dim mDeck As Deck Private Sub NewDeck() mDeck = New Deck() mDeck.New_Deck() End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim mCard As Card mCard = mDeck.GetCard() MessageBox.Show(mCard.Card_Suit.ToString() & " " & mCard.Card_Value.ToString()) End Sub
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load NewDeck() End Sub End Class
Dim deck(4,13) As Kort Dim color As Integer Dim value As Integer For color = 1 To 4 For value = 1 To 13 deck(color-1,value-1) = new Kort(color, value) Next Next For color = 1 To 4 For value = 1 To 13 Console.WriteLine(deck(color-1,value-1)) Next Next
Dim deck(52) As Kort Dim color As Integer Dim value As Integer Dim card As Integer For color = 1 To 4 For value = 1 To 13 deck((color-1)*13+(value-1)) = new Kort(color, value) Next Next For card = 0 To 51 Console.WriteLine(deck(card)) Next
Og med sortering (ligesom kaffe's kode - men alligevel lidt anderledes):
Dim randeck(52) As Kort Dim deck(52) As Kort Dim color As Integer Dim value As Integer Dim card As Integer Dim rng As Random = new Random() Dim tmp As ArrayList Dim ix As Integer For color = 1 To 4 For value = 1 To 13 deck((color-1)*13+(value-1)) = new Kort(color, value) Next Next For card = 0 To 51 Console.WriteLine(deck(card)) Next tmp = new ArrayList(deck) For card = 0 To 51 ix = rng.Next(tmp.Count) randeck(card) = tmp.Item(ix) tmp.Remove(ix) Next For card = 0 To 51 Console.WriteLine(randeck(card)) Next
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.