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!")