Slip ud af huset – lav dit eget teksteventyr i Python
Find nøglen og trylledrikken, og slip ud i haven – uden at løbe ind i trolden. Du bygger et spil, hvor man skriver kommandoer, og lærer ordbøger, lister og while-løkker.

Nogle af de første eventyrspil på computer var lavet helt af tekst. Man læste, hvor man var, og skrev, hvad man ville gøre, fx gå nord eller tag nøgle. I dette projekt laver du dit eget teksteventyr. Du er fanget i et hus og skal finde en nøgle og en trylledrik og slippe ud i haven. Men pas på – der bor en trold i køkkenet!
Før du starter
Du kan bruge Raspberry Pi Code Editor, som er gratis og virker i browseren. Vælg Python, skriv koden, og klik på Run. Du kan kode uden konto og gemme projektet på din computer med knappen Download. Vil du gemme det online, skal du have en konto – og er du under 13 år, skal du have lov af en forælder til at oprette den. Du kan også bruge Thonny på din egen computer. Når spillet venter på dig, skriver du din kommando der, hvor spillets tekst står, og trykker på Enter.
Spillets motor
Start med at skrive hele programmet herunder. Det er spillets motor: Den viser, hvor du er, spørger, hvad du vil gøre, og flytter dig rundt. Huset har kun to rum endnu: entréen og køkkenet.
# SLIP UD AF HUSET – et teksteventyr
def vis_vejledning():
print('''
SLIP UD AF HUSET
================
Kommandoer:
gå [retning] fx: gå syd
tag [ting] fx: tag nøgle
''')
def vis_status():
print('---------------------------')
print('Du er i ' + rum_nu)
print('I tasken:', taske)
if 'ting' in rum[rum_nu]:
print('Her ligger: ' + rum[rum_nu]['ting'])
print('---------------------------')
# Kortet over huset: hvert rum er en ordbog med udgange
rum = {
'entréen': {
'syd': 'køkkenet'
},
'køkkenet': {
'nord': 'entréen'
}
}
rum_nu = 'entréen' # her starter du
taske = [] # tasken er tom fra start
vis_vejledning()
while True:
vis_status()
kommando = ''
while kommando == '':
kommando = input('> ')
# 'gå syd' bliver til ['gå', 'syd']
dele = kommando.lower().split(' ', 1)
if dele[0] == 'gå' and len(dele) == 2:
retning = dele[1]
if retning in rum[rum_nu] and retning != 'ting':
rum_nu = rum[rum_nu][retning]
else:
print('Du kan ikke gå den vej!')
elif dele[0] == 'tag' and len(dele) == 2:
ting = dele[1]
if 'ting' in rum[rum_nu] and rum[rum_nu]['ting'] == ting:
taske.append(ting)
print('Du tog: ' + ting)
del rum[rum_nu]['ting']
else:
print('Den ting er her ikke!')
else:
print('Det forstår jeg ikke. Skriv fx "gå syd" eller "tag nøgle".')
# Er der en trold i rummet? Så er spillet slut
if 'ting' in rum[rum_nu] and rum[rum_nu]['ting'] == 'trold':
print('Trolden fangede dig ... SPILLET ER SLUT!')
break- Kortet over huset er en ordbog (dictionary), der hedder
rum. Hvert rum er selv en lille ordbog, hvor retningerne peger på naborummene. Fra entréen kommer du mod syd til køkkenet. rum_nuhusker, hvor du er, og listentaskehusker de ting, du har samlet op.while True:er en løkke, der kører, indtil spillet er slut.breakstopper løkken.split(' ', 1)deler kommandoen ved det første mellemrum, så gå syd bliver til to dele: gå og syd.
Kør spillet, og skriv gå vest. Der er ingen dør mod vest, så du får en fejlbesked. Skriv så gå syd for at gå ud i køkkenet og gå nord for at komme tilbage.
Byg huset større
- Tilføj spisestuen øst for entréen. Du skal både lave en dør fra entréen mod øst og en dør tilbage fra spisestuen mod vest. Skift
rumud med koden herunder, og husk kommaet efter'køkkenet'. Prøv at gå mod øst og tilbage mod vest.
rum = {
'entréen': {
'syd': 'køkkenet',
'øst': 'spisestuen'
},
'køkkenet': {
'nord': 'entréen'
},
'spisestuen': {
'vest': 'entréen'
}
}- Læg en nøgle i entréen ved at tilføje
'ting': 'nøgle'i entréens ordbog. Kør spillet, og skriv tag nøgle. Nu ligger nøglen i tasken. - Sæt en trold i køkkenet med
'ting': 'trold'. Motoren tjekker allerede, om der er en trold i rummet – prøv at gå ud i køkkenet! - Til sidst skal huset have en have syd for spisestuen, og der skal ligge en trylledrik i spisestuen. Sådan ser hele kortet ud nu:
rum = {
'entréen': {
'syd': 'køkkenet',
'øst': 'spisestuen',
'ting': 'nøgle'
},
'køkkenet': {
'nord': 'entréen',
'ting': 'trold'
},
'spisestuen': {
'vest': 'entréen',
'syd': 'haven',
'ting': 'trylledrik'
},
'haven': {
'nord': 'spisestuen'
}
}Vind spillet
Du vinder, når du står i haven og har både nøglen og trylledrikken i tasken. Sæt de fire linjer herunder ind allersidst i programmet. De skal rykkes lige så langt ind som tjekket for trolden, så de er inde i while-løkken.
# Er du i haven med nøglen og trylledrikken? Så har du vundet
if rum_nu == 'haven' and 'nøgle' in taske and 'trylledrik' in taske:
print('Du slap ud af huset ... DU HAR VUNDET!')
breakSkift også funktionen vis_vejledning ud, så spilleren ved, hvad målet er:
def vis_vejledning():
print('''
SLIP UD AF HUSET
================
Find nøglen og trylledrikken, og slip ud i haven.
Pas på trolden!
Kommandoer:
gå [retning] fx: gå syd
tag [ting] fx: tag nøgle
''')Kan du vinde? Prøv også at gå ud i haven uden trylledrikken. Hvad sker der?
💡 Tegn et kort over huset på papir, før du bygger flere rum. Så er det nemmere at huske, hvor dørene er – og at lave en dør begge veje.
💡 Får du fejlen KeyError, så tjek, at rummets navn er stavet helt ens alle steder – også é’et i entréen.
Vil du lave et spil med grafik? Prøv Lav dit eget retrospil: Snake. Vil du lære mere Python, så tag forløbet Python for begyndere.
🧠 Udfordring – prøv selv
Byg en kælder. Lav en trappe ned fra entréen ved at tilføje 'ned': 'kælderen', og lav kælderen med 'op': 'entréen' og et skjold, du kan tage. Gør det sådan, at trolden ikke kan fange dig, når du har skjoldet. Tip: Tilføj and 'skjold' not in taske til tjekket for trolden. Find derefter selv på flere rum, ting og monstre.
Fluebenet gemmes kun i din browser og samler stempler i dit kodepas.
👩🏫 Til læreren – brug projektet i undervisningen
- Fag
- Dansk, Teknologiforståelse (valgfag fra 2027/28)
- Klassetrin
- 6.–9. klasse
- Tid
- 3 lektioner à 45 min
- Teknologiforståelse
- Computationel tankegang, Digital design og designprocesser, Teknologisk handleevne
Læringsmål
- Eleverne kan bruge ordbøger til at beskrive rum, døre og ting, og lister til at holde styr på det, spilleren har i tasken.
- Eleverne kan bruge en while-løkke og input() til at lave et spil, der kører, til man vinder eller taber.
- Eleverne kan bruge hvis … elif … else til at reagere på det, spilleren skriver.
- Eleverne kan designe et lille spil med et mål, forhindringer og en historie, og teste det med en makker.
Forberedelse og materialer
- En computer med browser pr. elev eller pr. makkerpar. Tablets er ikke velegnede til at skrive Python.
- Afprøv editor.raspberrypi.org på skolens netværk (eller installér Thonny), og lav selv projektet én gang.
- Eleverne kan kode uden konto og gemme med Download. Vil I gemme online, kræver Code Editor en konto, og elever under 13 år skal have forældrenes lov til at oprette den.
- Papir og blyant til at tegne et kort over huset.
Forslag til forløb
- Opvarmning (15 min): Hvad kendetegner et eventyr eller et spil? Eleverne tegner et kort over et hus med 3-4 rum, en nøgle og et monster.
- Spillets motor (35 min): Eleverne skriver koden i "Spillets motor" og afprøver at gå mellem rummene.
- Byg huset større (30 min): Eleverne tilføjer spisestuen, nøglen og trylledrikken og lærer at lave en dør begge veje.
- Vind spillet (20 min): Eleverne laver betingelsen for at vinde og tester både en vinder- og en taberrute.
- Test og opsamling (35 min): Makkerparrene spiller hinandens eventyr uden at se koden og noterer, hvor de går i stå. Fælles snak om ordbøger, lister og løkken.
Differentiering
- Hvis det går hurtigt: Eleverne bygger en kælder med et skjold mod trolden (projektets udfordring) og finder selv på flere rum, ting og monstre.
- Hvis det driller: Lad eleverne nøjes med to rum og én ting. Tjek indrykning og kommaer i ordbøgerne først, når koden giver fejl.
Spørgsmål til samtale
- Hvordan gør man et spil spændende, når der kun er tekst og ingen grafik?
- Hvad gjorde jeres makker, som I ikke havde forudset? Hvordan kan man teste et spil bedre?
- Store computerspil bruger de samme idéer som jeres: rum, ting og regler. Hvor kan I genkende dem i spil, I kender?
Lærerarket er vejledende og skrevet af CodingKids. Se også EMU's materialer om teknologiforståelse.
Oversat og bearbejdet af CodingKids efter et projekt fra Raspberry Pi Foundation. Ændret: dansk tekst, danske rum og ting, en trold i stedet for et monster og CodingKids' egen kode til spillets motor i stedet for originalens startprojekt. Original: Escape the maze. Denne side deles under licensen CC BY-SA 4.0.