Archives for posts with tag: Java

För några dagar sedan började jag pula med ett litet ramverk för att skapa 2D-spel i Java. Med ramverk menas i det här sammanhanget ett ”bibliotek” med färdig kod med generell funktionalitet, som kan återanvändas gång på gång och därmed förkorta startsträckan för utvecklaren. Men, tänker kanske en och annan läsare, sådana finns väl redan? Och visst, det finns en hel uppsjö av ramverk (ofta kallas de spelmotorer) för både 2D- och 3D-spel, varav många är helt fritt tillgängliga.

Men jag vill alltså skapa ett alldeles eget, om än ett mycket litet och enkelt med bara en handfull klasser. Mycket för mitt höga nöjes skull, men också för att det kan vara väldigt lärorikt om man som jag har begränsade kunskaper om spelprogrammering. Trots att jag bara precis har börjat har jag redan lärt mig mer om AWT och Swing, två Javabibliotek som används för att skapa grafiska program, och saker som flertrådiga program och dubbelbuffring.

Och så har jag lärt mig en hel del om spelloopar, och insett att detta ämne är en hel vetenskap som både vållar hett engagemang och bryderier hos programmerare världen över. Spelloopen är själva motorn i ett datorspel. Den ser bland annat till så att alla objekt i spelet uppdateras och ritas ut på skärmen i en mycket snabb takt, i regel tiotals gånger i sekunden. Det finns mängder av olika tekniker och algoritmer som används i spelloopar. De mest sofistikerade varianterna använder ett så kallat deltavärde för att uppdatera spelet ”olika mycket” beroende på hur mycket tid som har förflutit sedan förra uppdateringen, eller försöker förutsäga objektens rörelser med så kallad interpolation i syfte att animationerna ska bli jämnare.

I en lång rad forumtrådar och blogginlägg diskuteras frågan hur den perfekta spelloopen egentligen ska utformas. Själv lutar jag för närvarande åt en ganska simpel variant, som uppdaterar spelet och ritar grafiken en gång per varv och sedan ”sover” olika mycket beroende på hur lång tid operationerna tog. Resultatet blir att varje loopvarv tar (nästan) precis lika lång tid. En perfekt loop? Inte om du frågar mer ambitiösa spelprogrammerare. Men den passar fint för mina syften – att skapa enkla små 2D-spel med något att styra (t ex ett rymdskepp), något att undvika (aliens) och något att skjuta med (laserkanon).

spaceinvaders

Börjar du själv bli sugen på att skapa ett Javaspel från grunden? I så fall har jag några bra tips till dig. I denna tutorial, som nog kräver vissa förkunskaper i programmering, bygger du steg för steg en variant av det klassiska arkadspelet Space Invaders (se ovan). Förutom spelloopar berörs grundläggande saker som dubbelbuffring, händelselyssnare och kollisionshantering. Om du vill fördjupa dig i loop-frågan ligger två av de mest läsvärda texter som jag har stött på här och här. Killer Game Programming in Java är en bok som visserligen har många år på nacken, men som behandlar spelloopar på ett utförligt och intressant sätt. Och på Java-Gaming.org finns mängder av tutorials, artiklar och inlägg om spelprogrammering i Java.

Tycker du att Java verkar vara för krångligt för dig? Då vill jag som vanligt slå ett slag för det mer nybörjarvänliga alternativet Ruby. Jag har tidigare skrivit om hur man skapar ett (mycket simpelt) Rubyspel till exempel här och här, och på denna sajt ligger min egen tutorial riktad till barn och unga.

Ha så kul, lycka till och hör av dig om du stöter på problem.

/Mats

Annonser

Jag är hobbyprogrammerare, och har ingen aning om vad riktiga utvecklare pratar om i fikarummen. Men om jag, baserat på mitt Twitterflöde, ska våga mig på en gissning så klagas det en hel del på olika programspråk – och då i synnerhet på Java.

Faktum är att det går knappt en dag utan att jag ser en sarkastisk tweet om Java i flödet (nu följer jag väldigt många programmerare som använder dynamiska språk, som Ruby och Python, men ändå). Ofta handlar gnället/skämten om att Java är så pass krångligt – många gånger krävs det betydligt mer kod för att utföra något än i exempelvis Ruby. En annan källa till kritik är säkerhetsbristerna i Javas så kallade virtuella maskin.

Men nog finns det en hel del bra saker med Java också – annars skulle det inte vara ett av de allra mest använda programspråken i världen. Och när jag själv nyligen, i samband med en obligatorisk programmeringsuppgift på den kurs som jag just nu går, på allvar började koda i Java kunde jag konstatera: Det är inte så hemskt som jag hade befarat.

För även ur ett nybörjarperspektiv har Java flera styrkor. TIll exempel är det relativt enkelt att komma igång med GUI-programmering i Java (GUI står för graphical user interface, grafiskt användargränssnitt). Det faktum att språket är plattformsoberoende och programmen portabla mellan olika datorsystem är en annan fördel. Visst, jag hade svårt för en del saker i början, som det här med statisk typning och att klass- och metodnamn skrivs med camel case. Men jag vande mig snabbt.

Och nu ska jag lära mig lite mer Java, hade jag tänkt. Varför då? Jo, till att börja med för att det är det språk som används på de programmeringskurser som jag ska gå det närmaste året. Men också för att det vore kul att kunna göra egna små tillägg och modifikationer, så kallade mods, till Minecraft och att skapa Android-appar. Till exempel.

DSC_1166

Okej, men hur lär man sig Java? Det fina med att språket är så pass stort är att det finns massvis med gratisresurser, som tutorials och e-böcker, bara några googlingar bort. En av dem är e-boken Think Java av Allen B Downey. Det finns också flera ”vanliga” böcker på svenska, till exempel Java direkt med Swing av Jan Skansholm (se bild ovan) som jag själv läser för närvarande. Ett annat sätt att närma sig Java är via den interaktiva utvecklingsmiljön Greenfoot. Du som sitter inne med andra, oumbärliga resurser får gärna tipsa i en kommentar.

Till sist: Är Java ett lämpligt språk för barn som vill lära sig att programmera? Nej, det tror jag inte. Dels av ovan angivna orsaker, som krånglig syntax och statisk typning. Men också för att java är ett språk där den så kallade objektorienteringen är påtvingad. Om man vill låta ett barn närma sig detta lite knepiga koncept tror jag att det finns betydligt bättre sätt, som att prova på att skapa ett spel i Ruby.

/Mats

Sedan jag började blogga om olika sätt att lära sig programmera har jag stött på ett stort antal verktyg och resurser, avsedda för nybörjare i olika åldrar. En del har jag hittat via andra bloggar, artiklar och Twitterinlägg. En del har ni läsare/följare tipsat om. Några har jag själv blivit riktigt förtjust i, och puffat för i tidigare inlägg. Andra har jag bara testat lite grann och vissa har jag ännu inte hunnit prova alls.

De här verktygen har nu blivit så många att jag känner att det är dags att sammanställa dem i en lista (inte minst för min egen skull, så att jag inte glömmer bort något). Först tänkte jag dela upp dem i barn- och vuxenverktyg. Men det är rätt svårt att bestämma var gränsen ska dras. Jag har själv haft nytta av – och framför allt mycket kul med – verktyg som egentligen är avsedda för barn. Och många äldre barn som är duktiga på engelska kan säkert använda de verktyg som är till för vuxna. Så här följer de i stället rakt upp och ner, i den ordning de dök upp i mitt huvud.

1. Scratch

Scratch är ett visuellt programspråk och ett utvecklingsverktyg. Eller, lite enklare uttryckt, ett program där man ”pusslar” ihop kod i stället för att skriva den. Scratch är i första hand avsett för barn mellan 8 och 16 år, men kan förstås användas oavsett ålder. Med Scratch kan man skapa spel, animationer med mera. Man kan även dela med sig av sina projekt, och kolla in andras, på Scratchs webbplats. Kom nyligen i en ny version, som körs direkt i webbläsaren. Finns, till skillnad från flertalet verktyg nedan, på svenska.

2. Snap

Snap, eller Build Your Own Blocks som verktyget tidigare kallades, är en vidareutveckling (”extended reimplementation”, heter det på hemsidan) av Scratch. Till skillnad från originalet kräver Snap inte Flash för att fungera. Å andra sidan finns det inte på svenska och de sociala funktionerna tycks vara begränsade. Är snarare avsett för gymnasie- och högskolestudenter än för mindre barn.

3. Tynker

Tynker är ännu en Scratch-variant, som i skrivande stund bara är tillgänglig för skolor men som ”snart” (enligt hemsidan) ska släppas för privatpersoner. Körs i webbläsaren, kräver inte Flash.

4. Hopscotch

Även Hopscotch påminner rätt mycket om Scratch, men har betydligt färre funktioner och körs på Ipad. Kan användas för att skapa animationer av enklare slag (enligt tillverkaren kan man även göra spel). Rekommenderas (av tillverkaren) för personer från 8 år och uppåt.

5. Daisy the Dinosaur

Hopscotch-folket ligger även bakom Daisy the Dinosaur, en liknande Ipad-app som tycks vara avsedd för något yngre barn. Här gäller det att skapa små program som får dinosaurien Daisy att röra sig på skärmen. Det ska också gå att skapa ett eget spel om man laddar ner ett speciellt kit.

6. Greenfoot

I Greenfoot, som beskrivs som en interaktiv utvecklingsmiljö, lär man sig objektorienterad programmering i Java. Enligt Wikipedia är Greenfoot främst tänkt att användas i utbildningssyfte, på gymnasienivå och uppåt. Ska kunna användas för att skapa spel, simuleringar och andra grafiska program. Är plattformsoberoende och laddas ner här (observera att man även måste ha Java Development Kit, JDK,  på datorn).

7. Kids Ruby

Kids Ruby är ett barnanpassat utvecklingsverktyg för programmering i Ruby. Verktyget har en hjälpmeny med texter om bland annat programmeringens grunder, sköldpaddsgrafik och spelprogrammering med ramverket Gosu. Finns här för Windows-, Mac- och Linuxdatorer (inklusive Raspberry Pi). Kommer snart i en svensk version!

8. Hackety Hack

De programmerare som ligger bakom Kids Ruby har hämtat inspiration från Hackety Hack, som är ett snarlikt verktyg. Hackety Hack skapades ursprungligen av den i Rubykretsar smått legendariske programmeraren Jonathan Gillette, mer känd som ”why the lucky stiff”.

9. Codecademy

Codecademy är en utbildningssajt med interaktiva kurser i Ruby, Python, Javascript med flera programspråk. I takt med att man klarar av de olika övningarna samlar man på sig poäng och medaljer. Det finns också olika grupper för den som vill diskutera, koda tillsammans med och lära sig av andra användare.

10. Code School

En annan sajt som erbjuder interaktiva kurser i programmering är Code School. Här finns också instruktionsvideor. Flertalet kurser och filmer är bara tillgängliga för betalande prenumeranter, men det finns en hel del gratismaterial. På Code School kan man, förutom t ex Ruby, Javascript och HTML/CSS, lära sig att koda Ipad- och Iphone-appar.

11. Try Ruby

Code School driver även Try Ruby, en sajt som ursprungligen skapades av ”why” (se Hackety Hack ovan) och som för undertecknad var inkörsporten till språket Ruby. Interaktiv tutorial som bara tar cirka en kvart att slutföra. Sedan kan man med fördel gå vidare till Codecademys eller Code Schools kurser.

12. Khan Academy

Khan Academy är ytterligare en utbildningssajt som dock har ett betydligt bredare utbud än de ovan nämnda. Här kan man studera såväl konsthistoria som organisk kemi, men också få en introduktion till programmering (se under ”Computer Science”).

13. Code Monster

Code Monster är en interaktiv tutorial i Javascript avsedd för barn. Man skriver koden i en ruta och ser omedelbart resultatet i rutan bredvid. Genom att följa instruktionerna från kodmonstret (som pratar engelska) får man stegvis lära sig grundläggande saker som variabler, loopar och villkorssatser.

14. Eloquent Javascript

En annan, betydligt mer krävande, ingång till Javascript är Eloquent Javascript, som är en e-bok med interaktiva exempel/övningsuppgifter. Också en bra grundbok i programmering, för den ambitiösa nybörjaren.

15. Kojo

Kojo beskrivs som ett lärandeverktyg för programmering och matematik. Finns i en svensk version och kan användas för att skapa sköldpaddsgrafik, musik, animeringar, spel med mera. Bygger på programspråket Scala och kan antingen köras direkt från webben eller laddas ner. Kräver Java.

16. Kodu Game Lab

Med Kodu Game Lab kan ungarna skapa egna 3D-spel. Om de begriper hur man gör, vill säga. Kodu är visuellt häftigare än Scratch men också, enligt min mening, svårare att komma igång med. Som tur är finns det gott om instruktionsvideor, både på Kodus webbplats och på Youtube. Det är Microsoft som ligger bakom Kodu, och verktyget är således endast tillgängligt för Windows. Laddas ner här.

17. Alice

Alice är ett annat alternativ för dig som tycker att två dimensioner är en för lite. På hemsidan beskrivs Alice som en miljö för 3D-programmering som man kan använda för att skapa animationer, spel och videor. Tanken är att programmet ska ge en första introduktion till objektorienterad programmering. Kräver, liksom Greenfoot ovan, JDK för att fungera och kan laddas ner här (senaste versionen, även tidigare versioner finns tillgängliga på sajten).

18. Processing

Processing är ett programspråk och en utvecklingsmiljö som, enligt hemsidan, lär ut programmeringens grunder ”i en visuell kontext”. Programspråket beskrivs på Wikipedia som en förenklad version av Java. Kan köras på Windows-, Mac- och Linuxdatorer och laddas ner från webbplatsen, där man också kan titta på den här filmen om kreativ programmering med Processing.

19. Code Avengers

Roligt och effektivt lärande för alla åldrar utlovas på Code Avengers, som är en annan sajt med interaktiva tutorials. Här kan man lära sig Javascript och HTML/CSS. De första lektionerna är gratis, vill man sedan gå vidare till högre nivåer så kostar det en liten slant.

20. Sommarprogrammering.se

Sommarprogrammering.se
är en sajt som Stockholms universitet och KTH ligger bakom. Via den kan man skapa ett kurskonto och sedan gå en liten webbkurs i programmering. Det programspråk som används är Python. Man får även lära sig att använda ett terminalfönster i Windows/Unixliknande system. Observera att ingen formell ansökan till kursen krävs, utan man får tillgång till kursmaterialet direkt efter registrering. Man kan alltså gå den ”på skoj”.

Här väljer jag att dra ett streck för listan, även om jag har ytterligare några kandidater i bakhuvudet. Som synes har jag inte tagit med ”programmeringsspel” som Move the Turtle och Cargo-Bot – om dem har jag skrivit i en tidigare bloggpost. Ej heller har jag listat ”vanliga” e-böcker eller tutorials, utan ett krav har varit någon form av interaktivitet. Ett annat kriterium har varit att verktygen ska vara gratis.

Har jag missat något verktyg som absolut förtjänar att vara med? Posta gärna en länk i kommentarsfältet!

/Mats

PS. Om du absolut känner att du måste ha mer att välja på hittar du ytterligare några utbildningssajter/interaktiva tutorials här och ett stort antal resurser för kodande barn här.