Hem | Redovisningar | Hangman | Kasta gris | Tärning | Dice | Spela high/low | Hand | Deck | Card | Search | Adventuregame | Adventuregame 2.0 | Hello World | Test Strings | XHTML | View Sourcecode | CSS | Twitter

Redovisningar av kursmoment

Kursmoment 1

Första kursmomentet gick överlag relativt problemfritt. Jag hade ju förstås all programvara redan installerad sedan HTML-kursen; så jag använder jEdit som texteditor, jag har MAMPs servermiljö med Apache och jag har FileZilla när det behövs.

Det var skönt att se, efter HTML-kursen, att vi nu kommer att gå in mer i detalj i PHP och att man kommer få lära sig det från grunden. Tidigare har jag i princip bara kopierat PHP-kod och implementerat den tillsammans med HTML. Fick ett problem med att min template inte visades i browsern så som den skulle. Istället talade xml om för mig att det inte fanns någon style associerad med sidan, därför syntes bara källkoden. Ärligt talat vet jag inte exakt vad som var fel men det var uppenbarligen någonting som jag skrivit fel i koden, för när jag, efter en stunds felsökande till slut copy-pasteade Mikaels kod så fungerade det korrekt. Felet var dock ganska givande då jag fick se vad som händer i xml-definerad kod när man gör fel; att man inte får ett felmeddelande, som i PHPs error-reporting där sidan ändå visas, utan att sidan helt enkelt inte visas.

Annars har jag stött på problem med PHP tidigare, i HTML-kursen, så jag var väldigt noga med att se till att jag verkligen skrev korrekt kod. Är fortfarande inte alls van vid syntaxen i PHP, tycker att den är lite krångligt skriven, men det är förstås bara en vanesak. Jag är ju fullständig nybörjare så förhoppningsvis så sitter det snart. PHP är uppenbarligen väldigt användbart och det ska bli intressant att se hur man kan använda PHP tillsammans med databaser.

Vad gäller tankenötterna så kan man få oändligt antal gissningar genom att skriva in sina gissningar i adressfältet, efter guessed och char. Man får all information man behöver i adressfältet. Man kan skriva in ett helt ord i adressfältet. Man kan också använda backspace för att få oändligt antal gissningar. För att komma på rätt ord kan man kolla i källkoden, jämföra orden i arrayen med vad som står i adressfältet, t.ex word=8, så ser du vilket ord som är rätt.

Länk till vad jag gjort i det här kursmomentet.

Kursmoment 2/3

Okay, kursmoment 2/3. Nu när jag fått boken ska jag sätta mig ner och läsa ikapp de kapitel som anvisades. Även om man tar sig igenom kursmomenten utan boken så har man säkerligen nytta av att läsa boken.

Jag satt ganska länge med det här kursmomentet, trots att jag inte gjorde några direkta utsvävningar utan följde med i övningen. Jag får ofta felmeddelanden om jag försöker göra något på egen hand, många gånger beror felen enbart på något missat semikolon eller dylikt men det är fortfarande irriterande och leder många gånger till att jag helt enkelt kopierar kod. Att många delar i övningen förutsätter att man kopierar gör nog också att det blir så att jag kopierar mer än vad jag egentligen behöver.

Blir lite rörigt i övningen ibland med vissa funktioner som ska testas, även fast de inte har något med hangman att göra. Personligen hade jag gärna sett ett särskilt kursmoment där man enbart testar sådana funktioner, men jag kan förstå varför de är inbäddade i den här övningen, då de är grundläggande.

Debug on/off fungerar nu som det ska, med en parameter som kan sättas till 1 eller 0. Krävdes lite funderande och lite hjälp av forumet så förstod jag hur det skulle vara. Samma sak med första tankenöten; jag tittade i forumet och såg hur andra hade löst det så insåg jag att det inte var så svårt.

Jag har inte gjort särskilt mycket för att förbättra hangman, annat än att ändra lite style och att visa vilket ord som var rätt om man inte räddar mannen. Jag testade POST i övningen, vilket ju hade varit någonting som man hade kunnat använda.

Länk till hangman.

Kursmoment 4

Kursmoment 4 har förflutit bra. Jag har följt instruktionerna i övningen som jag brukar och då brukar det inte bli några större problem. Det är alltid vissa småsaker som krånglar när man skall överföra kod till sina egna filer men det brukar mest handla om mindre syntaxfel så man får felsöka lite grann. Vad gäller tärningen så har jag använt den grafik som övningen tillhandahåller. Jag har inte försökt göra min egen då jag inte tror att mina kunskaper tillåter det ännu.

I c++ kursen har jag så här långt tyckt att objektorienterad programmering har gjort programmen mer överskådliga och faktiskt gjort programmeringen lättare. Där känns det lättare att hänga med nu än tidigare (detta kan mycket väl förändras på kort tid är jag rädd). I PHP har jag ännu inte kommit in i det riktigt och det känns lite mer rörigt. Hur man ska använda PHP:s inbyggda funktioner och variabler tillsammans med sina egna känns också lite oklart en så länge.

För mitt tärningsspel valde jag att göra griskastnings varianten. Jag funderade en hel del på uppgiften och fick gå tillbaks och titta i olika delar av övningen. Jag använde mig också av forumet och tittade hur föregående kursare har löst uppgiften. Jag har använt mig, till stor del, av andras kod, både från övningen och i forumet, och modifierat den för att få de ändringar jag ville ha. Mitt spel kräver bara att man samlar 21 poäng så har man vunnit. Jag tyckte att det var lite extremt att gå ändå upp till 100 som wikipedia-sidan säger att spelet skall gå till, då skulle man nog aldrig få se min glada gris. Jag hade ett problem med att jag inte ville att någon tärning skulle visas förrän man trycker på kasta, vilket jag inte visste hur jag skulle implementera. Jag visste att jag skulle använda någonting från form men visste inte hur jag skulle använda det i en if-sats. Med hjälp av mos förstod jag hur man kan sätta ett värde i form för att använda sig av det värdet. Nu fungerar det som jag ville.

Länk till kasta gris.

Länk till tärningen.

Kursmoment 5

Jag har följt anvisningarna rakt igenom hela kursmomentet även denna gång och har därför inte haft några större problem under kursmomentet, mer än de vanliga små syntax-misstagen som jag gör lite då och då. En liten glimt på koden från övningen ger i princip alltid svar på vad jag gjort fel vid de tillfällena. Momentet var väldigt pedagogiskt och visar tydligt på nyttan med att dela upp i olika filer, vilket blev i princip nödvändigt här när spelet skall använda sig utav flera olika delar för att fungera korrekt. Att ha spelhanden på samma ställe som kortleken hade i detta fall förmodligen gjort koden mycket svår att läsa och spelet nästan omöjligt att organisera, även om det, kanske, hade kunnat fungera ändå.

Jag har funderat lite på vad skillnaden mellan require och include i PHP skript och efter ett kvickt googlande så fick jag till svar av W3 att de producerar olika errors om filerna saknas (require ger fatal error och stoppar skriptet, medans include ger ett felmeddelande men låter skriptet fortsätta).

Jag är, i ärlighetens namn, inte helt säker på att sessionshanteringen fungerar exakt som den ska i mitt spel. Jag kan normalt spela precis som det är tänkt men vid vissa tillfällen så verkar det som att sessionen från föregående spel ligger kvar även fast man trycker på starta nytt spel och därigenom startar en ny session. Jag har spelat andras versioner också och tycker mig få samma resultat även där många gånger. Förstår inte riktigt varför, ett nytt id skapas ju korrekt så de borde inte vara något problem. Hursomhelst; spelet fungerar i övrigt som det är tänkt så jag går vidare.

Jag har inte gjort några extra grejer på spelet, jag ville lägga till funktionalitet för att visa när man nått till sista kortet, som det är nu så vet jag inte vad som händer om någon, mot förmodan, skulle klara av hela leken. Jag kom inte riktigt på något bra sätt att göra det på dock. Jag har heller inga alternativa lösningar, och absolut ingen annan syn på klasserna; jag är bara nöjd att jag kan implementera det själv överhuvudtaget.

Länk till high/low-spelet.

Kursmoment 6

Bra grundläggande övning i databaser, tycker jag. Den lilla erfarenhet jag har från databaser är från HTML/PHP-kursen och där använde vi SQLite manager så phpMyAdmin var helt nytt. Det var inga större svårigheter att komma igång med. Det underlättar förstås med ett grafiskt gränssnitt där man dessutom kan se vad som exekveras i kod. Jag kan definitivt se nyttan av att verkligen lära sig SQL-kodning, det vore onekligen ett smidigt sätt att använda sig av viktiga funktioner i SQL. Utan dem förmodar jag att phpMyAdmin kan kännas lite begränsande. Överlag känns SQL som ett ganska enkelt språk, både att förstå och att använda.

Hade lite problem att förstå hur man joinar tabeller, jag såg inte riktigt hur det hängde ihop. Men efter lite handledning och labbande så blev det ganska snart klart hur ett id i en tabell hänger ihop med ett id i en annan tabell genom länkning.

För sökmotorn ville jag presentera resultaten från sökningen i en tabell, så jag letade runt lite på hur andra har gjort och gjorde sen en kombination av sökmotorn från övningen med en något annorlunda exekvering av fetch_object. Sedan använde jag bara lite styling för att få tabellen att se lite bättre ut. Nackdelen med att hämta från view KompisUtrustning är att ett namn kommer skrivas ut flera gånger om en person har mer än en typ av utrustning. Kanske hade varit bättre att skriva ut all utrustning på samma rad istället, även om den raden hade kunnat bli väldigt lång för vissa personer. Hursomhelst så har det ingen inverkan på funktionaliteten. Hade inga egentliga problem med sökfunktionen. Det förvånar mig alltid att det är så pass enkelt att ansluta till en databas och få fram informationen. Men det är väl positivt. Kanske blir det mer komplext framöver.

Länk till sökmotorn

Kursmoment 7

Hade vissa småsaker som jag fastnade på i det här kursmomentet, men överlag så har det gått ganska bra. All databashantering gick bra, mycket tack vare det som lärdes ut i föregående kursmoment. Jag hade därför inga större problem med att länka samman rummen med händelser. Det ska sägas att jag inte lagt ner alltför mycket tid på just kopplingen mellan olika rum; man kan egentligen bara gå i en riktning hela tiden vilket kanske inte är så spännande i ett spel men jag har förstått att projektet kommer att utveckla äventyrsspelet ytterligare, så det känns som att jag kan bygga ut rumsstrukturen då istället.

Jag har som vanligt följt anvisningarna i övningen, även om man denna gång var tvungen att komma på vissa saker själv. Hälsomätaren vållade mig vissa problem på så vis att spelet fortsatte även när hälsan gått ner till noll. Jag kollade i forumet hur andra hade löst det och hittade där en lösning för hur man kan lagra resultaten på ett smart sätt. Jag hade också problem med ett felmeddelande som har att göra med results i spelet och även där hittade jag lösningar i forumet. I övrigt ser min kod till största del ut som den i övningen. Det som jag har editerat något i har jag markerat genom att kommentera att jag faktiskt gjort så. Jag gjorde så att sessionen initieras automatiskt när man klickar på starta spelet. Om jag inte gjort så, hade föregående session legat kvar när man valde att spela spelet igen.

Jag har inte använt mig av någon svg-grafik utan jag hämtade bilder online istället och implementerade i spelet. För övrigt intressant att man kan skriva en kodrad i databasen, där man definierar en bild som skall användas. Detta trots att databasen inte vet någonting om den bilden. Även det faktum att man kan skriva en funktion som händelse bara genom att skriva funktionsnamnet och att det faktiskt fungerar är väldigt praktiskt. Jag lär mig nya saker hela tiden och kommer säkerligen ha mycket nytta av det här i framtiden, även om just den här typen av spel förmodligen är på utdöende.

Länk till äventyrsspelet

Kursmoment 8/10

1.1.

Eftersom projektet bara byggde vidare på vad vi gjort i tidigare kursmoment så var det inte alltför svårt. Spelen fanns ju redan och hur man implementerar dem lärde jag mig i det förra kursmomentet. Det som tillkom från föregående kursmoment var att förflytta sig till ett slumpmässigt genererat rum, en händelse som gör att hälsan går ner till noll, lagring för saker man plockar upp i spelet samt ett rum där ens hälsa återställs om man stannar tillräckligt länge. Alla dessa delar var optionella och jag har försökt att implementera samtliga, även om jag inte gjort exakt enligt projektspecifikationen. Jag trodde att vissa optionella krav skulle vålla mig problem men det var egentligen inga större problem, i alla fall på det sättet jag valde att göra. Jag trodde att det skulle krävas någon särskild inbyggd funktion för att få hälsomätaren att automatiskt gå upp till max men det var ju bara att inkludera en meta så löste det sig. Att förflytta sig till ett slumpmässigt rum gjorde jag helt enkelt genom en if-sats som genererar ett slumpmässigt rum om idroom är 0. Inte särskilt krångligt det heller. Jag har ingen direkt uppfattning hur lång tid det har tagit att göra projektet, men jag tror inte det har tagit särskilt mycket mer tid än de andra stora kursmomenten. Det bör nämnas att jag valt att göra så att man kan undvika en av utmaningarna genom att gå rätt väg. Jag gjorde så för att jag tyckte att meningen med spelet egentligen bara är att välja rätt väg och då borde belöningen vara att man kan slippa att göra en utmaning.

1.2.

Jag har, som sagt, försökt att implementera samtliga optionella krav men jag har gjort det på mitt eget sätt för att anpassa dem till hur mitt spel är utformat. Hälsomätaren uppdateras genom att äta Snickers eller mealbars som man har ett oändligt antal av. Jag övervägde att göra så att man skulle plocka upp dessa efter vägen men jag såg ingen mening med det då spelet är kort och det hade inte gjort någon skillnad om man plockat dem efter vägen eller som nu; att man har dem med sig. Den ruttna frukten är en rutten Snickers i mitt spel och finns i ett rum. Ryggsäcken används bara till en sak och det är att lagra nyckeln som man behöver för att låsa upp en vägspärr. Det är helt enkelt en variabel som man kan lagra ett värde i på ett ställe i spelet. Här övervägde jag förstås att göra en array för att lagra flera saker men jag såg ingen mening med att plocka upp saker i varje rum. Jag tycker att det hade gjort spelet alldeles för plottrigt. Transferering till slumpmässigt rum har jag redan beskrivit hur jag gjorde i föregående punkt, likaså med Ett rum för mental återhämtning som alltså är en särskild php-fil.

1.3.

Jag tycker att kursen har varit bra på så vis att den ger en bra grund till php programmering. Det finns uppenbarligen många sätt att lära sig ett programmeringsspråk och den här kursen använder sig till största del av ett hands-on approach där man får möjligheten att göra mycket själv vilket är bra. Som fullständig nybörjare kan jag känna att det blir mycket kopierande av kod. Mycket av den kod jag använder mig av hade jag aldrig kommit på att skriva själv. Till stor del beror det på jag inte är fullständigt hemma på phps syntax ännu, jag får fortfarande tänka till bara för att helt enkelt skriva ut saker på skärmen. Nu används ju php oftast tillsammans med html och/eller sql så det är kanske inte lika nödvändigt att kunna skriva php "flytande" som det är med c++, java eller liknande. Personligen uppskattar jag när man har flera olika inlärningssätt. I den här kursen har jag inte använt boken särskilt mycket alls, mycket p.g.a. att jag tycker att den mest bara listar funktioner på samma sätt som phps referensmanual och sqls referensmanual. Så det hade gärna fått varit en annan kurslitteratur och kanske också en anledning till att faktiskt använda den (övningar baserade på boken t.ex.). Apropå inlärning hade jag uppskattat om föreläsningar fanns digitalt så man kunde se dem när man ville, även om jag förstår att det skapar mycket extra arbete för ansvarig lärare. Jag skulle absolut rekommendera kursen till vem som helst som vill lära sig grundläggande php och jag skulle ge kursen en åtta på en 1-10 skala.

    © Anders Akesson 2012