blackjack.

blackjack.

Start serveren forst:

cd til roten til dette prosjektet hvor package.json er Run: ./bin/server.sh.

Deretter starter en klient:

CD til roten til dette prosjektet hvor package.json er Run: ./bin/client.sh.

Server ma ha en REST API for a spille Blackjack (ferdig) Ma stotte: mate a motta 2 startkort og forhandlerens innledende kort (ferdig) ma stotte spilleraksjoner: logg inn (ferdig) logg ut (ferdig) se tabellene (ferdig) bli med i et bord ned (ikke implementert) overlevering (ikke implementert) delt (ikke implementert) Etter en spillers endelige handling i en hand, bor de l re utfallet (ferdig) Bruk en typisk forhandlerstrategi for a sta pa 17 eller hoyere (ferdig) Forhandler vil trekke pa myk 17 (ferdig) Forhandler vil tegne hvis under hard 17 og spiller har en bedre hand (ferdig) Stotte flere spillere (ferdig) Fungerer, men flere spillere pa samme bord er ikke testet Klienten ma avstemme for a oppdage nar handen er over (ikke implementert) Stotte flere samtidige blackjack-spill (ferdig) Arbeider, begrense 1 spiller per bord Bruk en 8-dekksko med et kutt 75% i skoen (ferdig) Etter hver hand, hvis dekket er forbi kuttpunktet , den gamle skoen blir kastet og en ny sko er opprettet (ferdig) Hvis en spiller ikke er i et bord, er de i «lobbyen» (ferdig) I lobbyen kan spillerne bli med i tabeller, se tabeller og avslutte (ferdig) Nar spillerne forlater et bord eller slutter og satse pa en hand i gang, bor de miste innsatsen (ferdig)

Karakterbasert Node.js-klient (ferdig) Testramme med flere samtidige klienter som angir handlinger og tilfeldige handlinger (ferdig) Discovery mellom klient og server ved bruk av UDP-kringkasting (ikke implementert) Chat-funksjonalitet for spillere (ikke implementert) Spillerens persistens for score (gevinster) (ikke implementert)

Jeg var i stand til a fullfore denne mengden arbeid ved a utnytte eksisterende moduler. Mokka, asynk, spor og be om alt lagret en enorm tid.

I tillegg ble mange av modulene tidligere skrevet av meg selv:

config-js-config-modulen. Stotte for regioner og automatisk lasting nar fil endrer fuzelog – logger fusing log.js med log4js layouter og farger, stottekonsoll og fillogging er2-type kontrollbibliotek hvor hver funksjon returnerer enten sann eller falsk json-rest-api-lettvekt REST API som mottar og svarer pa JSON HTTP-foresporsler, stotter alle verbs sprintf.js – nesten fullfort implementering av printf og sprintf tcp-port-brukt – kontroller om en TCP-port allerede er bundet.

Jeg er fornoyd med hvordan det kom ut. Proven / fangsten pa sluttpunktene muliggjorde liberal bruk av «assert» og «har» bekymringsfri siden alt skjer som et resultat av et REST-anrop, og det er ingen asynkron kode utenfor nettverket, pa grunn av ingen utholdenhet (sa domener var ikke nodvendig).

Det er ting jeg ville endre, skjont:

Flere enhetstester. Mer oppforsel for brukertester. Mersenne-twister-modulen er helt JavaScript og er for langsom. Du kan se hvordan opprettelsen av 8-dekkskoen tar over 100 ms (for lenge) ved a kjore enhetstester. Representasjonen av kortene som selvbeskrivende objekter i dekkene gjorde klienten enklere, men for et produksjonssystem ville jeg bruk indikasjoner som refererer til det bestilte dekket for a redusere minnekortet. json-rest-api, mens raskere enn express.js (pa grunn av enkelhet), trenger et konsept med mellomvare og jeg ble overrasket over at jeg ikke la til stotte for sporringsstrenger. Hvis jeg var serios om dette, ville jeg enten bytte til a uttrykke eller sette arbeid i json-rest-api. I et produksjonssystem vil det v re asynk-krav for persistens, og med det vil jeg trenge a legge til stotte for domener. config-js trenger virkelig a bruke NODE_ENV for a ha stotte for utvikling, oppstart og produksjonskonfigurasjonsfiler.

Alle svarene har:

et JSON-legeme en «cmd» eiendom med navnet pa kommandoen en «suksess» boolsk eiendom som enten er «sann» eller «falsk» hvis «suksess» Hvis det er feil, er det en «feil» eiendom med en strengmelding.

Hvis foresporselen er en POST, er foresporselsorganet JSON.

REST API-kommandoene folger.

Tillater spillerne a logge inn pa spillet, hvor de kan vise tabeller og bli med i et spill.

navn – navnet du vil spille som.

ID-spiller ID, et positivt heltall, som skal brukes til alle etterfolgende foresporsler.

Tillater spillerne a se bordene og hvem som er ved hvert bord.

bord – en arary av alle tabellene hvor nokkelen er tabell-ID og dataene beskriver bordspillerne – en rekke spillere ved bordtilstanden – spilltilstand for bordet.

Tillater spillerne a bli med pa et bord og spille neste hand handtert. Fordi en hand kan v re fremgang pa det tidspunktet, ma kundene sjekke tilbake pa et intervall for a fa handen. Dette betyr at en levetidstilkobling skal brukes, men i malestokk, dette ville ikke v re ideelt, da du vil holde forbindelsene til et minimum for a skalere.

id – spillerens ID mottatt ved innlogging.

intervalltid for a sjekke for neste hand pa dekkskort i millisekunder balanseavspillerens gevinster (eller tap)

Tillater spilleren a forlate bordet. Hvis en hand er i spill, vil spilleren miste innsatsen til huset. Spilleren vender tilbake til lobbyen og mottar deretter informasjon om alle tabellene.

id – spillerens ID mottatt ved innlogging.

intervalltid for a sjekke for neste hand pa dekkskort i millisekunder balanseavspillerens gevinster (eller tap)

Tillater spillerne a slippe ut av spillet.

ID-spiller ID, et positivt heltall, som skal brukes til alle etterfolgende foresporsler.

Indikerer at spillerne er inne i neste hand og hvor mye de satser pa.

ID-spiller ID mottatt nar man slar seg til spillspillet – mengde valuta for a satse pa neste hand.

balanse – spillerens valutasaldo minus innsatsen de bare plasserte handkort i spilleren og handen. Ved indeksposisjon i et dekk. Hvis spilleren har delt, vil det ogsa v re en «hand2» total – total verdi av handen. Hvis det er et ess present, vil verdien en array som inneholder alle mulige verdier h1Over21 – True, hvis spillerens verdi er over 21 pa hand1. Hvis det er en hand2, fra en splitt, vil det ogsa v re en h2Over21 gjort – True hvis spillerens interesse for handen er avsluttet.

Informerer forhandleren om a legge til et nytt kort i spillerens hand. Hvis spilleren overstiger 21, mister spilleren handen.

ID-spiller-ID gitt nar spilleren slutter seg til spillhanden, pa hvilken, for a treffe: 1 – for standard, hvis ikke spesifisert, antas 1 a v re 2 – sta pa den andre handen kun 3 – sta pa begge hender.

balanse – spillerens valutasaldo minus innsatsen de nettopp har plassert. handkort i spilleren og # 39s hand. Ved indeksposisjon i et dekk. Hvis spilleren har delt, vil det ogsa v re en «hand2» total – total verdi av handen. Hvis det er et ess present, vil verdien en array som inneholder alle mulige verdier h1Over21 – True, hvis spillerens verdi er over 21 pa hand1. Hvis det er en hand2, vil det ogsa v re et h2_over21 gjort – True hvis spillerens interesse for handen er avsluttet.

Informerer forhandleren, du vil sta pa handen, ikke flere kort skal handteres. Nar alle spillerne er avsluttet, vil forhandleren handtere handen og resultatene er kjent.

id – Spiller ID gitt nar spilleren slutter seg til spillhanden – Valgfritt. Hvis ikke, er 1 standard. Handen som skal sta: 1 – For standard, hvis ikke spesifisert, antas 1: 2 – sta pa den andre handen kun 3 – sta pa begge hender.

balanse – spillerens valutasaldo minus innsatsen de bare plasserte handskort i spilleren og 39-handen. Ved indeksposisjon i et dekk. Hvis spilleren har delt, vil det ogsa v re en «hand2» total – total verdi av handen. Hvis det er et ess present, vil verdien t v re en matrise som inneholder alle mulige verdier h1Over21 – True, hvis spillerens verdi er over 21 pa hand1. Hvis det er en hand2, vil det ogsa v re et h2_over21 gjort – True hvis spillerens interesse for handen er avsluttet.

Spilleren kan oke den forste innsatsen med opptil 100% i bytte for a forplikte seg til a sta etter mottak av noyaktig ett kort. Den ekstra innsatsen er plassert i innsatsboksen ved siden av den originale innsatsen. Noen spill tillater ikke at spilleren oker innsatsen med andre belop enn 100%. Ikke-kontrollerende spillere kan doble sin innsats eller nekte a gjore det, men de er bundet av den kontrollerende spillernes beslutning om a ta bare ett kort.

Signal: Legg ekstra chips ved siden av den originale innsatsen utenfor innsatsboksen, og pek med en finger.

Balansespillerens valutasaldo minus innsatsen de nettopp har lagt spilleren og # 39s nav rende innsatshandskort i spilleren og 39-handen. Ved indeksposisjon i et dekk. Hvis spilleren har delt, vil det ogsa v re en «hand2» totalt – Den totale verdien av handen. Hvis det er et ess present, vil verdien en array som inneholder alle mulige verdier h1Over21 – True, hvis spillerens verdi er over 21 pa hand1. Hvis det er en hand2, vil det ogsa v re et h2_over21 gjort – True hvis spillerens interesse for handen er avsluttet.

Kun tilgjengelig som forste handbeslutning: Noen spill gir muligheten til a «overgi», vanligvis i hulkortspill og umiddelbart etter at forhandleren har sjekket for blackjack Nar spilleren overtar, tar huset halvparten av spillerenes innsats og returnerer andre halvdel til spilleren; Dette avslutter spillerens interesse i handen. Foresporselen om a overgi er gjort verbalt, det er ikke noe vanlig handsignal.

balanse – spillerens valutasaldo minus innsatsen de bare plasserte innsats – spilleren og # 39s nav rende spillhand – kortene i spilleren og handen. Ved indeksposisjon i et dekk. Hvis spilleren har delt, vil det ogsa v re en «hand2» totalt – Den totale verdien av handen. Hvis det er et ess present, vil verdien en array som inneholder alle mulige verdier h1Over21 – True, hvis spillerens verdi er over 21 pa hand1. Hvis det er en hand2, vil det ogsa v re et h2_over21 gjort – True hvis spillerens interesse for handen er avsluttet.

Kun tilgjengelig som den forste avgjorelsen av en hand: Hvis de to forste kortene har samme verdi, kan spilleren splitte dem i to hender, ved a flytte et annet spill som er like som det forste til et omrade utenfor innsatsboksen. Forhandleren skiller de to kortene og trekker et ekstra kort pa hver, og plasserer ett spill med hver hand. Spilleren spiller deretter ut de to separate hendene i sin tur, med noen begrensninger. Noen ganger, i tilfelle av tiverdige kort, tillater noen kasinoer bare a splitte nar kortene har de samme rangene; for eksempel kan en hand pa 10-10 bli delt, men ikke en av 10-konge. Imidlertid behandles vanligvis alle 10-verdi kortene det samme. Dobling og videre spalting av hendene etter splitte kan v re begrenset, og blackjacks etter splitting regnes som ikke-blackjack 21 nar man sammenligner mot forhandlerens hand. Hitting split ess er vanligvis ikke tillatt. Ikke-kontrollerende spillere kan folge den kontrollerende spilleren ved a legge ned et ekstra bud eller avsla for a gjore det, istedenfor a forene deres eksisterende innsats med en av de to etterdelte hendene. I sa fall ma de velge hvilken hand a spille bak for de andre kortene trekkes. Noen kasinoer gir ikke disse spillerne ikke-kontrollerende spillere, og krever at innsatsen til en spiller som ikke velger a dele, forblir med den forste av de to etterdelte hendene.

Signal: Plasser ekstra sjetonger ved siden av den originale innsatsen utenfor innsatsboksen; pek med to fingre spredt inn i en V-formasjon.

Balansespillerens valutasaldo minus innsatsen de nettopp har lagt spilleren og # 39s nav rende innsats, som na er en serie, 1 innsats for hver handhandskort i spilleren og 39-handen. Ved indeksposisjon i et dekk. Hvis spilleren har delt, vil det ogsa v re en «hand2» total – total verdi av handen. Hvis det er et ess present, vil verdien en array som inneholder alle mulige verdier h1Over21 – True, hvis spillerens verdi er over 21 pa hand1. Hvis det er en hand2, vil det ogsa v re et h2_over21 gjort – True hvis spillerens interesse for handen er avsluttet.

Tillater utviklere a angi hvor mange kreditter en spiller har til en hvilken som helst verdi.

Lar utviklere fa informasjon om spilleren. Den bruker en POST fordi jeg var for presset for tiden for a utvide json-rest-api for a handtere sporringsstrenger.