import pgzrun import pygame WIDTH = 900 HEIGHT = 700 def draw(): screen.fill((128, 81, 9)) verden.tegn(screen) def update(): x, y = pygame.mouse.get_pos() mus_x = x // 50 mus_y = y // 50 verden.oppdater(mus_x, mus_y) ##################################################################### class Verden: def __init__(self, filnavn) -> None: self._kart = [] self._rad = [None]*18 for _ in range(14): self._kart.append(self._rad.copy()) self._sau_plassert: bool = False self._sau_posisjon: int[2] = None self._ulv_plassert: bool = False self._ulv_posisjon: int[2] = None self._filnavn: str = filnavn self._skriveforsoek: bool = False # Variabel for aa forhindre at ting blir printet mange ganger def oppdater(self, x: int, y: int) -> None: if keyboard.s: # plass¨Śr/flytt sau self._plasser_objekt('sau', x, y) elif keyboard.w or keyboard.u: # plass¨Śr/flytt ulv self._plasser_objekt('ulv', x, y) elif keyboard.g: # plass¨Śr gress self._plasser_objekt('gress', x, y) elif keyboard.r: # plass¨Śr stein self._plasser_objekt('stein', x, y) elif keyboard.d: # fjern objekt self._fjern_objekt(x, y) elif keyboard.t: self._kart = [] for _ in range(14): self._kart.append(self._rad.copy()) elif keyboard.p: # skriv til fil self._skriv_til_fil() def tegn(self, skjerm: 'screen') -> None: for radteller, rad in enumerate(self._kart): for ruteteller, rute in enumerate(rad): if rute is not None: skjerm.blit(rute, (ruteteller*50, radteller*50)) def _plasser_objekt(self, objekt: str, x: int, y: int) -> None: self._skriveforsoek = False # Variabel for aa forhindre at ting blir printet mange ganger if objekt == 'sau' and self._kart[y][x] != 'sau': # Plasserer eller flytter sauen if self._sau_plassert: self._kart[self._sau_posisjon[1]][self._sau_posisjon[0]] = None else: self._sau_plassert = True print("Sau plassert.") self._sau_posisjon = [x, y] elif objekt == 'ulv' and self._kart[y][x] != 'ulv': # Plasserer eller flytter ulven if self._ulv_plassert: self._kart[self._ulv_posisjon[1]][self._ulv_posisjon[0]] = None else: self._ulv_plassert = True print("Ulv plassert.") self._ulv_posisjon = [x, y] # Dersom sauen eller ulven blir overskrevet maa vi ta hoeyde for det elif objekt != 'sau' and self._kart[y][x] == 'sau': self._kart[self._sau_posisjon[1]][self._sau_posisjon[0]] = None self._sau_plassert = False print("Sau fjernet") elif objekt != 'ulv' and self._kart[y][x] == 'ulv': self._kart[self._ulv_posisjon[1]][self._ulv_posisjon[0]] = None self._ulv_plassert = False print("Ulv fjernet") # Plasserer objektet self._kart[y][x] = objekt def _fjern_objekt(self, x: int, y: int) -> None: if self._kart[y][x] == 'sau': self._sau_plassert = False self._sau_posisjon = None elif self._kart[y][x] == 'ulv': self._ulv_plassert = False self._ulv_posisjon = None self._kart[y][x] = None def _skriv_til_fil(self) -> None: if not (self._sau_plassert and self._ulv_plassert): if not self._skriveforsoek: print("Error: mangler sau og/eller ulv.") self._skriveforsoek = True # Variabel for aa forhindre at ting blir printet mange ganger if self._skriveforsoek: return with open(self._filnavn + '.txt', 'w') as fil: self._skriveforsoek = True fil.write(f"sau {self._sau_posisjon[0]*50} {self._sau_posisjon[1]*50}\n") for radteller, rad in enumerate(self._kart): for ruteteller, rute in enumerate(rad): if rute is not None and rute != 'sau' and rute != 'ulv': fil.write(f"{rute} {ruteteller*50} {radteller*50}\n") fil.write(f"ulv {self._ulv_posisjon[0]*50} {self._ulv_posisjon[1]*50}\n") print(f"Skrevet til filen {self._filnavn}.txt") def __str__(self) -> str: returneres = f"Testbane {self._filnavn}:\n" for rad in self._kart: returneres += f"{rad}\n" return returneres ##################################################################### verden = Verden(input("Skriv inn oensket filnavn: ")) pgzrun.go()