from Rute import Rute from Spiller import Spiller class Brett: def __init__(self): self._rutenett = [[],[],[]] self._spillere = [] for x in range(3): for y in range(3): self._rutenett[x].append(Rute()) def legg_til_spiller(self, symbol): if len(self._spillere) == 2: print("Det fins allerede 2 spillere") else: spiller_objekt = Spiller(symbol) self._spillere.append(spillerobjekt) def plasser_brikke(self, spiller, x, y): if not self._rutenett[x][y].er_opptatt(): self._rutenett[x][y].plasser_brikke(spiller) else: print("Denne ruten er opptatt") def sjekk_vinner(self): vinneren = None # horisontale for x in range(3): if self._rutenett[x][0].er_opptatt() and self._rutenett[x][1].er_opptatt() and self._rutenett[x][2].er_opptatt(): if self._rutenett[x][0].hent_brikkeier().hent_symbol() == self._rutenett[x][1].hent_brikkeier().hent_symbol() and self._rutenett[x][1].hent_brikkeier().hent_symbol() == self._rutenett[x][2].hent_brikkeier().hent_symbol(): vinneren = self._rutenett[x][0].hent_brikkeier() return vinneren # vertikale for y in range(3): if self._rutenett[0][y].er_opptatt() and self._rutenett[1][y].er_opptatt() and self._rutenett[2][y].er_opptatt(): if self._rutenett[0][y].hent_brikkeier().hent_symbol() == self._rutenett[1][y].hent_brikkeier().hent_symbol() and self._rutenett[1][y].hent_brikkeier().hent_symbol() == self._rutenett[2][y].hent_brikkeier().hent_symbol(): vinneren = self._rutenett[0][y].hent_brikkeier() return vinneren # diagonale if self._rutenett[1][1].er_opptatt(): # venstre diagonal if self._rutenett[0][0].er_opptatt() and self._rutenett[2][2].er_opptatt(): if self._rutenett[0][0].hent_brikkeier().hent_symbol() == self._rutenett[1][1].hent_brikkeier().hent_symbol() and self._rutenett[1][1].hent_brikkeier().hent_symbol() == self._rutenett[2][2].hent_brikkeier().hent_symbol(): vinneren = self._rutenett[1][1].hent_brikkeier() return vinneren # h?yre diagonal if self._rutenett[0][2].er_opptatt() and self._rutenett[2][0].er_opptatt(): if self._rutenett[0][2].hent_brikkeier().hent_symbol() == self._rutenett[1][1].hent_brikkeier().hent_symbol() and self._rutenett[1][1].hent_brikkeier().hent_symbol() == self._rutenett[2][0].hent_brikkeier().hent_symbol(): vinneren = self._rutenett[1][1].hent_brikkeier() return vinneren return None def _sjekk_fullt(self): # ektstra hjelpemetode som brukes av spill metoden for x in range(3): for y in range(3): if not self._rutenett[x][y].er_opptatt(): return False return True def spill(self): x_spiller = Spiller("X") o_spiller = Spiller("O") vunnet = False print("Formatering p? input er:\nx y \nf.eks 1 1 for midten") while not vunnet: self.skriv_ut() spiller1 = list(map(int, input("Skriv inn sted ? plasser brikke for spiller 1:").strip().split())) # map caster alle elementene i listen spiller1 til int og den blir konvertert fra string til liste med strip() if spiller1[0] >= 0 and spiller1[0] <= 2 and spiller1[1] >= 0 and spiller1[1] <= 2: self.plasser_brikke(x_spiller, spiller1[0], spiller1[1]) else: print("Ugyldig input") vinnersjekk = self.sjekk_vinner() if vinnersjekk != None: vunnet = True print(f"Spiller {vinnersjekk.hent_symbol()} vant!") return self.skriv_ut() if self._sjekk_fullt(): vunnet = True # Stopper l?kken print("Ingen vant og brettet er fullt!") else: spiller2 = list(map(int, input("Skriv inn sted ? plasse brikke for spiller 2:").strip().split())) if spiller2[0] >= 0 and spiller2[0] <= 2 and spiller2[1] >= 0 and spiller2[1] <= 2: self.plasser_brikke(o_spiller, spiller2[0], spiller2[1]) else: print("Ugyldig input") if vinnersjekk != None: vunnet = True print(f"Spiller {vinnersjekk.hent_symbol()} vant!") return def skriv_ut(self): for x in range(3): print(f"{self._rutenett[x][0]} {self._rutenett[x][1]} {self._rutenett[x][2]}") brett = Brett() brett.spill()