package org.teachingkidsprogramming.recipes.quizzes.graders;
import java.awt.Graphics2D;
import javax.swing.JPanel;
import org.teachingextensions.logo.Tortoise;
import org.teachingextensions.logo.utils.TortoiseUtils;
import org.teachingextensions.logo.utils.ColorUtils.ColorWheel;
import org.teachingextensions.logo.utils.ColorUtils.PenColors;
import org.teachingextensions.logo.utils.LineAndShapeUtils.Paintable;
public class SpiderWebQuizGrader implements Paintable
{
public static int TURTLE_SPEED = 10;
private boolean[] answers;
private SpiderQuiz quiz;
private boolean mock;
private int circleCount;
private int adjustCount;
private int angle = -15;
private void displayScreen()
{
QuizUtils.prepareScoringScreen(answers, this, TURTLE_SPEED);
drawRewardShape();
}
private void drawRewardShape()
{
initialize(quiz);
quiz.question1();
quiz.circleAround();
Tortoise.hide();
}
public void initialize(SpiderQuiz quiz)
{
mock = false;
TortoiseUtils.setOrientation(150, 200, 0);
Tortoise.setPenWidth(15);
ColorWheel.removeAllColors();
ColorWheel.addColor(PenColors.Grays.Black);
ColorWheel.addColor(PenColors.Whites.White);
Tortoise.getBackgroundWindow().setBackground(PenColors.Grays.Silver);
quiz.number = 16;
quiz.length = 15;
}
public void grade(SpiderQuiz quiz)
{
quiz.grader = this;
this.quiz = quiz;
answers = new boolean[]{gradeQuestion1(), grade2CircleAround(), grade3Grow(), grade4Shrink(), grade5Expand()};
displayScreen();
}
private boolean gradeQuestion1()
{
mock = true;
circleCount = 0;
quiz.number = 11;
quiz.question1();
return circleCount == 11;
}
private boolean grade2CircleAround()
{
mock = true;
circleCount = 0;
adjustCount = 0;
quiz.number = 4;
quiz.circleAround();
return adjustCount == 3 && circleCount == 12;
}
private boolean grade3Grow()
{
quiz.length = 10.0;
quiz.grow();
return quiz.length == 25.0;
}
private boolean grade4Shrink()
{
quiz.length = -10;
quiz.shrink();
return quiz.length == -19;
}
private boolean grade5Expand()
{
quiz.number = -112;
quiz.expand();
return quiz.number == -100;
}
@Override
public void paint(Graphics2D g, JPanel caller)
{
QuizUtils.displayScores(g, 400, answers);
}
public void circle(SpiderQuiz quiz)
{
if (mock)
{
circleCount++;
}
else
{
Tortoise.setPenColor(ColorWheel.getNextColor());
Tortoise.turn(angle);
Tortoise.move(quiz.length);
Tortoise.setPenUp();
Tortoise.move(-quiz.length);
Tortoise.turn(-angle);
Tortoise.move(quiz.length);
quiz.shrink();
Tortoise.move(quiz.length);
quiz.grow();
Tortoise.setPenDown();
Tortoise.turn(360.0 / quiz.number);
}
}
public void adjust()
{
if (mock)
{
adjustCount++;
}
else
{
angle *= -1;
Tortoise.setPenColor(ColorWheel.getNextColor());
Tortoise.turn(-90);
Tortoise.setPenUp();
Tortoise.move(42);
Tortoise.setPenDown();
Tortoise.turn(90);
quiz.expand();
}
}
}