# Oppgave A class Spiller: def __init__(self, symbol): if symbol in ["X", "O"]: self._symbol = symbol else: print("Ugyldig symbol. Vennligst bruk 'X' eller 'O'...") def hent_symbol(self): return self._symbol # Oppgave B class Rute: def __init__(self): self._spiller = None def plasser_brikke(self, spiller): self._spiller = spiller def er_opptatt(self): if self._spiller is None: return False else: return True def hent_brikkeeier(self): return self._spiller # Oppgave C class Brett: def __init__(self): self._rutenett = self._opprett_ruter() # Kall p? hjelpemetode self._spiller1 = None self._spiller2 = None # Hjelpemetode for ? opprette n?stet liste def _opprett_ruter(self): ytre_liste = [] # Ytre liste som skal holde tre indre lister for i in range(3): # Ytre l?kke: Oppretter tre indre lister indre_liste = [] for j in range(3): # Indre l?kke: oppretter tre Rute objekter ny_rute = Rute() indre_liste.append(ny_rute) # Legg til hvert Rute objekt i den indre listen ytre_liste.append(indre_liste) # Legg til den indre listen i den ytre listen return ytre_liste def legg_til_spiller(self, symbol): if symbol == "X" or symbol == "O": if self._spiller1 is None: self._spiller1 = Spiller(symbol) print(f"Spiller lagt til p? plass 1 med symbol {self._spiller1.hent_symbol()}") elif self._spiller2 is None: self._spiller2 = Spiller(symbol) print(f"Spiller lagt til p? plass 2 med symbol {self._spiller2.hent_symbol()}") else: print("To spillere er allerede lagt til") else: print(symbol, " er ugydlig... pr?v igjen") def plasser_brikke(self, spiller, x, y): if 0 <= x < 3 and 0 <= y < 3: rute = self._rutenett[x][y] if not rute.er_opptatt(): rute.plasser_brikke(spiller) else: print("Ruten er opptatt...") else: print("Ugyldige koordinater...") # Oppgave D def sjekk_vinner(self): for i in range(3): # Sjekk rader if self._rutenett[i][0].hent_brikkeeier(): if (self._rutenett[i][0].hent_brikkeeier() == self._rutenett[i][1].hent_brikkeeier() == self._rutenett[i][2].hent_brikkeeier()): return self._rutenett[i][0].hent_brikkeeier().hent_symbol() # Sjekk kolonner if self._rutenett[0][1].hent_brikkeeier(): if (self._rutenett[0][i].hent_brikkeeier() == self._rutenett[1][i].hent_brikkeeier() == self._rutenett[2][i].hent_brikkeeier()): return self._rutenett[0][i].hent_brikkeeier() # Sjekk diagonalt if self._rutenett[0][0].hent_brikkeeier(): if (self._rutenett[0][0].hent_brikkeeier() == self._rutenett[1][1].hent_brikkeeier() == self._rutenett[2][2].hent_brikkeeier()): return self._rutenett[0][0].hent_brikkeeier().hent_symbol() if self._rutenett[0][2].hent_brikkeeier(): if (self._rutenett[0][2].hent_brikkeeier() == self._rutenett[1][1].hent_brikkeeier() == self._rutenett[2][0].hent_brikkeeier()): return self._rutenett[0][2].hent_brikkeeier().hent_symbol() # Oppgave E def spill(self): if not self._spiller1 or not self._spiller2: print("To spillere m? v?re lagt til f?r spillet kan starte...") return spiller = self._spiller1 trekk_teller = 0 self.skriv_brett() # Ikke del av oppgave eller l?sning while trekk_teller < 9: print(spiller.hent_symbol(), " sin tur") x = int(input("Velg rad 0-2: ")) y = int(input("Velg kolonne 0-2: ")) if 0 <= x < 3 and 0 <= y < 3: if not self._rutenett[x][y].er_opptatt(): self.plasser_brikke(spiller, x, y) trekk_teller += 1 self.skriv_brett() # Ikke del av oppgaven vinner = self.sjekk_vinner() if vinner: print("\n", vinner, " har vunnet!") return if spiller == self._spiller1: spiller = self._spiller2 else: spiller = self._spiller1 else: print("Ruten er opptatt... pr?v igjen") else: print("Ugyldige koordinater... pr?v igjen") print("Ingen vinner") """ Ikke del av oppgaven eller l?sning. Skrevet for visualisering i gruppetime""" def skriv_brett(self): print() for rad in range(3): rad_display = [] for kol in range(3): brikkeeier = self._rutenett[rad][kol].hent_brikkeeier() rad_display.append(f" {brikkeeier.hent_symbol()} " if brikkeeier else (f"({rad}, {kol})")) print(" | ".join(rad_display)) if rad < 2: print("---------------------------")