From 21978cc4a512447b0461a59454cd4a9f5f0b5602 Mon Sep 17 00:00:00 2001 From: Anya Helene Bagge Date: Mon, 16 Apr 2018 01:38:30 +0200 Subject: [PATCH 1/4] initial --- .classpath | 11 + .gitignore | 1 + .idea/misc.xml | 4 + .idea/modules.xml | 8 + .idea/vcs.xml | 6 + .project | 17 ++ .settings/org.eclipse.core.resources.prefs | 2 + .settings/org.eclipse.jdt.core.prefs | 12 ++ .settings/org.eclipse.jdt.ui.prefs | 3 + AUTHORS.md | 3 + Connect_4_Board_and_Box.jpg | Bin 0 -> 25667 bytes Connect_Four.gif | Bin 0 -> 69313 bytes LICENSE | 28 +++ README.md | 58 ++++++ SEM-2.md | 222 +++++++++++++++++++++ inf101.v18.sem2.iml | 43 ++++ src/inf101/v18/sem2/AppInfo.java | 35 ++++ 17 files changed, 453 insertions(+) create mode 100644 .classpath create mode 100644 .gitignore create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml create mode 100644 .project create mode 100644 .settings/org.eclipse.core.resources.prefs create mode 100644 .settings/org.eclipse.jdt.core.prefs create mode 100644 .settings/org.eclipse.jdt.ui.prefs create mode 100644 AUTHORS.md create mode 100644 Connect_4_Board_and_Box.jpg create mode 100644 Connect_Four.gif create mode 100644 LICENSE create mode 100644 README.md create mode 100644 SEM-2.md create mode 100644 inf101.v18.sem2.iml create mode 100644 src/inf101/v18/sem2/AppInfo.java diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..2a680ed --- /dev/null +++ b/.classpath @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ae3c172 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/bin/ diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..794aa67 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..a20f76a --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.project b/.project new file mode 100644 index 0000000..d722c6a --- /dev/null +++ b/.project @@ -0,0 +1,17 @@ + + + inf101.v18.sem2 + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..99f26c0 --- /dev/null +++ b/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding/=UTF-8 diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..6b9b874 --- /dev/null +++ b/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,12 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.javaFormatter=org.eclipse.jdt.core.defaultJavaFormatter diff --git a/.settings/org.eclipse.jdt.ui.prefs b/.settings/org.eclipse.jdt.ui.prefs new file mode 100644 index 0000000..a151097 --- /dev/null +++ b/.settings/org.eclipse.jdt.ui.prefs @@ -0,0 +1,3 @@ +cleanup_settings_version=2 +eclipse.preferences.version=1 +formatter_settings_version=13 diff --git a/AUTHORS.md b/AUTHORS.md new file mode 100644 index 0000000..a4bbc70 --- /dev/null +++ b/AUTHORS.md @@ -0,0 +1,3 @@ +# Authors + +* *YOU* diff --git a/Connect_4_Board_and_Box.jpg b/Connect_4_Board_and_Box.jpg new file mode 100644 index 0000000000000000000000000000000000000000..babf7a643e3404f3c644297e29b0539a5d2518c7 GIT binary patch literal 25667 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 x*cm{)@/inf101.v18.sem2.git + +(Husk å bytte ut `` med brukernavnet ditt.) Her ligger oppgaveteksten og et tomt Java-prosjekt. Du skal utvikle programmet ditt i dette prosjektet, og pushe til repositoriet ditt slik som før. Når vi retter oppgaven din kommer vi til å se etter: + +* Et kjørbart Fire på Rad-spill som vi kan spille alene (mot en AI) eller mot et annen, ekte spiller +* [README-fil](README.md) som forklarer designvalg, hvordan koden er organisert, abstraksjon, og andre ting vi bør vite om koden din. +* Tester +* Dokumentasjon (JavaDoc, kommentarer, diagrammer, README, etc.) +* At navn på klasser, interfaces, metoder og variabler er fornuftige +* Fornuftige abstraksjoner og innkapsling (bruk av klasser, interface, metoder, etc.) – forklart i README + +Du må gjerne (!) diskutere oppgaven med andre, men dere må skrive individuell kode. Dersom du samarbeider tett med noen så beskriv det i README-filen. + +TODO: review + +## Programmet +Målet med oppgaven er å skrive et spillbart program for 1-2 spillere, av Fire på Rad. Krav til programmet ditt er at: + +* Det er spillbart, ut ifra [reglene](#reglene) til det tradisjonelle Fire på Rad. +* Det har et [brukergrensesnitt](#brukergrensesnitt): programmet skal kunne brukes av 1-2 "ekte" spillere, f.eks. du og gruppelederen din. For å kunne spille må kunne gi input til programmet, f.eks. ved hjelp av `Scanner`-objekt og `System.out.println`, eller ved hjelp av taster og grafikk eller et klikkbart grafisk grensesnitt. Dette er også den delen av programmet som viser hvordan brikkene er stilt opp og om noen har vunnet enda. +* Det er spillbart for kun én spiller: det vil si at du må ha en AI-spiller. Den trenger ikke være særlig intelligent, det holder at den gjør tilfeldige gyldige trekk. +* Koden din viser tydelig, ved hjelp av objekt-orientering, klassenavn, interfaces, metodenavn og feltvariabler hvordan du har [abstrahert Fire på Rad-spillet](#spill-abstraksjon). Beskriv dette gjerne utfyllende i README-filen. + +## Poeng/karakter +Hvor mange poeng du får på oppgaven kommer an på hvor god løsningen din er. Fire på Rad er et relativt enkelt spill å implementere, og det *kan* gjøres i én fil uten klasser og metoder (i INF100-stil). Dersom du løser oppgaven på denne måten vil du få tilnærma 0 poeng. Vi forventer så klart at programmet oppfører seg ca som det skal, men for å få god uttelling på poenget må du i tilegg vise at du kan bruke objekt-orientering på en god måte, og at du kan teste og dokumentere koden din. ***Det er bedre å levere en oppgave som har høy kvalitet på koden og et par bugs, enn et spill som kjører korrekt, men har rotete kode med dårlig inndeling i klasser og manglende dokumentasjon!*** + +Vi forventer at programmet kjører, du har klasser for fornuftige deler av spillet (se under) og disse er dokumentert og testet og fungerer sammen. Dersom det er mangler i oppgaven vil vi trekke mindre for dem dersom du kan forklare dem og hva som er problemet / hvordan du ville løst det i README-filen din. Dette gjelder også designvalgene – hvis du oppdager at du har gjort dumme valg, hjelper det at du forklarer erfaringen og hvordan du ville gjort det annerledes, selv om du ikke ikke har tid til å fikse implementasjonen. + +## Code Review / Feedback på hverandres kode + +*Dette er frivillig, men kan være både lærerikt og hjelpe deg til å forbedre innleveringen din.* + +Det er veldig nyttig å måtte [forklare](https://en.wikipedia.org/wiki/Rubber_duck_debugging) hvordan man selv har tenkt og hvordan ens egen kode virker, og det er også veldig nyttig å prøve å sette seg inn i hvordan andre har tenkt når de har programmert. Vi anbefaler derfor at du finner går sammen med noen andre studenter (f.eks. i grupper på 2–4 personer) og gjør litt [lightweight](http://codingsight.com/lightweight-code-review/) [code reviews](https://en.wikipedia.org/wiki/Software_peer_review) av hverandres kode: + +* Det er praktisk å gå gjennom ting muntlig: sitt rundt samme datamaskin, og forklar din egen kode til de andre (eller prøv å forstå og forklare noen andres kode!) – dere kan diskutere gode og dårlige løsninger, ideer til ting som kan gjøres annerledes eller forbedres osv. +* Du kan også gi tilgang til repositoriet [slik du lærte i Lab 4](https://retting.ii.uib.no/inf101.v18.oppgaver/inf101.v18.lab4/blob/master/LAB-4-I_GIT.md#11-tilgang), og så kan dere prøve lese (og eventuelt kjøre) hverandres kode, og f.eks. gi tilbakemeldinger gjennom *Issues*-systemet i GitLab. +* **Viktig:** poenget med dette er å lære, og å forbedre innleveringene – for at det skal funke er det viktig å være positiv og konstruktiv når du gir tilbakemeldinger eller kommentarer (ellers er det ingen som tør å vise deg koden sin neste gang!) +* Det burde passe greit å gjøre dette en gang i løpet av den første uken, og så en gang til noen dager før innlevering. +* Det er et eget punkt i [README-filen](README.md) som dere kan krysse av hvis dere prøver dere på en eller annen variant av “code review” – skrive gjerne også noen setninger om hva dere gjorde og hvordan det fungerte (lærte du noe? forbedret du noe?) + +## Design – Programmet sine deler + +Videre i denne teksten beskriver vi typiske deler av programmet. Dersom du vil dele programmet ditt opp på en annen måte er helt greit: men ***forklar abstraksjonene dine i README-filen, uansett hva du velger å bruke***. Det er viktig at vi skjønner hva du har tenkt, og hvis noe er rart i koden din, kan en god forklaring redde deg fra unødig trekk. Se f.eks. forklaringene du har fått på utlevert kode tidligere for eksempler. + +Hver del av programmet bør være så adskilt som mulig fra resten av koden. De kan f.eks. gjerne ligge i hver sine pakker, og prøv at de ikke kaller hverandre unødig mye. Les mer om [modulær](#modulær) kode under [Ekstra](#ekstra). + +### Kjernen av programmet +Programmet trenger en kjerne, som kontrollerer programflyten. Dette vil typisk være en klasse som knytter sammen de øvrige delene og som har en løkke der hver gjennomkjøring er én spillers runde. Les de neste seksjonene og kikk gjerne på koden fra Semesteroppgave 1 før du bestemmer deg for hvordan å sette opp ditt program. + +## Spill-abstraksjon +De fleste spill består av cirka de samme delene: + +* Spill eller Game +* Spiller eller Player +* Brikker, Piece eller andre "ting" man bruker til å spille med +* noen spill har et Brett eller Board + +Se gjerne på tidligere lab-oppgaver og forrige semesteroppgave for typisk oppsett. + +I tillegg kan vi dele spillere opp i AI-spillere og en abstraksjon av den "ekte" spilleren. AI-spillere har gjerne sin egen måte å bestemme oppførsel på (slik som Rabbits i oblig 1), mens "ekte" spillere må kunne ta imot kommandoer fra en spiller i den virkelige verden. + +Vi kan også skille ut Regler fra selve Spillet. Det er litt mer komplisert, men kan være veldig nyttig: da kan man enklere gjenbruke koden i resten av spillet selv om man vil bytte reglene til å f.eks. spille Fem på Rad eller Fire i Firkant. I så fall er det nyttig å tenke at vi har + +* Spill, som har blant annet + * [Regler](#regler), som har blant annet + * [Win conditions](#win-conditions), som beskriver nøyaktig hva som må være oppfylt for å vinne spillet. + +I følgende seksjoner beskriver vi de forskjellige delene av spillet, dersom vi bruker denne inndelingen. + +### Brettet og objekter på det +"Spillet" er ofte en samle-klasse for brett og regler. Brettet kan gjerne inneholde spillbrikker, og spillbrikkene kan ha hver sin farge. Dersom du vil bruke et tekst-grensesnitt kan du representere hver farge med f.eks. en bokstav. + +Dersom du ser på brettet i det vedlagt bildet, ser du at selv om brettet står på høykant og har runde hull, så er de viktigste egenskapene for spillet at det har en "Grid"-fuksjonalitet. Det gjør at vi kan tenke på brettet som en to-dimensjonal liste om vi vil, eller som en Grid, slik vi allerede har brukt i oblig 1. Du kan bruke interfaces og klasser fra de tidligere oppgavene og din egen kode - men les dokumentasjonen godt, og endre kode eller kommentarer der du ser at det trengs. Dersom du vil bruke IGrid-interfacet, er det praktisk å bruke en av de senere utgavene som er generisk, slik at du kan ha et grid av brikker. + +## Brukergrensesnitt +Brukergrensesnittet er den delen av programmet som tar imot input fra "ekte" spillere (f.eks. du og gruppelederen din) og viser et output fra programmet. Typiske input er klikk-events eller streng-kommandoer; typiske output er å tegne brettet på i et grafikk-vindu eller ved hjelp av tegn og bokstaver i en terminal, og å fortelle spillerne hvem sin tur det er og om noen har vunnet. + +Du trenger ikke å lage et grafisk brukergrensesnitt, det holder med tekst-interaksjon. Det viktige er at denne delen av koden din er klart skilt ut fra resten og godt dokumentert. + +Hvis du vil sjekke om du har klart å skille koden for brukergrensesnittet klart fra resten (vi kaller det "modulær" kode) så kan du prøve å bytte ut brukergrensesnittet ditt med noen annens: dersom du har et fornuftig API til resten av programmet ditt bør det være relativt enkelt å koble noen andres brukergrensesnitt til resten av koden din, og på den måten endre én del av programmet uten å måtte endre kode som ikke har med input/output å gjøre. Du kan nok ikke bytte ut klassene direkte, men det bør gå an med litt jobb, og hvis dere blir enig om en lur måte å skrive interfacene på som dere har felles, kan dere bytte moduler uten å endre øvrig kode. + +*Det er ikke et krav for oppgaven å bytte kode med andre studenter, men hvis du får det til uten særlig mye arbeid ligger du sannsynligvis godt an.* + +### Tips til brukergrensesnitt +Du kan f.eks. +* ...bruke konsoll-I/O slik som i INF100, med `Scanner` og `System.out.println()`. +* ...kopiere grafikkbiblioteket vi har brukt i INF101, f.eks. fra [Semesteroppgave 1](https://retting.ii.uib.no/inf101.v18.oppgaver/inf101.v18.sem1/tree/master/src/inf101/v18/gfx). Grafikken kan tegnes som tekst (slik som i semesteroppgaven, og liknende til `System.out`), eller med skilpaddegrafikk eller shapes – se f.eks. hvordan endene er tegnet i [Lab 6](https://retting.ii.uib.no/inf101.v18.oppgaver/inf101.v18.lab6/blob/master/src/inf101/v18/pond/Duck.java). +* ...kopiere den klikkbare grid-GUIen fra [ekstraoppgaven om lyttere](https://retting.ii.uib.no/inf101.v18.oppgaver/inf101.v18.xtra.listeners); denne har vært brukt på tidligere INF101-obliger også. +* ...bruke [Swing](https://docs.oracle.com/javase/tutorial/uiswing/components/index.html) eller [JavaFX](https://docs.oracle.com/javase/8/javafx/get-started-tutorial/jfx-overview.htm) til å lage brukergrensesnitt (kan ta litt tid å sette seg inn i). Se f.eks. [JavaFX 8 GUI Tutorial](https://code.makery.ch/library/javafx-8-tutorial/) + +## Regler +Regler for Fire På Rad: + +* Spillere har hver sine brikker (f.eks. med forskjellige farger eller symboler) +* Spillere har hver sin tur til å legge ned brikker +* På sin tur skal spilleren velge en kolonne å slippe sin brikke ned i. +* (Implisitt regel: en brikke som slippes ned i en kolonne faller til den lander enten oppå en annen brikke eller på bunnen av brettet. Dette er ikke beskrevet i Fire på Rad-spillregler, men er en konsekvens av designet på brettet. Dere velger selv om dere vil vise det grafisk eller ikke, men det er viktig at ikke brikken blir liggende på toppen av kolonnen som er valgt, eller at spilleren får velge x og y-koordinater å legge brikken sin på.) +* Spillet stopper når en spiller vinner, ved å få *fire brikker ligger på rad, enten vannrett, loddrett eller diagonalt*. Dette kravet kalles ofte en [win condition](#win-condition) eller "victory condition": denne betingelsen må være oppfylt for at spillet skal være vunnet. + + +### Spillere +En ekte spiller (f.eks. du eller gruppelederen din) trenger en intern representasjon i programmet. Dette er abstraksjon av den ekte spilleren, så tenk over hva som har betydning å ha med. La deg gjerne inspirere av Player-klassen fra oblig 1. + +I tillegg til en vanlig spiller, må du kunne lage AI-spillere. Bruk gjerne et Spiller-interface som begge disse typene implementerer, og kanskje en felles superklasse dersom de ser ut til å dele oppførsel. Eventuelt kan AI-spiller arve fra Spiller. Vurder selv hvordan du vil gjøre det, og begrunn valget ditt. + +### Win Conditions +Du vinner spillet ved å ha fire brikker på rad: vannrett (-), loddrett (|) eller diabonalt(/ \). + +Man kan tenke seg at en annen versjon av spillet der man velger andre regler. Derfor ønsker vi å ha reglene innkapslet i en egen klasse; f.eks. ved at den har en metode som ser på et brett og avgjør om noen har vunnet. Dette gjør programmet mer modulært, og gjør at vi enklere kan gjenbruke resten av programmet til å lage spillet Fem på Rad, kun ved å bytte ut én objekt-type. Du trenger ikke lage Fem på Rad (enda), men du må lage en egen klasse for reglene slik at vi lettere kan utvide spillet dersom vi ønsker det. + +## Ekstra tips + +### Tips for å komme i gang +Vi har to forslag til hvordan du kan angripe oppgaven. + +Enten kan du tenke over hva som er essensielle egenskaper ved Fire på Rad, og hvordan du kan representere dem abstrakt. Du kan finne ut hvilke interfaces og klasser du tror du trenger, hvilke metoder og feltvariabler, og kanskje skrive tester for disse. Deretter kan du implementere abstraksjonen ("modellen") din. Se [modellerings-delen](https://retting.ii.uib.no/inf101.v18.oppgaver/inf101.v18.sem1/blob/master/SEM-1_DEL-A.md#oversikt-modellering) av Sem1 Del A for et eksempel til hvordan du kan gjøre og beskrive dette. + +Eller, så kan du skrive et fungerende monster-program i en eller to klasser, få det til å fungere, og deretter splitte det opp ([refaktorere](https://en.wikipedia.org/wiki/Code_refactoring)) til flere klasser, flere metoder, osv. + +Du kan også gjøre en miks av disse to tilnærmingene. + +### Tips for kjerne-programmet +Det er ofte forvirrende at vi må tenke på Spill som en abstraksjon av Fire på Rad (med brett, brikker og spillere), og på main-metoden i et program. Da kan det være nyttig å bruke to forskjellige klasser til det, feks en Main-klasse som starter programmet og initialiserer et Spill-objekt, og en Spill-klasse som er abstrakt og logisk og ikke har noen main-metode. + +Dersom Main og Spill er hver sine klasser, og du ønsker å implementere runder i en løkke, kan det være vanskelig å finne ut hva som skal skje hvor. For å hjelpe deg videre her, kan det være nyttig å sette seg med penn og papir og skrive ned: + +* nøyaktig hva skjer i løpet av en runde? +* hva har alle runder til felles? +* hva er annerledes under en AI-runde i forhold til en menneske-runde? +* hva skjer når spillet starter, men ikke hver runde? + +Siden alle runder (hver spiller sin) likner på hverandre, og alle hele spill (fra start til slutt) likner på hverandre, er det typisk at man lager en løkke for hver, og legger dem inni hverandre: + +```java +main(){ +loop until program should stop { + gjør ting som har med initialisering av spill-objekter; + loop per single game { + gjør ting som trengs for å starte spillet; + loop per round { + gjør ting som trengs per runde; + } + } +} +``` + +Vi skriver loop og mener en eller annen form for løkke (for, while, do-while): hvordan du vil skrive det finner du ut av selv (eller spør gruppelederen din). Dette er et godt sted å bruke Iteratorer. + +### Tips til bruk av INF101-konsepter +***Dette er ikke en sjekkliste du må oppfylle, og den er ikke komplett.*** Dette er en liste av INF101-konsepter som kan være nyttige og tips til hvordan å bruke dem. Du må sikkert bruke ting som ikke står på listen, og du kan gjerne la være å bruke ting fra listen dersom det ikke passer i koden din. + +* **Interfaces**. Det er naturlig at du bruker interface til å definere oppførselen til klassene dine. Der du kan bør du bruke interface-typen i stedet for klasse-typen. *Det gjør programmet ditt mer modulært og enklere å bytte ut kode.* +* **Arv**. Der du ser at objekter eller klasser deler oppførsel eller kode, kan du gjerne prøve å få til *gjenbruk av kode*. Det kan du gjøre ved at den ene arver fra den andre, eller at koden legges i en felles hjelper-klasse, eller abstrakt klasse. *Unntaket er hvis det bryter med abstraksjonen, altså virker ulogisk og rart.* +* **Factory**. Dersom du trenger å lage mange objekter av en klasse, eller du trenger veldig typiske objekter med mange ganger, kan det være praktisk å legge inn en Factory. Dersom du oppretter objektene bare av og til, og det er kun et konstruktør-kall som skal til, er det ofte ikke vits å bruke fabrikker. Men hvis oppretting av objekter fører til at du må legge inn "boilerplate" kode, at du gjentar f.eks. if-setninger for fargevalg, eller liknende, er det nyttig å legge det inn i en Factory. +* **Tester**. Test koden din så godt du kan. Se tidligere oppgaver for tips til hvordan. +* **Forkrav**. Legg inn forkrav i metoder og konstruktører der det er nyttig. +* **Datainvariant**. Legg gjerne inn datainvariant (sjekk på at feltvariablene har en gyldig kombinasjon av verdier) i klassene dine der du kan. Det vil hjelpe deg med debugging og regnes som en del av dokumentasjonen. +* **Datastrukturer**. Se Grid fra tidligere oppgaver. +* **Generisk type**. Datastrukturen din bør være generisk, og kanskje andre deler av programmet. +* **Iterator**. Du kan bruke iteratorer på mange måter her: du kan iterere over spillerne i runde-løkken; du kan iterere over brikker på brettet for å sjekke om noen har vunnet (det kan være litt vanskelig å implementere sånn); du kan du kan lagre tidligere spill og iterere over dem for å produsere en total poengsum; osv. +* **Enum?** Det er ikke sikkert du trenger enums, men de kan ofte være hendige (kanskje for brikker?) +* **Klassediagram**. Tegn gjerne et diagram over koden din. Det er veldig nyttig for din egen del, og gjerne også for gruppelederne. +* ***Abstraksjon***. Se egen seksjon. +* ***Innkapsling*** eller encapsulation. Pass på at du bruker private modifiers der du kan, og at du gjemmer vekk så mye som mulig av den indre tilstanden til klassene (feltvariabler, nøyaktig implementasjon). Det er nyttig å bruke interfaces til dette. + + +## Ekstra utfordringer +Dette er ikke krav til innleveringen, men forslag til videreutvikling. + +### Random Events +To mix things up a litte, the implementation can support the functionality of random events: These events are executed in each round with a certain probability and change the state of the game. Examples are the following (but it can be anything fun, be creative!): + +- Throwing 'blocker' tokens into a random column that keep both players to throw their tokens there. +- Looking at each token in the board and switching its owner with a certain probability. (I.e. some of the blue tokens become red and vice versa.) +- Switching the owners of tokens in a random (small) area of the board. +- Rotating the board. +- ... + + +### Modulært +Dersom du skriver programmet ditt modulært, er det lett å koble dine moduler sammen med andres og på den måten f.eks. bytte ut ditt brukergrensesnitt med noen andre sitt, eller koble noen andre sin AI til ditt spill. For å få dette til må du ha god enkapsulering, fornuftig navngiving og forståelig dokumentasjon. Husk at tester er en del av dokumentasjonen. + +For å få programmet modulært må det bestå av flere komponenter eller deler, der hver del implementeres separat fra kjerneprogrammet. Dette betyr ikke at dere trenger forskjellige prosjekter, men at kode-komponenter er klart adskilte (funksjonalitet for AI skal være begrenset til AI-modulen og ikke "lekke" inn i I/O-modulen. Spillets funksjonalitet og regler må ikke påvirkes av at man bytter ut modulen for I/O, osv. + +Siden vi ikke har gitt dere noen interface eller API å følge, er det usannsynlig at du har nøyaktig samme APIer som andre studenter. Derfor må dere nok jobbe litt for å koble modulene deres sammen. En måte å gjøre det på, er å skrive en "koblings-klasse" som oversetter mellom interfacene deres. Den må dere gjerne skrive sammen. Dette blir altså en ny klasse, som ikke finnes i noen av programmene fra før, og som har som jobb å "oversette" mellom forskjellige APIer. Det gjør at dere slipper å endre deres egen kode. + +Eventuelt kan dere bli enige om et felles interface, en *standard*, og følge denne begge to. + +Dersom du samarbeider med noen for å få dette til, skriv i README-filen hvem og hvordan. + +### Bedre AI +AI-spilleren kan gjøres smartere på mange måter. Du kan finne på dine egene strategier, f.eks. ved å ha en egen klasse for Strategi, og la AI-spillere spille mot hverandre. Hvis du gjør modul-delen over kan du la din AI-spiller konkurrere mot andres. + + +### Langton's Fire på Rad +Dersom du likte Langton's Ant fra ukesoppgaven, kan du slå sammen disse oppgavene. Da kan du la maur spille Fire på Rad mot hverandre, ved hjelp av celleautomat-regler. Dette er en litt annen form for AI, og blir nok litt vanskelig å implementere :) \ No newline at end of file diff --git a/inf101.v18.sem2.iml b/inf101.v18.sem2.iml new file mode 100644 index 0000000..b34dafb --- /dev/null +++ b/inf101.v18.sem2.iml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/inf101/v18/sem2/AppInfo.java b/src/inf101/v18/sem2/AppInfo.java new file mode 100644 index 0000000..2b5928c --- /dev/null +++ b/src/inf101/v18/sem2/AppInfo.java @@ -0,0 +1,35 @@ +package inf101.v18.sem2; + +import java.util.Arrays; +import java.util.List; + +public class AppInfo { + /** + * Your application name. + */ + public static final String APP_NAME = "Connect4"; + /** + * The main class, for starting the application + */ + public static final Class APP_MAIN_CLASS = null; // e.g., inf101.v18.sem2.Main.class + /** + * Your name. + */ + public static final String APP_DEVELOPER = "INF101-Student"; + /** + * A short description. + */ + public static final String APP_DESCRIPTION = "Semesteroppgave2"; + /** + * List of extra credits (e.g. for media sources) + */ + public static final List APP_EXTRA_CREDITS = Arrays.asList(// + /* "Graphics by Foo Bar" */ + ); + /** + * Help text. Could be used for an in-game help page, perhaps. + *

+ * Use \n for new lines, \f between pages (if multi-page). + */ + public static final String APP_HELP = "Help:\n"; +} From 6ec7678324b88f5b4c3f3484a2ff17e3d8e0acfa Mon Sep 17 00:00:00 2001 From: Anya Helene Bagge Date: Mon, 16 Apr 2018 01:42:09 +0200 Subject: [PATCH 2/4] fix todo --- SEM-2.md | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/SEM-2.md b/SEM-2.md index 274f600..97f354d 100644 --- a/SEM-2.md +++ b/SEM-2.md @@ -37,13 +37,11 @@ Sjekk ut koden fra: Du må gjerne (!) diskutere oppgaven med andre, men dere må skrive individuell kode. Dersom du samarbeider tett med noen så beskriv det i README-filen. -TODO: review - ## Programmet Målet med oppgaven er å skrive et spillbart program for 1-2 spillere, av Fire på Rad. Krav til programmet ditt er at: -* Det er spillbart, ut ifra [reglene](#reglene) til det tradisjonelle Fire på Rad. -* Det har et [brukergrensesnitt](#brukergrensesnitt): programmet skal kunne brukes av 1-2 "ekte" spillere, f.eks. du og gruppelederen din. For å kunne spille må kunne gi input til programmet, f.eks. ved hjelp av `Scanner`-objekt og `System.out.println`, eller ved hjelp av taster og grafikk eller et klikkbart grafisk grensesnitt. Dette er også den delen av programmet som viser hvordan brikkene er stilt opp og om noen har vunnet enda. +* Det er spillbart, ut ifra [reglene](SEM-2.md#reglene) til det tradisjonelle Fire på Rad. +* Det har et [brukergrensesnitt](SEM-2.md#brukergrensesnitt): programmet skal kunne brukes av 1-2 "ekte" spillere, f.eks. du og gruppelederen din. For å kunne spille må kunne gi input til programmet, f.eks. ved hjelp av `Scanner`-objekt og `System.out.println`, eller ved hjelp av taster og grafikk eller et klikkbart grafisk grensesnitt. Dette er også den delen av programmet som viser hvordan brikkene er stilt opp og om noen har vunnet enda. * Det er spillbart for kun én spiller: det vil si at du må ha en AI-spiller. Den trenger ikke være særlig intelligent, det holder at den gjør tilfeldige gyldige trekk. * Koden din viser tydelig, ved hjelp av objekt-orientering, klassenavn, interfaces, metodenavn og feltvariabler hvordan du har [abstrahert Fire på Rad-spillet](#spill-abstraksjon). Beskriv dette gjerne utfyllende i README-filen. @@ -68,7 +66,7 @@ Det er veldig nyttig å måtte [forklare](https://en.wikipedia.org/wiki/Rubber_d Videre i denne teksten beskriver vi typiske deler av programmet. Dersom du vil dele programmet ditt opp på en annen måte er helt greit: men ***forklar abstraksjonene dine i README-filen, uansett hva du velger å bruke***. Det er viktig at vi skjønner hva du har tenkt, og hvis noe er rart i koden din, kan en god forklaring redde deg fra unødig trekk. Se f.eks. forklaringene du har fått på utlevert kode tidligere for eksempler. -Hver del av programmet bør være så adskilt som mulig fra resten av koden. De kan f.eks. gjerne ligge i hver sine pakker, og prøv at de ikke kaller hverandre unødig mye. Les mer om [modulær](#modulær) kode under [Ekstra](#ekstra). +Hver del av programmet bør være så adskilt som mulig fra resten av koden. De kan f.eks. gjerne ligge i hver sine pakker, og prøv at de ikke kaller hverandre unødig mye. Les mer om [modulær](SEM-2.md#modulær) kode under [Ekstra](SEM-2.md#ekstra). ### Kjernen av programmet Programmet trenger en kjerne, som kontrollerer programflyten. Dette vil typisk være en klasse som knytter sammen de øvrige delene og som har en løkke der hver gjennomkjøring er én spillers runde. Les de neste seksjonene og kikk gjerne på koden fra Semesteroppgave 1 før du bestemmer deg for hvordan å sette opp ditt program. @@ -121,7 +119,7 @@ Regler for Fire På Rad: * Spillere har hver sin tur til å legge ned brikker * På sin tur skal spilleren velge en kolonne å slippe sin brikke ned i. * (Implisitt regel: en brikke som slippes ned i en kolonne faller til den lander enten oppå en annen brikke eller på bunnen av brettet. Dette er ikke beskrevet i Fire på Rad-spillregler, men er en konsekvens av designet på brettet. Dere velger selv om dere vil vise det grafisk eller ikke, men det er viktig at ikke brikken blir liggende på toppen av kolonnen som er valgt, eller at spilleren får velge x og y-koordinater å legge brikken sin på.) -* Spillet stopper når en spiller vinner, ved å få *fire brikker ligger på rad, enten vannrett, loddrett eller diagonalt*. Dette kravet kalles ofte en [win condition](#win-condition) eller "victory condition": denne betingelsen må være oppfylt for at spillet skal være vunnet. +* Spillet stopper når en spiller vinner, ved å få *fire brikker ligger på rad, enten vannrett, loddrett eller diagonalt*. Dette kravet kalles ofte en [win condition](SEM-2.md#win-condition) eller "victory condition": denne betingelsen må være oppfylt for at spillet skal være vunnet. ### Spillere From f608711564e5264a786ca08f91ecfe8ea215e414 Mon Sep 17 00:00:00 2001 From: Anya Helene Bagge Date: Mon, 16 Apr 2018 01:49:04 +0200 Subject: [PATCH 3/4] small fixes --- SEM-2.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/SEM-2.md b/SEM-2.md index 97f354d..dcf3ee3 100644 --- a/SEM-2.md +++ b/SEM-2.md @@ -1,7 +1,7 @@ # [Semesteroppgave 2: “Fire på rad”](https://retting.ii.uib.no/inf101.v18.sem2/blob/master/SEM-2.md) -* [README])(README.md) – for utfylling -* [Oppgavetekst](SEM-2.md) +* [README](README.md) – for utfylling +* **Oppgavetekst** ## Læringsmål - Å få erfaring med å ta egne designvalg, i stedet for å bare følge en oppskrift. @@ -35,7 +35,7 @@ Sjekk ut koden fra: * At navn på klasser, interfaces, metoder og variabler er fornuftige * Fornuftige abstraksjoner og innkapsling (bruk av klasser, interface, metoder, etc.) – forklart i README -Du må gjerne (!) diskutere oppgaven med andre, men dere må skrive individuell kode. Dersom du samarbeider tett med noen så beskriv det i README-filen. +Du må gjerne (!) diskutere oppgaven med andre, men dere må skrive individuell kode. Dersom du samarbeider tett med noen så beskriv det i README-filen. Se også om [code review under](SEM-2.md#code-review-feedback-p%C3%A5-hverandres-kode) ## Programmet Målet med oppgaven er å skrive et spillbart program for 1-2 spillere, av Fire på Rad. Krav til programmet ditt er at: @@ -58,7 +58,7 @@ Det er veldig nyttig å måtte [forklare](https://en.wikipedia.org/wiki/Rubber_d * Det er praktisk å gå gjennom ting muntlig: sitt rundt samme datamaskin, og forklar din egen kode til de andre (eller prøv å forstå og forklare noen andres kode!) – dere kan diskutere gode og dårlige løsninger, ideer til ting som kan gjøres annerledes eller forbedres osv. * Du kan også gi tilgang til repositoriet [slik du lærte i Lab 4](https://retting.ii.uib.no/inf101.v18.oppgaver/inf101.v18.lab4/blob/master/LAB-4-I_GIT.md#11-tilgang), og så kan dere prøve lese (og eventuelt kjøre) hverandres kode, og f.eks. gi tilbakemeldinger gjennom *Issues*-systemet i GitLab. -* **Viktig:** poenget med dette er å lære, og å forbedre innleveringene – for at det skal funke er det viktig å være positiv og konstruktiv når du gir tilbakemeldinger eller kommentarer (ellers er det ingen som tør å vise deg koden sin neste gang!) +* **Viktig:** poenget med dette er *å lære*, og *å forbedre* innleveringene – for at det skal funke er det viktig å være *positiv og konstruktiv* når du gir tilbakemeldinger eller kommentarer (ellers er det ingen som tør å vise deg koden sin neste gang!) * Det burde passe greit å gjøre dette en gang i løpet av den første uken, og så en gang til noen dager før innlevering. * Det er et eget punkt i [README-filen](README.md) som dere kan krysse av hvis dere prøver dere på en eller annen variant av “code review” – skrive gjerne også noen setninger om hva dere gjorde og hvordan det fungerte (lærte du noe? forbedret du noe?) @@ -66,7 +66,7 @@ Det er veldig nyttig å måtte [forklare](https://en.wikipedia.org/wiki/Rubber_d Videre i denne teksten beskriver vi typiske deler av programmet. Dersom du vil dele programmet ditt opp på en annen måte er helt greit: men ***forklar abstraksjonene dine i README-filen, uansett hva du velger å bruke***. Det er viktig at vi skjønner hva du har tenkt, og hvis noe er rart i koden din, kan en god forklaring redde deg fra unødig trekk. Se f.eks. forklaringene du har fått på utlevert kode tidligere for eksempler. -Hver del av programmet bør være så adskilt som mulig fra resten av koden. De kan f.eks. gjerne ligge i hver sine pakker, og prøv at de ikke kaller hverandre unødig mye. Les mer om [modulær](SEM-2.md#modulær) kode under [Ekstra](SEM-2.md#ekstra). +Hver del av programmet bør være så adskilt som mulig fra resten av koden. De kan f.eks. gjerne ligge i hver sine pakker, og prøv at de ikke kaller hverandre unødig mye. Les mer om [modulær](SEM-2.md#modulært) kode under [Ekstra](SEM-2.md#ekstra-utfordringer). ### Kjernen av programmet Programmet trenger en kjerne, som kontrollerer programflyten. Dette vil typisk være en klasse som knytter sammen de øvrige delene og som har en løkke der hver gjennomkjøring er én spillers runde. Les de neste seksjonene og kikk gjerne på koden fra Semesteroppgave 1 før du bestemmer deg for hvordan å sette opp ditt program. @@ -108,7 +108,7 @@ Hvis du vil sjekke om du har klart å skille koden for brukergrensesnittet klart ### Tips til brukergrensesnitt Du kan f.eks. * ...bruke konsoll-I/O slik som i INF100, med `Scanner` og `System.out.println()`. -* ...kopiere grafikkbiblioteket vi har brukt i INF101, f.eks. fra [Semesteroppgave 1](https://retting.ii.uib.no/inf101.v18.oppgaver/inf101.v18.sem1/tree/master/src/inf101/v18/gfx). Grafikken kan tegnes som tekst (slik som i semesteroppgaven, og liknende til `System.out`), eller med skilpaddegrafikk eller shapes – se f.eks. hvordan endene er tegnet i [Lab 6](https://retting.ii.uib.no/inf101.v18.oppgaver/inf101.v18.lab6/blob/master/src/inf101/v18/pond/Duck.java). +* ...kopiere grafikkbiblioteket vi har brukt i INF101, f.eks. fra [Semesteroppgave 1](https://retting.ii.uib.no/inf101.v18.oppgaver/inf101.v18.sem1/tree/master/src/inf101/v18/gfx). Grafikken kan tegnes som tekst (slik som i semesteroppgaven, og liknende til `System.out`), eller med skilpaddegrafikk eller shapes – se f.eks. hvordan endene er tegnet i [Lab 6](https://retting.ii.uib.no/inf101.v18.oppgaver/inf101.v18.lab6/blob/master/src/inf101/v18/pond/Duck.java). Se på [Main-klassen](https://retting.ii.uib.no/inf101.v18.oppgaver/inf101.v18.sem1/blob/master/src/inf101/v18/rogue101/Main.java) for oppsett (kan gjøres mye enklere enn i Sem1), og for å se hvordan du kan motta tastetrykk. * ...kopiere den klikkbare grid-GUIen fra [ekstraoppgaven om lyttere](https://retting.ii.uib.no/inf101.v18.oppgaver/inf101.v18.xtra.listeners); denne har vært brukt på tidligere INF101-obliger også. * ...bruke [Swing](https://docs.oracle.com/javase/tutorial/uiswing/components/index.html) eller [JavaFX](https://docs.oracle.com/javase/8/javafx/get-started-tutorial/jfx-overview.htm) til å lage brukergrensesnitt (kan ta litt tid å sette seg inn i). Se f.eks. [JavaFX 8 GUI Tutorial](https://code.makery.ch/library/javafx-8-tutorial/) From e31307eb015ce4a67ca5cbf51755ecb654024a62 Mon Sep 17 00:00:00 2001 From: Anna Maria Eilertsen Date: Mon, 16 Apr 2018 10:22:26 +0200 Subject: [PATCH 4/4] Update SEM-2.md --- SEM-2.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SEM-2.md b/SEM-2.md index dcf3ee3..a268518 100644 --- a/SEM-2.md +++ b/SEM-2.md @@ -184,7 +184,7 @@ Vi skriver loop og mener en eller annen form for løkke (for, while, do-while): * **Iterator**. Du kan bruke iteratorer på mange måter her: du kan iterere over spillerne i runde-løkken; du kan iterere over brikker på brettet for å sjekke om noen har vunnet (det kan være litt vanskelig å implementere sånn); du kan du kan lagre tidligere spill og iterere over dem for å produsere en total poengsum; osv. * **Enum?** Det er ikke sikkert du trenger enums, men de kan ofte være hendige (kanskje for brikker?) * **Klassediagram**. Tegn gjerne et diagram over koden din. Det er veldig nyttig for din egen del, og gjerne også for gruppelederne. -* ***Abstraksjon***. Se egen seksjon. +* ***Abstraksjon***. Se seksjonen for Spill-abstraksjon. * ***Innkapsling*** eller encapsulation. Pass på at du bruker private modifiers der du kan, og at du gjemmer vekk så mye som mulig av den indre tilstanden til klassene (feltvariabler, nøyaktig implementasjon). Det er nyttig å bruke interfaces til dette.