View Single Post
Sitat av 0xFF Vis innlegg
Sett hakeparentesen på samme kolonne som linjen over
Vis hele sitatet...
Det er faktisk mange noenlunde anerkjente måter å gjøre dette på. Trådstarteren ser ut til å bruke Whitesmiths stil. Men jeg er helt enig i at dette virker rotete, selv om jeg klart foretrekker K&R over Allman som du bruker.


Men til programmet. Jeg vil anbefale å prøve å skrive så ryddig og lettlest kode som mulig, slik at det blir mye enklere å unngå og å finne feil. Noen eksempler er at du bruker en variabel som heter "b". Man skjønner når man leser koden at den representerer hvilken spiller som er aktiv, men det er jo ikke særlig lesbart. Hvorfor ikke kalle den "player" eller "active_player"? En annen ting er at det blir forvirrende med x og y. For dette brukes både som spillernavn, og som markering på brettet (selv om du sa du bruker 'x' og 'o'), og som input-variabler for koordinater, og som tellevariabler i løkkene. Noe av dette gir mening å slå sammen, andre av dem er mer hensiktsmessig å holde fra hverandre.

Jeg forstår heller ikke sjekken din mot slutten. Når du looper gjennom brettet, også sjekker du om den aktuelle ruta har blitt fylt inn av den aktive spilleren, og hvis den har blitt det så sjekker du om ruta er på den ene kanten av brettet (x == ruter-1), og hvis det er tilfellet så har man vunnet. Det er nok dette som gjør at spillet ikke virker, og den litt lave lesbarheten som gjør at du ikke så det umiddelbart selv. Så ikke undervurder lesbarhet. Velg en flyt og en navnegivning av variabler, konstanter og funksjoner som gjør koden mest mulig lesbar, som gjør det mest mulig opplagt hva du gjør og mener.

For øvrig, en enkel måte å bli kvitt den goto-en på, er å trekke ut ting i funksjoner. Du gjør enkelte distinkte ting i løpet av programflyten: Du skriver ut instruksjoner; du initialiserer brettet; du avgjør hvilken spiller det er sin tur; du skriver ut brettet; du ber om input fra aktiv spiller; og du sjekker brettet for tre like. Alt dette kan trekkes ut som separate funksjoner, og hva du velger å trekke ut er selvsagt opp til deg. Men om du sjekker brettet med en funksjon som returnerer en verdi som avhenger av om spilleren vant, så trenger du ikke å bryte ut av løkkene på samme måte, du kan bare returnere fra inni løkka.