Ga naar inhoud

spel kaarten in BASIC


Aanbevolen berichten

Dan zou je iets met Randomize en Rnd moeten doen om een willekeurige waarde aan de variabele te geven. [code:1:bd58ffa868]Dim array(51) as Byte Randomize For i = 0 to 51 array(i)=int((52 * rnd) + 1) Next i[/code:1:bd58ffa868] Dan zou je alleen nog moeten controleren of er een waarde al gebruikt wordt en zo ja dan een nieuwe waarde kiezen.
Link naar reactie
  • 2 weken later...
In een heel grijs verleden heb ik dat eens op de Commodore 64 gedaan. Aangezien dat al weer enige tijd terug is, hier pseudo-code: [code:1:2260d4e754]Bezet[52]; // allemaal 0 Kaart[52]; // allemaal 0 FOR I=1 TO 52 Getal = RANDOM(52); IF Bezet[Getal] == 0 // kaart nog niet geweest Bezet[Getal] = 1; Kaart[i] = Getal; ELSE // kaart alwel geweest opnieuw getal kiezen NEXT I [/code:1:2260d4e754] Er is vast wel iemand die dit naar BASIC kan vertalen. Het is voor mij zo'n 10-15 jaar geleden...
Link naar reactie
[quote:fae1f82ad5="MacNetron"]In een heel grijs verleden heb ik dat eens op de Commodore 64 gedaan. Aangezien dat al weer enige tijd terug is, hier pseudo-code: [code:1:fae1f82ad5]Bezet[52]; // allemaal 0 Kaart[52]; // allemaal 0 FOR I=1 TO 52 Getal = RANDOM(52); IF Bezet[Getal] == 0 // kaart nog niet geweest Bezet[Getal] = 1; Kaart[i] = Getal; ELSE // kaart alwel geweest opnieuw getal kiezen NEXT I [/code:1:fae1f82ad5] Er is vast wel iemand die dit naar BASIC kan vertalen. Het is voor mij zo'n 10-15 jaar geleden...[/quote:fae1f82ad5] Hier is de BASIC versie: [code:1:fae1f82ad5]dim Bezet(52) 'allemaal 0 dim Kaart(52) 'allemaal 0 FOR I=1 TO 52 Getal = INT(RND(0)*52 + 1) IF Bezet(Getal) = 0 then 'kaart nog niet geweest Bezet(Getal) = 1 Kaart(I) = Getal ELSE 'kaart alwel geweest END IF 'opnieuw getal kiezen {I = I - 1} NEXT I for t = 1 to 52 print Kaart(t);" "; next t [/code:1:fae1f82ad5] Ik stel voor dat je vlak voor de END IF statement nog even I = I - 1 plaatst, anders komen er vele nullen in de reeks voor. P.s. Wouter gaf een dergelijke oplossing al. Het grote nadeel van je oplossing is dat na een poos 50 of 51 kaarten gevonden zijn. De computer moet nu zeer vele malen random uitvoeren voordat de enig overgebleven onbezette kaart gevonden wordt. Abcott.
Link naar reactie
Ik ben geen BASIC programmeur, dus vraag me niet om een precieze code. Maar het probleem van lang [i:cbb1223efc]randomizen[/i:cbb1223efc] na 50 of 51 kaarten kan je misschien op een andere manier voorkomen (als ik iets doms schrijf, moet je het maar zeggen). Waarom loop je de rij kaarten niet gewoon 1 voor 1 af en randomize je de spelers? Het enige dat je dan nodig hebt is een restrictie dat een speler niet meer kaarten kan krijgen dan het maximum (13 bij 4 spelers).
Link naar reactie
Lol! Dan hoef je meteen de handen van de spelers niet meer te sorteren! Maar - alhoewel ik geen kei in Kansrekening ben - ik vermoed dat statistisch gezien het niet hetzelfde is. Een slecht bedeelde speler krijg dan altijd de laatste paar kaarten. Daar moet je uiteraard lak aan hebben en gewoon proefondervindelijk even kijken of dat inderdaad zo is. [quote:d6a39894a8="abcott"] <knip> Ik stel voor dat je vlak voor de END IF statement nog even I = I - 1 plaatst, anders komen er vele nullen in de reeks voor. P.s. Wouter gaf een dergelijke oplossing al. Het grote nadeel van je oplossing is dat na een poos 50 of 51 kaarten gevonden zijn. De computer moet nu zeer vele malen random uitvoeren voordat de enig overgebleven onbezette kaart gevonden wordt. Abcott.[/quote:d6a39894a8] Die I = I -1 moet er inderdaad in, in de ELSE-conditie. Voor die laatste kaart hoef je je niet druk te maken, op de C64 was ie in een paar seconden (echt minder dan 10) klaar. Een beetje PC moet dat kunnen overtreffen :)
Link naar reactie
  • 2 weken later...
  • 2 weken later...
Nog even: [code:1:ab2107599a] s$(1)="klaveren" s$(2)="ruiten" s$(3)="harten" s$(4)="schoppen" for t = 1 to 52 s=int((t-.5)/13)+1 v= t-s*13 print "kaart no. ";t;" soort ";s$(s);" waarde ";v + 13 next t end [/code:1:ab2107599a] v heet een modulus. In sommige Basics is deze modulus functie voor geprogrammeerd. Abcott
Link naar reactie

Om een reactie te plaatsen, moet je eerst inloggen

Gast
Reageer op dit topic

×   Geplakt als verrijkte tekst.   Herstel opmaak

  Er zijn maximaal 75 emoji toegestaan.

×   Je link werd automatisch ingevoegd.   Tonen als normale link

×   Je vorige inhoud werd hersteld.   Leeg de tekstverwerker

×   Je kunt afbeeldingen niet direct plakken. Upload of voeg afbeeldingen vanaf een URL in

×
×
  • Nieuwe aanmaken...