Labb 8

I labb 8 ska ni göra följande:

  1. Rita ut en karta samtidigt som man spelar
  2. Göra spelet körbart från prompten
  3. Diskussionsfrågor relaterade till labb 6, 7 och 8

Se detailjer nedan.

Redovisning

Skicka in kod till din handledare via e-post samt på papper om din handledare bett om det. Diskussionsuppgifterna lämnas denna gång inte in som text-fil, utan som ordbehandlad text (PDF, Word-dokument eller Open Office-dokument) med lämpliga rubriker och formattering.

Uppgift 1: Karta med hjälp av turtle-modulen

I detta implementationssteg är tanken att ni ska göra så att det när spelet startas visas en blank karta (ett fönster som ni visar med hjälp av turtle-modulen).

Det finns inga estetiska krav på kartan. I denna karta är sköldpaddan spelaren. När spelaren går åt ett visst håll, bör sköldpaddan gå åt det hållet i kartan och lämna ett spår (t.ex. ett streck) efter sig. Själva rummen kan ni stämpla ut som cirklar. Det ska synas vilka rum man har varit i och vilka man inte har varit i. T.ex. genom att strecken ritas ut med svart färg först och när sköldpaddan går, så ritas de ut med röd färg.

Ett lämpligt tillvägagånssätt för implementationen av denna funktionalitet är följande:

  1. Initialisera kartan när spelet startas (storlek, utritningsläge, etc), samt se till att sköldpaddan börjar i mitten. Referera till kartfönstret via en global variabel.
  2. Skriv en funktion move_turtle(direction) som givet ett väderstreck flyttar sköldpaddan ett visst antal pixlar åt det angivna väderstrecket.
  3. Anropa på denna funktion när spelaren förflyttar sig.

Kartan (uppdaterat 2013–12–12)

Här kommer ett förtydligande kring kartan som ska ritas ut. Ni behöver från början inte rita ut hela kartan, utan bara det som spelaren ser från sin nuvarande position. När spelaren besöker en plats, ritar du ut en röd prick. Se bilden nedan:

Exempel på utritad karta
Exempel på utritad karta

Uppgift 2: Körbar från prompten

Er uppgift är att se till att man kan köra ert spel från terminalen (gör filen exekverbar), samt att det krävs att man ger spelkommandot ett argument som berättar vilken fil den ska använda som bana.

Gör filen exekverbar

En fil som ska kunna köras som ett program i Unix är markerad som exekverbar. Detta gör man genom att ändra filens rättigheter. Ändra rättigheter på filen så att du får köra den genom att skriva följande i terminalen

chmod u+x <namnet på din python-fil>

Se till att du står i rätt katalog (alternativt använder rätt sökväg till filen). Kommandot ovan ger dig (den användare som du är inloggad som) rättigheter att exekvera filen.

Förrutom att filen måste ha rätt flagga satt, måste operativsystemet även veta vad den ska göra för att exekvera den. I vårt fall, vill vi att operativsystemet ska skicka den kod som finns i filen till Python. Detta gör vi genom att skriva följande rad högst upp i filen.

OBS! Uppdaterat 2013–12–17 - ska vara python3 i första raden!

#!/usr/bin/env python3

Denna rad (första två tecknena brukar uttalas “crunch bang” på engelska) säger att operativsystemet använda den exekverbara filen python som den hittar genom att titta på systemets omgivning (prova skriva /usr/bin/env i terminalen) för att tolka filens innehåll.

Som en säkerhetsåtgärd i vissa Unix-operativsystem (t.ex. Linux och OS X) så krävs det att man i ett anrop till en exekverbar fil som inte ligger i speciella kataloger måste ange en explicit sökväg till filen. Om man står i samma katalog som filen man vill exekvera skriver man alltså ./<filnamn>. Detta för att man inte ska kunna luras så lätt (t.ex. om man skrev ett skript som man döper till ls och som tar bort allt innehåll i användarens hemkatalog).

Skicka parameter till ett pythonskript från terminalen

Kommandon som anropas via terminalen kan ges argument. Detta är den text som kommer efter själva kommandot. Ett exekverbart python-skript kan ta emot och bearbeta den text som den får efter sitt anrop. För att göra detta använder man modulen sys. Se kodexempel nedan.

#!/usr/bin/env python3

import sys

print("Number of arguments: " + str(len(sys.argv)))
print("Argument list: " + str(sys.argv))

Modulen sys ger oss tillgång till diverse systemresurser. Argumenten som skickas till ett python-skript sparas i listan sys.argv. På den första platsen i listan finns själva kommandot. På efterföljande platser i listan finns de argument som angavs. Argumenten skiljs åt i anropet med hjälp av ett eller fler blanksteg.

Uppgift 3: Diskussionsfrågor

Anta att du ska skriva ett program som sparar kontaktuppgifter.

  1. Beskriv domänen, dvs vad för slags information behöver du kunna lagra.
  2. Beskriv de abstrakta datatyperna som du skulle behöva. Beskriv också de hjälpfunktioner som hör till dessa.
  3. Beskriv två sätt som dessa abstrakta datatyper skulle kunna implementeras. Observera att denna fråga är inte densamma som fråga 2. Fråga 3 handlar om implementation, datatyper och datastrukturer. Fråga 2 handlar om abstraktionen.
  4. Gör lämpliga antaganden kring funktioner som du kan tänkas behöva (beskriv dessa) och skriv sedan en funktion add_contact som lägger till en kontakt till addressboken. Bestäm och beskriv de argument du skickar till funktionen, samt de variabler och funktioner du anropar i funktionsdefinitionen. Funktionen kommer så klart inte att gå att köra, men logiken i den ska fungera.

Sidansvarig: Jody Foo
Senast uppdaterad: 2013-12-06