Roskilde Universitet Forår First Person Shooter. Datalogi 4. Semester. Forfatter: Jeppe Emil Nygaard Vejleder: Henning Christiansen

Størrelse: px
Starte visningen fra side:

Download "Roskilde Universitet Forår 2015. First Person Shooter. Datalogi 4. Semester. Forfatter: Jeppe Emil Nygaard Vejleder: Henning Christiansen"

Transkript

1 Roskilde Universitet Forår 2015 First Person Shooter Datalogi 4. Semester Forfatter: Jeppe Emil Nygaard Vejleder: Henning Christiansen

2 Abstract This project investigates how programming 3D works in java, from the point of view of making a firstpersonshooter game. It explores how 3D programming is coded from scratch, what mathematics is needed and how it is all rendered to the computer screen. There is created a small 3D world, in which you can use the keyboard to move around. The project explains how this is coded, and how the mathematics works in Java. Furthermore the project discuss how 3D programming in java and an existing 3Dengine like Unity, is different. What the game might have looked like, if a different tool was used to do the programming. 2

3 Indhold Abstract... 2 Indledning og Motivation... 4 Problemformulering... 5 Afgrænsning Programmerings værktøjer JAVA JAVA JDK JAVA IDE Benyttede biblioteker Programanalyse Design af en 3D verden D Programspecifikation og mål Hvad skal programmet kunne? Vindue Pixels D Effekt Rotation Bevægelse Udseende Implementering af mål Opbygning Ramme Spil Brugerkontrol Kontrol Render

4 3.3.7 Render3D Skærm Spillets udseende Test af programmet Diskussion Konklusion Videreudvikling Referencer Internetsider: Litteratur Andre Ressourcer: Appendix Koden til Programmet Indledning og Motivation Nogle af de mest populære computerspil der udviklet til dato, har taget udgangspunkt i First-Person, synsvinklen. Spilleren vil styre sin karakter rundt i en 3D verden og se verdenen fra et førstepersons perspektiv. Målet med spillene er forskelligt, men de mest populære spil er ud fra en krigssituation, hvor to hold spiller mod hinanden med udgangspunkt i at slå modstanderholdet ihjel. Eksempelvis anslår man at Counter-Strike, har solgt op mod 4.2 mio. kopier, og antallet af spillere har sandsynligvis været højere (WEB1). Hvordan er et sådant spil udviklet, og hvad er nødvendigt for at lave en 3D verden i JAVA? Dette projekt vil omhandle udvikling af en 3D verden, som fundament til et First-Person-Shooter spil, i stil med Counter-Strike. Projektet vil tage udgangspunkt i udviklingen af 3D verdenen, og styringen rundt i denne. 4

5 Problemformulering Hvordan programmeres 3D i JAVA, og hvordan kan man styre en karakter rundt i en 3D verden? Afgrænsning Projektet afgrænser sig til udelukkende at udvikle en 3D verden, der kan styres rundt i ved brug af tastatur og mus. Grundet projekts ressourcemæssige begrænsninger, vil der kun være fokus på at udvikle et meget begrænset forstadie til en 3D verden. Der vil være fokus på at kunne bevæge sig rundt i en verden, men uden detaljeret grafiske komponenter. 2. Programmerings værktøjer I dette afsnit vil der blive beskrevet de teoretiske værktøjer, der er brugt for at udvikle koden til programmet. Der er programmeret i JAVA og der er brugt Eclipse, som IDE (Integrated development environment). Nedenfor vil blive beskrevet mulighederne ved JAVA og dets udviklingsværktøjer. Der vil ydermere blive beskrevet alle de JAVA værktøjer brugt i programmet og senere hvordan disse er brugt i specifikt i programmet. I opgaven er benyttet to bøger, som baggrund for programmeringen. Ingen af vil der direkte refereret til, men bagvedliggende viden om programmering, er dannet på baggrund af disse (Se litteraturliste). 2.1JAVA Java er ét programmeringssprog ud af mange, men et højt udviklet sprog. Javas fordel ligger i de næsten uendelige biblioteker af værktøjer, add-inns og extension, som kan bruges til næsten hvad som helst. Java er et objektorienteret sprog, hvilket betyder at koden udtænkes fra ideen om at bygge alt op i objekter, der så kan samles. Disse objekter er så inddelt i klasser, der kan tænkes som kasser der kan indeholder mange objekter. I disse kasser sættes metoder (funktioner) op, som bestemmer reglerne for hvordan objekterne opfører sig. Man kan tænke på opbygningen, som en slags afspejling 5

6 af den virkelige verden, i dette tilfælde en vilkårlig krigssituation. Her vil der så være en række faktorer der er vigtige for at gengive denne situation, herunder; Spillere, skydevåben, baner etc. Disse er alle gengivet i forskelligt niveau af detaljering, og har alle forskellig betydning i programmet JAVA JDK Java development kit eller udviklingsværktøjet for Java, er den grundlæggende udviklingspakke. Denne indeholder værktøjerne til at udvikle og programmere i Java, herunder; biblioteker, en archiver, en compiler og andre værktøjer JAVA IDE Et IDE eller Integrated development environment, er i virkeligheden en udvikling af JDK. Det er en Java applikation, til at skrive i Java og tilbyder brugeren at samle udviklingen i et simpelt Graphical user interface (GUI). Det kan bruges til at skrive direkte i Java, og har en indbygget compiler, debugger og executioner. Det valgte IDE i dette projekt er Eclipse. Dette fordi det tilbyder de nødvendige værktøjer i et simpelt og nemt GUI. Det er primært udviklet til at kode grafik, og derfor er det også glimrende til at udvikle spil Benyttede biblioteker I dette projekt er der benyttet nogle biblioteker, som har været nødvendige for at programmet virker, herunder; 1. Java.math Dette er et bibliotek som tilbyder forskellige matematiske funktioner. Disse bruges til at fungerer primært som en indbygget lommeregner, der kan hjælpe med at sætte programmets algoritmer op. Det kunne eksempelvis være cosinus og sinus, som er brugt i dette projekt. 2. Java.awt AWT eller Abstract Windowing Toolkit. Dette er et bibliotek, som tilbyder en lang række værktøjer til at lave et grafisk interface. Eksempelvis bruges det i dette projekt til at lave et Canvas, eller et lærred, som vil fungere som vinduet til gengivelse af programmet. 6

7 3. Programanalyse Denne del af opgaven vil fokusere på at beskrive de delmål og det samlede mål i opgaven. Derefter hvordan disse er implementeret, eller ikke indfriet. Herunder en beskrivelse af målene, måden de kan opnås på og til sidst en detaljeret beskrivelse af koden i forhold til de mål sat forinden. 3.1 Design af en 3D verden Første en gennemgang af hvad 3D er og hvad 3D grafik indebærer i programmering. Dernæst vil en række mål for opgaven blive gennemgået. 3D For at designe en 3D verden er der en række begreber, der er nødvendige at fastslå. Først er det nødvendigt at forklare hvad der forstås ved 3D, hvad der forstås ved 3D i programmering og til sidst dernæst hvordan 3D kan bruges i spil. 3D er en forkortelse af tredimensionelt og betyder at noget er i tre dimensioner. Dette kan eksempelvis være dybde, bredde og længde, altså tre dimensioner af en verden, i dette tilfælde en geometrisk. Ved programmering bruges også den geometriske 3D verden, da opsætningen af 3D i programmering ville være det samme som at udregne 3D objekter i et koordinatsystem. En computerskærm er som standard todimensionel og derfor er tredimensionel programmering, i virkeligheden en todimensionel optisk illusion af et se tre dimensioner. Ved programmering bruges der typisk 3 koordinater repræsenteret som x (længde), y (bredde) og z (dybde/højde). Disse udregninger visses som en række billeder, gengivet af computeren. Målet med dette er at hvert billede eller frame indeholder så meget information som muligt. Dernæst vises billeder med en hastighed på mellem billeder pr. sekund. Dette for at gengive en illusion af bevægelse, dette kaldes og rendering. Rendering kan sammenlignes med at tage et billede og ved illusionen af bevægelse, vil man ændre perspektivet hvorfra billedet tages, og så tage 60 billeder i sekundet. I 3D spilprogrammering er der en lang række parametre som vil gøre spillet bedre og verdenen flottere. Nogle er vigtige for at andre funktioner fungerer i spillet, andre er kun for visuel forbedring. Eksempelvis vil skygger, vand og røg, ikke umiddelbart kunne bruges til meget andet end at det ser flot ud visuelt. Andre funktioner som refleksioner og lyskilder, vil kunne bruges til at måle afstande og til at tegne billedet. I 3D vil verdenen være opbygget af objekter og en typisk teknik til at bygge en verden i 3D, er polygonteknikken eller vektorgrafik. I denne teknik af 3D programmering bygger man alle objekter op i tredimensionelle figurer, der så sættes sammen til større objekter. Dette er en teknik der oftest 7

8 benyttes til eksempelvis logoer, arkitekttegninger da denne måde at skabe 3D billeder på ikke fylder lige så meget, som andre metoder. En anden måde at lave 3D på i programmering er raytracing, denne metode benytter sig af en omvendt lyseffekt. Hvor normalt vil øjet opfange de lysstråler der sendes fra overflader, og bruge dem til at lave et billede. I programmering tager man udgangspunkt i øjets perspektiv og sender stråler den anden vej, for at opbygge en verden. Strålerne rammer alle pixels på skærmen, og strålerne reflekterer videre og eller absorberes. Programmet følger strålerne, og man kan måle afstand, gennemsigtighed og flere parametre. Billederne vil tegnes ud fra denne teknik. Dette er begge måder at opbygge hvad man kalder 3D engines (maskiner), altså software der kan programmere 3D. Der findes allerede flere højtudviklede 3D engines, da programmering af 3D fra bunden er tidskrævende, og kan er svært. Derfor vil oftest i 3D udvikling, bruges præudviklede engines såsom; Unity og Panda3D, disse har brugervenligt interface, og kan simplificere 3D udviklingen gevaldigt. Målet med dette projekt er dog at udvikle en forsimplet udgave af en 3D engine, selvom spiludvikling ville være nemmere med en eksisterende 3D engine. Projektets mål er at designe grundelementerne til et firstpersonshooter spil, der kan sammenlignes med et eksisterende spil, herunder Counter-strike, HalfLife eller Battlefield. Det skal ikke være nær så kompliceret, men med fokus på de basale elementer. Dog er projektet afgrænset til at starte med at programmere 3D verdenen, hvor spilleren vil kunne bevæge sig rundt i. Det er heller ikke helt ukompliceret og en del skal programmeres, før JAVA vil kunne gengive en oplevelse af 3D. Nedenfor vil specificeres hvad programmet skal kunne og hvilke faser programmets målsætninger er delt op i. 3.2 Programspecifikation og mål Denne del af opgaven vil specificere hvad programmet skal kunne og hvad delmålsætningerne og de endelige målsætninger vil indebære. Dette med hensigt at til sidst at konkludere ud fra disse målsætninger og hvordan de er indfriet. 8

9 3.2.1 Hvad skal programmet kunne? Det klare mål med dette projekt er at lave en basal verden i 3D, hvori man kan bevæge sig rundt med tastaturet. Programmets krav vil være opdelt i en række parametre, der vil prøves at opnås. Disse vil være delmålene for programmet og det samlede mål vil være beskrevet til sidst i denne del af projektet. Parametrene vil være delt op i en rækkefølge af betydning for programmets udfoldelse Vindue I første omgang vil målet være at få et vindue frem med overskriften Skydespil. Dette er for at sætte rammen for spillet. Her vil der kunne bestemmes størrelse af vinduet, og indholdet af spillet vil vises i vinduet Pixels Anden del af programmeringen vil omhandle indholdet af vinduet, her vil de første skridt i grafikken blive taget. Vinduet deles op i en række firkanter (pixels), disse vil blive brugt til at tegne billeder på skærmen, ved at tegne farver i hver enkelt pixel. De vil blive tegnet i programmet, som en funktion af bredde * højde, og firkanterne. Pointen er at bruge vinduet som koordinatsystem, hvor firkanterne tegnes mellem X og Y aksen. Pixels bestemmes af vinduets opløsningsstørrelse, eksempelvis 600*600= pixels eller firkanter D Effekt Tredje del af programmet vil være at få gengivet en 3D effekt af programmet. Her vil der indgå den næste dimension i visningen. Der er allerede bredde og højde, for at få 3D effekten skal der tilføjes dybde. Ved at tilføje dybde i billedet vil man kunne føle en 3D effekt. Dette gøres ved at lave et centrum i billedet, der får billedet til at pege indad. På den måde vil der kunne ses vægge, loft og gulv i billedet Rotation 9

10 For at kunne have tæt på en fuld 3D oplevelse, er det vigtigt at man kan roterer i billedet. Med dette menes at perspektivet kan ændres i billedet. Man skal kunne rotere hele vejen rundt om sig selv. Dette for at brugeren kan bevæge sig realistisk, i alle retninger af billedet. Dette gøres ved at implementerer en Cosinus, Sinus funktion, så en fuld cirkel kan skabes Bevægelse Bevægelse er første skridt i retningen af brugerinteraktion. Her vil der implementeres bevægelse ved brug af tastaturet, målet er at kunne bevæge sig fremad, bagud og til begge sider i billedet. Og til sidst at kunne ændre perspektivet, så brugeren vil kunne bevæge sig i alle retninger, undtaget op og ned Udseende Sidste del af dette projekt vil forsøge at designe et udseende for verdenen. Dette ved at indsætte farver og billeder i de pixels der allerede er gengivet i visningen af programmet. 3.3 Implementering af mål Denne del vil fokusere på de delmål der allerede er sat og hvordan de er implementeret i koden. En detaljeret beskrivelse af koden i forhold til delmålene, de problemer der var med dem, og de valg der er taget i kodningen Opbygning Programmet er indtil videre bygget op i tre pakker og herunder i syv klasser. Det underliggende diagram viser sammenhængen mellem klasserne. 10

11 3.3.2 Ramme Denne klasse ligger i pakken mappen.fps, som er hovedgruppen. Denne er klassen der laver et Canvas, eller det lærred der skal gengive programmet. Denne klasse er rammen for programmet, deraf også navnet, og skal starte, slutte spillet og herudover også tjekke om det kører. Det er i denne klasse der sættes hvor stort skærmbilledet skal være, hvilke dele af spillet af dele der skal starte og i hvilken rækkefølge. 11

12 3.3.3 Spil I denne klasse laves de underliggende spilkonfigurationer der styrer brugerens interaktion med spillet. Indtil videre er der i denne klasse kun bevægelsen i 3D verdenen. Altså kun brugerens bestemmelse af kontrollen i spillet, denne klasse henter bestemmelsen af et Keyevent og rapporterer data videre til ramme, der igen tegner billedet, afhængigt at brugerens synsvinkel. Det er i denne klasse der bestemmes hvilke symboler på tastaturet der betyder hvad, eller hvilke der skal bruges Brugerkontrol I denne klasse laves reglerne for hvad der sker, hvis et Keyevent udfolder sig, altså de data der bruges til at styre hastighed og rotation. Det er selve matematikken for bevægelsen. I denne klasse er der lavet en altså hvilket parameter der skal gøre hvad, når der bruges en tast. Eksempelvis vil der enten lægges til eller trækkes fra x, afhængigt af retningen vi bevæger os i spillet. Der er en relativ simpel måde at bevæge sig på, altså styre hvorfra på aksen i et koordinatsystem vi tegner billedet Kontrol I denne klasse indhentes keyevents og bruges til at forklarer Java, hvordan programmet reagerer på keyevents. Disse bruges som udvidelse og sammenhængende med klassen brugerkontrol og samles i klassen Spil. Opsummerende for de tre ovenstående (Spil, Brugerkontrol og Kontrol), bestemmer spil hvilke taster der skal bruges, i brugerkontrol bestemmer hvad der ske hvis disse taster trykkes og i kontrol henter vi Javafunktionerne, til tastaturkontrol Render I denne klasse laves vores pixels, der bruges til at tegne vores skærmbillede. Dette ved at bede Java tegne et array af små firkanter, der så senere kan bruges til at tegne farverne på skærmbilledet Render3D I denne klasse laves 3D effekten i vores skærmbillede. Denne vil jeg forklare yderligere grundigt, da det er den mest komplicerede klasse. Den indeholder nogle ret komplicerede matematiske konstruktioner, for at få 3D effekten frem. Under er et billede af koden, der ligger til grund for 3D effekten i programmet. 12

13 I denne del af koden er introduceret et parameter i dybde, dybdens funktion vil være at skabe 3D effekten i gengivelsen på skærmen. Det kan ses at den array af pixels der tidligere er lavet, nu består af tre parametre; [x+y*width]. Positionen af kameraet er sat til at være styret af keyboardet, det vil sige at hver gang vi vil fremad vil der enten lægges til eller trækkes fra x, det gør at det viste billede vil ændre sig i forhold til hvor mange gange vi trykker på enten frem eller tilbage. Det samme er sat til y, så man bevæger sig til enten højre eller venstre. Altså er det udgangspunktet for gengivelsen af billedet der ændre sig. For at vise effekten af de beregninger der er lavet, er der lavet det der hedder et bitshift, som laves ved brug af tegnene [&] [<<, dette betyder at vi bestemmer hvilke farver der skal vises og derved kan tydeliggøre visningen af 3D. Hvis ikke denne teknik var brugt, ville billedet se noget anderledes ud. Hvilket jeg vil demonstrerer længere nede under overskriften spillets udseende. Så essentiel er der lavet nogle beregninger, for at lave en tredimensionel verden, der hentes igen og igen. Hver gang vi bevæger os ændrer vi enten x eller y, for at ændre visningen af billedet. 13

14 3.3.8 Skærm I denne klasse tegner vi spillet, og udfører handlingerne fra render. Denne klasse fungerer som en extension af render klassen. Den henter render3d klassen og tegner den på skærmbilledet. 4. Spillets udseende Spillets udseende når programmet er kørt, vil vise en meget simpel 3D verden. Det er et billede der hele tiden tegnes, og ved bevægelse igen tegnes. Billedet er et udklip fra programmet når det kører. Det kan ses at billedet gengiver en række af firkanter som vises fra bunden og toppen af billedet og parallelt ind mod midten, dette er 3D effekten. Det sorte i midten er lavet for at gengive en form for synsbegrænsning, i form af tåge. Dette optimerer både programmets framerate, da der skal tegnes færre pixels og desuden vil det i videreudvikling gengive en realistisk begrænsning af karakterens syn. 14

15 Billedet ovenfor viser at rotationen starter, og 3D billedets form ændre sig. Dette ved at ændre aksen i billedet og tegne billedet fra en anden synsvinkel. Dette billede viser at hele vejen omkring vinduet synsvinkel, derfor kan man ved bevægelse se resten af billedet. Positionen i billedet bestemmer hvordan billedet tegnes. Farverne i billedet er et produkt af 15

16 et bitshift, og ville se anderledes ud, hvis ikke dette var lavet. Det underliggende billede viser os hvordan farverne ville være fordelt, hvis ikke der var lavet et bitshift. Det næste naturlige visuelle skridt i programmet vil være at få tegnet billeder af vores pixels, sådan at himlen eksempelvis er blå med nogle enkelte skyer og at gulvet er genkendeligt. Derudover vil det være meget relevant at få lavet en afgrænsning af verdenen med vægge. Først derefter vil det være relevant at begynde at designe objekter til placering i verdenen. 5. Test af programmet Det er naturligt at teste hvad programmet kan på forskellige måder, for at finde løsninger og ideer til videreudvikling. I den forstand er det første man bør teste, hvad programmet gør i forhold til hvad det skal kunne. Her blev der i starten af projektet sat en række mål for hvad programmet skulle kunne, opsummeret; Skal programmet kunne gengive en simpel 3D verden, hvori man med tastatur kan bevæge sig rundt. 16

17 Programmets afleverede form kan indtil videre opnå målet for at være en simpel 3D verden, hvori man kan bevæge sig rundt med tastatur. Der er opbygget en simpel 3D verden af pixels, der er klar til at blive udvidet. Dog var et mål også at få tegnet billeder af de pixels, eksempelvis at få malet, himlen blå og lavet gulvet i en genkendelig fremstilling. Dette nåede jeg ikke at få færdiggjort, da ressourcerne ikke var til det og det viste sig mere kompliceret end jeg havde forventet. I forbindelse med at optimerer programmet, kan der laves en ret simpel test, der i Eclipse kan køres i realtime (man kan lave ændringer i koden, mens programmet kører). Dette er en FPS (Frames per second) test, der tæller hvor mange billeder der produceret i sekundet. Dette giver en klar indikation af hvor godt programmet kører. Desto flere billeder det kan producere, jo bedre er programmet skruet sammen. I bund og grund handler det om at den mængde data computeren kan fremvise, er begrænset og hvis der er få billeder i sekundet, betyder det at programmet er ulogisk. Altså vil datamængden være for stor. Siden programmet er i sin tidlige fase, vil man kunne forvente at datamængden stiger, hver gang man indsætter flere og mere komplicerede funktioner og derfor skal FPS helst op og ramme over 100 billeder pr. sekund. Dette afhænger selvfølgelig af den computer der bruges til at køre programmet, men jo flere computere der kan bruge programmet jo bedre. Koden til testen ser sådan ud i programmet og er en System.out.println funktion. Testens resultater var mindre gode på min computer, men det skal nævnes at computeren den er kørt på er meget gammel, og ikke så hurtig. Testens resultat er vist nedenfor. 17

18 Det kan se at programmet kan køres med omkring 22 fps. Dette er selvfølgelig langt fra godt nok, og derfor er testen nødvendig at udfører på en bedre computer. Dog skal det nævnes at programmet godt kan køre på lav billedfrekvens, det er i forhold til yderligere udvikling at en bedre frekvens kræves, da yderligere udvikling ofte er parallel med den mængde data computeren skal læse og køre. Computeren testen blev udført på er ældre HP med 2Gb Ram og en 2GH duocore processor. Den næste computer der vil blive udført en FPS test på er en APPLE MacBook, med 4Gb ram og med en 2.5 GigaHertz i5 processor. På denne er resultatet allerede vokset til over 50 fps, hvilket er en betydelig forskel i billedkvalitet og i hastighed. Dette viser at programmet kører som det skal og ved en endnu bedre computer vil resultatet formenligt kun blive bedre. Testene viser os at udgangspunktet for at gå videre med programmeringen er fin, hvis testene havde været dårlige, ville det have været vigtigt at kigge på opbygningen af koden. Logikken i koden er altafgørende for både overskueligheden og udfaldet af programmet. 18

19 6. Diskussion I denne del af opgaven vil to relevante spørgsmål diskuteres, for at sætte projektets proces i perspektiv. Det første spørgsmål som er oplagt at stille er; Hvad kan programmet i forhold til hvad der blev sat af mål? Målet med dette projekt var til at starte med at udvikle et simpelt firstpersonshooter spil, i samme stil som Counter-Strike, helt fra bunden. Alt dette programmeret i Java. Dette mål blev dog grundet ressourcermæssige udfordringer ændret til at udvikle en simpel 3D verden, hvori man kunne implementere simpel tastaturbevægelse. Visionen til hvordan udseendet af 3D verdenen skulle se ud, var fra start at lave en realistisk gengivelse af hus, en have eller noget helt andet, men en verden der var en realistisk gengivelse af noget eksisterende. Denne målsætning kunne ikke indfries, da kompleksiteten af dette udfordrede de ressourcer der var til rådighed. Dette er selvfølgelig skuffende, da dette ville være det første visuelle skridt mod det oprindelige mål og man kunne have vist en designmæssig tilgang til udviklingen af spillet. Det reviderede mål blev alligevel delvist mødt og tests viste at den foreløbige programkode kørte fint i forhold til en FPS test, hvilket er vigtigt for udviklingen af programmet. Det næste spørgsmål som giver mulighed til diskussion er; Hvad havde været anderledes hvis man i stedet har bruget en 3D engine som Unity? For at besvarer dette spørgsmål er det nødvendigt at forstå hvad forskellen på dette projekts indgangsvinkel til kodning er, og hvordan projektets mål kunne have været nået ved at bruge et program som Unity. Dette projekts udgangspunkt lå i at udvikle et computerspil fra bunden, men da ressourcerne ikke var tilstrækkelige, blev dette mål nedjusteret. Der er dog stor forskel på at udvikle en 3D verden i Java og på at udvikle 3D i Unity, som er en eksisterende 3D engine. Unity har allerede al matematikken til at udvikle 3D og derfor er det ikke nødvendigt at skrive de matematiske formler, for visningen af 3D elementer. Dette er selvfølgelig en stor forskel og derfor vil resultatet ved samme ressourcer tilgængelige være radikalt anderledes. Da der allerede er udviklet 3D matematikken i Unity, ville udviklingen være af det specifikke design og ville være mere objektorienteret. Der ville være fokus på at udvikle det visuelle og spillets udformning ville være større fokus, men opgavens udgangspunkt var at programmere det fra 19

20 bunden. Derfor ville det være et forkert valg at bruge en allerede eksisterende 3D engine. Læringsprocessen i at programmere det fra bunden, var den vigtigste faktor i valget af projekt. Afslutningsvis er det vigtigt at understrege at et færdigt spil, med de værktøjer der er blevet valgt at bruge hele tiden været for højt sat. Det har vist sig at være mere kompliceret end først antaget og derfor ændrede opgavens udgangspunkt sig også. 7. Konklusion Projektet startede ud med et mål om at programmere et firstpersonshooter spil fra bunden. Dette mål viste sig urealistisk og forventningerne måtte skrues ned og projektets mål blev nedjusteret til kun at lave en simpel 3D verden hvori bevægelse skulle være muligt med tastaturet. Dette blev indfriet og efter en FPS test, kunne det konkluderes at programmets opbygning var godkendt, da det på en forholdsvis ny computer viste lige over 50 fps. Derved blev det reviderede mål mødt. Problemformuleringen lød hvordan programmeres 3D i JAVA, og hvordan kan man styre en karakter rundt i en 3D verden? Dette viste sig at være mere kompliceret end forventet, da beregninger for 3D er komplicerede i Java og skal kodes fra bunden. 3D billedet blev kodet til at være et uendeligt billedet uden vægge, men med fuld rotation, sådan at bevægelse bagud, fremad, højre og venstre kunne laves. Med bitshift blev 3D effekten fremhævet ved at vise alt i grøn og blåt. Et simpelt 3D billede blev lavet og med nogle nogenlunde simple ændringer i koden, kunne man bruge tastaturet til at ændre perspektivet for billedet. Det havde været interessant at kigge på at få lavet et mere realistisk og kompliceret udseende for 3D verdenen, men dette kunne desværre ikke indfries. Det havde været naturligt at lave vægge, og begynde på at kode objekter som næste skridt for programmet, men grundet tid og andre omstændigheder måtte dette droppes. Programmet endte med at blive så godt som det kunne nå at blive, forventningen om at lave en simpel 3D verden blev mødt. Programmets udgangspunkt lå i at lave det fra bunden i Java, da læringsprocessen for projektet betød en del for valget af emne. Spillet kunne have set meget anderledes ud, havde man valgt at programmere det i en eksisterende 3D engine, såsom Unity. Dette havde frigjort en masse tid, som kunne bruges på at designe 3D verdenen, i stedet for at lave den grundlæggende matematik for den. 20

21 8. Videreudvikling Det næste naturlige skridt i retning af et spil efter den visuelle fremstilling, ville være at kigge på udvikling af objekter. Disse objekter kunne både være træer, sten, kasser etc. og den grafiske udvikling af dem ville være relevant for spillets udseende og design. Dernæst er det interessant at begynde at tænke på spillets opbygning og objektbevægelse, afstandsbedømmelse, skygger, reflekteringen. Det ville være relevant at tænke på at udvikle en raytracing funktion, for at få 3D verdenen til at fungere efter hensigten. Først til sidst ville det rigtige spil begynde at kunne tage form. Der ville skulle udvikles AI (artificial intelligence), multiplayer og spillerinteraktion. Dog er den grafiske del af spillet først, så derfor også den næste del der skal udvikles. 9. Referencer 8.1 Internetsider: WEB 1 Besøgt Brugt som generelt baggrundsinformation om 3D programmering 8.2 Litteratur - Harbour, Jonathan S. (2011); Beginning Java SE 6 Game Programming (3rd Edition), Course Technology / Cengage Learning 21

22 - Sedgewick, Robert. Wayne, Kevin (2006); Introduction to programming in Java, Princeton University 8.3 Andre Ressourcer: Java Runtime Environment or Development Kit: Eclipse IDE: Appendix - Konklusion - Abstract Koden til Programmet Klassen Ramme package mappe.fps; import java.awt.canvas; import java.awt.dimension; import java.awt.graphics; import java.awt.image.bufferstrategy; import java.awt.image.bufferedimage; import java.awt.image.databufferint; import javax.swing.jframe; import mappe.fps.brugerkontrol.kontrol; import mappe.fps.grafik.skærm; public class Ramme extends Canvas implements Runnable { private static final long serialversionuid = 1L; public static final int WIDTH = 800; public static final int HEIGHT = 600; public static final String Titel = "Skydespil"; //titel på spillet, vises i vinduet private Thread thread; private Skærm skærm; private Spil spil; private BufferedImage img; private boolean running = false; 22

23 private int[] pixels; private Kontrol Kontrol; public Ramme() { Dimension size = new Dimension(WIDTH, HEIGHT); setpreferredsize(size); setminimumsize(size); setmaximumsize(size); skærm = new Skærm(WIDTH, HEIGHT); spil = new Spil(); img = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB); pixels = ((DataBufferInt) img.getraster().getdatabuffer()).getdata(); // Laver en random udfyldning af pixels, ved brug af arrayaet img private void start() { Kontrol = new Kontrol(); // til styringen i spillet, mus + tastatur addkeylistener(kontrol); addfocuslistener(kontrol); addmouselistener(kontrol); addmousemotionlistener(kontrol); if (running) return; running = true; thread = new Thread(this); thread.start(); private void stop() { if (!running) return; running = false; try { thread.join(); catch (Exception e) { e.printstacktrace(); System.exit(0); public void run() { int frames = 0; double unprocessedseconds = 0; long previoustime = System.nanoTime(); double secondspertick = 1 / 60.0; int tickcount = 0; boolean ticked = false; while (running) { long currenttime = System.nanoTime(); long passedtime = currenttime - previoustime; previoustime = currenttime; unprocessedseconds += passedtime / ; while (unprocessedseconds > secondspertick) { tick(); unprocessedseconds -= secondspertick; ticked = true; tickcount++; if (tickcount % 60 == 0) { System.out.println(frames + "FPS");// En Frames per second tæller, der printer FPS 23

24 til optimering af billedet, ved at se hvor mange billeder den kan printe previoustime += 1000; // primært frames = 0; if (ticked) { render(); frames++; render(); frames++; private void tick() { spil.tick(kontrol.key); private void render() { BufferStrategy bs = this.getbufferstrategy(); if (bs == null) { createbufferstrategy(3); return; skærm.render(spil); for (int i = 0; i < WIDTH * HEIGHT; i++) { pixels[i] = skærm.pixels[i]; Graphics g = bs.getdrawgraphics(); g.drawimage(img, 0, 0, WIDTH + 10, HEIGHT + 10, null); g.dispose(); bs.show(); public static void main(string[] args) { Ramme spil = new Ramme(); JFrame vindue = new JFrame(); vindue.add(spil); vindue.pack(); vindue.settitle(titel); vindue.setdefaultcloseoperation(jframe.exit_on_close); vindue.setlocationrelativeto(null); vindue.setresizable(false); vindue.setvisible(true); spil.start(); Klassen Spil package mappe.fps.grafik; import mappe.fps.spil; 24

25 public class Skærm extends Render { private Render3D visning; public Skærm(int width, int height) { super(width, height); visning = new Render3D(width, height); public void render(spil spil) { for (int i = 0; i < width * height; i++) { pixels[i] = 0; visning.gulv(spil); visning.renderdistancelimiter(); draw(visning, 0, 0); Klassen Brugerkontrol package mappe.fps.brugerkontrol; public class Brugerkontrol { public double x, z, y, rotation, xa, za, rotationa; public void tick(boolean fremad, boolean bagud, boolean venstre, boolean højre, boolean drejvenstre, boolean drejhøjre) { double rotationshastighed = 0.025; double gåhastighed = 1; double xfremadbagud = 0; double zhøjrevenstre = 0; if (fremad) { xfremadbagud++; if (bagud) { xfremadbagud--; if (venstre) { zhøjrevenstre--; if (højre) { zhøjrevenstre++; if (drejvenstre) { rotationa -= rotationshastighed; if (drejhøjre) { rotationa += rotationshastighed; * gåhastighed; * gåhastighed; xa += (zhøjrevenstre * Math.cos(rotation) + xfremadbagud * Math.sin(rotation)) za += (xfremadbagud * Math.cos(rotation) - zhøjrevenstre * Math.sin(rotation)) 25

26 x += xa; z += za; xa *= 0.1; za *= 0.1; rotation += rotationa; rotationa *= 0.5; Klassen Kontrol ackage mappe.fps.brugerkontrol; import java.awt.event.focusevent; import java.awt.event.focuslistener; import java.awt.event.keyevent; import java.awt.event.keylistener; import java.awt.event.mouseevent; import java.awt.event.mouselistener; import java.awt.event.mousemotionlistener; public class Kontrol implements KeyListener, FocusListener, MouseListener, MouseMotionListener { public boolean[] key = new public void mousedragged(mouseevent e) public void mousemoved(mouseevent e) public void mouseclicked(mouseevent e) public void mouseentered(mouseevent e) public void mouseexited(mouseevent e) public void mousepressed(mouseevent e) public void mousereleased(mouseevent e) public void focusgained(focusevent e) { 26

27 @Override public void focuslost(focusevent e) { for (int i = 0; i < key.length; i++){ key[i] = public void keypressed(keyevent e) { int keycode = e.getkeycode(); if (keycode > 0 && keycode < key.length) { key[keycode] = public void keyreleased(keyevent e) { int keycode = e.getkeycode (); if (keycode > 0 && keycode < key.length) { key[keycode] = public void keytyped(keyevent e) { Klassen Render package mappe.fps.grafik; public class Render { public final int width; public final int height; public final int[] pixels; public Render(int width, int height) { this.width = width; this.height = height; pixels = new int[width * height]; public void draw(render render, int xoffset, int yoffset) { for (int y = 0; y < render.height; y++) { int ypix = y + yoffset; if (ypix < 0 ypix >= height) { continue; for (int x = 0; x < render.width; x++) { int xpix = x + xoffset; if (xpix < 0 xpix >= width) { continue; 27

28 int alpha = render.pixels[x + y * render.width]; if (alpha > 0) { alpha; pixels[xpix + ypix * width] = Klassen Render3D package mappe.fps.grafik; import mappe.fps.spil; public class Render3D extends Render { public double[] zbuffer; private double renderdistance = 5000; public Render3D(int width, int height) { super(width, height); zbuffer = new double[width * height]; public void gulv(spil spil) { double loftposition = 8; double gulvposition = 8; double fremad = spil.kontrol.z; // double retning = spil.kontrol.x; // double rotation = spil.kontrol.rotation; double cosinus = Math.cos(rotation); double sinus = Math.sin(rotation); for (int y = 0; y < height; y++) { double loft = (y - height / 2.0) / height; double z = gulvposition / loft; // Z Kontrollere dybden i 3D // verdenen if (loft < 0) { z = loftposition / -loft; for at gå for at gå til for (int x = 0; x < width; x++) { double dybde = (x - width / 2.0) / height; dybde *= z; double xx = dybde * cosinus + z * sinus; double yy = z * cosinus - dybde * sinus; int xpix = (int) (xx + retning); // + retning... // frem og tilbage int ypix = (int) (yy + fremad); // + fremad... 28

29 ((ypix & 15) * 16) << 8; // højre og venstre zbuffer[x + y * width] = z; pixels[x + y * width] = ((xpix & 15) * 16) if (z > 500) { pixels[x + y * width] = 0; public void renderdistancelimiter() { for (int i = 0; i < width * height; i++) { int color = pixels[i]; int brightness = (int) (renderdistance / (zbuffer[i])); if (brightness < 0) { brightness = 0; if (brightness > 255) { brightness = 255; int r = (color >> 16) & 0xff; int g = (color >> 8) & 0xff; int b = (color) & 0xff; r = r * brightness / 255; g = g * brightness / 255; b = b * brightness / 255; pixels[i] = r << 16 g << 8 b; Klassen Skærm package mappe.fps.grafik; import mappe.fps.spil; public class Skærm extends Render { private Render3D visning; public Skærm(int width, int height) { super(width, height); visning = new Render3D(width, height); public void render(spil spil) { for (int i = 0; i < width * height; i++) { 29

30 pixels[i] = 0; visning.gulv(spil); visning.renderdistancelimiter(); draw(visning, 0, 0); 30

DANMARKS TEKNISKE UNIVERSITET

DANMARKS TEKNISKE UNIVERSITET DANMARKS TEKNISKE UNIVERSITET Skriftlig prøve, 14. december 2018, 4 timer Side 1 af 18 Kursus navn: 02101 Indledende Programmering Kursus : 02101 Tilladte hjælpemidler: Ikke-digitale skriftlige hjælpemidler

Læs mere

Test af It-komponent

Test af It-komponent Test af It-komponent I programmeringssproget Java Programmet Login service Elev: Mads Funch Klasse 2.4 Mat, It, Programmering Skole: Roskilde Tekniske Gymnasium HTX Underviser: Karl Dato: 31-08-2016 Side

Læs mere

Michael Jokil 11-05-2012

Michael Jokil 11-05-2012 HTX, RTG Det skrå kast Informationsteknologi B Michael Jokil 11-05-2012 Indholdsfortegnelse Indledning... 3 Teori... 3 Kravspecifikationer... 4 Design... 4 Funktionalitet... 4 Brugerflade... 4 Implementering...

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2018 Projekt, del II Institut for matematik og datalogi Syddansk Universitet 20. marts, 2019 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

Greenfoot En kort introduktion til Programmering og Objekt-Orientering

Greenfoot En kort introduktion til Programmering og Objekt-Orientering Greenfoot En kort introduktion til Programmering og Objekt-Orientering Greenfoot er et computer-program, som kan benyttes til at skrive andre computer-programmer, i et programmeringssprog kaldet Java.

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2018 Projekt, del II Institut for matematik og datalogi Syddansk Universitet 13. marts, 2018 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

Løsning af møntproblemet

Løsning af møntproblemet Løsning af møntproblemet Keld Helsgaun RUC, oktober 1999 Antag at tilstandene i problemet (stillingerne) er repræsenteret ved objekter af klassen State. Vi kan da finde en kortest mulig løsning af problemet

Læs mere

AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007

AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007 AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007 Opgavebesvarelsen skal afleveres som enten en printerudskrift eller som et passende dokument sendt via email til fjj@noea.dk. Besvarelsen skal

Læs mere

Ide med Diff. Mål. Tidsplan. 1.uge: 2.uge:

Ide med Diff. Mål. Tidsplan. 1.uge: 2.uge: Side 1 af 5 Ide med Diff. Min ide med differenertierings modulet er at lave et program som kan vise 3d objekter, og få lavede en konverter som kan konventer 3ds filer over til noget som flash kan bruge.

Læs mere

Introduktion til ActionScript

Introduktion til ActionScript Introduktion til ActionScript Kaspar Rosengreen Nielsen kaspar@interactivespaces.net i n t e r a c t i v e s p a c e s. n e t Kaspar Nielsen, kaspar@interactivespaces.net 1 Dagens program Opsamling på

Læs mere

Tree klassen fra sidste forelæsning

Tree klassen fra sidste forelæsning Programmering 1999 Forelæsning 12, fredag 8. oktober 1999 Oversigt Abstrakte klasser. Grænseflader. Programmering 1999 KVL Side 12-1 Tree klassen fra sidste forelæsning class Tree { int age; // in years

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2013 Projekt, del I Institut for matematik og datalogi Syddansk Universitet 5. marts, 2013 Dette projekt udleveres i to dele. Hver del har sin deadline, således

Læs mere

Kursusgang 11. Oversigt: Sidste kursusgang Værktøjer til udvikling og implementering af HCI-design Oversigt over Java Swing

Kursusgang 11. Oversigt: Sidste kursusgang Værktøjer til udvikling og implementering af HCI-design Oversigt over Java Swing Kursusgang 11 Oversigt: Sidste kursusgang Værktøjer til udvikling og implementering af HCI-design Oversigt over Java Swing Design af brugerflader 11.1 Samme sted Forskellige steder Sidste kursusgang Samtidigt

Læs mere

import java.awt.event.*; import java.awt.*; Container <- Panel <- Applet Component <- Button <- Checkbox <- ScrollPane <- Label

import java.awt.event.*; import java.awt.*; Container <- Panel <- Applet Component <- Button <- Checkbox <- ScrollPane <- Label Programmering 1999 Forelæsning 13, tirsdag 12. oktober 1999 Oversigt Grafiske brugergrænseflader. Komponenter: Knapper, tekstfelter, checkbokse... Vinduer (containere). Hændelser, hændelsesstyret programmering.

Læs mere

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 2

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 2 DM502 Forelæsning 2 Repetition Kompilere og køre Java program javac HelloWorld.java java HeloWorld.java Debugge Java program javac -g HelloWorld.java jswat Det basale Java program public class HelloWorld

Læs mere

Hvad er Objekter - Programmering

Hvad er Objekter - Programmering Denne guide er oprindeligt udgivet på Eksperten.dk Hvad er Objekter - Programmering En rigtig god gennemgang af hvad objekter er! Hvordan de oprettes og anvendes! Det er helt klart til nybegyndere, som

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2012 Projekt, del II Institut for matematik og datalogi Syddansk Universitet 15. marts, 2012 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

Undervisningsbeskrivelse

Undervisningsbeskrivelse Undervisningsbeskrivelse Stamoplysninger til brug ved prøver til gymnasiale uddannelser Termin Institution Uddannelse Fag og niveau Lærer(e) Hold Termin hvori undervisningen afsluttes: maj-juni 2013 HTX

Læs mere

//Udskriver System.out.println("Hej " + ditfornavn + " " + ditefternavn + "."); System.out.println("Du er " + dinalder + " aar gammel!

//Udskriver System.out.println(Hej  + ditfornavn +   + ditefternavn + .); System.out.println(Du er  + dinalder +  aar gammel! Denne guide er oprindeligt udgivet på Eksperten.dk Brugerinput i Java Denne her artikel gennemgår diverse ting ved brug af brugerinput i Java. Den starter med det simple og fortæller derefter skridt for

Læs mere

02101 Indledende Programmering Introduktion til Eclipse

02101 Indledende Programmering Introduktion til Eclipse 02101 Indledende Programmering Introduktion til Eclipse Version 2018 1 Introduktion I dette kursus lægger vi op til at man bruger det integrerede udviklingsmiljø Eclipse. Basalt set er et integreret udviklingsmiljø

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2019 Projekt, del I Institut for matematik og datalogi Syddansk Universitet 27. februar, 2019 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

b) Udvid din implementation af forme til at understøtte.equals. To objekter af samme form er ens hvis de har samme værdier i felterne.

b) Udvid din implementation af forme til at understøtte.equals. To objekter af samme form er ens hvis de har samme værdier i felterne. Exercise 1: Opgave 9.1 på CodeJudge. a) Lav klasserne Cirkel, Rektangel og Kvadrat, som implementerer vedhæftede interface From.java (se CodeJudge). Lav Rektangel før du laver Kvadrat. Kan du bruge nedarvning

Læs mere

Skriftlig eksamen i Datalogi

Skriftlig eksamen i Datalogi Roskilde Universitetscenter side 1 af 9 sider Skriftlig eksamen i Datalogi Modul 1 Vinter 1999/2000 Opgavesættet består af 6 opgaver, der ved bedømmelsen tillægges følgende vægte: Opgave 1 5% Opgave 2

Læs mere

Andreas Lauge V. Hansen klasse 3.3t Roskilde HTX

Andreas Lauge V. Hansen klasse 3.3t Roskilde HTX IT -Eksamen Andreas Lauge V. Hansen klasse 3.3t Roskilde HTX [Vælg en dato] Indhold Indledning... 2 Teori... 3 Hvorfor dette design... 4 Produktet... 4 Test og afprøvning... 9 Konklusion... 10 Indledning

Læs mere

Computerens - Anatomi

Computerens - Anatomi 2014 Computerens - Anatomi Rapporten er udarbejdet af Andreas og Ali Vejleder Karl G Bjarnason Indholdsfortegnelse Formål... 2 Indledning... 2 Case... 3 Design... 3 Skitser... 4 Planlægning... 5 Kravsspecifikation...

Læs mere

Arbejde med 3D track motion

Arbejde med 3D track motion Arbejde med 3D track motion Gary Rebholz I sidste måneds Tech Tip artikel gennemgik jeg det grundlæggende i track motion. Selv om vi ikke gennemgår alle værktøjer i Track Motion dialog box vil du alligevel

Læs mere

Skriftlig eksamen i Datalogi

Skriftlig eksamen i Datalogi Roskilde Universitetscenter side 1 af 11 sider Skriftlig eksamen i Datalogi Modul 1 Sommer 2000 Opgavesættet består af 6 opgaver, der ved bedømmelsen tillægges følgende vægte: Opgave 1 10% Opgave 2 10%

Læs mere

Hassansalem.dk/delpin User: admin Pass: admin BACKEND

Hassansalem.dk/delpin User: admin Pass: admin BACKEND Hassansalem.dk/delpin User: admin Pass: admin BACKEND 1/10 Indledning Dette projekt er den afsluttende del af web udvikling studiet på Erhvervs Lillebælt 1. semester. Projektet er udarbejdet med Del-pin

Læs mere

SWC eksamens-spørgsmål. Oversigt

SWC eksamens-spørgsmål. Oversigt SWC eksamens-spørgsmål Oversigt #1 Typer og variable #2 Aritmetik og logik #3 Klasser (definition, objekter) #4 Klasser (metoder) #5 Klasser (nedarvning, polymorfi) #6 Conditional statements #7 Repetition

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2016 Projekt, del I Institut for matematik og datalogi Syddansk Universitet 29. februar, 2016 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

Klasse 1.4 Michael Jokil 03-05-2010

Klasse 1.4 Michael Jokil 03-05-2010 HTX I ROSKILDE Afsluttende opgave Kommunikation og IT Klasse 1.4 Michael Jokil 03-05-2010 Indholdsfortegnelse Indledning... 3 Formål... 3 Planlægning... 4 Kommunikationsplan... 4 Kanylemodellen... 4 Teknisk

Læs mere

Undervisningsbeskrivelse

Undervisningsbeskrivelse Undervisningsbeskrivelse Stamoplysninger til brug ved prøver til gymnasiale uddannelser Termin Institution Uddannelse Fag og niveau Lærer(e) Hold Termin hvori undervisningen afsluttes: maj-juni 2014 HTX

Læs mere

Undervisningsbeskrivelse

Undervisningsbeskrivelse Undervisningsbeskrivelse Stamoplysninger til brug ved prøver til gymnasiale uddannelser Termin Institution Uddannelse Fag og niveau Lærer(e) Hold Termin hvori undervisningen afsluttes: maj-juni 2013 HTX

Læs mere

A Profile for Safety Critical Java

A Profile for Safety Critical Java A Profile for Safety Critical Java Martin Schoeberl Hans Søndergaard Bent Thomsen Anders P. Ravn Præsenteret af: Henrik Kragh-Hansen November 8, 2007 Forfatterne Martin Schoeberl Udvikler af JOP processoren

Læs mere

Automatisering Af Hverdagen

Automatisering Af Hverdagen Automatisering Af Hverdagen Programmering - Eksamensopgave 10-05-2011 Roskilde Tekniske Gymnasium (Kl. 3,3m) Mads Christiansen & Tobias Hjelholt Svendsen 2 Automatisering Af Hverdagen Indhold Introduktion:...

Læs mere

DM502. Peter Schneider-Kamp (petersk@imada.sdu.dk) http://imada.sdu.dk/~petersk/dm502/

DM502. Peter Schneider-Kamp (petersk@imada.sdu.dk) http://imada.sdu.dk/~petersk/dm502/ DM502 Peter Schneider-Kamp (petersk@imada.sdu.dk) http://imada.sdu.dk/~petersk/dm502/ 1 DM502 Bog, ugesedler og noter De første øvelser Let for nogen, svært for andre Kom til øvelserne! Lav opgaverne!

Læs mere

Skriftlig eksamen i Datalogi

Skriftlig eksamen i Datalogi Roskilde Universitetscenter Skriftlig eksamen i Datalogi Modul 1 Sommer 1999 Opgavesættet består af 5 opgaver, der ved bedømmelsen tillægges følgende vægte: Opgave 1 15% Opgave 2 15% Opgave 3 8% Opgave

Læs mere

Indledning. Hvorfor det forholder sig sådan har jeg en masse idéer om, men det bliver for meget at komme ind på her. God fornøjelse med læsningen.

Indledning. Hvorfor det forholder sig sådan har jeg en masse idéer om, men det bliver for meget at komme ind på her. God fornøjelse med læsningen. Indledning...2 Variabler...13 Eksempel: 1...13 Eksempel 2:...13 Eksempel 3:...15 Eksempel 4:...16 Metoder...17 Metode (intet ind og intet ud)...17 Metode (tekst ind)...18 Metode (tekst ind og tekst ud)...19

Læs mere

Introduktion til Flash

Introduktion til Flash Introduktion til Flash Kaspar Rosengreen Nielsen kaspar@interactivespaces.net Kaspar Rosengreen Nielsen, kaspar@interactivespaces.net 1 Om mig Kaspar Rosengreen Nielsen. Uddannet datalog med sidefag i

Læs mere

Videregående programmering i Java

Videregående programmering i Java Videregående programmering i Java Dag 6 Komponenter (og lidt Swing og MVC) Læsning: VP 4, evt. VP 6 Dette materiale er under Åben Dokumentlicens, se http://www.sslug.dk/linuxbog/licens.html Grafiske komponenter

Læs mere

Afstande, skæringer og vinkler i rummet

Afstande, skæringer og vinkler i rummet Afstande, skæringer og vinkler i rummet Frank Nasser 9. april 20 c 2008-20. Dette dokument må kun anvendes til undervisning i klasser som abonnerer på MatBog.dk. Se yderligere betingelser for brug her.

Læs mere

Dag 10 Flertrådet programmering

Dag 10 Flertrådet programmering Videregående programmering i Java Dag 10 Flertrådet programmering Fremlæggelse af programmering/status for projekter Dokumentation med javadoc Flertrådede designmønstre: Arbejdstråd, Producent Konsument,

Læs mere

Læringsprogram. Christian Hjortshøj, Bjarke Sørensen og Asger Hansen Vejleder: Karl G Bjarnason Fag: Programmering Klasse 3.4

Læringsprogram. Christian Hjortshøj, Bjarke Sørensen og Asger Hansen Vejleder: Karl G Bjarnason Fag: Programmering Klasse 3.4 Læringsprogram Christian Hjortshøj, Bjarke Sørensen og Asger Hansen Vejleder: Karl G Bjarnason Fag: Programmering Klasse 3.4 R o s k i l d e T e k n i s k e G y m n a s i u m Indholdsfortegnelse FORMÅL...

Læs mere

Online billede filtrering

Online billede filtrering Online billede filtrering Eksamensprojekt 2014 Andreas Lorentzen, klasse 3.4 Roskilde Tekniske Gymnasium Programmering C 09-05-2014 I dette projekt vil jeg demonstrerer en af de mange ting moderne browsere

Læs mere

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 3

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 3 DM502 Forelæsning 3 Indlæsning fra tastatur Udskrift til skærm Repetition Beregning af middelværdi Gentagelse med stop-betingelse (while) Heltalsdivision Division med nul Type-casting ( (double) ) Betinget

Læs mere

Afstande, skæringer og vinkler i rummet

Afstande, skæringer og vinkler i rummet Afstande, skæringer og vinkler i rummet Frank Villa 2. maj 202 c 2008-20. Dette dokument må kun anvendes til undervisning i klasser som abonnerer på MatBog.dk. Se yderligere betingelser for brug her. Indhold

Læs mere

Kursus i OOP og Java. Kursus i Objektorienteret programmering i Java

Kursus i OOP og Java. Kursus i Objektorienteret programmering i Java Kursus i OOP og Java Kursus i Objektorienteret programmering i Java Åben Dokumentlicens Dette foredragsmateriale er under Åben Dokumentlicens (ÅDL) Du har derfor lov til frit at kopiere dette værk Bruger

Læs mere

DRONNINGER (QUEENS) Opgave 1

DRONNINGER (QUEENS) Opgave 1 DRONNINGER (QUEENS) I denne opgave vil vi beskæftige os med det såkaldte 8-dronningeproblem, hvor man skal placerede 8 dronninger på et 8 x 8 skakbræt, således at ingen af dronningerne kan slå hinanden.

Læs mere

HTX, RTG. Rumlige Figurer. Matematik og programmering

HTX, RTG. Rumlige Figurer. Matematik og programmering HTX, RTG Rumlige Figurer Matematik og programmering Vejledere: Jørn Christian Bendtsen og Karl G. Bjarnason Morten Bo Kofoed Nielsen & Michael Jokil 10-10-2011 In this assignment we have been working with

Læs mere

Forelæsning Uge 3 Torsdag

Forelæsning Uge 3 Torsdag Forelæsning Uge 3 Torsdag Billedredigering Gråtonebilleder (som er lidt simplere end farvebilleder) Arrays Kan "opbevare" et antal objekter (som ArrayList) Fast (på forhånd kendt) antal elementer Afleveringsopgave:

Læs mere

Civilingeniøreksamen 49104 12. januar 2001. Skriftelig prøve den 12. januar 2001 Kursusnummer 49104

Civilingeniøreksamen 49104 12. januar 2001. Skriftelig prøve den 12. januar 2001 Kursusnummer 49104 Skriftelig prøve den 12. januar 2001 Kursusnummer 49104 Kursusnavn: Programmering. Tilladte hjælpemidler: Alle skriftlige hjælpemidler Opgavesættet består af fire opgaver, der har følgende vægtning: Opgave

Læs mere

Videregående Programmering Obligatorisk opgave - 3. semester, efterår 2004

Videregående Programmering Obligatorisk opgave - 3. semester, efterår 2004 Overvågningssystem Beskrivelse Bagagesorteringssystemet består af et antal skranker (check-in) til modtagelse og registrering af bagage, et automatiseret sorteringsanlæg samt et antal terminaler (gates),

Læs mere

EA3 eller EA Cube rammeværktøjet fremstilles visuelt som en 3-dimensionel terning:

EA3 eller EA Cube rammeværktøjet fremstilles visuelt som en 3-dimensionel terning: Introduktion til EA3 Mit navn er Marc de Oliveira. Jeg er systemanalytiker og datalog fra Københavns Universitet og denne artikel hører til min artikelserie, Forsimpling (som også er et podcast), hvor

Læs mere

Visualiseringsprogram

Visualiseringsprogram Visualiseringsprogram Programmering C - eksamensopgave Rami Kaddoura og Martin Schmidt Klasse: 3.4 Vejleder: Karl Bjarnason Roskilde Tekniske Gymnasium Udleveringsdato: 02-03-2012 Afleveringsdato: 11-05-12

Læs mere

Dokumentation af programmering i Python 2.75

Dokumentation af programmering i Python 2.75 Dokumentation af programmering i Python 2.75 Af: Alexander Bergendorff Jeg vil i dette dokument, dokumentere det arbejde jeg har lavet i løbet opstarts forløbet i Programmering C. Jeg vil forsøge, så vidt

Læs mere

Forelæsning Uge 3 Torsdag

Forelæsning Uge 3 Torsdag Forelæsning Uge 3 Torsdag Billedredigering (bl.a. brug af for-løkker) Gråtonebilleder (som er lidt simplere end farvebilleder) Arrays Kan "opbevare" et antal objekter (som ArrayList) Fast (på forhånd kendt)

Læs mere

BRP Tal. Om computer-repræsentation og -manipulation. Logaritmer

BRP Tal. Om computer-repræsentation og -manipulation. Logaritmer BRP 13.9.2006 Tal. Om computer-repræsentation og -manipulation. Logaritmer 1. Opgaverne til i dag dækker det meste af stoffet 2. Resten af stoffet logaritmer binære træer 3. Øvelse ny programmeringsopgave

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2015 Projekt, del I Institut for matematik og datalogi Syddansk Universitet 3. marts, 2015 Dette projekt udleveres i to dele. Hver del har sin deadline, således

Læs mere

Introduktion til Flash

Introduktion til Flash Introduktion til Flash Kaspar Rosengreen Nielsen kaspar@interactivespaces.net Om mig Kaspar Rosengreen Nielsen. Uddannet datalog med sidefag i multimedier. Arbejder på Interactive Spaces under Alexandra

Læs mere

AFSLUTTENDE PROJEKT KOM/IT

AFSLUTTENDE PROJEKT KOM/IT 5/5-2017 AFSLUTTENDE PROJEKT KOM/IT Daniel & Frederik Klasse 1.1 Indledning Vi startede med at få valget stillet om vi ville lave noget med e-learning, databehandling og præsentation eller vi kunne lave

Læs mere

Mini game 1-2 Binding 14-09-2012

Mini game 1-2 Binding 14-09-2012 1-2: Binding Kort fortalt Der vil i dette minigame være en start skærm med bakterien (hovedskærmen), hvor man kan klikke på forskellige celledele og bagefter er der spillet hvor man skal skrive forskellige

Læs mere

Eksempel: Skat i år 2000

Eksempel: Skat i år 2000 Kursus 02199: Programmering afsnit 2.1-2.7 Anne Haxthausen IMM, DTU 1. Værdier og typer (bl.a. char, boolean, int, double) (afsnit 2.4) 2. Variable og konstanter (afsnit 2.3) 3. Sætninger (bl.a. assignments)

Læs mere

Abstrakte datatyper C#-version

Abstrakte datatyper C#-version Note til Programmeringsteknologi Akademiuddannelsen i Informationsteknologi Abstrakte datatyper C#-version Finn Nordbjerg 1/9 Abstrakte Datatyper Denne note introducerer kort begrebet abstrakt datatype

Læs mere

Kom i gang med Course Tool 1.2

Kom i gang med Course Tool 1.2 Kom i gang med Course Tool 1.2 Indhold Indledning...2 Pris beregning...2 Anvendelse...2 Open Source...2 Anbefalinger...2 Installation...3 USB-Pen...3 Download Libre Office (Draw)...3 Indstil makrosikkerhed...4

Læs mere

Hvordan vælger jeg dokumentprofilen?

Hvordan vælger jeg dokumentprofilen? Hvordan vælger jeg dokumentprofilen? Valget af OIOUBL profil i en konkret dokumentudveksling vil bl.a. afhænge af, hvilke OIOUBL profiler den anden part i udvekslingen understøtter. Et konkret eksempel

Læs mere

Svar på de mest almindelige Citrix spørgsmål

Svar på de mest almindelige Citrix spørgsmål Svar på de mest almindelige Citrix spørgsmål Henrik Meyer og Ajâja Hyttel Oprettet: 24/6-13 Sidst revideret 14/5-14 h t t p s : / / c i t r i x. a a b n e t. d k Hvad er nyt i Citrix?... 2 Hvis du ikke

Læs mere

Spil Rapport. Spil lavet i GameMaker. Kevin, Mads og Thor 03-02-2011

Spil Rapport. Spil lavet i GameMaker. Kevin, Mads og Thor 03-02-2011 Spil Rapport Spil lavet i GameMaker Kevin, Mads og Thor 03-02-2011 Indholdsfortegnelse Indledning... 2 HCI... 2 Planlægning / Elementær systemudvikling... 2 Kravspecifikationer... 4 Spil beskrivelse...

Læs mere

Unity Guide 1 CONTENTS

Unity Guide 1 CONTENTS Unity Guide 1 CONTENTS Unity interface... 2 Components... 4 Materials... 7 Scripts opbygning... 8 Terrain... 8 Animations... 9 Particle system... 11 Audio... 11 Sprites... 12 GUI... 14 UNITY INTERFACE

Læs mere

Java Klasse nedarvninger

Java Klasse nedarvninger Denne guide er oprindeligt udgivet på Eksperten.dk Java Klasse nedarvninger Et let lille overblik i hvordan klasse nedarvning virker i java Skrevet den 07. dec 2011 af mochners I kategorien Programmering

Læs mere

Lektion 3. Grundlæggende programmering i VR

Lektion 3. Grundlæggende programmering i VR Lektion 3 Grundlæggende programmering i VR Plan for i dag UML Usecase diagrammer Aktivitets diagrammer Klasse diagrammer Udforskning af forskelligt VR og andre måder at udvide virkeligheden på Cardboard

Læs mere

Daniel Kaasing 2012.3 Roskilde Tekniske Gymnasium 13-05-2015. Programmeringsjournal. Lavet af Daniel Kaasing. Lærer: Karl G Bjarnason

Daniel Kaasing 2012.3 Roskilde Tekniske Gymnasium 13-05-2015. Programmeringsjournal. Lavet af Daniel Kaasing. Lærer: Karl G Bjarnason Programmeringsjournal Lavet af Daniel Kaasing Lærer: Karl G Bjarnason 1 "Jeg bekræfter herved med min underskrift, at opgavebesvarelsen er udarbejdet af mig. Jeg har ikke anvendt tidligere bedømt arbejde

Læs mere

Draco vs. Harry. Interactive Multimedia E2010 DIAM. 15. december 2010. Vejledt af: Kevin Cook McLean, Hans Christian Asmussen & Søren Vibjerg

Draco vs. Harry. Interactive Multimedia E2010 DIAM. 15. december 2010. Vejledt af: Kevin Cook McLean, Hans Christian Asmussen & Søren Vibjerg Draco vs. Harry 15. december 2010 Interactive Multimedia E2010 DIAM Vejledt af: Kevin Cook McLean, Hans Christian Asmussen & Søren Vibjerg Spillet kan findes på: http://www.itu.dk/people/rfog/draco_vs_harry.html

Læs mere

Computer spil Kom it Roskilde teknisk gymnasium. Rasmus Kibsgaard Riehn-Kristensen, Michael Jokil og Christine Johnsen

Computer spil Kom it Roskilde teknisk gymnasium. Rasmus Kibsgaard Riehn-Kristensen, Michael Jokil og Christine Johnsen Computer spil Kom it Roskilde teknisk gymnasium Rasmus Kibsgaard Riehn-Kristensen, Michael Jokil og Christine Johnsen Vejleder Karl G Bjarnason 12-03-2010 Indhold Kanylemodel... 3 1.1Afsender... 3 1.2Indkodning...

Læs mere

Roskilde Tekniske Gymnasium. Eksamensprojekt. Programmering C niveau

Roskilde Tekniske Gymnasium. Eksamensprojekt. Programmering C niveau Roskilde Tekniske Gymnasium Eksamensprojekt Programmering C niveau Andreas Sode 09-05-2014 Indhold Eksamensprojekt Programmering C niveau... 2 Forord... 2 Indledning... 2 Problemformulering... 2 Krav til

Læs mere

Lysets hastighed. Navn: Rami Kaddoura Klasse: 1.4 Fag: Matematik A Skole: Roskilde tekniske gymnasium, Htx Dato: 14.12.2009

Lysets hastighed. Navn: Rami Kaddoura Klasse: 1.4 Fag: Matematik A Skole: Roskilde tekniske gymnasium, Htx Dato: 14.12.2009 Lysets hastighed Navn: Rami Kaddoura Klasse: 1.4 Fag: Matematik A Skole: Roskilde tekniske gymnasium, Htx Dato: 14.1.009 Indholdsfortegnelse 1. Opgaveanalyse... 3. Beregnelse af lysets hastighed... 4 3.

Læs mere

Design dit eget computerspil med Kodu

Design dit eget computerspil med Kodu Design dit eget computerspil med Kodu I sensommeren var vi to CFU-konsulenter ude i SFO en på Borup Ris Skolens Grønbro-afdeling. Her var vi sammen med børnene for at få erfaringer i arbejdet med platformen

Læs mere

PORTFOLIO SEBASTIAN NYHOLM. Eksamensprojekt. 1. Semester

PORTFOLIO SEBASTIAN NYHOLM. Eksamensprojekt. 1. Semester PORTFOLIO SEBASTIAN NYHOLM Eksamensprojekt 1. Semester Indledning Dette projekt gik ud på at designe og udvikle sit eget portfolio, hvor indhold fra tidligere projekter, læring, brugerteste og begrundelse

Læs mere

Andreas Møinichen og Aske Märcher 10-05-2011

Andreas Møinichen og Aske Märcher 10-05-2011 Programmering Læring om Cos(x) og Sin(x) Andreas Møinichen og Aske Märcher 10-05-2011 LÆRER: KARL BJARNASON Roskilde Tekniske gymnasium. Klasse 2.1 Indholdsfortegnelse PROJEKTBESKRIVELSE... 3 INDLEDNING...

Læs mere

IT og Programmering eksamens projekt

IT og Programmering eksamens projekt IT og Programmering eksamens projekt Visualisering af Gravitation Roskilde HTX Anders Kær Bennetsen D. 20-05-2010 IT og Programmering 1.1 Indledning:... 4 1.2 Beskrivelse af Ide:... 4 1.3 Definition af

Læs mere

Bilag 1 Rige billeder Ordremodtagelse

Bilag 1 Rige billeder Ordremodtagelse Bilag1 Rigebilleder Ordremodtagelse Tværfagligtprojektpå2.Semester Bilag afchristian,kennetogmartin 71 Overordnet Tværfagligtprojektpå2.Semester Bilag afchristian,kennetogmartin 72 Produktionsgulvet Tværfagligtprojektpå2.Semester

Læs mere

Forelæsning Uge 4 Mandag

Forelæsning Uge 4 Mandag Forelæsning Uge 4 Mandag Algoritmeskabeloner Kan (ved simple tilretningerne) bruges til at implementere metoder, der gennemsøger en arrayliste (eller anden objektsamling) og finder objekter, der opfylder

Læs mere

Forelæsning Uge 2 Torsdag

Forelæsning Uge 2 Torsdag Forelæsning Uge 2 Torsdag Niveauer af programbeskrivelser Statiske / dynamiske beskrivelser Klassevariabler og klassemetoder Variabler og metoder der et tilknyttet klassen (i stedet for at være tilknyttet

Læs mere

Jacob Nordfalk. Ingeniørhøjskolen i København. Nykøbing F itvisioncenter 24. februar 2004

Jacob Nordfalk. Ingeniørhøjskolen i København. Nykøbing F itvisioncenter 24. februar 2004 Genbrugelige komponenter og designmønstre i Java Jacob Nordfalk Ingeniørhøjskolen i København Nykøbing F itvisioncenter 24. februar 2004 Program Om Jacob Nordfalk introduktion (ikke-teknisk del) Komponentbaseret

Læs mere

Threads i Java. Denne artikel giver en introduktion til threads i Java. Den beskriver hvad tråde er og forklarer hvordan de bruges i Java

Threads i Java. Denne artikel giver en introduktion til threads i Java. Den beskriver hvad tråde er og forklarer hvordan de bruges i Java Denne guide er oprindeligt udgivet på Eksperten.dk Threads i Java Denne artikel giver en introduktion til threads i Java. Den beskriver hvad tråde er og forklarer hvordan de bruges i Java Den forudsætter

Læs mere

Undervisningsbeskrivelse

Undervisningsbeskrivelse Undervisningsbeskrivelse Stamoplysninger til brug ved prøver til gymnasiale uddannelser Termin Institution Uddannelse Fag og niveau Lærer(e) Termin hvori undervisningen afsluttes: Juni 2019 VID Gymnasier

Læs mere

Åbn Paint, som er et lille tegne- og billedbehandlingsprogram der findes under Programmer i mappen Tilbehør. Åbn også Word.

Åbn Paint, som er et lille tegne- og billedbehandlingsprogram der findes under Programmer i mappen Tilbehør. Åbn også Word. 75 Paint & Print Screen (Skærmbillede med beskæring) Åbn Paint, som er et lille tegne- og billedbehandlingsprogram der findes under Programmer i mappen Tilbehør. Åbn også Word. 1. Minimer straks begge

Læs mere

class subklasse-navn extends superklasse-navn { } NorwaySpruce har superklassen Spruce, som igen har superklassen Tree.

class subklasse-navn extends superklasse-navn { } NorwaySpruce har superklassen Spruce, som igen har superklassen Tree. Programmering 1999 Forelæsning 11, tirsdag 5. oktober 1999 Oversigt Klasse-hierarkier: superklasser og subklasser Nedarvning Polymorfi Programmering 1999 KVL Side 11-1 Hierarkier En klasse repræsenterer

Læs mere

Singleton pattern i Java

Singleton pattern i Java Denne guide er oprindeligt udgivet på Eksperten.dk Singleton pattern i Java Denne artikel beskriver Singleton pattern og implementation i Java. Den forudsætter kendskab til Java men ikke til Singleton.

Læs mere

π can never be expressed in numbers. William Jones og John Machins algoritme til beregning af π

π can never be expressed in numbers. William Jones og John Machins algoritme til beregning af π can never be expressed in numbers. William Jones og John Machins algoritme til beregning af. Oprindelsen til symbolet Første gang vi møder symbolet som betegnelse for forholdet mellem en cirkels omkreds

Læs mere

Poster design. Meningen med en poster

Poster design. Meningen med en poster Poster design At præsentere et naturvidenskabelig emne er ikke altid lige nemt. Derfor bruges ofte plakater, såkaldte posters, til at fremvise forskning på fx messer eller konferencer. Her kan du finde

Læs mere

Løsning af skyline-problemet

Løsning af skyline-problemet Løsning af skyline-problemet Keld Helsgaun RUC, oktober 1999 Efter at have overvejet problemet en stund er min første indskydelse, at jeg kan opnå en løsning ved at tilføje en bygning til den aktuelle

Læs mere

Prezi. Aldrig mere gammeldaws slideshows!? Version: December 2012

Prezi. Aldrig mere gammeldaws slideshows!? Version: December 2012 Prezi Aldrig mere gammeldaws slideshows!? Version: December 2012 Indholdsfortegnelse Hvad er Prezi?...4 Hvordan finder jeg Prezi?...5 Skoletube og Prezi...5 Lav din første Prezi-præsentation...5 Indtast

Læs mere

Guide til din computer

Guide til din computer Guide til din computer Computerens anatomi forklaret på et nemt niveau Produkt fremstillet af Nicolas Corydon Petersen, & fra Roskilde Tekniske Gymnasium, kommunikation & IT, år 2014 klasse 1.2 12-03-2014.

Læs mere

Det er muligt at chekce følgende opg. i CodeJudge: og

Det er muligt at chekce følgende opg. i CodeJudge: og Det er muligt at chekce følgende opg. i CodeJudge:.1.7 og.1.14 Exercise 1: Skriv en forløkke, som producerer følgende output: 1 4 9 16 5 36 Bonusopgave: Modificer dit program, så det ikke benytter multiplikation.

Læs mere

class Time { int hours, min; } } Time t1; // Erklær variabel af type Time class Time1 { public static void main(string[] args) { Time t1; t1.

class Time { int hours, min; } } Time t1; // Erklær variabel af type Time class Time1 { public static void main(string[] args) { Time t1; t1. Programmering 1999 Forelæsning 4, fredag 10. september 1999 Klasser og objekter Felter, konstruktorer, this Eksempler på klasser: Time, Appointment Eksempler på metoder i Time og Appointment Klassefelter:

Læs mere

University of Southern Denmark Syddansk Universitet. DM503 Forelæsning 11

University of Southern Denmark Syddansk Universitet. DM503 Forelæsning 11 DM503 Forelæsning 11 Generics Pakker Exceptions Indhold Generics Nedarvning og Generics Generics Nedarvning og Generics Husk Box fra sidst Generics public class Box {! private T object;! public void

Læs mere

Af: Safa Sarac Klasse 3.4 Skole: Roskilde Tekniske Gymnasium, HTX Vejleder(e): Karl B Dato: 26. marts 2012

Af: Safa Sarac Klasse 3.4 Skole: Roskilde Tekniske Gymnasium, HTX Vejleder(e): Karl B Dato: 26. marts 2012 Projektbeskrivelse til eksamen i informationsteknologi B og Programmering C - Projektnavn: Privat mailer Af: Safa Sarac Klasse 3.4 Skole: Roskilde Tekniske Gymnasium, HTX Vejleder(e): Karl B Dato: 26.

Læs mere

5/11/2015. Programmering. Hussein Al-Saidi ROSKILDE TEKNINSK GYMNASIE VEJLEDER: CHRISTOFFER S.

5/11/2015. Programmering. Hussein Al-Saidi ROSKILDE TEKNINSK GYMNASIE VEJLEDER: CHRISTOFFER S. 5/11/2015 Hussein Al-Saidi ROSKILDE TEKNINSK GYMNASIE VEJLEDER: CHRISTOFFER S. 1 Contents... 0 Indledning... 3 Analyse... 3 Problemformulering... 3 Målgruppe... 3 Løsningsforslag... 3 Detaljeret beskrivelse

Læs mere