INF Obligatorisk innlevering 7 - Hangman

Like dokumenter
Hvordan angripe en større oppgave? (og hva skal jeg gjøre i oblig 7!?)

Hangman. Steg 1: Velg et ord. Steg 2: Gjett en bokstav. Sjekkliste. Sjekkliste. Introduksjon

Først må vi få datamaskinen til å velge et tilfeldig ord, så la oss begynne. Lagre programmet ditt og kjør det. Hvilket ord skrives ut?

PGZ - Hangman Ekspert Python Lærerveiledning

UNIVERSITETET I OSLO

IN1000 Obligatorisk innlevering 7

INF Ekstrainnlevering

Hangman. Level. Introduksjon

UNIVERSITETET I OSLO

Informasjon Eksamen i IN1000 og IN1001 høsten a) 1 poeng. 1b) 1 poeng. Tid. Oppgavene. Tillatte hjelpemidler. 30. november kl. 14.

Seminaroppgaver IN1010, uke 2

Tre på rad mot datamaskinen. Steg 1: Vi fortsetter fra forrige gang. Sjekkliste. Introduksjon

Øvingsforelesning i Python (TDT4110)

Objektorientert programmering i Python

UNIVERSITETET I OSLO

Introduksjon til objektorientert programmering

UNIVERSITETET I OSLO

TDT4102 Prosedyre og Objektorientert programmering Vår 2015

Informasjon Prøveeksamen i IN1000 høsten 2018

INF1000 Eksamen 2014 (modifisert)

Tre på rad mot datamaskinen. Steg 1: Vi fortsetter fra forrige gang

UNIVERSITETET I OSLO

Obligatorisk oppgave 4 i INF1010, våren 2014: "Leger og resepter" Versjon 1.1

INF Innleveringsoppgave 6

INF1000 Eksamen 2014 (modifisert)

Læringsmål og pensum. Intro løkker. Mål Lære om begrepet løkker Lære om bruk av while-løkke Lære om bruk av for-løkke Pensum. Kapittel 4.

TDT4110 Informasjonsteknologi grunnkurs: Tema: Løkker. - 3rd edition: Kapittel 4. Professor Alf Inge Wang

INF Obligatorisk innlevering 5

Med løkke: Læringsmål og pensum. TDT4110 Informasjonsteknologi grunnkurs: Tema: Løkker/Sløyfer Utgave 3: Kap. 4 Utgave 2: Kap. 5. Mål.

Eksamensoppgaver 2014

UNIVERSITETET I OSLO

Oppgave 1. Oppgave 2. Oppgave 3. Prøveeksamen i INF1000. Ole Christian og Arne. 23. november 2004

INF1000 Prøveeksamen Oppgave 7 og 9

Prøveeksamen i INF1000. Ole Christian og Arne. 23. november 2004

UNIVERSITETET I OSLO

Steg 1: Få flere ting til å vise seg på tavlen

Oppsummering fra sist

Oblig 4Hybelhus litt mer tips enn i oppgaven

Oppgave 1. INF1000 Uke 13. Oppgave 2. Oppgave 3. Er dette lovlige deklarasjoner (når de foretas inni en metode)? JA NEI

Obligatorisk oppgave MAT-INF1100. Lars Kristian Henriksen UiO

INF Uke 10. Ukesoppgaver oktober 2012

Hva er det? Steg 1: Få flere ting til å vise seg på tavlen. Sjekkliste. Test prosjektet. Introduksjon

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

INF1000 EKSTRATILBUD. Stoff fra uke 1-5 (6) 3. oktober 2012 Siri Moe Jensen

Læringsmål uke 7. Introduksjon til objektorientert programmering. Paradigmet objektorientering. Objektreferanser. INF1001 Høst 2016 Uke 7

INF Notater. Veronika Heimsbakk 10. juni 2012

Hva er verdien til variabelen j etter at følgende kode er utført? int i, j; i = 5; j = 10; while ( i < j ) { i = i + 2; j = j - 1; }

UNIVERSITETET I OSLO

TDT4110 Informasjonsteknologi grunnkurs: Python: Repetisjon. Professor Alf Inge Wang

UNIVERSITETET I OSLO

Innhold uke 8. Objekter: Bruk og intern organisering. Beskjeder: Oblig 1 6. Beskjeder: Oblig 7 (og 8)

Obligatorisk oppgave 5: Labyrint

TDT4102 Prosedyreog objektorientert programmering Vår 2016

Husk at du skal ha to vinduer åpne. Det ene er 'Python Shell' og det andre er for å skrive kode i.

Endret litt som ukeoppgave i INF1010 våren 2004

UNIVERSITETET I OSLO

TDT Datateknologi, programmeringsprosjekt

Objektorientert programmering i Python. Resten av semesteret. Innhold uke 9 Mer komplekse strukturer. Referanser og objekter, inkl Mentimeter spørsmål

INF100 INNLEVERING 3 HØSTEN 2004

Introduksjon til objektorientert. programmering. Hva skjedde ~1967? Lokale (og globale) helter. Grunnkurs i objektorientert.

UNIVERSITETET I OSLO

Finne ut om en løsning er helt riktig og korrigere ved behov

UNIVERSITETET I OSLO

IN1010 V19, Obligatorisk oppgave 2

IN Seminaroppgaver til uke 11

TDT4100 Objektorientert programmering

Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I) Løsningsforslag

INF1000: Forelesning 11. Oppgave 2. Oppgave 1. Husk å melde deg på prøveeksamen i INF1000! Ole Christian Lingjærde 7.november 2006

EKSAMEN 6108/6108N PROGRAMMERING I JAVA Alt trykt og skriftlig materiale.

BOKMÅL Side 1 av 7. KONTINUASJONSEKSAMEN I FAG TDT4100 Objektorientert programmering / IT1104 Programmering, videregående kurs

Obligatorisk oppgave 1 INF1020 h2005

Etter uke 6 skal du. Introduksjon til objektorientert programmering. Hva skjedde ~1967? INF1001. Grunnkurs i objektorientert programmering

Øvingsforelesning 3 Python (TDT4110)

Øvingsforelesning 7 i Python (TDT4110)

UNIVERSITETET I OSLO

INF Obligatorisk innlevering 7

EKSAMEN OBJEKTORIENTERT PROGRAMMERING Alle trykte og skrevne. Java API dokumentasjon er tilgjengelig lokalt på hver maskin.

Obligatorisk oppgave 4: Lege/Resept

1. Finn klassene (hvilke objekter er det i problemet) 1. Dataene som beskriver problemet (hvilke objekter har vi og hvor mange klasser er det?

Finne ut om en løsning er helt riktig og korrigere ved behov

EKSAMENSOPPGAVE / EKSAMENSOPPGÅVE

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Oblig 4 (av 4) INF1000, høsten 2012 Værdata, leveres innen 9. nov. kl

UNIVERSITETET I OSLO

PXT: Det regner mat! Introduksjon. Steg 1: Grunnlag. Sjekkliste. Skrevet av: Helene Isnes

UNIVERSITETET I OSLO

INF 1000 Prøveeksamen. 23. november Ole Christian og Arne. Oppgave 1 (10 poeng) Er disse programsetningene lovlige i Java? Oppgave 2 (10 poeng)

UNIVERSITETET I OSLO

Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I) og i emnet INF100-F Objektorientert programmering i Java I

Løse reelle problemer

Etter uke 9 skal du. Introduksjon til objektorientert programmering. Innhold. Klasser som abstraksjoner

INF109 - Uke 1b

Oblig4 - forklaringer. Arne og Ole Christian

INF Seminaroppgaver til uke 3

Løse reelle problemer

UNIVERSITETET I OSLO

Transkript:

INF1001 - Obligatorisk innlevering 7 - Hangman Frist: 7.11.16 12:00 1 Introduksjon Du skal i denne innleveringen skrive et objektorientert Hangman-spill. Spillet skal ha støtte for å lese inn en ordliste fra en fil og å velge et tilfeldig ord fra denne ordlisten. Man skal kunne spille flere spill etter hverandre og få en poengsum. Du skal kunne ta vare på denne poengsummen og vise en high-score-liste. Når programmet starter skal man få opp en meny, her skal du kunne velge mellom å starte et spill, vise high-scores (høyeste poengsummer) eller å avslutte. Når du så starter et spill skal du få lov til å forsøke å løse en Hangman-oppgave. Hvis du klarer oppgaven skal du få lov til å spille videre helt til du ikke klarer en oppgave. 1.1 Spillets regler I ett spill (merk at det er forskjell på ett spill og en spillsekvens!) med Hangman skal det gis spilleren ti forsøk på å komme frem til riktig ord, hvor spilleren skal gjette en og en bokstav. Man mister kun et forsøk hvis bokstaven ikke er riktig, hvis man forsøker å skrive inn en bokstav som allerede er forsøkt skal dette heller ikke telle som et forsøk. Hvis en bokstavgjetning er riktig så skal alle forekomster av denne bokstaven bli fylt ut. Det skal ikke gjøres forskjell på store og små bokstaver. Et spill er ferdig enten når alle forsøk er oppbrukt og spilleren har tapt eller når spilleren har klart å få på plass samtlige bokstaver i ordet. 2 Struktur 2.1 main Dette er en struktur som vi bruker for å starte programmet vårt. Dette vil være en egen Python-fil som du kan kjøre, f.eks. ved navn hangman.py. Det er her du skal lage objektene av klassene Ordliste og HighScore. Du skal her skrive ut en meny til spillet hvor du lar brukeren velge om spilleren skal starte en sekvens av flere spill, vise high score-listen eller avslutte. 1

2.2 Klasser Oppgaven skal ha en forholdsvis enkel objektorientert struktur. Du skal ha med de følgende klassene: Ordliste: Denne klassen skal ha støtte for å lese inn en ordliste fra en fil. Den skal inneholde to lister: én liste med brukte ord og én liste med ubrukte ord. Den skal ha støtte for å hente ut et tilfeldig Spillord fra listen over ubrukte Spillord. Hvis listen over ubrukte Spillord er tom skal den selv sørge for at alle de nå brukte ordene kommer tilbake i listen med ubrukte Spillord. Ordlisten skal kun leses inn fra fil en gang i løpet av programmet. Filen er gitt her og inneholder ett ord per linje. Spillord: Denne klassen representerer et ord brukt i spillet hangman. Den skal inneholde ordet og den skal ha ha en metode for å spille med dette ordet. Spillsekvens: Denne klassen skal inneholde data fra en sekvens av flere spill. Vi skal ha instansvariabler som lagrer en referanse til et Ordlisteobjekt, poengsummen, antall spill spilt og navnet til spilleren. Fra en spillsekvens skal vi kunne hente ut poengsummen og navnet til spilleren. Vi må også implementere to metoder lt og gt for å kunne sammenligne to Spillsekvens-objekter og avgjøre hvilket som har høyest poengsum. Konstruktøren skal ta i mot en referanse til et Ordliste-objekt. HighScore: Denne klassen skal liste opp spillsekvenser i en synkende rekkefølge for å vise hvilke spillsekvenser som har høyest poengsum. Den skal kunne ta i mot en spillsekvens og putte spillsekvensen inn i en liste over spillsekvenser. Den skal kunne skrive ut listen i sortert rekkefølge. Se diagrammet under for klassestruktur. Merk at dette diagrammet ikke gir samtlige variabler eller metoder, du må derfor definere flere variabler og metoder selv. 2.3 Metoder Du skal implementere metodene under. Se her for beskrivelse av hva de skal gjøre. Merk at du må finne ut av eventuelle parametere selv. Ordliste.hent tilfeldig: Henter et tilfeldig ord fra listen over ubrukte ord og flytter ordet over i listen av brukte ord. Hvis listen over ubrukte ord er tom skal du sette listen med brukte ord til å være ubrukte ord og omvendt. Returnerer det tilfeldige ordet. Hint: for å hente ut et tilfeldig valgt ord er det nyttig å bruke funksjonen choice fra random-biblioteket. Importer funksjonen først med from random import choice, da kan du bruke choice(liste) hvor liste er listen du vil hente et tilfeldig element fra. 2

Figure 1: Diagram over klassestruktur Spillord.spill: Spiller et enkelt spill med hangman. Returnerer poengsummen spilleren har fått. Poengsummen skal være lik antall tegn (bokstaver) i ordet. Hvis spilleren ikke har klart å løse oppgaven skal antall poeng som returneres være 0. Se spillreglene for mer informasjon om et spill. Hint: Bruk String sin lower() metode for å unngå å gjøre forskjell på store og små bokstaver som blir skrevet inn, lag en liste over brukte tegn og lag en liste som du fyller ut med like mange understrek tegn som det er tegn i ordet. Du kan da fylle ut riktige tegn i denne listen når brukeren klarer å skrive inn dette. Spillsekvens. lt : Tar i mot et annet Spillsekvens-objekt som parameter. Skal returnere True hvis objektet vi er i er mindre enn objektet vi mottar som parameter. Mindre enn betyr at poengsummen er lavere. Skal ellers returnere False. 3

Spillsekvens. gt : Tar i mot et annet Spillsekvens-objekt som parameter. Skal returnere True hvis objektet vi er i er større enn objektet vi mottar som parameter. Større enn betyr at poengsummen er høyere. Skal ellers returnere False. Spillsekvens.start: Starter en spillsekvens. Den må registrere navnet til spilleren for så å kjøre et spill. Vi skal her ha en løkke hvor vi spiller spillene. Den skal hente et ord fra Ordliste-objektet Hvis spilleren klarer spillet, dvs. får en poengsum større enn 0 skal spilleren få mulighet til å spille på nytt. Den skal lagre total poengsum over alle spill i denne sekvensen med spill og antall spill spilleren har spilt i sekvensen. HighScore.sett inn: Setter inn et Spillsekvens-objekt i listen over spillsekvenser. HighScore.skriv ut: Skriver ut spillsekvensene i sortert rekkefølge. For å sortere en liste kan du bruke liste.sort(reverse=true) hvor liste er listen du vil sortere. For å kunne gjøre dette må du ha implementert lt og gt i klassen til objektene du skal sortere. Spillet med høyest poengsum skal komme først. Metoden skal skrive ut plassen sekvensen er på, navnet på spilleren og antall poeng og antall spill spilleren har spilt i spillsekvensen. 3 Eksempelkjøring > python3 hangman.py Meny: 1. Spill 2. Vis high score 0. Avslutt Valg: 1 Skriv inn navn: Yrjan Du har 10 forsøk igjen, ordet ser slik ut: Skriv inn en bokstav: e Du har 10 forsøk igjen, ordet ser slik ut: e e Du har 10 forsøk igjen, ordet ser slik ut: r e e Skriv inn en bokstav: s Du har 10 forsøk igjen, ordet ser slik ut: r_s e e Skriv inn en bokstav: n Du har 10 forsøk igjen, ordet ser slik ut: r_s en_e Skriv inn en bokstav: f Du har 9 forsøk igjen, ordet ser slik ut: r_s en_e Skriv inn en bokstav: l Du har 9 forsøk igjen, ordet ser slik ut: _l_r_s en_e Skriv inn en bokstav: a Du har 9 forsøk igjen, ordet ser slik ut: _lar_s en_e Skriv inn en bokstav: f 4

Du har 9 forsøk igjen, ordet ser slik ut: _lar_s en_e Skriv inn en bokstav: t Du har 9 forsøk igjen, ordet ser slik ut: _larts en_e Skriv inn en bokstav: k Du har 9 forsøk igjen, ordet ser slik ut: klartsk_en_e Skriv inn en bokstav: j Du har 8 forsøk igjen, ordet ser slik ut: klartsk_en_e Skriv inn en bokstav: i Du har 7 forsøk igjen, ordet ser slik ut: klartsk_en_e Skriv inn en bokstav: v Du har 6 forsøk igjen, ordet ser slik ut: klartsk_en_e Skriv inn en bokstav: m Du har 5 forsøk igjen, ordet ser slik ut: klartsk_en_e Du har 5 forsøk igjen, ordet ser slik ut: klartsk_en_e Skriv inn en bokstav: p Du har 4 forsøk igjen, ordet ser slik ut: klartsk_en_e Skriv inn en bokstav: o Du har 3 forsøk igjen, ordet ser slik ut: klartsk_en_e Skriv inn en bokstav: i Du har 3 forsøk igjen, ordet ser slik ut: klartsk_en_e Skriv inn en bokstav: u Du har 3 forsøk igjen, ordet ser slik ut: klartskuen_e Skriv inn en bokstav: y Du har 2 forsøk igjen, ordet ser slik ut: klartskuen_e Skriv inn en bokstav: d Riktig, løsningen var "klartskuende"! Vil du gi deg nå? (ja/[nei]) nei Du har 10 forsøk igjen, ordet ser slik ut: Skriv inn en bokstav: e Du har 10 forsøk igjen, ordet ser slik ut: e e e Du har 10 forsøk igjen, ordet ser slik ut: _r e er_e Skriv inn en bokstav: t Du har 9 forsøk igjen, ordet ser slik ut: _r e er_e Skriv inn en bokstav: a Du har 9 forsøk igjen, ordet ser slik ut: _r e_a_er_e Skriv inn en bokstav: v Du har 8 forsøk igjen, ordet ser slik ut: _r e_a_er_e Skriv inn en bokstav: g Du har 8 forsøk igjen, ordet ser slik ut: _r_g e_a_er_e Skriv inn en bokstav: l Du har 7 forsøk igjen, ordet ser slik ut: _r_g e_a_er_e 5

Skriv inn en bokstav: p Du har 7 forsøk igjen, ordet ser slik ut: pr_g e_a_er_e Du har 7 forsøk igjen, ordet ser slik ut: pr_g e_a_er_e Skriv inn en bokstav: o Skriv inn en bokstav: t Skriv inn en bokstav: v Skriv inn en bokstav: b Du har 6 forsøk igjen, ordet ser slik ut: prog_o_e_a_er_e Skriv inn en bokstav: n Du har 6 forsøk igjen, ordet ser slik ut: progno_e_a_erne Skriv inn en bokstav: s Du har 6 forsøk igjen, ordet ser slik ut: prognose_a_erne Skriv inn en bokstav: m Du har 6 forsøk igjen, ordet ser slik ut: prognosema_erne Skriv inn en bokstav: k Riktig, løsningen var "prognosemakerne"! Vil du gi deg nå? (ja/[nei]) ja Du fikk totalt 27 poeng! Meny: 1. Spill 2. Vis high score 0. Avslutt Valg: 2 ****** HIGH SCORE ****** 1. Yrjan, 27 poeng, 2 spill Meny: 1. Spill 2. Vis high score 0. Avslutt Valg: 6