package org.teachingkidsprogramming.recipes.quizzes.graders;
import java.awt.Font;
import java.awt.Graphics2D;
import javax.swing.JPanel;
import org.teachingextensions.logo.Tortoise;
import org.teachingextensions.logo.utils.ColorUtils.PenColors;
import org.teachingextensions.logo.utils.LineAndShapeUtils.Paintable;
import org.teachingextensions.logo.utils.MVCUtils.Parser;
import org.teachingkidsprogramming.recipes.quizzes.graders.AdLibsQuizAdapter.Pieces;
public class AdLibsQuizGrader implements Paintable
{
private static class Model
{
@SuppressWarnings("unused")
public String three;
public Model(String three)
{
this.three = three;
}
}
private boolean[] answers;
public static int TURTLE_SPEED = 9;
private AdLibsQuizAdapter quiz;
private void displayScreen()
{
QuizUtils.prepareScoringScreen(answers, this, TURTLE_SPEED);
}
public void grade(AdLibsQuizAdapter quiz)
{
this.quiz = quiz;
answers = new boolean[]{grade1You(), grade2Won(), grade3The(), grade4Game()};
displayScreen();
}
@Override
public void paint(Graphics2D g, JPanel caller)
{
QuizUtils.displayScores(g, 300, answers);
Tortoise.hide();
drawRewardShape(g);
}
public void drawRewardShape(Graphics2D g)
{
drawYou(g);
drawWin(g);
drawThe(g);
drawGame(g);
}
private void drawGame(Graphics2D g)
{
quiz.template4 = "";
Pieces pieces = new Pieces();
quiz.question4(pieces);
pieces.middle = "am";
String word = Parser.parse(quiz.template4, pieces);
drawWord(g, word, 0, 4, true);
}
private void drawThe(Graphics2D g)
{
quiz.word3 = "";
Pieces model = new Pieces();
model.middle = "H";
quiz.question3("T{middle}E", model);
drawWord(g, quiz.word3, 3, 2, false);
}
private void drawWin(Graphics2D g)
{
quiz.word2 = "WO";
quiz.question2("n");
drawWord(g, quiz.word2, 1, 0, false);
}
private void drawWord(Graphics2D g, String word, int x, int y, boolean horizontal)
{
char[] letters = word.toUpperCase().toCharArray();
int dx = horizontal ? 1 : 0;
int dy = horizontal ? 0 : 1;
for (int i = 0; i < letters.length; i++)
{
char c = letters[i];
drawLetter(getPosition(x + dx * i), getPosition(y + dy * i), c, g);
}
}
private int getPosition(int i)
{
return 100 + i * 53;
}
private void drawYou(Graphics2D g)
{
quiz.word1 = "NOT";
quiz.question1("y", "u");
drawWord(g, quiz.word1, 0, 1, true);
}
private void drawLetter(int x, int y, char c, Graphics2D g)
{
g.setColor(PenColors.Browns.BurlyWood);
g.drawRect(x, y, 50, 50);
g.setFont(new Font(Font.SANS_SERIF, Font.BOLD, 36));
int charWidth = g.getFontMetrics().charWidth(c);
int charHeight = g.getFontMetrics().getAscent();
int textY = y + (40 - charHeight) / 2 + charHeight;
int textX = x + (50 - charWidth) / 2;
g.drawString("" + c, textX, textY);
}
private boolean grade1You()
{
quiz.word1 = "fake";
quiz.question1("f", "o");
return "foo".equals(quiz.word1);
}
private boolean grade2Won()
{
quiz.word2 = "passe";
quiz.question2("d");
return "passed".equals(quiz.word2);
}
private boolean grade3The()
{
quiz.word3 = "fake";
quiz.question3("12{three}4", new Model("3"));
return "1234".equals(quiz.word3);
}
private boolean grade4Game()
{
quiz.template4 = "fake";
quiz.question4(new Pieces());
return "g{middle}e".equals(quiz.template4);
}
}