README.md 2.76 KB
Newer Older
Torstein Strømme's avatar
Torstein Strømme committed
1
# Semesteroppgave 1
Torstein Strømme's avatar
Torstein Strømme committed
2

Torstein Strømme's avatar
Torstein Strømme committed
3
4
5
Denne oppgaven har vi allerede fork'et for deg. Du kan finne din kopi her: [https://git.app.uib.no/ii/inf101/22v/assignments/](https://git.app.uib.no/ii/inf101/22v/assignments/).

Det er noen få studenter vi ikke har klart å få tak i riktig brukernavn til. Dersom du ikke finner din kopi av semesteroppgave 1 på linken over, gi beskjed til Sondre Bolland så fort som mulig.
Torstein Strømme's avatar
Torstein Strømme committed
6

Torstein Strømme's avatar
Torstein Strømme committed
7

Torstein Strømme's avatar
Torstein Strømme committed
8
9
# Ekstra tips

Torstein Strømme's avatar
Torstein Strømme committed
10
11
Vi samler her tips og hint som vi oppdager underveis har verdi for flere.

Torstein Strømme's avatar
Torstein Strømme committed
12
13
14
Et UML-diagram av Torstein sin eksempel-løsning: [tetris-uml.pdf](./tetris-uml.pdf). Merk at (som klassediagrammer flest) er det mye som er utelatt, men et subjektivt utvalg av de viktigste feltvariablene, metodene og sammenhengene er inkludert. Det er forsøkt at utgående piler til høyre er "har" -forhold ("A har en B"), mens utgående piler oppover er et "er" -forhold via arv eller implementasjon av grensesnitt ("A er en B").


Torstein Strømme's avatar
Torstein Strømme committed
15
### Steg 1 (grid)
Torstein Strømme's avatar
Torstein Strømme committed
16

Torstein Strømme's avatar
Torstein Strømme committed
17
- Tips: ikke benytt en native array (f. eks. `T[][]`) for å representere grid'et. Generics og native array samtidig vil generere warnings, og du mister typesikkerhet. I stedet bør du benytte en List, for eksempel `ArrayList<ArrayList<T>>`.
Torstein Strømme's avatar
Torstein Strømme committed
18
19
20
21
22
23
24
25
26
27
28

- Tips: en klasse kan ha to konstruktører, så lenge signaturene (altså hvilke typer parametrene har) er ulike. Det er mulig å kalle én konstruktør fra en annen. For eksempel, en klasse `AClass` kan ha en konstruktør `AClass(int, boolean)` og en annen konstruktør `AClass(int)`. Den sistnevnte konstruktøren kan for eksempel implementeres slik:

```java
AClass(int x) {
    this(x, false);
}
```

I eksempelet gjør den andre konstruktøren et kall til den første konstruktøren med en "standard" verdi (i.e. `false`).

Torstein Strømme's avatar
Torstein Strømme committed
29
### Steg 5 (rotasjon)
Torstein Strømme's avatar
Torstein Strømme committed
30

Torstein Strømme's avatar
Torstein Strømme committed
31
- Det finnes ulike standarder for hvordan brikken skal rotere, og avhengig av hvordan man implementerer `PieceShape`, kan noen former for rotasjon være enklere å implementere. Dersom `boolean[][]` som representerer fasongen i PieceShape alltid er kvadratisk, vil det ikke være nødvendig å flytte brikken tilbake til "sentrum" i rotasjonssteget. Ulempen er at vi må gjøre litt mer arbeid for å sikre at brikken plasseres øverst på brettet når den blir laget. Begge varianter vil bli godtatt, så lenge rotasjonen fremstår som pen (rundt ca midten av seg selv) og uten å drifte etter fire rotasjoner.
Torstein Strømme's avatar
Torstein Strømme committed
32

Torstein Strømme's avatar
Torstein Strømme committed
33
34
35

# Errata

Torstein Strømme's avatar
Torstein Strømme committed
36
Her samler vi feil i guiden som vi oppdager underveis.
Torstein Strømme's avatar
Torstein Strømme committed
37
38

### Steg 3 (tegne brikken)
Torstein Strømme's avatar
Torstein Strømme committed
39
40

- Bildet som viser koordinatene har en trykkfeil på selve bildet: koordinatene skal være (2, 1), (3, 1), (3, 2) og (3, 3) (som oppgitt i teksten). På bildet er koordinatet (3, 2) oppgitt to ganger, den lengst til venstre av dem skal egentlig være (3, 1).
Torstein Strømme's avatar
Torstein Strømme committed
41

Torstein Strømme's avatar
Torstein Strømme committed
42
### Steg 5 (rotasjon)
Torstein Strømme's avatar
Torstein Strømme committed
43
44

- Her gjøres en referanse til en klasse `Piece`. Det som egentlig menes er `PieceShape`.