Paws

Redovisning av kursmomenten

Kursmoment 08/10: Projekt och examination

Äventyrsspel 2.0

Jag kände att jag låg ganska bra till tidsmässigt, så jag har gjort ett helt nytt spel. Det var väldigt bra övning, men det är mest grafiken som är ny, och texterna förstås.

Grundläggande krav

Välkomstsida innehåller ER-diagram och översikt av städerna (har städer i stället för rum) tillsammans med länkar till cheatsheet (visa alla städer), Walk-through och visa källkod. På varje sida finns länk för att visa källkod, i ett nytt webbläsarfönster.

Mini Games

Att ändra minispelen till att passa spelets stil, var bland det roligaste i uppgiften. Det var inte någon jätteutmaning att få detta att fungera, lite ny grafik och ändrade spelregler.

Optionella krav

Optionellt krav 1: Hälsomätaren var inte så svårt att uppdatera. Jag försökte dock att lösa fruktgrejen med att skapa objekt att placera ut. Jag nådde inte ända fram, utan nu ligger frukten som aktiviteter i databasen, ungefär som tidigare. Jag skapade några till aktiviteter, som dricka öl och dricka vin, som man kan bli både pigg och sjuk av! Så nu finns det både jöst öl, surt vin och rutten frukt utplacerad i städerna.

Optionellt krav 2 och 3: Ryggsäcken och transfereing till slumpmässigt rum (stad), hoppade jag över. Jag försökte göra en databaslösning av ryggsäcken, men gav upp när jag kände att jag inte kom framåt. Transfereringen lämnade jag också. Däremot var det ganska lätt att genomföra en funktion för mental återhämtning. Jag gjorde ju inte direkt nåt rum, utan använde funktionen sleep(10) för att få den effekt som efterfrågades.

Sammanfattning

Detta projekt var väldigt roligt att genomföra, och jag har nog lagt ner minst 60 timmar, kanske mer på att få det färdigt. Kanske har jag lagt ner alldeles för mycket tid på grafiken, men jag har kämpat med koden också.

Jag tycker kursen ar varit väldigt givande och jag har nog börjat tänka lite objektorienterat, även om jag emellanåt har tyckt att det varit ganska svårt. Jag har redan rekommenderat kursen till andra, och skulle ge den ett betyg på 8/10.

Kursmoment 07: Äventyrsspel med PHP och databas upp till toppen

Först tyckte jag detta moment var väldigt rörigt. Jag började, men kunde inte alls hänga med i allt. Då började jag om från början, lugnt och metodiskt. Gjorde mappar för varje steg och satte mig in i uppgifterna/problemen ordentligt och vartefter de kom. Momentet tog avsevärt mycket längre tid än föregående (att göra kompis-sök).

Jag dokumenterade övningarna. Tyckte det var ett bra sätt att knyta ihop det hela och jag hängde med mycket bättre genom att göra en liten sammanfattning vid varje delmoment.

Mina prototyper

Prototyp 0.1 — utan databaskoppling
Prototyp 0.2 — visa titel och beskrivning
Prototyp 0.3 — visa rumkopplingar
Prototyp 0.4 — multi_query
Prototyp 0.5 — klass för databaskoden, CRoom.php
Prototyp 0.6 — grafisk representation i databasen

Prototyp 0.1

Detta delmoment gick som en smäck, inga problem! Jag bytte ut Betty mot en manlig variant, och gjorde lite annan stilmalls­formattering på prototypen.

Prototyp 0.2

På en gång fick jag problem med teckenkodningen eftersom jag använder utf-8! Men jag hittade lösning på problemet både utifrån och på forumet. Grejen som löste det, var att använda $databas->set_charset("utf8"); direkt efter databaskopplingen :)

Än så länge ligger hela databasen på min localhost, men skall snart exporteras till studentservern.

Prototyp 0.3

Detta delmoment hade jag inga större problem att göra.

Prototyp 0.4

Jag fick googla lite för att få multi_query att fungera. Var tvungen att även använda more_results(), förutom next_result().

Prototyp 0.5

Nu börjar vi komma till väsentliga saker! Det känns mycket mer överskådligt att göra en klass till rummen, vari man kan lägga konstruktor, destruktor och funktioner. Jag börjar mer och mer inse fördelarna med objektorientering.

Prototyp 0.6

Detta delmoment i prototypen var enkelt. Jag lade in bildkopplingar till rummen i databasen.

Avancerade funktioner

Jag har lagt in lite för många rum och kopplingar märker jag. Det är en enda röra. Nästa gång ska jag göra lite bättre planering och noggranna er-diagram innan jag sätter igång ;). Trots allt har det fungert ändå, men rum bredvid varandra har inte garanterat nummer bredvid varandra...

Implementeringen av hälsomätare samt HighLow-spelet gick bra. Tyvärr kopierade jag en del både från mos och andra. Men jag hängde med i vad all kod gör.

Följde du anvisningarna eller kodade du själv?

Jag följde anvisningarna till punkt och pricka. Jag klarar inte att koda allt detta själv. Å andra sidan modifierar jag eller lägger till en hel del själv. Har alltid en massa idéer om hur saker kan vara.

Känner du att du har lärt dig något om databaser och objektorienterad PHP-programmering?

Jag har lärt mig jättemycket! Kopplat rum och aktiviteter fram och tillbaka. Som jag nämnde tidigare, så blev det väldigt ostrukturetrat till slut. Nästa gång jag ska göra något liknande så ska jag planera mycket mer noggrant ;)

Saknar du något?

Jag saknar ingenting. Övningen har gett mig mycket, både flera roliga timmar, och övning på att lägga in tabeller/ändra värden i databas. Toppen!

Är detta något du kommer ha nytta av framöver?

Jag kommer absolut ha nytta av det jag lärt mig på denna kurs, är helt säker på det! Om inte professionellt så i alla fall i mitt kreativa skapande. Kommer göra många små spel i framtiden. Det var jättekul!

Länk till äventyrsspelet (adventure.php)

Kursmoment 06: Databaser, SQL och PHP upp till toppen

Det här måste ha varit det lättaste kursmomentet hittills! Det svåraste var att hitta inloggning till PHPMyAdmin... Jag har inte direkt använt PHPMyAdmin på detta sätt förut, men jag har varit inne och tittat på databaser och tabeller, på mina WordPress-sajter.

Att använda vyer var intressant. Jag lade upp en likadan databas på min localhost, så nu har jag automatiskt en backup :). Det var lite problem att få vyerna att fungera, de fick jag göra om. Annars var det inga problem att konfigurera databasen mot mina PHP-sidor (studentservern samt localhost) och inte heller att köra scriptet som döljer db_user och db_password för obehöriga (när man visar källkoden).

Jag piffade upp ”Sök kompis”-sidan lite med CSS. Kanske inte till en Google-layout, men i alla fall i stil med layouten på övriga sidor på min sajt. Lade även till lite småfunktioner, som meddelande om man inte skrivit in något eller om sökningen inte matchar någon databaspost. Det finns även autofocus på sökfältet och en ”rensa”-knapp för att rensa både sökfält och resultatfält.

Sammanfattning

Vad anser du om SQL, känns det enkelt att förstå och använda?

SQL känns jättesmidigt att använda.

Beskriv din egen erfarenhet av SQL och databaser (nybörjare/erfaren)

Har inte mycket erfarenhet av SQL innan denna kurs.

Vad anser du om PHPMyAdmin?

PHPMyAdmin är superbra. Mycket enklare att använda än att skriva kommandon i ett terminalfönster :).

Har du använt PHP tillsammans med databaser tidigare?

På sätt och vis har jag det. Har gjort WordPress-installationer, och pillat i config-fil där.

Mina övningar

Sök kompis (buddy.php)

Tankenötter

Inga tankenötter i detta kursmoment!

Kursmoment 05: Objektorienterad programmering i PHP upp till toppen

Nu går det snabbare och snabbare att lägga upp skalet för varje nytt kursmoment. Jag kopierar alla mappar och filer som behövs, på en gång, så jag kan kolla att alla länkar fungerar... Sedan tar jag itu med instruktionerna i lugn och ro utan att blanda ihop filer med varandra eller glömma något! Rumsterade om ytterligare i menyn och lade ner valideringslänkarna i foten, där jag tycker de bättre hör hemma.

Jag tycker detta moment var ganska svårt men nyttigt. Jag var tvungen att tjuvtitta en hel del, men gjorde en del själv också. Jag har inga större svårigheter att följa resonemanget i beskrivningen, men när det gäller att skriva kod helt själv så tycker jag att det är otroligt svårt att komma igång.

Sessionshanteringen var inga problem, men så kopierade jag i stort sett mos kod :P. Det intresserade mig mycket, det var lite djupare än sessionshanteringen vi gjorde i htmlphp/kmom03. Detta var vad jag saknade i förra kursmomentet, ”Kasta gris”, för att komma ihåg highscore-värdet i en cookie.

Jag gjorde inga extra finesser till spelet, mer än att jag pillade lite CSS. Vad gäller klasserna och klasshanteringen har jag ingen bättre idé hur man ska lägga upp det hela, inte i dagsläget i alla fall. De funderingarna kommer nog i projektet!

Mina övningar

Kort (card.php)
Kortlek (deck.php)
Korthand (hand.php)
Session (session.php)
High Card Low Card (highlow.php)

Tankenötter

Inga tankenötter i detta kursmonment!

Kursmoment 04: Funktioner, klasser och objekt upp till toppen

Jag började med att läsa artikeln ”How to become a hacker”, behöver nämligen lite plats i menyn. Artikeln var väldigt intressant, blev sugen på att installera Ubuntu i min dator, men det får bli efter kursen!

Nu börjar jag komma i konflikt med mig själv. Ska jag fortsätta att utveckla mitt tärningsspel med kodning såsom jag börjat, eller svänga tillbaka på stigen och kolla hur mos gjort? Bestämmer mig för att jag inte är flygfärdig ännu, och gör om mitt tärningsspel efter hur mos gjort... Denna kurssajt kommer ju att fungera som referens för mig senare när jag ska utveckla mig på egen hand.

Fortsätter i mos spår med funktionerna. Har läst lite Javascript så funktioner är inte helt nytt för mig. Det verkar vara i stort sett identiskt i PHP med hur Javascript fungerar...

Objektorientering är inte heller helt nytt för mig, har läst en kurs i grundläggande C#, så jag har fått en inblick redan tidigare, i objektorienterad programmering. Jag tycker att geongången i kursmomentet var bra och pedagogisk, och jag behövde repetera en del.

Implementeringen av SVG-objekt var, liksom tidigare kursmoment, det som var roligast på hela momentet :). Jag ändrade både färg och storlek på tärningarna.

Mina övningar

Först har vi då mina tärningsövningar 1—6, där jag följt kursens instruktioner steg för steg. Tärning 1—6 (dice6.php).

Kasta gris

Jag valde att göra den enklaste övningen, ett ”Kasta Gris”-spel. Och jag gjorde det på absolut enklast sätt jag kunde komma på. Jag gjorde helt enkelt ett program som slumpmässigt kastar en tärning (första tärningen kastas automatiskt, direkt efter att tärningsobjektet skapats - eller i alla fall bilden av tärningen). För varje varv jag kastar tärningen så summeras poängen så länge som tärning nummer 1 inte dyker upp, då avslutas spelet och ett ”Game Over”-meddelande visas.

Jag hade en idé om att spara ett ”Highscore”-värde som fanns kvar genom spelet, men fick det inte att fungera som jag ville... Gav slutligen upp. Antagligen skulle det ha lagts in i en cookie eller nåt. Definitivt överkurs för mig just nu!

Precis som i förra kursmomentet så validerar inte sidorna med svg. Men denna kurs går ju inte igenom svg på djupet, så jag lät det vara.

Här är länken till spelet: Kasta Gris (pig.php).

Tankenötter

Inga tankenötter i detta kursmonment!

Kursmoment 02/03: PHP-programmeringens grunder upp till toppen

När jag började med denna uppgift visste jag inte riktigt hur jag skulle organisera allting. Bestämmer mig till slut för att stilmallar och bilder får ligga utanför kmom-mapparna. Uppgifterna har åkt fram och tillbaka, in i egna mappar och ut i kmom-mappen... Till slut hamnade de i egna mappar, tyckte strukturen blev tydligare då. Enklast var också att låta alla uppgifterna få varsin common.php i respektive mapp, eftersom det var så mycket länkar i dem. Jag hade kunnat ha hela sökvägen till filerna i varje länk men det blev för krångligt då jag jobbar lokalt och sedan ska flytta över filerna till student-servern. Nej, en egen common.php till varje uppgift, så fick det bli :)

Överlag har jag gjort väldigt mycket själv i detta kursmoment. Det absolut roligaste var att göra SVG-bilder! Tärningsspelet var enkelt. Lade in tärningskasten i en for-loop, som löpte sex gånger. För varje kast summeras tärningskastens poäng och efter loopen delas summan med sex för att få genomsnittsvärdet. Matematiska funktionerna var lätta att hitta i php-guiden, och ställde inte heller till med något besvär...

Hangman var lite mer kämpigt... Jag fick problem med å,ä,ö-tecken i och med att jag använder utf-8-kodning. Hittade en tråd i forumet om just detta problem och läste lite grand om multibyte_strlen, men det kändes alldeles för svårt att ge sig på. Så jag kodade om hangman.php med ISO-8859-1 istället, och det fungerade bra! Debuggingen på/av var nog det som var jobbigast, men jag fick till det till slut, efter lite googlande och tjuvtittande på andras inlämningar.

Mina övningar

Kasta tärning (dice.php).
Matematiska funktioner (math.php).
Rita huvud (draw.php).
Förbättrad Hangman (hangman2.php).

Tankenötter

1) Rita huvud: Det var lätt att göra en funktion ”DrawHuvud()”. Bara kopiera kodstycket ”DrawPicture()” och plocka ut det jag ville ha. Hittade på nya namn på variablerna (vet inte om det behövs men jag ville inte chansa). SVG-bilden (bilderna) vill inte validera, men känner att det är överkurs för detta kursmoment. Det blir en massa error relaterat till Inkscape, jag låter det passera för denna gång... Vem vet, nästa kurs kanske blir om SVG ;)

2) Förbättringar av Hangman: Jag har hottat till Mr. Smith till en Mr. Doe. Input-rutan har jag satt som autofocus, vilket underlättar betydligt vid inmatning av bokstäver. Vidare har jag (förutom olika meddelanden) skiljt på färgen på meddelandena som skrivs ut om man vinner eller förlorar. Vinna = guld, förlora = rött! Sist men inte minst ser man en glad Mr. Doe om man lyckas rädda honom! För att klara detta var jag tvungen att möblera om i koden. Koden för utritande av bild flyttade jag ovanför formuläret. Koden för avklarat spel klämde jag in mellan koden för utritande av bild och formulär... Voilà

Kursmoment 01: Intro till PHP i webbmiljö upp till toppen

Det här första kursmomentet kändes väldigt lätt, efter att plöjt projektet i htmlph. Jag förstår inte vitsen med att använda xhtml, så jag tog mig friheten att använda html5 istället. Dessutom fick jag inte xhtml att validera, så valet var enkelt :D

Jag tycker det är spännande att få sidan att växa fram på ett helt annat sätt än vi gjorde i htmlphp, men jag vill nog ha en header.php och en footer.php. Fortsätter dock kursen enligt instruktioner. Upptäcker kanske nån annan fördel så småningom...

En glad överraskning var HEREDOC. Så enkelt och elegant! Det kommer jag definitivt att använda mig av senare, efter kursen. Intuitivt gillar jag det här sättet att konstruera på.

Att snygga till sidan med css var faktiskt det som tog mest tid. Jag börjar så smått bli beroende av css, tror jag, har väldigt svårt att stoppa när jag börjat ;) Jag lade även in lite Javascript för att snygga till navigerings­menyn.

Skönt med en mjukstart med inte så väldigt mycket PHP. Jag tycker fortfarande att det är rätt så svårt, men det går åt rätt håll. Kikade tillbaka lite på de första kursmomenten i htmlphp och kände då att jag definitivt lärt mig en hel del!

Mina övningar

Världens enklaste program, som skriver ”Hello World” (hello.php).
Lek med strängar (strings.php).
Mitt malldokument att återanvända (template.php).

Tankenötter

Jag gjorde inget avancerat fusk i tankenöt ett. Så teknisk är jag inte ännu, men jag kom på att om man manipulerar input- (eller get-) värdet i adressfältet, så verkar inte värdena sparas - för det nollställs för varje ändring :) Det gäller förstås att komma ihåg alla bokstäver!

Fusket i tankenöt 2 två gjorde jag ännu simplare! Kollade helt enkelt i källkoden, vad ord 3 och 8 var :D