TIPS bij Opdracht 2: painter

Plaats reactie
admin
Site Admin
Berichten: 39
Lid geworden op: 01-02-2017 08:45

TIPS bij Opdracht 2: painter

Bericht door admin » 16-02-2017 18:32

2a.

In de code van klasse painter zie je dit:
/**
* Put a dot in the current color on the current spot
* The width determines the size of the dot
*/

De code eronde zorgt er kennelijk voor dat er een stip vd active kleur op de huidige positie wordt gezet.
De methode heet paint() Tussen de haken komt de widthL: de grootte van de stip.

Deze methode moeten we dus aanroepen bij de turtle als ie beweegt.
Een simpele aanroep zoals paint(2); is voldoende binnen de act-methode

Probeer ook eens paint(1); of paint(10);
------------------------------------------------
2b.
Als je dus een r,g of b indrukt op je toetsenbord, moet de kleur veranderen.

A.
Bij de code van de klasse painter vindt je de methode public void setColor
Daar zie je dat er 4 kleuren worden gedefinieerd. De zwarte kleur doet
niet mee (want de achtergrond is zwart).

We moeten dus die code aanroepen.

B.
Ook moeten we met een isKeyDown gaan kijken of er een r,g of b toets
wordt ingedrukt. Bij de cat zag dat er zo uit: if (Greenfoot.isKeyDown("left"))
Nu gaan we de "left" dus vervangen door een r,g of b.


C.
In de code van painter wordt ook de huidige kleur met een variabele

gedefinieerd:

Color currentColor = Color.RED;
(Dus als de game begint is de kleur ingesteld op rood)

Dit alles gaan we middels een aparte methodedefinitie programmeren in de
klasse painter. (Er staat dat we dat in een aparte methode moeten doen. )

Dus zo:

public void veranderKleur()
{
if (Greenfoot.isKeyDown("r"))
{
currentColor = Color.RED;
}
if (Greenfoot.isKeyDown("g"))
{
currentColor = Color.GREEN;
}
if (Greenfoot.isKeyDown("b"))
{
currentColor = Color.BLUE;
}
}


Nu hebben we de methode gedefinieerd binnen de klasse painter.
Maar definieren doet verder niets, we moeten de mnethode ook nog
aanroepen. Dat doen we in de klasse turtle bij de act. Dit is heel simpel
en kun je als het goed is al lang. Doe dit. Werkt het?

---------------------------------------------------------------
2c.
De methodedefinitie voor het tekenen van een lijn zie je in de klasse

painter: public void paint(int width)

Als je dus een x drukt, moet dit gebeuren, bij een z niet.


De methode act van de turtle gaat in stapjes zoals je weet. Als je dit
zonder meer programmeert zou je bij elk stapje een toets (x of z) moeten
drukken. Dat is niet de bedoeling. Het is de bedoeling dat je maar 1x op
z drukt: dan wordt er blijvend GEEN lijn getekend.... todat je 1x op x
drukt, dan wordt er blijvend WEL een lijn getekend... enzovoort.
Bij elke stap moeten we dus eerst weten welke toets er voor het laatst
was ingedrukt (1 of meerdere stapjes geleden).

Hoe doen we dat? Bijvoorbeeld met een state! (wie heeft er een andere
oplossing? zet deze erbij!)
Denk aan de vorige opdracht met state 1 en 2 voor de turtle.

Oplossing:

Eerst de state (status) definieren. Laten we zeggen dat als je de x
indrukt, de status 1 is en als je de z indrukt de status 2 is. Die status
gaan we eerst definieren in de klasse Turtle (BUITEN de methodes).

// status voor wel/niet tekenen lijn
private int statusTekenen =1;

(de status is 1 aan het begin, dus er moet een lijn worden getekend)

We gebruiken hier "status" en geen "state" omdat ik wil dat jullie in je
PO in het nederlands de methoden definieren.

Als we de variabele statusTekenen hebben toegevoegd, is de volgende stap het definieren van de toetsen: als je de x indrukt, wordt de status 1 en
als je de z indrukt, wordt de status 2.

Er is al een methode: public void checkKeyPress () die andere toetsen
controleert. Daar zetten we het volgende bij/in:

if (Greenfoot.isKeyDown("x"))
{
statusTekenen = 1;
}
if (Greenfoot.isKeyDown("z"))
{
statusTekenen = 2;
}

Deze methodedefinitie zet de status op 1 of 2. We hoeven deze methode
verder niet aan te roepen bij de act.
Bij de act hoeven we nu alleen nog maar te controleren of de status 1 is.

Zo ja, dan tekenen.

Ziet er zo uit:

public void act()
{
veranderKleur();
checkKeyPress ();
if (statusTekenen ==1)
{
paint(1);
}
}


-------------------------------------------

2d.

Deze is niet moelijk. Vervang de getallen bij turn door de variabele.

Laat de - staan.


-------------------------------------------

2e.
Deze is niet moeilijk. Maar een variable aan, bijvoorbeeld: private int

lijnDikte = 1; En vervang dan het getal bij paint door de variabele.

Test het door het getal vd variabele aan te passen.

-------------------------------------------

2f.
Als 2c. gelukt is, is deze niet moeilijk. Breid de methode public void

checkKeyPress () uit met deze drie toetsen.

-------------------------------------------

2g.

Alles bij void act gaat in stapjes zoals je weet. Bij de void act moeten
we dus het aantal stappen steeds met 1 verhogen.
Eerst een variabele zetten bovenaan bij de turtle die het aantal stappen
aangeeft. Bijv.
private int aantalStappen = 0;

Dan bij de void act zetten dat het aantal stappen met 1 moet toenemen:
aantalStappen++;

Compile en run. Loop een stukje met de turtle. Zet op pauze, dan
rechtsklik op turtle, kies Inspect en bekijk de waarde van aantalStappen.

Verder lopen, weer pauzeren en weer inspecteren. Is de waarde toegenomen?

Dan is alles ok.

-------------------------------------------

2h.
Het wordt ongeveer zo:
public void checkAantalStappen()
{
if (aantalStappen == 1000)
{
setLocation (200,300);
}
}

Dan aanroepen bij de act. Dat kun je als het goed is al sinds onderwerp 4.

Plaats reactie