programvare, data, design & amp; automatiseringsblogg.

programvare, data, design & amp; automatiseringsblogg.

de beste arbeiderne far verktoyene sine til a gjore arbeidet for dem.

Simulering av et rulettbord ved hjelp av SQL Server.

Roulette er litt moro nar jeg gar til kasinoet (som ikke er sa ofte). Det er alltid viktig a akseptere at, som alle gambling (og spesielt med kasinospill), er det uansett at du ikke kommer ut pa toppen (hvis du vet eller tror du har et spillproblem, klikker du her ).

Sammenlignet med andre spill, som blackjack (hvor spilleren har minst kontroll over utfallet av spillet), og poker (hvor, kort fra et stablet dekk, har huset teoretisk ingen kontroll over utfallet), resultatet av en roulette spin er helt kaotisk og sjelden forutsigbar.

Eller er det? Bare for moro skyld trodde jeg at jeg skulle sette opp dette pa SQL Server, og se om det var noen spesielle svakheter i rulettbordet som ikke har blitt oppdaget enna.

Det forste du ma gjore er a lage noen tabeller (forklaringer folger):

Kort sagt inneholder disse tabellene folgende data:

dbo.wheel: er et indeksert & # 8216; kart & # 8217; av hjulet, detaljere hvert nummer, posisjon og fargen. dbo.spins: Hold historien til roulettehjulet & # 8216; spinn & # 8217; og deres verdier. dbo.bettors: inneholder vare innkasserte punters som spiller pa rulettbordet & # 8216; tabell & # 8217 ;. dbo.table_current: inneholder & # 8216; nav rende & # 8217; spill pa roulettbordet for et spinn. I virkeligheten vil dette v re posisjonen til alle sjetongene (innsatser) pa roulette-rutene for & # 8216; ikke flere spill og # 8217; blir kalt. dbo.table_bets: inneholder & # 8216; godkjent & # 8217; spill pa rulettbordet, en gang den neste & # 8216; spin & # 8217; har pabegynt.

Vi kan plassere enkeltspill, like / oddspill, fargespill, dobbeltspill (satse pa to tall med halv retur av en enkelt innsats), og & # 8216; quad & # 8217; eller hjornespill (satse pa fire tall med kvart i retur av en enkelt innsats).

Var roulette & # 8216; spin & # 8217; er en lagret prosedyre, definert som folger:

I et notteskall, denne lagrede prosedyren:

Bestemmer, tilfeldig, det neste nummeret som vil vises. Ignorer den sikredeIndex- og spinVelocity-delen av koden; vi gar inn i dette ytterligere under; for na bare vurdere roulette nummer generert tilfeldig mellom 0-36. Tar hver innsats gjort i tabellen dbo.table_current, vurderer om den & # 8216; vinner & # 8217; eller & # 8216; mister & # 8217 ;, og beregner avkastningen tilsvarende.

Det endelige trinnet er a fylle den faktiske dbo.Wheel-tabellen med de riktige verdiene; i dette eksemplet bruker vi et standard null null hjul layout:

Det er vart rulettbord satt opp og & # 8211; na trenger vi bare noen spillere!

For a holde ting rent og pent, har var roulette & # 8216; okt & # 8217; kjores som en annen lagret prosedyre (slik at det gjentas kan kjore og justeres om nodvendig):

Denne prosedyren trenger bare a sette inn & # 8216; spill & # 8217; inn i vart nav rende spillbord; DBO.Spin lagret prosedyre handterer alt annet. A & # 8216; bomb-out & # 8217; Nummer er inkludert og kontrollert for hvert spinn for a avgjore om den gjeldende punktoren har uttomt sine innledende midler eller ikke, og det gir ogsa en mer realistisk simulering, da en punter med en fryktelig strekk av uflaks ikke burde kunne fullfore 100 spinnene med negativ saldo, og dermed de «bomb-out» og «# 8217;).

Dette var det typiske resultatet etter a ha kjort den lagrede prosedyren et par ganger; det forteller oss ikke noe vi ikke allerede vet, og # 8211; satser pa 1 i 37 odds for en 36 til 1 avkastning vil til slutt tape deg alle pengene dine.

Hva om, for vi satte vare spill, kunne vi se nummeret som ballen var plassert pa, umiddelbart for spinnet? Hvis hver gang ballen ble spunnet med en kjent hastighet over roulettehjulet, kan vi trene ut hvor den skulle lande?

Dette er neppe en ny ide & # 8211; Denne informasjonen alene ga en utrolig fordel for spillerne som provde a bruke den. La oss anta at vi har en punter spasertur opp til bordet som ser startnummeret for hvert spinn, og bruker dette nummeret til a danne grunnlaget for hans innsats:

Ga tilbake til var dbo.Spin-prosedyre ovenfor, observer folgende linjer:

Tallene 150, 20 og 10 som brukes i den ovennevnte koden er helt vilkarlig, og kan sannsynligvis bli justert for a bedre reflektere en faktisk roulette-spinn (ballen skal snu hjulet mer enn 5 ganger, for eksempel sa 150 bor v re noe n rmere til 500). RAND () * 20) representerer & # 8216; gi eller ta & # 8217; inneholdt i spinnet, i det for ballen landing vil det v re en sv rt tilfeldig sprette av ballen for den bosetting.

Ikke desto mindre er det noen typiske resultater for var observante punter:

Ikke verst, jeg er sikker pa at du er enig. Punteren bombet ut av og til, men oftest gikk de bort med mye mer enn de begynte med.

Sa har jeg bare brutt et tilsynelatende uforutsigbart kasinospill? Det tviler jeg pa. Anbefaler jeg deg umiddelbart a ga ut til n rmeste roulettehjul og prov dette & # 8216; strategi & # 8217 ;? Absolutt ikke (igjen, hvis du vet eller tror du har et gambling problem, klikk her).

Imidlertid er det i teorien minst at oddsene dine pa en roulette kan forbedres hvis (og disse er noen hoye antagelser):

Du har lagret den fulde nullsekvensen (eller dobbelt null), og kan tilbakekalle minst fem av tallene pa hver side av et gitt nummer innen noen fa sekunder. Kasinoansatte spinner ballen med et betydelig niva av konsistens Du er i stand til a identifisere nummeret hvor ballen er spunnet fra, og viktigst: Roulettbordet lar deg plassere spill etter at ballen er spunnet.

Designhensyn.

For enkelhetens skyld dekker dbo.Spin-lagret prosedyre ikke alle mulige innsatstyper for rulett (for eksempel radspill, null-tilstotende hjorner, osv.). Disse kan lett legges til som klausuler i prosedyren (for eksempel kan en 0-1-2 hjorne-innsats bare bruke @ value1 = 0, @ value2 = 1 og @ value3 = 2. Hjulverdiene er inneholdt i sitt eget bord For a enkelt utveksle hjuloppsett, er et null-roulettehjul betydelig forskjellig fra en dobbel null-layout. Hvis antall tall pa hjulet endres, trenger du bare a endre et par verdier i de lagrede prosedyrene ( dvs. avgjore avkastning og modulering av spinnhastigheten av resultatet). For klarhetens skyld tommer dbo.Run_Trial-lagret prosedyre tabellene for de fylles pa dem, hvis du vil foreta en grundig analyse av ulike spillstrategier over en lang serie spinn, kan du enkelt fjerne disse TRUNCATE TABLE linjene fra prosedyren.

Bruk koden ovenfor til a leke med dine egne spillstrategier, hvis du har noen. Ogsa noen forslag eller forbedringer av koden vil bli verdsatt, i kommentarer.

Dele denne:

I slekt.

Post navigasjon.

Legg igjen et svar Avbryt svar.

dbo.bettors: inneholder vare innbetalte punters som spiller pa rulettbordet.

dbo.bettors: Tabellen mangler hvilke parametere som skal settes.

Mange takk for a peke ut det, og unnskyldninger for utelatelsen.

Script for [dbo]. [Bettors] bordet bor v re:

CREATE TABLE [dbo]. [Bettors]

[id] [int] IDENTITET (1,1) IKKE NULL,

[navn] [varchar] (50) NULL,

[balanse] [penger] NULL.

OPPDATERT 14/11/2012 & # 8211; Min feil ovenfor; endret [beskrivelse] til [navn]. Unnskyldninger.

Tanken er for svaret.

Jeg heter shanan

na en student i DBA SQL kurs, far vi et siste prosjekt.

a bygge Internet Casino.

Ett av oppdragene er a skrive enkle Blackjack-spill.

hvis du kan, kan du hjelpe meg a skrive dette skriptet og prosjektet.

jeg mast til suksess. (fordi jeg ikke er sterk student )

Min epost er: xxxxxx @ xxxxxx.

Med hensyn til feilen du mottok med Run_Trial-prosedyren (linje 76), har jeg endret kommentarene ovenfor for klarhet. Unnskyld for unoyaktigheten.

Blackjack ville v re en veldig verdig oppfolging av dette innlegget. Jeg vil gjerne se resultatene av en noyaktig blackjack-simulering etter 1000 hender, for eksempel.

Takk for din interesse, jeg vil holde deg oppdatert.

jeg tester Sp Spin_Run_Trial.

det fungerer bra.

Msg 201, Niva 16, Niva 3, Fremgangsmate Spin, Linje 0.

Prosedyre & # 8216; Spin & # 8217; forventer parameter & # 8216; @ sightedIndex & # 8217;, som ikke ble levert.

Unnskyld hvis jeg forstyrrer.

EXEC [dbo]. [Spin] (NULL);

OPPDATERT 15/11/2012 – Min feil over; SQL litt rusten!

EXEC [dbo]. [Spin] (NULL);

Msg 156, Niva 15, Stat 1, Linje 1.

Feil syntaks n r sokeordet & # 8216; NULL & # 8217 ;.



Hilsen! Vil du spille i det mest heldige kasinoet? Vi fant det for deg. Klikk her nå!