Archief - VB.NET Probleem

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.

sskev

Legacy Member
Ik ben BlackJack aan het maken in VB.NET, maar er duiken probleempjes op. Ik heb een classe Card met daarin een Array dat gevuld word met 52 kaarten met bijhorende afbeelding, score enz. Ook zit er een shuffle in om de array met de kaarten door elkaar te halen door in een andere array te steken.

Wanneer ik dit wil testen en 2 kaarten wil doen verschijnen in een picturebox dan kom ik 2 probleempjes tegen:

1) Er komen 2 dezelfde kaarten naast elkaar (ipv 2 verschillende en willekeurig).

2) Na een paar keer op deal te drukken heb ik een error. Na wat te testen (zonder shuffle) loopt het mis bij het oproepen van dames, en ik weet niet waarom. Naam van images is goed dus dat is het probleem niet.

Is er iemand dat kan helpen? Hieronder de code van class card:

Code:
Public Class Carda 

#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

  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


    '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 39 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


    Dim tempDeck(52) As CardProperty
    Dim r As Random = New Random()
    Dim max As Integer = 52
    Dim rand As Integer

    For teller = max To 1 Step -1
      rand = r.Next(1, teller)
      tempDeck = deck
      deck(teller) = deck(rand)
      deck(rand) = tempDeck(max)
    Next
    Return deck(52)

  End Function

#End Region

End Class

En hieronder de code voor het plaatsen van 2 kaarten in picturebox:

Code:
Public Class frmGame

  Private Sub btnDeal_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDeal.Click

    Dim myCard As Card = New Card

    myCard.Createcards()

    Dim myProperty1 As Card.CardProperty = myCard.deck(1)
    Dim myImage1 = Image.FromFile(myProperty1.front)
    ptbDealer1.Image = New System.Drawing.Bitmap(myImage1)

    Dim myProperty2 As Card.CardProperty = myCard.deck(2)
    Dim myImage2 = Image.FromFile(myProperty2.front)
    ptbDealer2.Image = New System.Drawing.Bitmap(myImage2)


   

   
  End Sub

  Private Sub btnClose_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnClose.Click
    Me.Close()

  End Sub
  
End Class

Alvast bedankt voor de hulp!

Parnakra

Legacy Member
De fout zit in je shufflefunctie. Schrijf eens neer wat er wanneer in je deck en tempDeck zit en teken wat je met een bepaalde waarde doet tijdens het shufflen.

Hebben jullie trouwens geen leerkrachten/docenten om dit soort vragen te stellen? :/

voltje

Legacy Member
Parnakra zei:
De fout zit in je shufflefunctie. Schrijf eens neer wat er wanneer in je deck en tempDeck zit en teken wat je met een bepaalde waarde doet tijdens het shufflen.

Hebben jullie trouwens geen leerkrachten/docenten om dit soort vragen te stellen? :/
Ze stellen inderdaad veel en makkelijke vragen...
Vraag me ook af of je geen leerkrachten hebben...

Onthoud goed, door dat wij jullie "helpen", gadet zelf minder leren he ...
Alleszinds is er iets serieus mis met jullie manier van programmeren Oo

Ale als ik jullie code bekijk heb ik toch een ongelukkig gevoel...

sskev

Legacy Member
ja makkelijk voor jullie misschien maar wij zijn geen pro's hé. Ik dacht dat het net de bedoeling was van een forum als dit om elkaar te helpen? Ik vraag niet het hele spel hé, maar wel jullie mening en of jullie misschien de fout zien.

We hebben zeker docenten, maar dit project is zelfstandig te maken dus... En inderdaad, de manier van programmeren in OOP is niet wat het moet zijn maar anyway...

We hebben een nieuwe shuffle gemaakt en nu krijgen we 2 verschillende kaarten in de pictureboxen. Wel krijgen we soms nog 2 dezelfde (waarschijnlijk nog ergens een klein foutje). We hebben dus in de structure een veld gemaakt waar de shuffle op false staat en deze komt in de shuffle op true wanneer hij alreeds in de andere array is geplaatst. Dus het zou toch niet mogen dat er soms nog 2 dezelfde verschijnen?

Dus als jullie de fout zien, graag dan:

Dim tempDeck(52) As CardProperty
Dim r As Random = New Random()
Dim max As Integer = 52
Dim rand As Integer

tempDeck = deck

For teller = max To 1 Step -1
rand = r.Next(1, max)

While tempDeck(rand).shuffeld = True
rand = r.Next(1, max)
End While

deck(teller) = tempDeck(rand)
tempDeck(rand).shuffeld = True
Next

Alvast bedankt!

Mee

Legacy Member
De kaart die al is gekozen moet je eerst verwijderen voor je een 2de kaart kiest hè... dat zou het "soms nog 2x dezelfde kaart"-probleem moeten oplossen.

Parnakra

Legacy Member
sskev zei:
ja makkelijk voor jullie misschien maar wij zijn geen pro's hé. Ik dacht dat het net de bedoeling was van een forum als dit om elkaar te helpen? Ik vraag niet het hele spel hé, maar wel jullie mening en of jullie misschien de fout zien.
Elkaar helpen, ja, maar ik ga op wcpapier.be/forum niet gaan vragen hoe ik enkele blaadjes van de rol moet scheuren.

Sommige dingen zijn in overvloed te vinden op het internet. Zeker wat betreft (OO-)programmeren. Als voor deze simpele dingen onmiddellijk naar de hulp van anderen grijpt, zal je waarschijnlijk nooit het automatisme aanleren om éérst het internet af te schuimen bij programmeerproblemen.

Concreet: zoek een deftige tutorial over OO-programmeren (maakt niet eens uit in welke taal) en herdenk/herwerk je code voor dit project. Het zal je werk nu en in de toekomst ettelijke keren makkelijker maken.

cptKangaroo

Legacy Member
Hou je kaarten bij in een Queue of Stack collectie, dan verdwijnen de kaarten die je eruit haalt automatisch uit de collectie.

woony

Legacy Member
zit beetje met de zelfde gedachte als parnakra, ik zie op 1 dag 3 verschillende threads verschijnen over blackjack. Forum is idd bedoeld om te helpen. Maar het is imho niet de bedoeling om bij elke fout die je maakt , de boel hier te plakken en wachten op resultaat. Als je serieus alles eens HERdenkt en uw logica eens checkt. En alle mogelijke sites afgezocht hebt naar iets die er wat op lijkt en je het probleem misschien kan afleiden. Dan kun je het hier eens komen vragen zodat we allemaal samen zoeken naar het probleem. Want anders vrees ik dat je bij thread nr10 over blackjack nog weinig antwoorden zult krijgen, en je ze misschien dan zult nodig hebben. Anders veel succes nog, en als je er ECHT niet uitraakt. helpen we graag. Maar gemaktszucht is geen mooie deugd.

voltje

Legacy Member
@TS: Onthoud goed, als je programmeert zit je misschien 1/2 van de tijd te googlen, blogs te lezen, boeken te lezen...
Ook voor "pro's" zijn er steeds nieuwe dingen te leren, ICT veranderd constant...
Ik ben nu ook bezig met dingen waar je moeilijker zaken van vind op het internet omdat het relatief nieuw is...
Maar voor de zaken die jullie nodig hebben vind je ALLES op het internet...
Gewoon googlen, als je het dan niet vind, of je vind iets maar snapt het niet... Vraag het dan...

Het forum is inderdaad om te helpen, en wij helpen je met plezier...
Maar tis niet leuk voor ons om u te helpen als ge zelf niets doen van moeite om te zoeken he ..
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