from spiller import Spiller from rute import Rute class Brett: def __init__(self): self._brett = self._lag_brett() # Bruker en hjelpemetode for ? lage brettet s? det ikke blir s? mye kode i konstrukt?ren self._spiller1 = None self._spiller2 = None # Hjelpemetode til konstrukt?ren for ? lage brettet def _lag_brett(self): brett = [[],[],[]] for rad in brett: for i in range(3): rad.append(Rute()) return brett # Metode for ? legge til spiller def legg_til_spiller(self, symbol): spiller = Spiller(symbol) # Trenger ikke egt denne, kan lage Spiller-objektet direkte i if-setningene # Sjekker om noen av spillerne er ledige og legger is?fall til spilleren if self._spiller1 is None: self._spiller1 = spiller elif self._spiller2 is None: self._spiller2 = spiller else: print("Det finnes allerede to spillere. Vent til neste runde!") # Metode for ? plassere brikke, tar inn spiller og koordinater def plasser_brikke(self, spiller, x, y): # Sjekker om ruten er opptatt, skriver ut feilmelding hvis den er opptatt, plasserer brikken hvis ikke # Returnerer False om ruten var opptatt, True om ruten var ledig og man plasserte brikken if self._brett[x][y].er_opptatt(): print("Denne ruten er opptatt og du kan ikke plassere brikken din her.") return False else: self._brett[x][y].plasser_brikke(spiller) return True # Metode for ? sjekke vinner def sjekk_vinner(self): # Sjekker om det er tre p? rad horisontalt for rad in self._brett: if rad[0].hent_brikkeeier() == rad[1].hent_brikkeeier() == rad[2].hent_brikkeeier() != None: return rad[0].hent_brikkeeier().hent_symbol() # Sjekker om det er tre p? rad vertikalt for kol in range(3): if self._brett[0][kol].hent_brikkeeier() == self._brett[1][kol].hent_brikkeeier() == self._brett[2][kol].hent_brikkeeier() != None: return self._brett[0][kol].hent_brikkeeier().hent_symbol() # Ekstra if self._brett[0][0].hent_brikkeeier() == self._brett[1][1].hent_brikkeeier() == self._brett[2][2].hent_brikkeeier() != None: return self._brett[0][0].hent_brikkeeier().hent_symbol() if self._brett[0][2].hent_brikkeeier() == self._brett[1][1].hent_brikkeeier() == self._brett[2][0].hent_brikkeeier() != None: return self._brett[0][2].hent_brikkeeier().hent_symbol() # Alternativ m?te for ekstra-oppgaven """ brikke = self._brett[1][1].hent_brikkeeier() if (brikke) and ((brikke == self._brett[0][0].hent_brikkeeier() == self._brett[2][2].hent_brikkeeier()) or (brikke == self._brett[0][2].hent_brikkeeier() == self._brett[2][0].hent_brikkeeier())): return brikke """ ### # Returnerer None hvis det ikke er tre p? rad return None # Metode for ? spille spillet def spill(self): # Sjekker om det er nok spillere if self._spiller1 == None or self._spiller2 == None: print("Det er ikke nok spillere til ? spille spillet.") else: trekk = 0 spiller = self._spiller1 # While-l?kke som kj?rer s? lenge spillet p?g?r (s? lenge brettet ikke er fullt og det ikke er noen vinner) while trekk < 9 and self.sjekk_vinner() == None: print(f"{spiller.hent_symbol()} sin tur til ? plassere en brikke.") # Tar inn koordinatene som input x = int(input("X-koordinater: ")) y = int(input("Y-koordinater: ")) # While-l?kke som sjekker om bruker har oppgitt gyldige koordinater while not(0 <= x <= 2) or not(0 <= y <= 2): print("Ugyldig koordinater for rute p? brettet. Vennligst skriv inn koordinatene p? nytt.") x = int(input("X-koordinater: ")) y = int(input("Y-koordinater: ")) # Sjekker om spilleren f?r plassert brikken p? oppgitt rute og bytter is?fall spiller og ?ker trekk med 1 har_plassert = self.plasser_brikke(spiller, x, y) if har_plassert: if spiller == self._spiller1: spiller = self._spiller2 else: spiller = self._spiller1 trekk += 1 if self.sjekk_vinner() == None: # Hvis ingen har tre p? rad n?r brettet er fullt print("Ingen vinner") else: # Hvis ikke skrives vinner ut print(f"{self.sjekk_vinner()} vant spillet!")