webForumDet fria alternativet

bygga en kortlek i asp

ASP

12 svar · 429 visningar · startad av eriks

Medlem sedan apr. 20011 418 inlägg
Frågan#1

Hej! Skulle det vara möjligt att "bygga en kortlek i asp". Jag skulle vilja t.ex. räkna ut i black-jack hur stor sannolikheten är att banken får 20. Det är ju inte så svårt att "göra korten" (lägga in dem som variabler), men jag har inte kommit på något bra sätt att räkna ut sannolikheten. Går detta?

Tack! /Erik

Medlem sedan dec. 19998 577 inlägg
#2

Intressant...

Med denna kod jag just slängde ihop så fortsätter banken till den antingen kommit till 17 eller blivit "fet".

Hur man räknar ut sannolikheten vet jag inte... :)

<%
Function RndCard(aDeck)
	Randomize
	RndCard = aDeck(Round(Rnd*Ubound(aDeck,1)),Round(Rnd*Ubound(aDeck,2)))
End Function

Dim aDeck(3,13)
aColors = Array("Hjärter","Spader","Ruter","Klöver")
aValues = Array("1","2","3","4","5","6","7","8","9","10","Knekt","Dam","Kung","Ess")

'Skapar färger
For i = Lbound(aColors) To Ubound(aColors)
	'Skapar valörer
	For j = Lbound(aValues) To Ubound(aValues)
		aDeck(i,j) = j
	Next
Next

intVal = 0

Do While intVal < 22
	intVal = intVal + RndCard(aDeck)+1
	Response.Write intVal & "<br>"
	If intVal > 16 Then Exit Do
Loop
%>

------------------
Vide rox = new Vide();
rox.learn("C#");

webeye.nu

Medlem sedan apr. 20011 418 inlägg
#3

Tack så mycket för Koden Vide. Nu är jag inte så när som så bra som du på ASP, och jag klarar med nöd och neppe att förstå koden. Några frågetecken finns där. Vad räknar Arrayen för värden på Knekt, Dam, Kung och Ess. Värdena ska ju vara tio resp. 1 eller 11. Räknar inte arrayen Knekt som 11, Dam som 12 osv? Varför skriver du "Dim aDeck(3,13)" (vad betyder det, om det är något med korten så finns det ju 14 kort.) Om man vill ha bilder på kort istället, då är det väl bara att skriva en replace?

Tack! /Erik

Medlem sedan dec. 19998 577 inlägg
#4

Vad räknar Arrayen för värden på Knekt, Dam, Kung och Ess

Värdet använder jag arrayens index för, alltså blir knekt = 10, som du sedan plussar på ett på.

Värdena ska ju vara tio resp. 1 eller 11

Hmm... missade det, några ändringar för det är nog inte svårt... :)

Varför skriver du "Dim aDeck(3,13)" (vad betyder det, om det är något med korten så finns det ju 14 kort.)

Alla index i en array börjar på noll, alltså byter "Dim aDeck(3,13)" att det finns fyra element i dimension ett och 14 element i dimension två...

Om man vill ha bilder på kort istället, då är det väl bara att skriva en replace?

Självklart... :)

------------------
Vide rox = new Vide();
rox.learn("C#");

webeye.nu

Medlem sedan dec. 19998 577 inlägg
#5

Ny kod, säkerligen inte buggfri ;):

<%
Function RndCard(aDeck)
	Randomize
	RndCard = aDeck(Round(Rnd*Ubound(aDeck,1)),Round(Rnd*Ubound(aDeck,2)))
End Function

Dim aDeck(3,13)
aColors = Array("Hjärter","Spader","Ruter","Klöver")
aValues = Array("1","2","3","4","5","6","7","8","9","10","Knekt","Dam","Kung","Ess")

'Skapar färger
For i = Lbound(aColors) To Ubound(aColors)
	'Skapar valörer
	For j = Lbound(aValues) To Ubound(aValues)
		aDeck(i,j) = j
	Next
Next

intVal = 0

Do While intVal < 22
	intCard = RndCard(aDeck)+1
	If intCard > 10 AND intCard < 14 Then intCard = 10
	If intCard = 14 Then
		intCard = 11
		If intVal + inCard > 21 Then intCard = intCard - 10
	End If
	intVal = intVal + intCard
	Response.Write intVal & "<br>"
	If intVal > 16 Then Exit Do
Loop
%>

------------------
Vide rox = new Vide();
rox.learn("C#");

webeye.nu

[Redigerat av Vide den 21 jun 2001]

Medlem sedan apr. 20011 418 inlägg
#6

tack så mycket...

vad jag menade med korten var att knekt, dam och kung är ju alla värda 10 i blackjack medan ess är 1 eller 11 (man väljer själv)

/Erik

Medlem sedan dec. 19998 577 inlägg
#7

jo, jag fixade till koden så att det fungerade så... ;)

------------------
Vide rox = new Vide();
rox.learn("C#");

webeye.nu

Medlem sedan apr. 20011 418 inlägg
#8

nej, koden verkar buggfri.

Vide, jag tänkte på en sak. Din kod fungerar ju utmärkt, men om man ska räkna ut sannolikhet så borde man begränsa korlekten så att den uppför sig som en vanlig kortlek. Nu kan ju 5 3:or komma efter varandra (eller), men i en riktig kortlek finns det bara 4 stycken (det är möjligt att du har löst det, jag kan inte hitta det).

Skulle man inte också lösa mitt problem, som en alternativ lösning, att börja med 4 kort av varje valör och att det sedan minskade varje gång ett kort togs. Knappen blanda skulle seden återställa allt. Hur tycker du, proffset, att man bäst löser detta, går det att lösa med sessions kanske, eller blir det fel?

Medlem sedan feb. 20001 590 inlägg
#9

Jag tror det är lättare att räkna/använda kortleken om man ser den som 1 kortlek, inte flera. Black Jack använder väl 3? dvs. det finns 3 st förekomster av varje kort.

Ett tips är att "blanda" kortleken, det kan man göra genom att slumpa två kort ur leken, och sedan byta plats på dom. Detta kan man loopa igenom en bra stund.

Sedan använder man kortleken uppifrån och ner, och bara räknar hur många kort som är tagna. Dvs given plockar kort ett och ett, inte slumpar ut dom.

Vill man göra statistiska beräkningar, måste man veta vilka kort som är tagna, sedan är det en "vanlig" statistik beräkning.

Chansen att få ex hjärter 5, spader 7, klöver 9 är

1/156 + 1/155 + 1/154

Chansen att få ex hjärter 5, spader 7, klöver 9 i exakt denna kombination är

1/156 * 1/155 * 1/154

som ni märker måste man veta hur många kort det finns.
ex ovan utgår från en "full" kortlek dvs inget kort är taget.

vill man räkna ut olika chanser när kort är tagna, så måste man hålla koll på vilka som är tagna

Är tex 3 ess redan ute, och 10 andra kort ute så är chansen att få ett ess

9/143

/T

------------------
WRITE_PORT_ULONG(devExt->Mymessage,SMART_WRITE_ACK);

[Redigerat av Toonster den 22 jun 2001]

Medlem sedan apr. 20011 418 inlägg
#10

Om man har 3 ess och 10 andra kort ute finns det 39 kort kvar i kortleken (räknar ppå en kortlek, spelar ju ingen roll). Ett av dem är ess. Dvs 1/39 chans.

Nog om det. Skulle man inte kunna göra med sessions som jag tänkte. Då menar jag att man lägger upp 13 sessions med olika namn och med värdet 4 (det finns ju 4 kort av varje sort, färgen spelar ingen roll). Sedan kan man ju minska sessionen med ett varje gång just det kortet tas. Då har man ju hela tiden koll på vilka kort som tagits. Knappen "Blanda" skulle sätta alla sessionen till 4.

Går det? /Erik

Medlem sedan feb. 20001 590 inlägg
#11

(räknar på en kortlek, spelar ju ingen roll).

?
Du måste ju räkna med alla 3 kortlekarna för att få rätt värde!!

------------------
WRITE_PORT_ULONG(devExt->Mymessage,SMART_WRITE_ACK);

Medlem sedan apr. 20011 418 inlägg
#12

det har du rätt i, jag missförstod dig lite

Medlem sedan jan. 2001361 inlägg
#13

Hej,

Hittade den här gamla tråden :)
Är det någon som vet hur man kan skriva ut vilken färg kortet får?

254 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
124 ms — hämta tråd, inlägg och bilagor (db)
127 ms — ändringar (db)