P02 Slutprojekt

Det har blivit dags att avrunda kursen med det examinerande projektet. Eftersom vi har testat en mängd olika paket under vårterminen så kommer det finnas möjlighet att göra ditt slutprojekt med olika inriktningar. Det kommer finnas projekt som görs i form av en tutorial för de lägre betygen men det kommer också finnas påbyggnadsmöjligheter för projekt som baseras på tutorials för att kunna nå högre nivåer på slutprojektet.

Betyget på kursen bygger på allt du har gjort där vi bedömer svårighetsgrad och kvalitet för att sätta det betyg du har uppnått.

P02.1 Alternativa slutprojekt

Här listas tre styrda projekt du kan välja mellan och ett valfritt projekt. Om du väljer ett helt eget projekt så behöver du vara noggrann med planering för att säkerställa att du arbetar mot det betyg som du vill nå.

P02.1.1 Game of 40

Uppgiften är att skapa en applikation inom valfritt textbaserat programmeringsspråk där en eller flera spelare kan spela ett tärningsspel som heter Game of 40.

P02.1.1.1 Spelregler

Spelet spelas med en tärning och minst två spelare. För att vinna spelomgången skall det sammanlagda värdet av alla tärningsslag du slagit bli minst 40. Slår du en sexa på tärningen så förlorar du alla dina poäng i den omgången, tidigare sparade poäng kan inte förloras. Du kan när du vill stanna, spara dina poäng, och sedan överlåta tärningen till nästa spelare.

Innan du börjar hacka kod, gör en grovplanering av hur du skall lägga upp arbetet. Det är oftast mer effektivt att sedan lösa en deluppgift i taget. Om du vill så finns det en tutorial att följa för att lösa grunduppgiften som leder till betyget E.

P02.1.1.2 Grundkrav

Följande grundkrav finns för att ha löst uppgiften.

  • Applikationen skall vara buggfri.
  • Tärningarnas värde behöver lagras på ett sådant sätt att du kan visa värde på varje tärning och inte bara en slutsumma.
  • Innan du börjar koda applikationen bör du skapa en planering där du skissar på ett gränssnitt, grafiskt eller textbaserat, så att du vet hur spelet skall presenteras och spelas. Använd också aktivitetsdiagram/pseudokod där du anser att det behövs för att lösa och/eller förtydliga svårigheter i spelets logik eller kod.
  • I grundvarianten så skall det vara en spelare som spelar mot datorn. Hur datorn spelar spelet skall kodas och dokumenteras. Enklaste varianten är att datorn alltid slår tre slag och sedan sparar sina tärningar.
  • Spelet skall följa de grundläggande reglerna, väljer du att skapa specialregler så skall detta dokumenteras.

P02.1.1.3 Tilläggsfunktionalitet mot betyget C

Grundkraven skall först vara uppnådda sedan skall följande tilläggsfunktionalitet läggas till;

  • Datorn skall ha två svårighetsgrader. Den ena svårighetsgraden är den som implementerades i grunduppgiften och den andra är en lite smartare logik som du skapar själv. Den du skapar själv skall dokumenteras med text och med aktivitetsdiagram och pseudokod.
  • Fråga spelaren vilken av datorns svårighetsgrad du vill möta när omgången börjar.
  • Möjlighet att spela flera omgångar utan att spelet avbryts med en resultaträknare i slutet av varje omgång.

P02.1.1.4 Tilläggsfunktionalitet mot betyget A

Tilläggskraven mot betyget C skall vara uppnådda först sedan skall följande tilläggsfunktionalitet läggas till;

  • Tkinter, eller annat GUI, läggs till.
  • Välja att kunna spela två spelare eller spelare mot dator.

Gemensamt för all tilläggsfunktionalitet är att det är bättre att göra vissa delar av bra kvalitet än att göra flera delar av tveksam kvalitet. Betyget på kursen sätts som en samlad bedömning av allt du har gjort under kursen.

P02.1.2 Spel

Utgå ifrån speltutorial Space Invaders i Moment06. När tutorial är färdigbyggd så vill jag att du lägger till/förändrar följande funktionalitet.

Funktionalitet att bygga till

Här finns fem utbyggnader av spelet som jag vill att du gör för betyget E.

NrUppgift
1.Fienderna skall falla rakt nedåt i lagom fart. När fienden dödas så skall den återskapas någonstans i övre delen av skärmen, max 20 % från toppen.
2.Slumpa fram en bild för varje fiende, jag har lagt tre bilder i en zippad fil, skapa gärna fler på egen hand eller byt ut bilderna till andra fiender.
3.Varje gång du passerar ett nytt hundratal i poäng så skall det skapas ytterligare en fiende.
4.När spelaren dör så skriv ut Game Over stort mitt på skärmen. Spelaren försvinner redan men finderna kan fortsätta att falla.
5.När du har missat en fiende och den försvinner ur bild i underkant så förlorar du. Game Over visas.

Hjälp till betyget E [klicka för att visa]

Här finns lite hjälp för att klara av de fem utbyggnader som behöver göras för att uppnå betyget E på slutprojektet och kursen.

  1. Fienderna skall falla rakt nedåt i lagom fart.
    Här behöver du tänka på att fienden skall röra sig i y-led istället för i x-led. Sedan behöver du ta bort den koden som flyttade ner fienderna när de träffade väggen.
  2. Slumpa fram en bild för varje fiende
    Två nya fiender hittar du i den zippade filen. Du behöver först tänka på att registrera alla bilder som du vill använda i projektet, och naturligtvis ha lagt in dessa i projektmappen. Sedan skall du få en kodsnutt av mig som slumpar fram ett värde ur en lista.
    lista = ["värde1", "värde2"]
    print(random.choice(lista))
  3. Varje gång du passerar ett nytt hundratal i poäng så skall det skapas ytterligare en fiende.
    Här behöver du hålla koll på när vårt resultat är jämt delbart med 100. Det får du fram genom att skriva if score % 100 == 0: för att använda dig av modulusoperatorn och kolla om score är jämnt delbart med 100. Det du vill göra om detta händer är att först skapa en ny turtle, sedan ge den sina värden och slutligen lägga till denna i listan för alla fiender.
    new_enemy = turtle.Turtle()   # Skapa en ny fiende
    new_enemy.color("red")        # Ge new_enemy sina värden
    # Flera rader med samma ...
    # ... värden som du tidigare ...
    # ... har satt till enemies
    enemies.append(new_enemy)     # Lägg den nya fienden i listan med alla fiender
  4. Skriv ut Game Over stort mitt på skärmen
    Du har tidigare skrivit ut score på skärmen. All den funktionalitet skall du nu kopiera och skriva ut Game Over när du har krockat med en fiende.
  5. När du har missat en fiende och den försvinner ur bild i underkant så förlorar du
    Det finns redan logik kring hur du förlorar när du krockar med en fiende. Nu skall du skapa logik så att du förlorar om en fiende når den nedre ramen i spelet. Om detta inträffar så skall spelaren försvinna, Game Over visas och spelet avslutas, eller så får alla fiender långsamt försvinna i bakgrunden.

För att uppnå betyget E på slutprojektet så krävs endast att ovanstående delar, eller likvärdig svårighet, är implementerat i spelet.

P02.1.2.1 Tilläggsfunktionalitet mot betyget D

För att i slutprojeket visa på kunskaper motsvarande D så krävs det att du ytterligare bygger in funktionalitet för spelet. Detta behöver inte vara allt för avancerat men här kommer några förslag på saker som går att bygga in;

  • Fiender faller snabbare ju mer poäng som spelaren får.
  • Olika fiender faller olika fort.
  • Olika fiender ger olika poäng vid träff, antingen beroende på var fienden befann sig på spelplanen eller beroende på vilken färg en fiende har.

Tänk på att 1-2 egeninbyggd funktionalitet räcker för betyget D. Det är helt ok att komma på egen funktionalietet.

Varje funktionalitet du lägger till i spelet vill jag att du dokumentera på lämpligt sätt. Jag vill ha en kort skriftlig beskrivning av vad du har gjort, hur du har gjort det och om du hade olika funderingar på hur du kunde ha gjort detta. Kanske har du i efterhand kommit på att du kunde ha gjort på ett bättre sätt. Kommentera då detta.

P02.1.2.2 Tilläggsfunktionalitet mot betyget C

För att nå ännu lite högre så kommer det krävas mer inbyggd funktionalitet. Ta gärna inspiration av punkterna under D, lägger du till flera av dessa så klättrar du högre på betygstrappan.

Varje funktionalitet du lägger till i spelet vill jag att du dokumentera på lämpligt sätt. Jag vill ha en kort skriftlig beskrivning av vad du har gjort, hur du har gjort det och om du hade olika funderingar på hur du kunde ha gjort detta. Kanske har du i efterhand kommit på att du kunde ha gjort på ett bättre sätt. Kommentera då detta.

För att nå högre betyg på spel så vill jag att du själv presenterar vilka förändringar du vill göra och vilket betyg du strävar efter. Vill du jobba vidare med samma spel så kan man bygga in att olika fiender genererar olika poäng, att olika fiender rör sig olika, och att spelet blir ännu svårare på olika sätt när du få mer poäng.

Gör en egen planering för vad du vill göra för spel, vilket betyg du strävar efter och vilken funktionalitet du vill jobba med. Lämna in detta till mig för bedömning innan du börjar bygga ditt spel så att vi är överens om svårighetesgrad kopplad till din betygsambition.

För att uppnå betyget C så behöver du visa en vald algoritm med pseudokod och aktivitetsdiagram.

P02.1.3 Banken

Vi har tidigare jobbat med en bankapplikation och om du har följt tutorial så motsvarar detta betygsnivå E, det räcker dock inte att ha gjort endast denna för att nå betyget E på kursen. Om du vill vidareutveckla bankapplikationen så är det möjligt för att nå ett högre betyg.

Följande tilläggsfunktionalitet är lämplig att lägga till för att nå ett högre betyg;

  • Flera konton till en enskild användare.
  • Flera användare kopplade till banken med någon form av inloggning.
  • Bygga banken i en grafisk miljö med Tkinter eller annat paket för GUI.

Att lösa en av punkterna ovan har en svårighetsgrad motsvarande betyget C, att lösa två av punkterna, gärna med GUI, motsvarar svårighetsgraden A.

Återigen, uppgiften sätter svårighetsgraden och utförandet sätter kvaliteten på ditt arbete. Kombinationen av svårighetsgrad och kvalitet kommer avgöra ditt betyg.

P02.1.4 Annat projekt

Du har möjlighet att göra ett valfritt projekt men då ställs det lite större krav på dig själv. Sätt ett tydligt betygsmål med kursen och gör en presentation av det projekt du vill göra så att läraren kan göra en bedömning om det projektet är genomförbart och att det uppnår den svårighetsgrad som krävs för din betygsambition.

Det är ok att delvis använda sig av tutorials på nätet/litteratur men det är ett absolut krav att alla denna hjälp finns med i dokumentationen när ditt projekt redovisas. Vi behöver se vilken hjälp du fått för att kunna avgöra vad du själv har gjort.

P02.2 Redovisning

Denna kurs redovisas genom att du bokar en individuell tid där du visar upp dina projekt. Denna redovisning sker individuellt där vi sitter ner i 20 minuter och kollar på vad du har gjort under kursen och vilken kvalitet det håller. Under vecka 18/19 kommer en bokningslista att läggas ut där du själv bokar lämpligt tillfälle att redovisa dina kunskaper. Sista dag för redovisning är preliminärt tisdagen 9 juni för elever i åk 1 och fredag 29 maj för elever i åk 3. Om du vill ha chans att göra en komplettering ifall du inte nått det önskade betyget så rekommenderar jag att du bokar en tid för redovisning lite tidigare.

Redovisningarna startar vecka 20.

P02.2.1 Checklista inför redovisning

Vid redovisningen kommer vi kika på banken (om det inte är gjort tidigare), vi kommer kika på teoriuppgiften från Moment07 (om det inte är gjort tidigare) och vi kommer kika på slutprojektet.

  • Banken skall fungera enligt den checklista som finns i tutorial (plus eventuell egen funktionalitet som du har lagt till).
  • Ditt slutprojekt skall ha en kortare skriftlig utvärdering om hur arbetet har gått, vad du har lärt dig och vad du under arbetets gång hade gjort annorlunda. Gör utvärderingen i dokumentet Planeringsdokument Projekt02.
  • Pseudokod & aktivitetsdiagram över vald algoritm. För E räcker det med den pseudokod/aktivitetsdiagram som du redan gjort till banken. Vill du nå betyg C eller högre vill jag att du gör en ny/egen pseudokod/aktivitetsdiagram. (Välj inte den enklaste algoritmen du kan hitta, men se till att den är avgränsad, gör den absolut inte på hela programmet!!!!)
    Lägg lämpligtvis dessa bilder i utvärderingsdokumentet.

Redovisning avslutar kursen

Denna kurs redovisas genom att du bokar en individuell tid där du visar upp dina projekt. Denna redovisning sker individuellt där vi sitter ner i 15-20 minuter och kollar på vad du har gjort under kursen och vilken kvalitet det håller. Sista dag för redovisning är fredag 29 maj. Om du vill ha chans att göra en komplettering ifall du inte nått det önskade betyget så rekommenderar jag att du bokar en tid för redovisning lite tidigare.

Boka en tid nedan eller följ länken, https://calendly.com/johan-hallgren/slutredovisning.