Archief - Array oproepen in andere classe.

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

pulpman

Legacy Member
Gegroet,

Ik ben momenteel bezig met het maken van BlackJack.
Ik heb een class Card gemaakt met daarin een array van mijn kaarten.
Nu wil ik in class Deck deze volledige array oproepen om hem vervolgens in een tijdelijke array te steken om zo te kunnen shufflen.
De array van onze kaarten noemt deck en bevat 52 kaarten.
Maar als we deck(52) aanroepen dan krijgen we enkel de 52ste kaart.

Dit is onze code
Code:
Public Class Deck
Public Sub Shuffle(ByVal deck() As Card.Cardproperty)

Dim max As Integer
Dim teller As Integer
Dim r As Random = new Random()
Dim tempDeck As Card.Cardproperty

max = UBound(deck)

For teller = LBound(deck) To max
max = r.Next(0, teller)
tempDeck = deck(teller)
deck(teller) = deck(max)
deck(max) = tempDeck
Next

End Sub

End Class

Foezjie

Legacy Member
pulpman zei:
Gegroet,

Ik ben momenteel bezig met het maken van BlackJack.
Ik heb een class Card gemaakt met daarin een array van mijn kaarten.
Nu wil ik in class Deck deze volledige array oproepen om hem vervolgens in een tijdelijke array te steken om zo te kunnen shufflen.
De array van onze kaarten noemt deck en bevat 52 kaarten.
Maar als we deck(52) aanroepen dan krijgen we enkel de 52ste kaart.

Dit is onze code

Ehm, gewoon een referentie naar de variabele deck meegeven zou ik zo denken? Dus ipv 1 element de hele rij (of toch de pointer ernaar)

sskev

Legacy Member
Hoi,

Ik werk mee aan dit spel en we geraken er nog niet uit. Dit is denk ik een simpel probleem, maar het lukt dus niet. Zoals al eerder vermeld hebben we een class Card gemaakt met daarin de functie CreateCard(). Hier word een array met de 52 kaarten gevuld.

Nu willen we op verschillende plekken deze array gaan oproepen in andere classen en in de main form. Als test hebben we een kaart proberen weer te geven in een picturebox. Dit lukt met onderstaande code:

Dim myCard As Card = New Card
myCard.Createcards()
Dim myProperty As Card.CardProperty = myCard.deck(52)

Dim myImage = Image.FromFile(myProperty.front)
ptbDealer.Image = New System.Drawing.Bitmap(myImage)

We dachten dan dat het oproepen van de hele array Deck binnen classe card geen probleem kon zijn, maar dit lukt ons totaal niet. Weet iemand de oplossing?

Hieronder misschien voor de duidelijkheid de classe card:

Public Class Card

#Region "structures"

'Een eige type/structuur maken "CardProperty"
Public Structure CardProperty
Dim soort As String
Dim score As Integer
Dim rang As Integer
Dim front As String
Dim back As String
Dim schudden As Boolean
End Structure

#End Region

#Region "Declarations"

Public deck(52) As CardProperty

#End Region

#Region "Functions"

'Maakt de kaarten en zet ze in goede volgorde

Public Function Createcards() As CardProperty

'Declaratie van x,y: twee tellers voor de lussen
Dim x As Integer
Dim y As Integer

'harten
For x = 1 To 13 Step +1

'toewijzen van rang, soort en afbeelding van de kaart
deck(x).rang = x
deck(x).soort = "harten"
deck(x).front = "images\harten" & x & ".jpg"

'Score toewijzen aan de kaart
'Nog geen rekening gehouden met aas
If x < 10 Then
deck(x).score = x
ElseIf x > 10 Then
deck(x).score = 10
End If

Next x

'klaveren
For x = 14 To 26 Step +1

'toewijzen van rang, soort en afbeelding van de kaart
deck(x).rang = (x - 13)
deck(x).soort = "klaveren"
deck(x).front = "images\klaveren" & (x - 13) & ".jpg"

'Score toewijzen aan de kaart
'Nog geen rekening gehouden met aas
If (x - 13) < 10 Then
deck(x).score = (x - 13)
ElseIf (x - 13) > 10 Then
deck(x).score = 10
End If
Next x

'ruiten
For x = 27 To 40 Step +1

'toewijzen van rang, soort en afbeelding van de kaart
deck(x).rang = (x - 26)
deck(x).soort = "ruiten"
deck(x).front = "images\ruiten" & (x - 26) & ".jpg"

'Score toewijzen aan de kaart
'Nog geen rekening gehouden met aas
If (x - 26) < 10 Then
deck(x).score = (x - 26)
ElseIf (x - 26) > 10 Then
deck(x).score = (10)
End If

Next x

'schoppen
For x = 40 To 52 Step +1

'toewijzen van rang, soort en afbeelding van de kaart
deck(x).rang = (x - 39)
deck(x).soort = "schoppen"
deck(x).front = "images\schoppen" & (x - 39) & ".jpg"

'Score toewijzen aan de kaart
'Nog geen rekening gehouden met aas
If (x - 39) < 10 Then
deck(x - 39).score = (x - 39)
ElseIf (x - 39) > 10 Then
deck(x - 39).score = 10
End If

Next x

'Kaarten zijn niet geschud en achterkant is overal zelfde afbeelding
For y = 1 To 52
deck(y).schudden = False
deck(y).back = "images\back.jpg"
Next y

Return deck(52)

End Function

#End Region

End Class

nameless

Legacy Member
sskev zei:
Return deck(52)
Ik weet het niet zeker ken niet veel van vb maar ga je hier niet gewoon de waarde van het 52ste element van de rij returnen?

Ik vermoed dat je gewoon "return deck" ofzo gaat moeten doen. Kan morgevroeg nog eens kijken mocht dit het niet zijn.

sskev

Legacy Member
Nee denk niet dat het dat is. Want als ik een kaart afdruk met bijvoorbeeld:

Dim myCard As Card = New Card
myCard.Createcards()
Dim myProperty As Card.CardProperty = myCard.deck(10)

Of in plek van (10) eender elke andere waarde, dan lukt het wel! Maar we moeten de hele array kunnen gebruiken, en we weten niet hoe, enig idee?

pieta

Legacy Member
nameless zei:
Ik weet het niet zeker ken niet veel van vb maar ga je hier niet gewoon de waarde van het 52ste element van de rij returnen?

Ik vermoed dat je gewoon "return deck" ofzo gaat moeten doen. Kan morgevroeg nog eens kijken mocht dit het niet zijn.

denk ik dus ook..

@sskev, myCard.deck(10)

dan krijgt ge toch 1 kaart terug he?

Curahee Q

Legacy Member
Je moet gewoon je ganse deck returnen (dus return deck).

En ik vind jullie benamingen eigenlijk niet echt logisch. Je klasse Card bevat je ganse deck. Waarom niet een klasse Deck die een array bevat. En dan een methode createDeck() die dan al de kaarten aanmaakt.

woony

Legacy Member
je returned
Return deck(52)
je moet gewoon uw deck returnen toch.
en aanroepen toch ook gewoon createcards, wat doet die (52) daar de hele tijd.
en als je dan uw 'random' kaart wilt trekken of na 'schudden' in volgorde gewoon uw deck(nummer) toch?
of mis ik iets?

voltje

Legacy Member
Je manier is echt niet handig, en zelfs slecht vind ik...
Je hebt card objecten, deze moet je inderdaad zoals reeds vermeld bijgehouden worden in een deck.

Tis wat omslachting om een klasse Card te hebben, en daar in al je cards bij te houden...

Maak gwn allemaal instanties van Cards, en voeg deze buiten je klasse Card samen in een List, Array, ... tot een deck...
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan