Skip to content

Commit f18a956

Browse files
committed
Deel van de instructie toegevoegd; het tekenen van de appel en de kop van de slang.
1 parent aeac503 commit f18a956

File tree

3 files changed

+81
-36
lines changed

3 files changed

+81
-36
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
# Instructie template
1+
# Javascript Snake
22

3-
Zie [index.md](index.md) voor instructies hoe deze template te gebruiken.
3+
De [instructie](index.md).
44

55
## Licentie
66
Deze instructies worden, net als alle andere instructies van CoderDojo Nijmegen, aangeboden onder een [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International Licentie](http://creativecommons.org/licenses/by-nc-sa/4.0/).

index.md

Lines changed: 68 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,39 @@ We gaan Snake bouwen voor in de browser.
1313

1414
## Introductie
1515

16+
![Snake op een Nokia](nokia-snake.png)
17+
18+
Snake is een mobiele video game [geïntroduceerd op een Nokia telefoon in 1998](https://en.wikipedia.org/wiki/Snake_(1998_video_game)).
19+
20+
### Spelregels
21+
Het doel van het spel Snake is om zoveel mogelijk fruit te eten (dit is je score).
22+
Hoe meer je eet, hoe langer de slang wordt en ook beweegt de slang sneller.
23+
Als de slang tegen zichzelf botst of buiten het scherm gaat is het game over.
24+
25+
Dus om Snake te bouwen moet het spel het volgende doen:
26+
27+
- Beweeg de slang met de pijltjestoetsen
28+
- Plaats op een willekeurige plek fruit
29+
- De slang moet het fruit kunnen eten
30+
- Als er fruit gegeten is moet de slang sneller bewegen
31+
- Als er fruit gegeten is moet de slang langer worden
32+
- Als er fruit gegeten is krijg je een punt
33+
- Als de slang tegen zichzelf botst, is het game over
34+
- Ook als de slang buiten het scherm gaat is het game over
35+
36+
Nu we de spelregels duidelijk hebben en weten wat het spel moet gaan doen, is het tijd om Snake te gaan bouwen!
37+
1638
## Wat heb je nodig?
1739

40+
Een text editor als [Visual Studio Code](https://code.visualstudio.com/) en natuurlijk een browser zoals Chrome.
41+
1842
## Instructie
1943

2044
### 1. HTML
2145

46+
We beginnen met de basis. Maak een nieuw bestand aan met bijvoorbeeld de naam `snake.html`. Kopieer en plak daarin
47+
onderstaande code. Als je het bestand opent in Chrome, zie je een groot vierkant.
48+
2249
```html
2350
<!DOCTYPE html>
2451
<html lang="en">
@@ -29,6 +56,7 @@ We gaan Snake bouwen voor in de browser.
2956
canvas {
3057
display: block;
3158
margin: 0 auto;
59+
border: 1px solid black;
3260
}
3361
</style>
3462
</head>
@@ -42,6 +70,8 @@ We gaan Snake bouwen voor in de browser.
4270

4371
### 2. Een appel
4472

73+
We gaan nu aan de slag met Javascript en beginnen met het tekenen van een appel:
74+
4575
Voeg toe op regel 17 in de vorige code:
4676
```html
4777
<script>
@@ -53,36 +83,51 @@ En tussen de `<script>` en `</script>` tags:
5383
const elemPlayground = document.getElementById("playground");
5484
const ctx = elemPlayground.getContext("2d");
5585

56-
const boxSize = 25;
57-
const foodSize = boxSize / 2 + 1;
58-
const numBoxes = elemPlayground.width / boxSize;
86+
const vakGrootte = 25;
87+
const appelGrootte = vakGrootte / 2 + 1;
88+
const aantalVakjes = elemPlayground.width / vakGrootte;
5989

60-
const food = { x: 0, y: 0 };
90+
const appel = { x: 0, y: 0 };
6191

62-
function drawFood() {
92+
function tekenAppel() {
6393
ctx.fillStyle = "red";
6494
ctx.beginPath();
65-
ctx.arc(food.x * boxSize + foodSize, food.y * boxSize + foodSize, foodSize, 0, 2 * Math.PI);
95+
ctx.arc(appel.x * vakGrootte + appelGrootte, appel.y * vakGrootte + appelGrootte, appelGrootte, 0, 2 * Math.PI);
6696
ctx.fill();
6797
}
6898

69-
drawFood();
99+
tekenAppel();
70100
```
71-
## Uitdagingen
72-
73-
> Te doen:
74-
> 1. Pas [FrontMatter](https://gohugo.io/content-management/front-matter/) aan boven in dit bestand.
75-
> - `title` naar een passende titel bij deze instructie
76-
> - `data` naar vandaag
77-
> - `onderwerp` naar de gebruikte techniek aanpassen, bijvoorbeeld Python (wordt gebruikt om te sorteren per onderwerp)
78-
> 2. Denk qua structuur aan:
79-
> - Introductie van het onderwerp
80-
> - Wat heb je nodig (programma's/materialen)
81-
> - De instructie zelf verdeelt over stappen; het is fijn als kinderen per stap al resultaat kunnen zien
82-
> - Afronding met bijvoorbeeld uitdagingen op basis van het geleerde en/of linkjes naar pagina's met nog meer informatie over het onderwerp
83-
> 3. Laat onderstaande licentie staan
84-
>
85-
> Bekijk [deze uitleg](https://github.com/coderdojonijmegen/hugo-coderdojo-nijmegen/blob/main/README.md) over hoe je kunt zien
86-
> hoe je instructies er uit zien in de site.
101+
Je ziet nu linksboven in het vierkant een rode cirkel: de appel.
102+
103+
We hebben best veel code nodig gehad, maar regels 1 t/m 8 zijn nodig ter voorbereiding van tekenen en de indeling van het vierkant
104+
in kleine vakjes van 25 bij 25 pixels.
105+
106+
`function tekenAppel()` tekent tenslotte de rode cirkel.
107+
108+
### 3. De kop van de slang
109+
110+
Voeg toe na regel `const appel = { x: 0, y: 0 };`:
87111

112+
```javascript
113+
const slang = [{ x: 10, y: 10 }];
114+
```
115+
116+
En dan voor regel `tekenAppel();`:
117+
118+
```javascript
119+
120+
function tekenSlang() {
121+
slang.forEach(slangDeel => {
122+
ctx.fillStyle = "green";
123+
ctx.fillRect(slangDeel.x * vakGrootte, slangDeel.y * vakGrootte, vakGrootte - 1, vakGrootte - 1);
124+
});
125+
}
126+
127+
```
128+
En na regel `tekenAppel();`:
129+
130+
```javascript
131+
tekenSlang();
132+
```
88133
{{< licentie rel="http://creativecommons.org/licenses/by-nc-sa/4.0/">}}

snake.html

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,9 @@ <h1>Snake <span id="gameState"></span></h1>
3232
const elemScore = document.getElementById("score");
3333
const ctx = elemPlayground.getContext("2d");
3434
let score = 0;
35-
const boxSize = 25;
36-
const foodSize = boxSize / 2 + 1;
37-
const numBoxes = elemPlayground.width / boxSize;
35+
const vakGrootte = 25;
36+
const appelGrootte = vakGrootte / 2 + 1;
37+
const aantalVakjes = elemPlayground.width / vakGrootte;
3838

3939
const slang = [{ x: 0, y: 0 }];
4040
const appel = { x: 0, y: 0 };
@@ -44,20 +44,20 @@ <h1>Snake <span id="gameState"></span></h1>
4444
function tekenSlang() {
4545
slang.forEach(part => {
4646
ctx.fillStyle = "green";
47-
ctx.fillRect(part.x * boxSize, part.y * boxSize, boxSize - 1, boxSize - 1);
47+
ctx.fillRect(part.x * vakGrootte, part.y * vakGrootte, vakGrootte - 1, vakGrootte - 1);
4848
});
4949
}
5050

5151
function tekenAppel() {
5252
ctx.fillStyle = "red";
5353
ctx.beginPath();
54-
ctx.arc(appel.x * boxSize + foodSize, appel.y * boxSize + foodSize, foodSize, 0, 2 * Math.PI);
54+
ctx.arc(appel.x * vakGrootte + appelGrootte, appel.y * vakGrootte + appelGrootte, appelGrootte, 0, 2 * Math.PI);
5555
ctx.fill();
5656
}
5757

5858
function nieuwePlaatsAppel() {
59-
appel.x = Math.floor(Math.random() * numBoxes);
60-
appel.y = Math.floor(Math.random() * numBoxes);
59+
appel.x = Math.floor(Math.random() * aantalVakjes);
60+
appel.y = Math.floor(Math.random() * aantalVakjes);
6161
}
6262

6363
function verplaatsSlang() {
@@ -82,13 +82,13 @@ <h1>Snake <span id="gameState"></span></h1>
8282
}
8383

8484
function heeftDeRandGeraakt() {
85-
const head = slang[0];
86-
return head.x < 0 || head.x >= numBoxes || head.y < 0 || head.y >= numBoxes;
85+
const slangenKop = slang[0];
86+
return slangenKop.x < 0 || slangenKop.x >= aantalVakjes || slangenKop.y < 0 || slangenKop.y >= aantalVakjes;
8787
}
8888

8989
function heeftZichzelfGeraakt() {
90-
const head = slang[0];
91-
return slang.slice(1).some(part => part.x === head.x && part.y === head.y);
90+
const slangenKop = slang[0];
91+
return slang.slice(1).some(part => part.x === slangenKop.x && part.y === slangenKop.y);
9292
}
9393

9494
function isGameOver() {

0 commit comments

Comments
 (0)