- Kursmaterial
- Planering
- Arbete
- Kunskapsdokument
- Tutorials
- Andra kurser
- Om Kursolle
Extrauppgifter
Denna kurs bygger mycket på eget arbete där du jobbar mot olika tutorials och på detta sätt lär dig nya saker. I detta arbetssättet så är det naturligt att olika elever arbetar olika snabbt. För att hålla ihop gruppen på ungefär samma moment så har jag skapat ett antal extrauppgifter som du kan göra efter behov och/eller intresse.
Nedan kommer extrauppgifter presenteras med en koppling till ett moment där det är en lämplig svårighetsgrad eller att uppgiften bygger på kunskaper som vi har arbetat med i just detta moment. Vissa extrauppgifter bygger på tidigare extrauppgifter, vissa bygger vidare på uppgifter som är gjorda i det rekommenderade momentet eller tidigare moment. Vissa uppgifter kommer innehålla tekniker som vi kommer arbeta med senare i kursen men det är ändå en lämplig utbyggnad vid den tidpunkten.
Du gör vad du vill med dessa extrauppgifter, arbeta med det som verkar roligt eller jobba med något som du känner gör dig bättre som programmerare. Hela kursen handlar om att bygga på dina kunskaper och ge dig fler verktyg för att kunna prestera så bra som det ä möjligt i slutprojektet där du skall visa vilket betyg du skall ha på kursen.
Moment02
Extrauppgift: Arbeta med egenskapade klasser
Tidigare har vi arbetat med Banken
och då lagrades transaktionerna i en lista. Skapa en kopia på detta projekt och bygg om transaktionerna så att de istället blir objekt som lagras i en lista.
Saker att tänka på:
- Vilka medlemmar behöver du i klassen?
- Tidigare representerades ett uttag av ett negativt tal. Hur vill du göra nu?
Extrauppgift: Lagra objekt i fil
Tidigare när vi har lagrat data i filer så har vi antingen gjort det väldigt enkelt för oss så att vi endast lagrat ett värde på varje rad eller så har vi varit tvungna att separera data med någon form av delimiter
. När vi jobbar med objekt och listor så finns det inbyggda metoder i C# för att spara en hel samling i en fil och även möjlighet att läsa in hela samlingen tillbaka till en lista.
JSON
JSON är en lagringsstruktur som används för att lagra och utbyta data mellan olika system. En stor fördel med JSON är att det är relativt lätt för våra ögon att läsa innehållet i filen. JSON har också en struktur som passar väldigt bra ihop med objekt då uppbyggnaden liknar varandra.
JSON-struktur
[klicka för att visa]
[ { "Name":"Anders", "Age":17 }, { "Name":"Bodil", "Age":18 }, { "Name":"Cilla", "Age":19 }, { "Name":"David", "Age":20 } ]
Visa JSON
Att lagra JSON-data i en fil med filändelsen .json
gör att du kan öppna filen i Firefox för att se innehållet på ett strukturerat och enkelt sätt. Övriga webbläsare har olika tillägg för att visa detta.
JSON är ett smidigt sätt att lagra data men det kan vara lite svårt att få grepp om större datamängder genom att kika i den genererade filen. Då finns det några applikationer online som hjälper dig att visa upp innehållet, vissa applikationer ger dig också möjlighet att ändra och validera datastrukturen.
Uppgiften blir att lagra någon lista till fil och sedan läsa in den igen. Testa på bilapplikationen, bankapplikationen eller på någon annan applikation.
Här fanns tidigt ett exempel som är smidigt och som fungerar bra. Problemet är att det är svårt att bygga vidare på detta senare när vi skall addera arvet. Därför kommer jag visa två alternativa lösningar; det första alternativet är det som fanns här först och det andra alternativet är det som rekommenderas för att slippa bygga om senare.
Kodexempel: Första alternativet - JSON
Klicka för att visa koden!
Här följer klassen Person som lagrar namn och ålder på en person.
Här följer programkoden. Filändelsen har jag satt till .dat
vilket är en förkortning för data. Den kunde lika gärna vara .txt
, .json
, eller något annat.
Filens [personer.dat] innehåll ser ut så här när programmet har kört.
[{"Name":"Anders","Age":17},{"Name":"Bodil","Age":18},{"Name":"Cilla","Age":19},{"Name":"David","Age":20}]
Kodexempel: Andra alternativet - JSON.net
Klicka för att visa koden!
Här följer klassen Person som lagrar namn och ålder på en person.
Filens [personList.json] innehåll ser ut så här när programmet har körts.
[{"Name":"Anders","Age":17},{"Name":"Bodil","Age":18},{"Name":"Cilla","Age":19},{"Name":"David","Age":20},{"Name":"Åsa","Age":42},{"Name":"Östen","Age":39}]
Moment03
Extrauppgift: Lagra generisk klass i fil
En generisk klass kan vara en lista med objekt som är påverkade av ett arv. Här kommer nu ett exempel på hur denna lagring kan se ut.
Detta exempel bygger vidare på det andra alternativet i det förra exemplet. Den första tekniken har inte möjlighet att bygga vidare så att arvet bibehålls.
Kodexempel: JSON.net
Klicka för att visa koden!
Klassen Person
Klassen Student
Klassen Teacher
Programmet
Filens [personList.json] innehåll ser ut så här när programmet har körts. Det viktigaste här är att hålla reda på vilken klass ett objekt grundar sig i för att kunna återskapa samma objekt. Denna info finns i attributet $type
där det sedan talar om vilket namespace som klassen tillhör och vilket namn klassen har. Efter kommatecknet så står det också namnet på projektet. Jag är osäker på (har inte testat) om detta innebär att denna fil inte går att läsa in till ett annat projekt, eller annat namespace, med samma deklaration av klassen Student/Teacher.
{ "$type":"System.Collections.Generic.List`1[[listToFile_json_derived.Person, listToFileDerived]], mscorlib", "$values":[ { "$type":"listToFile_json_derived.Student, listToFileDerived", "Field":"Naturvetenskapsprogrammet", "Name":"Anders", "Age":17 }, { // dolda objekt }, { "$type":"listToFile_json_derived.Teacher, listToFileDerived", "StartYear":2015, "Name":"Åke", "Age":43 } ] }
Extrauppgift: Arbeta med egenskapade klasser
Om du har byggt egna klasser för t.ex. banken och transaktioner så skulle du här kunna bygga vidare på den strukturen och skapa olika typer av konton. Transaktionerna ser inte olika ut bland olika konto men det finns olika konton såsom balanskonto och sparkonto. På ett sparkonto har du möjlighet att få ränta på dina pengar.
Om du vill bygga vidare på din bankapplikation så finns det mängder av möjligheter. Här kan du också få möjlighet att bygga in information om vem som äger ett konto, eller så skapar du klassen Person som kan ha ett eller flera konto kopplat till sig.
Saker att tänka på;
- Vad skall ärvas? Hur ser arvet ut, är relationer mellan objekt "is a" eller "has a"?
- Hur skall strukturen se ut? Är det lättare att koppla en person till ett konto, eller ett konto till en person?
Extrauppgift: SpaceShooter
Om du får tid över så kan du leka lite med SpaceShooter för att på egen hand utveckla spelet och befästa dina kunskaper om arv och spelutveckling.
I slutet av kursen så skall man för att nå betyget E eller C göra förändringar i spelet och lägga till egen funktionalitet. Här nedan följer ett antal saker som du kan göra på egen hand.
- Skapa en ny fiende. Lägg till en ny klass och se till att denna fiende fungerar i spelet. Skapa en egen sprite, eller hitta en på nätet, bestäm hur din fiende skall röra sig och implementera den i spelet.
- Spawna nya fiender så att spelet inte tar slut. Fundera på var någonstans det är lämpligt att nya fiender skapas.
- När en bullet träffar en fiende så fortsätter denna bullet att leva, det är inte så rimligt. Se till att bullet tas bort när den träffar en fiende.
- Bygg vidare på spelet på egen hand, det finns hur många möjligheter som helst, det är bara din egen fantasi som sätter stopp.
Innan du testar att göra en eller flera av dessa förändringar så ta en säkerhetskopia av ditt projekt. Du skall senare bygga vidare på det spel som du nu har skapat.
Moment04
Extrauppgift: GameStats
Bygg in ytterligare en GameState till ditt spel som går att nå från huvudmenyn. Denna GameState skall innehålla info om spelet, hur det spelas, vem som har gjort det och hur det får spridas. Tänk på att om du använder sprites och ljud från nätet så är det viktigt att kolla under vilken licens du får använda detta. Vissa saker får du inte använda, vissa saker får du använda under förutsättning att du talar om var de kommer ifrån. Här är ett bra ställe att ge credits.
Extrauppgift: HighScore
Bygg ihop någon version av ditt SpaceShooter med applikationen HighScore så att du kan lagra Highscore i ditt spel.
Moment05
Extrauppgift: Listor, objekt och arv
Som du märkte i vår tutorial så valde jag att fokusera på GUI och slarvade
därför bort klassen Car som vi använt oss av tidigare. Jag använde mig också av ListView Control
för att lagra våra bilar.
Om jag istället vill använda mig av de objekt och listor vi byggt tidigare så går detta bra, då skapar jag bara ett nytt objekt när detta skall läggas till i applikationen för att sedan lägga till det i listan. Denna lista visas sedan upp i vår ListView Control
. Tas ett objekt bort så behöver det tas bort i listan och sedan skall vår ListView Control
spegla listans utseende.
Vill du dessutom visa upp arvet så bygg in Vehicle
och Lorry
till applikationen.
Extrauppgift: API
Du har tidigare byggt en GUI-applikation där du kan lagra bilar i en lista, kanske har du också byggt vidare på den uppgiften så att du använde klassen Car. Bygg nu ihop applikationen där du kan söka efter bilinfo med någon applikation där du kan lagra en bil på något sätt.
I nästa avsnitt så skall vi kika på hur vi kan lagra information om bilar i en databas, då finns det möjlighet att bygga vidare på denna applikation.
Extrauppgift: Databas
Bygg en databaskoppling till någon av de tidigare uppgifterna med GUI.
Kanske är det nu du skall bygga en applikation som fungerar med GUI, som lagrar alla bilar som objekt i en lista, som hämtar info via ett API så att du får riktiga värden samt att allt detta lagras i en databas.
Extrauppgift: Databas med flera tabeller
Efter genomgången av hur en databas med flera tabeller fungerar så kanske det är dags att bygga till tabellen person, eller någon annan lämplig tabell, och bygga ihop detta med din allt större GUI-applikation.