Logo des digitalen Schulbuchs inf-schule.de. Schriftzug in Zustandsübergangsdiagramm eines endlichen Automaten.

Erweiterung als Spiel

Die Anwendung, Stadt-Koordinaten aus einer Datenbank zu laden und auf einer Karte anzuzeigen, könnte man auch zu einem einfachen Spiel erweitern:

Der Spieler bekommt einen Stadtnamen vorgegeben und soll diese auf der Karte lokalisieren. Das Programm zeigt dann die tatsächliche Position an und berechnet, um welche Entfernung der Spieler sich verschätzt hat.

Spielbeispiel mit der Lokalisierung von Kiel

Im Beispiel oben hat der Spieler bei Kiel wohl die falsche Ostsee-Bucht gewählt und sich damit um gut 25 km verschätzt.

Als Hilfe benötigst du Funktionen, mit denen man Geokoordinaten auf die Position auf einer Karte umrechnen kann; diese kennst du aus dem letzten Kapitel schon. Jetzt muss das aber auch umgekehrt geschehen, so dass man aus der Klickposition des Spielers wieder Geokoordinaten ermitteln kann:

# Konstanten: Grenzen der Karte in Grad
cNord = 55.1
cSued = 47.2
cWest = 5.5
cOst  = 15.5

def InPixelWO(bgBild, grad):
  """ Umrechnung Geokoordinate in Bildkoordinate. Übergabe: Bild (für dessen Breite) und Längengrad """
  x = round((grad-cWest)* bgBild.width()/(cOst-cWest))
  return x

def InPixelNS(bgBild, grad):
  """ Umrechnung Geokoordinate in Bildkoordinate. Übergabe: Bild (für dessen Höhe) und Breitengrad """
  y = bgBild.height()-round((grad-cSued)*bgBild.height()/(cNord-cSued))
  return y


def InGeoX(bgBild,x):
	""" Umrechnung Bildkoordinate X in Geokoordinate Laenge """
	laenge = (x/bgBild.width()) * (cOst - cWest) + cWest
	return laenge

def InGeoY(bgBild,y):
	""" Umrechnung Bildkoordinate Y in Geokoordinate Breite """
	breite = cNord - (y/bgBild.height()) * (cNord - cSued)
	return breite

Aufgabe 1

Erweitere das Projekt zur Kartendarstellung, so dass im ersten Schritt der Benutzer eine Position im Bild anklickt und ihm die Position als Geokoordinaten angezeigt wird.

Als Hilfe kannst du hier eine Datei (Aufgabe1Vorgabe.zip) herunterladen, die die Karte und eine Ausgangsbasis für die Oberfläche beinhaltet.

Aufgabe 2

Vervollständige nun das Spiel. Dafür musst du noch mindestens folgende Schritte erledigen:

Für den letzten Punkt benötigst du sicher noch etwas Hilfe, nämlich für die Berechnung der Entfernung. Folgende Funktion kann die Entfernung zwischen zwei Geokoordinaten einigermaßen genau berechnen:

def EntfernungOrte(self, laenge1, breite1, laenge2, breite2):
	radL1 = laenge1*pi / 180
	radL2 = laenge2*pi / 180
	radB1 = breite1*pi / 180
	radB2 = breite2*pi / 180
	km = acos( sin(radB1)*sin(radB2) + cos(radB1)*cos(radB2)*cos(radL2-radL1))
	km = km * 6378.137
	return km

Erweiterungen

Natürlich kannst du das Spiel beliebig erweitern, Ideen dazu:

X

Fehler melden

X

Suche