In eerdere units hebben we aandacht besteed aan het schrijven van functies.

We gaan nu eerst nog even flink oefenen met het maken van eigen functies.

Opdracht 1. mijnRobot(x,y)

Check je code uit U1 LA 3.4 of maak ‘m alsnog: maak een versie van je Robot U1 LA1.1 Maak een Robot maar nu als functie. Het ziet er ongeveer als volgt uit:

function setup() {
  createCanvas(400, 400);
  strokeWeight(5);
}

function draw() {
  background(220);
  fill(200, 0, 0);
  mijnRobot(mouseX, mouseY);
}
function mijnRobot(x, y) {
  rect(x, y, 200);
  // 100 100
  ellipse(x, y, 50, 50); // linker oor
  ellipse(x + 200, y, 50, 50); // rechter oor
  fill(255, 255, 255);
  ellipse(x + 45, y + 65, 20, 20); // linkeroog
  ellipse(x + 155, y + 65, 20, 20); // rechteroog
  ellipse(x + 100, y + 90, 10, 10); // neus
  ellipse(x + 100, y + 150, 60, 30); // mond
}

Let op de aanroep van mijnRobot() in de draw(). Jouw opdracht is om nu jouw robot te maken in de functie mijnRobot, in plaats van de mijne. Kijk goed hoe je omgaat met die x en y parameters. Je moet een nieuw nulpunt kiezen, een punt ten opzichte waarvan je de robot neerzet. Bij mij is dat het linkeroor, ofwel ellipse(x, y, 50, 50) die oorspronkelijk op (100,100) stond.

Opdracht 2. Maak een rij tanden

In zijn halfronde mond passen zeker 10 tanden, 5 op de onderrij en 5 als bovengebit. Maak hiervoor een functie mijnTand(x,y,b, c). De x en y spreken voor zich. De b parameter is de breedte van de tand. Dan kun je daar makkelijk een beetje mee spelen. De c parameter is voor color.

Na het plaatsen van de 10 tanden (dus je roept 10x die functie aan met andere parameters) teken je pas de mond zelf, zodat deze er overheen valt. Eerst noFill() aanzetten denk ik!

Opdracht 3. Klik op mijn tand

Lees nu deze pagina in het boek van Jeffrey Thompson: http://www.jeffreythompson.org/collision-detection/point-rect.php. Die legt uit hoe je het klikken op een bepaald punt kunt detecteren met een eigen functie.

Maak nu jouw versie van deze functie, die een return waarde terug gaat geven van het type boolean: er is op geklikt TRUE or FALSE.

Gebruik de code van Jeffery uit zijn functie pointRect en maak daarmee een eigen functie (jatwerk) als deze.

boolean klikTand(float px, float py, float rx, float ry, float hr) {
// dank aan Jeffrey Thompson: 
// http://www.jeffreythompson.org/collision-detection/point-rect.php. 

// jouw code hier


}

// ergens in de draw
if (klikTand(.... de coördinaten van je eerste tand)) {
  mijntand( in het rood) 
} else {
mijnTand( in het zwart) 
}