def Move(self, direction: Direction, map: Map): ''' Liikuttaa ajoneuvoa haluttuun suuntaan. Kohdekoordinaatti riippuu ajoneuvon nopeudesta. Osa ajoneuvoista voi liikkua vain tietynlaisessa maastossa. Varmista, että ajoneuvo ei liiku sellaiseen maastoon, jossa se ei voi kulkea. Ajoneuvo liikkuu sen nopeuden määrittämän määrän ruutuja vuoron aikana suuntaan direction, mutta kuitenkin siten, että se ei päädy koskaan sellaiselle maastolle, missä se ei voi kulkea. Esimerkiksi jos ajoneuvon nopeus on kaksi, mutta kulkusuunnassa on vain yksi ruutu maastoa, jossa ajoneuvo voi kulkea, liikkuu ajoneuvo vain yhden ruudun. Metodi asettaa self.position muuttujan arvon siihen koordinaattiin, johon ajoneuvo on liikkunut. ''' # 1. Luetaan nykyinen sijainti targetPosition = self.position # 2. for liike in 1..nopeus for step in range(1, self.speed + 1): if direction == Direction.UP: x = targetPosition[0] y = targetPosition[1] - 1 elif direction == Direction.DOWN: x = targetPosition[0] y = targetPosition[1] + 1 elif direction == Direction.LEFT: x = targetPosition[0] - 1 y = targetPosition[1] elif direction == Direction.RIGHT: x = targetPosition[0] + 1 y = targetPosition[1] # 2.1 tutkitaan, onko maasto kohdekoordinaatissa sallittu try: terrain = map.GetTerrainAt(x - 1, y - 1) if terrain in self.allowedTerrains: # 2.2 jos on, päivitä sijainti targetPosition = (x, y) self.position = targetPosition else: # 2.3 jos ei, poistu silmukasta # Kohteessa on maastoa, jossa ajoneuvo ei voi liikkua, lopeta funktio return except IndexError: # Yritetään liikkua kartan ulkopuolelle return # Lopetetaan funktion suoritus
def Move(self, direction: Direction, map: Map): ''' Liikuttaa ajoneuvoa parametrin direction suuntaan Liikuttaa ajoneuvoa haluttuun suuntaan, mutta vain, jos kyseisessä suunnassa on sallittua maastoa. Kohdekoordinaatti riippuu ajoneuvon nopeudesta. Osa ajoneuvoista voi liikkua vain tietynlaisessa maastossa. Varmista, että ajoneuvo ei liiku sellaiseen maastoon, jossa se ei voi kulkea. Ajoneuvo liikkuu sen nopeuden määrittämän määrän ruutuja vuoron aikana suuntaan direction, mutta kuitenkin siten, että se ei päädy koskaan sellaiselle maastolle, missä se ei voi kulkea. Esimerkiksi jos ajoneuvon nopeus on kaksi, mutta kulkusuunnassa on vain yksi ruutu maastoa, jossa ajoneuvo voi kulkea, liikkuu ajoneuvo vain yhden ruudun. ''' # 1. Otetaan ajoneuvon nykyinen sijainti talteen targetPosition = self.position # 2. Silmukassa, selvitä ruutu kerrallaan, voiko ajoneuvo liikkua siihen # (pyrkii liikkumaan nopeuden verran ruutuja) for step in range(1, self.speed + 1): # Selvitetään koordinaatti liikkumisen jälkeen if direction == Direction.UP: x = targetPosition[0] y = targetPosition[1] - 1 elif direction == Direction.DOWN: x = targetPosition[0] y = targetPosition[1] + 1 elif direction == Direction.LEFT: x = targetPosition[0] - 1 y = targetPosition[1] elif direction == Direction.RIGHT: x = targetPosition[0] + 1 y = targetPosition[1] targetTerrain = map.GetTerrainAt(x - 1, y - 1) if targetTerrain == Terrain.NONE: return # Arvo NONE tarkoittaa, että yritettiin liikkua kartan ulkopuolelle, poistutaan funktiosta # Jos kohderuudussa ei ole sallittua maastoa, poistu funktiosta if targetTerrain not in self.allowedTerrains: return # Liikutaan sallittuun maastoon, päivitetään ajoneuvon sijainti targetPosition = (x, y) self.position = targetPosition