package org.teachingkidsprogramming.recipes.quizzes.graders;
import java.awt.Graphics2D;
import javax.swing.JPanel;
import org.teachingextensions.approvals.lite.util.NumberUtils;
import org.teachingextensions.logo.Tortoise;
import org.teachingextensions.logo.Turtle;
import org.teachingextensions.logo.utils.TortoiseUtils;
import org.teachingextensions.logo.utils.ColorUtils.PenColors;
import org.teachingextensions.logo.utils.LineAndShapeUtils.Paintable;
public class HousesQuizGrader implements Paintable
{
private boolean[] answers;
public static int TURTLE_SPEED = 9;
private HousesQuizAdapter quiz;
private void displayScreen()
{
QuizUtils.prepareScoringScreen(answers, this, TURTLE_SPEED);
drawRewardShape();
}
public void grade(HousesQuizAdapter quiz)
{
this.quiz = quiz;
answers = new boolean[]{grade1Small(),
grade2Medium(),
grade3Large(),
grade4moveTheLength(),
grade5turnTheCorner(),
grade6drawASide()};
displayScreen();
}
@Override
public void paint(Graphics2D g, JPanel caller)
{
QuizUtils.displayScores(g, 300, answers);
}
public void drawRewardShape()
{
TortoiseUtils.setOrientation(100, 75, 90);
for (int i = 0; i < 6; i++)
{
drawTriangle();
}
}
private boolean grade1Small()
{
quiz.question1();
return 7 == quiz.length;
}
private boolean grade2Medium()
{
quiz.question2();
return 21 == quiz.length;
}
private boolean grade3Large()
{
quiz.question3();
return 63 == quiz.length;
}
private boolean grade4moveTheLength()
{
Turtle turtle = QuizUtils.createTestTurtle();
TortoiseUtils.setTurtle(turtle);
TortoiseUtils.setOrientation(0, 0, 90);
quiz.length = -3;
quiz.question4();
return NumberUtils.equals(TortoiseUtils.getTurtle().getX(), -3, 0.005);
}
private boolean grade5turnTheCorner()
{
int angle = NumberUtils.getRandomInt(130, 300);
Turtle turtle = QuizUtils.createTestTurtle();
TortoiseUtils.setTurtle(turtle);
turtle.setAngleInDegrees(angle);
quiz.question5();
return NumberUtils.equals(turtle.getAngleInDegrees(), angle + (-360.0 / 3), 0.005);
}
private boolean grade6drawASide()
{
int angle = 180;
Turtle turtle = QuizUtils.createTestTurtle();
TortoiseUtils.setTurtle(turtle);
TortoiseUtils.setOrientation(0, 0, angle);
quiz.length = -3;
quiz.question6();
boolean move = NumberUtils.equals(TortoiseUtils.getTurtle().getY(), -3, 0.005);
boolean turn = NumberUtils.equals(turtle.getAngleInDegrees(), angle + (-360.0 / 3), 0.005);
return move && turn;
}
private void drawTriangle()
{
Tortoise.setPenUp();
quiz.question2();
quiz.question3();
Tortoise.move(quiz.length);
Tortoise.setPenDown();
quiz.question5();
for (int i = 0; i < 2; i++)
{
Tortoise.setPenWidth(3);
Tortoise.setPenColor(PenColors.Purples.Lavender);
quiz.question3();
quiz.question4();
Tortoise.turn(180);
quiz.question4();
Tortoise.turn(180);
drawSmallerLine();
quiz.question5();
}
Tortoise.setPenUp();
quiz.question3();
quiz.question4();
Tortoise.setPenDown();
Tortoise.turn(180);
quiz.question5();
}
private void drawSmallerLine()
{
moveMedium();
Tortoise.turn(360.0 / 6);
moveMedium();
quiz.question5();
moveMedium();
quiz.question5();
Tortoise.turn(180);
moveMedium();
}
private void moveMedium()
{
quiz.question2();
Tortoise.setPenWidth(2);
Tortoise.setPenColor(PenColors.Blues.LightBlue);
quiz.question4();
Tortoise.turn(180);
quiz.question4();
Tortoise.turn(180);
drawSmallestLine();
}
private void drawSmallestLine()
{
Tortoise.setPenWidth(1);
Tortoise.setPenColor(PenColors.Blues.PowderBlue);
quiz.question1();
quiz.question4();
Tortoise.turn(360.0 / 6);
quiz.question6();
quiz.question6();
Tortoise.turn(180);
quiz.question4();
}
}