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.PenColors; import org.teachingextensions.logo.utils.EventUtils.MessageBox; import org.teachingextensions.logo.utils.EventUtils.MessageBox.MessageBoxInstance; import org.teachingextensions.logo.utils.LineAndShapeUtils.Paintable; public class HiLowQuizGrader implements Paintable { private boolean[] answers; public static int TURTLE_SPEED = 9; public static MessageBoxInstance MESSAGE_BOX = new MessageBoxInstance(); private HiLowQuiz quiz; private void displayScreen() { QuizUtils.prepareScoringScreen(answers, this, TURTLE_SPEED); drawRewardShape(); } @Override public void paint(Graphics2D g, JPanel caller) { QuizUtils.displayScores(g, 300, answers); } private void drawRewardShape() { int[] angles = {90, -90, -90, 135, -45, 90, 90, -135, 90, 135, -90, 90, 90, 90, -90, -90, -90, -90, -90, 90, 90, 90, -90, 90, 90, -90, -90, -90}; int[] lengths = {70, 85, 25, 43, 40, 18, 26, 50, 113, 25, 85, 40, 30, 30, 20, 20, 20, 10, 20, 10, 10, 20, 10, 10, 30, 30, 60, 183}; Tortoise.setX(20); Tortoise.setPenColor(PenColors.Greens.LawnGreen); for (int i = 0; i < lengths.length; i++) { Tortoise.turn(angles[i]); addChaos(); Tortoise.move(lengths[i]); } quiz.question3(); } private void addChaos() { reverseQuestion1(); quiz.question1(); reverseQuestion2(); quiz.question2(); reverseQuestion4(); quiz.question4(); } public void grade(HiLowQuiz quiz) { this.quiz = quiz; answers = new boolean[]{gradeQuestion1(), gradeQuestion2(), gradeQuestion3(), gradeQuestion4()}; displayScreen(); } private boolean gradeQuestion1() { return gradeQuestion1(115) && gradeQuestion1(114) && gradeQuestion1(116); } public boolean gradeQuestion1(int y) { TortoiseUtils.setTurtle(QuizUtils.createTestTurtle()); Tortoise.setY(y); Tortoise.setAngle(1); quiz.question1(); reverseQuestion1(); boolean passed = Tortoise.getAngle() == 1; return passed; } private void reverseQuestion1() { if (Tortoise.getY() == 115) { Tortoise.turn(-63); } } private boolean gradeQuestion2() { return gradeQuestion2(10, 30) && gradeQuestion2(50, 30) && gradeQuestion2(30, 30); } public boolean gradeQuestion2(int x, int y) { TortoiseUtils.setTurtle(QuizUtils.createTestTurtle()); Tortoise.setX(x); Tortoise.setY(y); Tortoise.setAngle(1); quiz.question2(); reverseQuestion2(); return Tortoise.getAngle() == 1; } private void reverseQuestion2() { if (Tortoise.getX() < Tortoise.getY()) { Tortoise.turn(54); } else { Tortoise.turn(-22); } } private boolean gradeQuestion3() { MessageBoxMock mock = new MessageBoxMock(); MessageBox.mock(mock); quiz.question3(); MessageBox.mock(MESSAGE_BOX); return "elcomeway omehay!".equals(mock.lastMessage); } private boolean gradeQuestion4() { return gradeQuestion4(25) && gradeQuestion4(75) && gradeQuestion4(50); } public boolean gradeQuestion4(int y) { TortoiseUtils.setTurtle(QuizUtils.createTestTurtle()); Tortoise.setAngle(1); Tortoise.setY(y); quiz.question4(); reverseQuestion4(); return Tortoise.getAngle() == 1; } private void reverseQuestion4() { if (Tortoise.getY() > 50) { Tortoise.turn(177); } } }