Rouletteprogram c ++ kode

Rouletteprogram c ++ kode h1>

Fa via App Store Les dette innlegget i var app!

Roulette spill i C ++

Jeg er litt ny pa C ++ og lurte bare pa om noen kunne gi meg tips om hvordan jeg kunne gjore koden min mer effektiv (jeg la noen kommentarer til koden for a hjelpe deg med a forsta det bedre).

Er det en god ide a bruke svitsj s? Er det en mate jeg kan bruke flere funksjoner / arrays / pointers?

Her er noen av koden:

Siden det ikke er noen lokker i koden din som ikke venter pa at brukeren skal gi noen innspill, er det sannsynligvis altfor tidlig a snakke om effektivitet. Er koden malbart sakte? Lar du deg henge? Hvis ikke, med mindre du har et uvanlig behov, lagre sporsmal om effektivitet for senere.

Sa la oss snakke om noen viktige ting: lesbarhet og vedlikehold. Her er noen tips om hvordan du kan forbedre lesbarheten og vedlikeholdet av koden din. Dette er ikke harde regler som du aldri bor bryte (spesielt den pa kommentarer); de er retningslinjer for mater a gjore livet ditt lettere, slik at du bor l re a boye nar retningslinjene gjor ting vanskelig i stedet.

Jeg haper dette hjelper, selv om det kan v re mye a ta med pa en gang. Du er velkommen til a stille oppfolgingssporsmal og fa andre meninger.

Unnga redundans.

Redundans kan dukke opp i mange former. Et eksempel pa det er i din arrayserkl ring, ved bruk av kode som int betType [11] =; . Med mindre det er noe veldig spesielt med nummer 11, er det ingen grunn til a kalle det ut. I stedet bare si int betType [] =; som automatisk vil bestemme storrelsen pa arrayet for deg.

Dette vil hjelpe deg med a unnga magiske tall som ikke betyr mye senere. Tross alt, hvis noen spor deg hva som er spesielt med 11, tror du det er antall tilgjengelige innsatstyper? Men hvis de spurte hva betTypes.size () mente, ville det v re enkelt a svare.

En annen mate redundans dukker opp er i store blokker med gjentakende kode. For eksempel har sak 1 og sak 2 nesten samme kode. Faktisk matte jeg lese det et par ganger for a finne den delen som var annerledes. Noen ganger kan dette best handteres ved a refactoring lignende deler av koden til funksjoner, og passerer parametere til dem som styrer hvordan de adskiller seg. Noen ganger er det bedre bare a trekke ut delene som er identiske til enklere funksjoner, og bruke dem. Jeg berorer dette mer under, men jeg har absolutt ikke svaret.

Unnga forvirring.

I koden kommenterte Viser et stort dollarskilt, det er mange gjengivelser fra int til char slik at cout skriver ut verdien som et tegn. Men de aktuelle tegnene er ikke sa uvanlige. Bare bruk den faktiske karakteren du vil vise, for eksempel erstatning.

Dette vil ikke bare v re lettere a skrive eller oppdatere, det blir lettere a lese.

Unnga kommentarer.

Denne anbefalingen er litt kontroversiell, men det begynner a malrette sporsmalet ditt om funksjoner. I stedet for a kommentere hva en linje med kode gjor, kommentere hvordan en blokk med kode gjor noe uvanlig. Nar du forst starter, virker alt uvanlig, men til slutt ser du monstre og trenger bare a kommentere ting som ikke er vanlige monstre.

Men da, istedenfor a kommentere hva en blokk med kode gjor, gi den et navn i stedet ved a sette det i en funksjon. For eksempel har du flere tilfeller hvor du spor hvor mye brukeren vil satse pa et tall, og deretter lose til de oppgir et gyldig nummer. Du kan trekke ut denne sloyfen til en hjelperfunksjon som denne:

Finn en annen kode som ikke forandrer seg mye og trekk det ut i funksjoner ogsa. Koden kommenterte for eksempel Kontrollerer om spilleren vant eller tapt sin innsats, ser jeg opprette en funksjon som du vil kalle slik:

Etter at du har gjort disse endringene, vil de forskjellige delene i utgangspunktet skje, og delene som er de samme vil ha gode navn som forteller deg hva de gjor selv om de ikke har kommentarer. Og da kan du lettere unnga feil kommentarer som tilfelle 2 ‘s Sjekk om nummeret er gyldig (mellom 1 og 36) som faktisk sjekker for 33.

Du kan ogsa unnga kommentarer ved a navngi konstanter. I stedet for a begynne med int bankAccount = 500 og deretter 500 linjer som senere refererer til 500 for a finne ut de samlede gevinster, kanskje deklarere const int StartBankAccount = 500; og bruk navnet i stedet for nummeret pa begge steder. Hvis du bestemmer deg for a endre den opprinnelige kontobelopet, bidrar dette ogsa til at ditt sluttoppsummering forblir riktig.

Unnga darlige terninger.

Selv om dette er et leketoysprogram, og det er lite sannsynlig at en person vil spille lenge nok til det, er rand ()% max en feilaktig tiln rming til a generere tilfeldige tall. Det er feil pa mater for subtilt for meg a forklare (jeg forstar det, men ikke godt nok til a forklare det). Men Stephan T. Lavavej vet det mye bedre og forklarer det i en video som heter rand () Betraktet skadelig; se pa det og bruk tiln rmingen han anbefaler hvis du vil ha et mer jevnt fordelt tilfeldig nummer.

Jeg har funnet et par ting som kan hjelpe deg med a forbedre koden din.

Ikke misbruk ved hjelp av navneomrade std.

A bruke navneomrade std pa toppen av hvert program er en darlig vane som du ville gjore godt for a unnga. Jeg vet ikke at du faktisk har gjort det, men det er en alarmerende vanlig ting for nye C ++ -programmerere a gjore.

Et alternativ kan v re a gjore folgende, helst innenfor kallingsfunksjonen.

Separat I / O fra spilllogikk.

Programmet har for tiden spilllogikk og I / O alt sammenblandet. Det ville v re bedre a skille de to. Spesielt vil jeg anbefale at spilleren, hver innsats og roulettehjulet hver blir gjort separate objekter. Pa den maten, hvis du bestemte deg for a ha flere spillere med flere typer spill pa samme hjul, kan det gjores ganske enkelt ved a bruke tilstanden til hjulet til hvert spill og deretter oppdatere spillerens status (kontosaldo) tilsvarende.

Eliminere «magiske tall»

Det er noen fa numre i koden, for eksempel 1 og 36 som har en bestemt betydning i sin spesielle kontekst. Ved a bruke navngitte konstanter som MINIMUM_BET_AMOUNT eller WHEEL_SLOTS blir programmet lettere a lese og vedlikeholde. For tilfeller der konstanten bare har mening med hensyn til en bestemt gjenstand, bor du vurdere a lage den konstante delen av objektet.

Reduser omfanget av variabler.

Innenfor gjeldende kode er alle variabler i samme omfang. Bedre vil v re a minimere omfanget av variabler, slik at en variabel som betAmount kun er i omfang for varigheten de faktisk trengs. Objektorientering vil hjelpe mye med det.

Legg til realisme i spillet.

De fleste ekte roulettabeller har minst en nullspor (mange har bade 0 og 00). A legge dem til spillet ville gjore ting litt mer realistiske. Jeg har ogsa sett videoskjermer pa kasinoer som viser de siste dusin eller sa resultatene. Pa et rett hjul har dette selvsagt ingen nytteverdi til spillerne, men folk har ofte det goy a se pa de foregaende resultatene og gjore en viss innsats basert pa det, og illustrerer derfor hvorfor de kaller det Gambler’s feil.

Bruk et menyobjekt eller minst en vanlig menyfunksjon.

Pa en rekke steder i koden har du noe som en meny. Koden din presenterer et par alternativer og spor brukeren om a velge en basert pa et inntastingsnummer. I stedet for a gjenta koden pa mange steder, ville det v re fornuftig a gjore det generisk. Bare de snakkesnorene endrer seg, men den underliggende logikken om a presentere valgene og be om innspilling er alle de samme. Det ser ut til at du er en begynnelsesprogrammerer, og sa kanskje du ikke har l rt om gjenstander enna, men denne typen gjentatte oppgaver med tilknyttede data er veldig velegnet til objektorientert programmering, og det er noe C ++ er veldig godt pa uttrykke.

Vurder a bruke en bedre tilfeldig talgenerator.

Du bruker for oyeblikket denne koden for a generere tilfeldige tall:

Det er to problemer med denne tiln rmingen. Den ene er at de lave rekkefolgebitene til tilfeldige tallgeneratoren ikke er spesielt tilfeldige, slik at hverken med tilfeldig 1 er. Pa min maskin er det en liten, men malbar forspenning mot 0 med det. Det andre problemet er at du bare skal fro tilfeldige tallgeneratoren en gang og ikke hver gang den brukes.

En bedre losning, hvis kompilatoren og biblioteket stotter det, ville v re a bruke C ++ 11 `std :: uniform_int_distribution. Det ser komplisert ut, men det er faktisk ganske enkelt a bruke:

For et rulettbord med mulige verdier 0 til 36, ring det med rand_int (0,36); .