Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • Wouter.Gravendeel/lab4
  • Henrik.Trondseth/lab-4-v-24
  • Njal.Nordal/lab4
  • Rein.Landmark/lab4
  • Erik.Vold/lab-4-v-24
  • Per.Broberg/lab4
  • Simon.Alvsaker/lab4
  • Fredrik.B.Hansen/lab4
  • Hannah.A.Solheim/lab4
  • Stian.Ha/lab4
  • Martin.Pedersen1/lab4
  • Jonas.Hasaas/lab4
  • Jakob.Berg/lab4
  • Emilie.Hamang/lab4
  • erlend.hontorp/lab4
  • jonas.sterud/lab4
  • Stefan.Asheim/lab4
  • Ingeborg.Navestad/lab4
  • antoine.hureau/lab4
  • ii/inf101/24v/students/lab4
  • Jonas.Justesen/lab4
  • stine.kristoffersen/lab4
  • Laura.Hollaseter/lab-4-grid
  • Alexander.Namdal/lab4
  • Martin.Andreassen/lab4
  • Tonning.Meling/lab4
  • herman.jakobsson/lab4
  • Anders.Tokje/lab4
  • Alfred.Thormodsater/lab4
  • Hakon.Molnes/lab4
  • Ferdinand.Gjessing-Haldorsen/lab-4-4
  • H.Hallerud/lab4
  • Daniel.Bjornstad/lab4
  • adil.obol/lab4
  • Diana.Carvajal/lab4
  • Magalie.Kalash/lab4
  • Amiley.Siidi/lab4
  • Tobias.Munch/lab4
  • ingeborg.lende/lab-4-v-24
  • Marcus.Osland-Rong/lab4
  • Markus.Halsvik/inf-101-lab-4
  • Espen.Svasand/lab-4-24
  • Goran.Kvitne/lab4
  • Isak.Graarud/lab4
44 results
Show changes
Commits on Source (13)
...@@ -17,4 +17,4 @@ I denne lab'en skal vi tegne et rutenett som vist over. Oppgaven består i hoved ...@@ -17,4 +17,4 @@ I denne lab'en skal vi tegne et rutenett som vist over. Oppgaven består i hoved
<br></br>-CellPositionToPixelConverter <br></br>-CellPositionToPixelConverter
<br></br>-drawGrid <br></br>-drawGrid
<br></br>-drawCells <br></br>-drawCells
6. [Bonusoppgave](./guide/09-bonus.md) 6. [Bonusoppgave](./guide/06-bonus.md)
\ No newline at end of file
...@@ -2,7 +2,7 @@ forrige &bullet; [oversikt](../README.md) &bullet; [neste](02-familiarize_with_c ...@@ -2,7 +2,7 @@ forrige &bullet; [oversikt](../README.md) &bullet; [neste](02-familiarize_with_c
## Anbefalte forberedelser ## Anbefalte forberedelser
* Laben antar at du har kjennskap til grunnleggende java, inkludert [grensesnitt](https://inf101.ii.uib.no/notat/grensesnitt/), [klasser og objekter](https://inf101.ii.uib.no/notat/objekter/). * Laben antar at du har kjennskap til grunnleggende java, inkludert [grensesnitt](https://inf101v23.stromme.me/notat/grensesnitt/), [klasser og objekter](https://inf101v23.stromme.me/notat/objekter/).
* Du bør ha skummet igjennom kursnotatene om [arv](https://inf101.ii.uib.no/notat/arv), men vi kommer ikke til å gå i dypden på dette i denne lab'en. * Du bør ha skummet igjennom kursnotatene om [arv](https://inf101v23.stromme.me/notat/arv/), men vi kommer ikke til å gå i dypden på dette i denne lab'en.
* I den utleverte koden dukker det opp to *record*-klasser. Du trenger ikke sette deg inn i mutabilitet for denne lab'en, men kursnotatene om dette inneholder også et [avsnitt om record-klasser](https://inf101.ii.uib.no/notat/mutabilitet/#record) hvor det er verdt å skumme gjennom eksempelet som demonstrerer bruken. * I den utleverte koden dukker det opp to *record*-klasser. Du trenger ikke sette deg inn i mutabilitet for denne lab'en, men kursnotatene om dette inneholder også et [avsnitt om record-klasser](https://inf101v23.stromme.me/notat/mutabilitet/#record) hvor det er verdt å skumme gjennom eksempelet som demonstrerer bruken.
* Kursnotatene om [grafikk](https://inf101.ii.uib.no/notat/grafikk) vil naturligvis være spesielt relevante, primært de tre første avsnittene om rammeverket, koordinatsystemet og grunnleggende figurer; men også hjelpemetoder, farger og adaptiv tegning blir adressert i lab'en. * Kursnotatene om [grafikk](https://inf101v23.stromme.me/notat/grafikk/) vil naturligvis være spesielt relevante, primært de tre første avsnittene om rammeverket, koordinatsystemet og grunnleggende figurer; men også hjelpemetoder, farger og adaptiv tegning blir adressert i lab'en.
\ No newline at end of file
...@@ -2,6 +2,6 @@ ...@@ -2,6 +2,6 @@
## Bli kjent med utlevert kode ## Bli kjent med utlevert kode
Undersøk filene i pakken `no.uib.inf101.colorgrid`, og besvar spørsmålene i `TextQuestions` ([link](./src/main/java/no/uib/inf101/colorgrid/TextQuestions.java)). Undersøk filene i pakken `no.uib.inf101.colorgrid`, og besvar spørsmålene i `TextQuestions` ([link](../src/main/java/no/uib/inf101/colorgrid/TextQuestions.java)).
✅ Du er klar til gå videre når alle testene i `TestTextQuestions` ([link](./src/test/java/no/uib/inf101/colorgrid/TestTextQuestions.java)) passerer. ✅ Du er klar til gå videre når alle testene i `TestTextQuestions` ([link](../src/test/java/no/uib/inf101/colorgrid/TestTextQuestions.java)) passerer.
\ No newline at end of file
...@@ -2,11 +2,14 @@ ...@@ -2,11 +2,14 @@
## Opprett rutenett av farger ## Opprett rutenett av farger
I denne oppgaven skal du lage klassen `ColorGrid` ([link](./src/main/java/no/uib/inf101/colorgrid/ColorGrid.java)). Den er nå helt tom. I denne oppgaven skal du lage klassen `ColorGrid` ([link](../src/main/java/no/uib/inf101/colorgrid/ColorGrid.java)). Den er nå helt tom.
* [ ] La klassen implementere grensesnittet `IColorGrid` <h2>I de følgende oppgavene vil du måtte tenke ut løsninger selv. Ikke alt vil stå 100% forklart.</h2>
* [ ] La klassen ha en konstruktør med to parametre: en int som beskriver antall rader, og en int som beskriver antall kolonner. Standard-verdien til en posisjon i rutenettet (før `set`-metoden har blitt kalt på gitt posisjon) skal være `null`.
* [ ] Fyll ut metodene du trenger i overenstemmelse med javadoc-kommentarene til `IColorGrid`. **TODO:**
* La klassen implementere grensesnittet `IColorGrid`
* La klassen ha en konstruktør med to parametre: en int som beskriver antall rader, og en int som beskriver antall kolonner. Standard-verdien til en posisjon i rutenettet (før `set`-metoden har blitt kalt på gitt posisjon) skal være `null`.
* Fyll ut metodene du trenger i overenstemmelse med javadoc-kommentarene til `IColorGrid`.
Du kan leke deg litt i `Main::main` for å sjekke for deg selv at klassen fungerer som du forventer. For eksempel: Du kan leke deg litt i `Main::main` for å sjekke for deg selv at klassen fungerer som du forventer. For eksempel:
...@@ -26,4 +29,4 @@ System.out.println(grid.get(new CellPosition(2, 1))); // forventer null ...@@ -26,4 +29,4 @@ System.out.println(grid.get(new CellPosition(2, 1))); // forventer null
``` ```
Husk å rydde opp etter deg i `Main::main` når du er ferdig! Husk å rydde opp etter deg i `Main::main` når du er ferdig!
✅ Du er klar til gå videre når alle testene i `TestColorGrid` ([link](./src/test/java/no/uib/inf101/colorgrid/TestColorGrid.java)) passerer. ✅ Du er klar til gå videre når alle testene i `TestColorGrid` ([link](../src/test/java/no/uib/inf101/colorgrid/TestColorGrid.java)) passerer.
\ No newline at end of file
...@@ -2,18 +2,18 @@ ...@@ -2,18 +2,18 @@
## Tegning ## Tegning
Ha kursnotatene om [grafikk](https://inf101.ii.uib.no/notat/grafikk) i bakhodet når du gjør denne oppgaven. Ha kursnotatene om [grafikk](https://inf101v23.stromme.me/notat/grafikk/) i bakhodet når du gjør denne oppgaven.
I `GridView`: **TODO: I `GridView`:**
* [ ] La klassen utvide `JPanel` * La klassen utvide `JPanel`
* [ ] La konstruktøren til `GridView` sette standard størrelse på lerretet til 400x300 piksler * La konstruktøren til `GridView` sette standard størrelse på lerretet til 400x300 piksler
* [ ] Overskriv metoden `public void paintComponent(Graphics g)`. Begynn med å kalle på super-metoden og opprett en Graphics2D -variabel fra g, slik som vist i kursnotatene om grafikk. * Overskriv metoden `public void paintComponent(Graphics g)`. Begynn med å kalle på super-metoden og opprett en Graphics2D -variabel fra g, slik som vist i kursnotatene om grafikk.
* [ ] Velg din favoritt-figur fra kursnotatene og tegn den i paintComponent (midlertidig, fjern den igjen når vi senere skal tegne rutenettet ) * Velg din favoritt-figur fra kursnotatene og tegn den i paintComponent (midlertidig, fjern den igjen når vi senere skal tegne rutenettet )
I `Main`: **TODO: I `Main`:**
* [ ] Opprett et `GridView` -objekt * Opprett et `GridView` -objekt
* [ ] Opprett et `JFrame` -objekt * Opprett et `JFrame` -objekt
* [ ] Kall `setContentPane` -metoden på JFrame-objektet med GridView-objektet som argument * Kall `setContentPane` -metoden på JFrame-objektet med GridView-objektet som argument
* [ ] Kall `setTitle`, `setDefaultCloseOperation`, `pack` og `setVisible` på JFrame-objektet etter mønster fra kursnotatene om grafikk. * Kall `setTitle`, `setDefaultCloseOperation`, `pack` og `setVisible` på JFrame-objektet etter mønster fra kursnotatene om grafikk.
✅ Du er klar til å gå videre hvis du ser tegningen din i et vindu når du kjører `Main`. ✅ Du er klar til å gå videre hvis du ser tegningen din i et vindu når du kjører `Main`.
\ No newline at end of file
...@@ -4,12 +4,13 @@ ...@@ -4,12 +4,13 @@
I `Main::main` skal vi nå opprette et rutenett, og gi det til `GridView`-konstruktøren som et argument ved opprettelse. Deretter skal vi endre GridView slik at den tegner dette rutenettet. I `Main::main` skal vi nå opprette et rutenett, og gi det til `GridView`-konstruktøren som et argument ved opprettelse. Deretter skal vi endre GridView slik at den tegner dette rutenettet.
* [ ] I `Main::main`, opprett et ColorGrid-objekt med 3 rader og 4 kolonner. Sett fargene i hjørnene til å være **TODO:**
* I `Main::main`, opprett et ColorGrid-objekt med 3 rader og 4 kolonner. Sett fargene i hjørnene til å være
* Rød i hjørnet oppe til venstre (posisjon (0, 0)) * Rød i hjørnet oppe til venstre (posisjon (0, 0))
* Blå i hjørnet oppe til høyre (posisjon (0, 3)) * Blå i hjørnet oppe til høyre (posisjon (0, 3))
* Gul i hjørnet nede til venstre (posisjon (2, 0)) * Gul i hjørnet nede til venstre (posisjon (2, 0))
* Grønn i hjørnet nede til høyre (posisjon (2, 3)) * Grønn i hjørnet nede til høyre (posisjon (2, 3))
* [ ] I `GridView`, legg til en parameter av typen `IColorGrid` i konstruktøren, og legg også til en instansvariabel av samme type. Initialiser feltvariabelen med argumentet gitt til konstruktøren. * I `GridView`, legg til en parameter av typen `IColorGrid` i konstruktøren, og legg også til en instansvariabel av samme type. Initialiser feltvariabelen med argumentet gitt til konstruktøren.
For å tegne rutenettet gjenstår det å endre på *paintComponent* -metoden. Vi skal benytte oss av tre hjelpemetoder for å tegne rutenettet. I *paintComponent* gjør vi et kall til For å tegne rutenettet gjenstår det å endre på *paintComponent* -metoden. Vi skal benytte oss av tre hjelpemetoder for å tegne rutenettet. I *paintComponent* gjør vi et kall til
...@@ -35,22 +36,22 @@ Men -- dette er ikke tilstrekkelig informasjon for å gjøre utregningen; vi tre ...@@ -35,22 +36,22 @@ Men -- dette er ikke tilstrekkelig informasjon for å gjøre utregningen; vi tre
Disse siste delene med informasjon vil ikke endre seg særlig fra kall til kall, men er en del av *konteksten* metoden kjører i. Slik kontekst er best beskrevet som feltvariabler. Disse siste delene med informasjon vil ikke endre seg særlig fra kall til kall, men er en del av *konteksten* metoden kjører i. Slik kontekst er best beskrevet som feltvariabler.
I klassen `CellPositionToPixelConverter`: **TODO: I klassen `CellPositionToPixelConverter`:**
* [ ] Opprett instansvariabler: * Opprett instansvariabler:
* En `Rectangle2D` -variabel `box` som beskriver innenfor hvilket område rutenettet skal tegnes * En `Rectangle2D` -variabel `box` som beskriver innenfor hvilket område rutenettet skal tegnes
* En `GridDimension` -variabel `gd` som beskriver størrelsen til rutenettet rutene vil være en del av * En `GridDimension` -variabel `gd` som beskriver størrelsen til rutenettet rutene vil være en del av
* En `double` kalt `margin` som beskriver hvor stor avstanden skal være mellom rutene * En `double` kalt `margin` som beskriver hvor stor avstanden skal være mellom rutene
* [ ] Opprett en konstruktør i klassen med tre parametre: en `Rectangle2D` -variabel, en `GridDimension` -variabel og en `double`. Initaliser feltvariablene med argumentene som mottas i konstruktøren. * Opprett en konstruktør i klassen med tre parametre: en `Rectangle2D` -variabel, en `GridDimension` -variabel og en `double`. Initaliser feltvariablene med argumentene som mottas i konstruktøren.
* [ ] Opprett metoden `getBoundsForCell` med en parameter av typen `CellPosition` (i figur under navgitt `cp`) og returtype `Rectangle2D`. * Opprett metoden `getBoundsForCell` med en parameter av typen `CellPosition` (i figur under navgitt `cp`) og returtype `Rectangle2D`.
Returverdien er et `Rectangle2D` -objekt. For å opprette dette objektet, må du regne ut fire verdier: x, y, bredde og høyde for den gitte ruten. Så kan du returnere et nytt `Rectangle2D.Double` -objekt med disse verdiene. Returverdien er et `Rectangle2D` -objekt. For å opprette dette objektet, må du regne ut fire verdier: x, y, bredde og høyde for den gitte ruten. Så kan du returnere et nytt `Rectangle2D.Double` -objekt med disse verdiene.
Illustrasjonen under visualiserer parameterne og resultatvariablene. Variabler i svart tekst er gitt som input eller er tilgjengelig som feltvariabler, mens variablene i rød kursiv tekst er de du skal regne ut og returnere. Illustrasjonen under visualiserer parameterne og resultatvariablene. Variabler i svart tekst er gitt som input eller er tilgjengelig som feltvariabler, mens variablene i rød kursiv tekst er de du skal regne ut og returnere.
![Illustrasjon av variabler som opptrer i getBoundsForCell](./img/getBoundsForCell.png) ![Illustrasjon av variabler som opptrer i getBoundsForCell](../img/getBoundsForCell.png)
Hint: **Hint:**
* Benytt `double` hvis du gjør regnestykker som involverer divisjon, da unngår du avrundingsfeil. * Benytt `double` hvis du gjør regnestykker som involverer divisjon, da unngår du avrundingsfeil.
* Ikke bland horisontale og vertikale verdier. Horsiontale begreper: x, bredde, kolonne. Vertikale begreper: y, høyde, rad. * Ikke bland horisontale og vertikale verdier. Horsiontale begreper: x, bredde, kolonne. Vertikale begreper: y, høyde, rad.
* Begynn med å regne ut *cellWidth* og *cellHeight*, og bruk verdiene du finner der for videre kalkulasjoner. * Begynn med å regne ut *cellWidth* og *cellHeight*, og bruk verdiene du finner der for videre kalkulasjoner.
...@@ -75,14 +76,15 @@ Hint: ...@@ -75,14 +76,15 @@ Hint:
Denne metoden i `GridView` skal ha et `Graphics2D` -objekt som parameter, og ikke ha noen returverdi. Planen er å først tegne en stor grå firkant, og så tegne selve rutene «oppå». Denne metoden i `GridView` skal ha et `Graphics2D` -objekt som parameter, og ikke ha noen returverdi. Planen er å først tegne en stor grå firkant, og så tegne selve rutene «oppå».
- [ ] Opprett et Rectangle2D -objekt med en fast 30 pikslers avstand til kanten på vinduet (se avsnitt om fast avstand til kantene på lerretet i kursnotater om [grafikk](https://inf101.ii.uib.no/notat/grafikk/#fast-avstand-til-kantene-på-lerretet)) **TODO:**
- Opprett et Rectangle2D -objekt med en fast 30 pikslers avstand til kanten på vinduet (se avsnitt om fast avstand til kantene på lerretet i kursnotater om [grafikk](https://inf101v23.stromme.me/notat/grafikk/#fast-avstand-til-kantene-p%C3%A5-lerretet))
* Det kan være lurt å lagre tallet som en konstant med et beskrivende navn (altså opprett en static final feltvariabel `private static final double OUTERMARGIN = 30;` og så bruke `OUTERMARGIN` i stedet for 30 når du kommer tilbake her) * Det kan være lurt å lagre tallet som en konstant med et beskrivende navn (altså opprett en static final feltvariabel `private static final double OUTERMARGIN = 30;` og så bruke `OUTERMARGIN` i stedet for 30 når du kommer tilbake her)
- [ ] Fyll rektangelet med gråfarge på lerretet. - Fyll rektangelet med gråfarge på lerretet.
* Det kan være lurt å lagre fargen som en konstant med et beskrivende navn (altså opprett en static final feltvariabel `private static final Color MARGINCOLOR = Color.LIGHT_GRAY;` og så bruke `MARGINCOLOR` i stedet for Color.LIGHT_GRAY når du kommer tilbake her) * Det kan være lurt å lagre fargen som en konstant med et beskrivende navn (altså opprett en static final feltvariabel `private static final Color MARGINCOLOR = Color.LIGHT_GRAY;` og så bruke `MARGINCOLOR` i stedet for Color.LIGHT_GRAY når du kommer tilbake her)
- [ ] Opprett et `CellPositionToPixelConverter` -objekt. - Opprett et `CellPositionToPixelConverter` -objekt.
* Hvilket objekt med typen GridDimension skal du bruke som argument ved opprettelsen? Har du et slik objekt liggende et sted allerede? * Hvilket objekt med typen GridDimension skal du bruke som argument ved opprettelsen? Har du et slik objekt liggende et sted allerede?
* Marginen skal være et fast tall; i eksempelillustrasjonen er tallet 30 blitt brukt. Det kan være lurt å lagre tallet som en konstant med et beskrivende navn. * Marginen skal være et fast tall; i eksempelillustrasjonen er tallet 30 blitt brukt. Det kan være lurt å lagre tallet som en konstant med et beskrivende navn.
- [ ] Gjør et kall til en hjelpemetoden `drawCells` beskrevet under - Gjør et kall til en hjelpemetoden `drawCells` beskrevet under
PS: Siden metoden benytter instansmetoder kan metoden *ikke* være static. Siden metoden ikke skal benyttes av noen utenfor `GridView` -klassen, bør metoden være *private*. PS: Siden metoden benytter instansmetoder kan metoden *ikke* være static. Siden metoden ikke skal benyttes av noen utenfor `GridView` -klassen, bør metoden være *private*.
......
...@@ -2,11 +2,11 @@ ...@@ -2,11 +2,11 @@
## Bonusoppgave ## Bonusoppgave
- [ ] La klassen `BeautifulPicture` i pakken `no.uib.inf101.bonus` utvide `JPanel` og tegn en vakker tegning med utgangspunkt i kursnotatene for grafikk. Benytt `Main` -klassen i samme pakke for å starte programmet. **TODO: La klassen `BeautifulPicture` i pakken `no.uib.inf101.bonus` utvide `JPanel` og tegn en vakker tegning med utgangspunkt i kursnotatene for grafikk.** Benytt `Main` -klassen i samme pakke for å starte programmet.
Det blir en liten premie til det peneste bildet. Jury'en legger vekt på: Det blir en liten premie til det peneste bildet. Jury'en legger vekt på:
* at bildet er vakkert, og * at bildet er vakkert, og
* at bildet er *adaptivt*, det vil si: tilpasser seg størrelsen på vinduet på en pen måte, og * at bildet er *adaptivt*, det vil si: tilpasser seg størrelsen på vinduet på en pen måte, og
* at koden er vakker å lese. * at koden er vakker å lese.
Du er oppfordret til å bruke rikelig med hjelpemetoder og eventuelt også flere klasser som kan hjelpe til med tegningen dersom det er hensiktsmessig. Du er oppfordret til å bruke rikelig med hjelpemetoder og eventuelt også flere klasser som kan hjelpe til med tegningen dersom det er hensiktsmessig.
\ No newline at end of file