forked from menault/TD3_DEV51_Qualite_Algo
120 lines
4.4 KiB
Java
120 lines
4.4 KiB
Java
|
|
import javax.swing.*;
|
||
|
|
import java.awt.*;
|
||
|
|
|
||
|
|
class Affiche extends JComponent {
|
||
|
|
private int step = 0;
|
||
|
|
private boolean youWin = false;
|
||
|
|
|
||
|
|
public void setStep(int step) {
|
||
|
|
this.step = step;
|
||
|
|
repaint();
|
||
|
|
}
|
||
|
|
|
||
|
|
public void setYouWin(boolean value) {
|
||
|
|
this.youWin = value;
|
||
|
|
repaint();
|
||
|
|
}
|
||
|
|
|
||
|
|
@Override
|
||
|
|
protected void paintComponent(Graphics g) {
|
||
|
|
super.paintComponent(g);
|
||
|
|
|
||
|
|
if (isOpaque()) {
|
||
|
|
g.setColor(getBackground());
|
||
|
|
g.fillRect(0, 0, getWidth(), getHeight());
|
||
|
|
}
|
||
|
|
|
||
|
|
Graphics2D g2 = (Graphics2D) g.create();
|
||
|
|
g2.setStroke(new BasicStroke(3));
|
||
|
|
g2.setColor(Color.BLACK);
|
||
|
|
|
||
|
|
drawGallows(g2);
|
||
|
|
drawHangman(g2);
|
||
|
|
|
||
|
|
if (step >= 7) drawSkull(g2);
|
||
|
|
if (youWin) drawYouWinMessage(g2);
|
||
|
|
|
||
|
|
g2.dispose();
|
||
|
|
}
|
||
|
|
|
||
|
|
private void drawGallows(Graphics2D g2) {
|
||
|
|
// Base and vertical post
|
||
|
|
g2.drawLine(50, 350, 200, 350);
|
||
|
|
g2.drawLine(100, 350, 100, 50);
|
||
|
|
// Horizontal beam and rope
|
||
|
|
g2.drawLine(100, 50, 250, 50);
|
||
|
|
g2.drawLine(250, 50, 250, 100);
|
||
|
|
// Diagonal support
|
||
|
|
g2.drawLine(100, 100, 180, 50);
|
||
|
|
}
|
||
|
|
|
||
|
|
private void drawHangman(Graphics2D g2) {
|
||
|
|
int headX = 225, headY = 100, headDiam = 50;
|
||
|
|
int bodyX = headX + headDiam / 2, bodyYStart = headY + headDiam, bodyYEnd = bodyYStart + 100;
|
||
|
|
int armLength = 60;
|
||
|
|
int legLength = 70;
|
||
|
|
|
||
|
|
if (step >= 1) g2.drawOval(headX, headY, headDiam, headDiam); // head
|
||
|
|
if (step >= 2) g2.drawLine(bodyX, bodyYStart, bodyX, bodyYEnd); // body
|
||
|
|
if (step >= 3) g2.drawLine(bodyX, bodyYStart + 20, bodyX - armLength, bodyYStart + 20); // left arm
|
||
|
|
if (step >= 4) g2.drawLine(bodyX, bodyYStart + 20, bodyX + armLength, bodyYStart + 20); // right arm
|
||
|
|
if (step >= 5) g2.drawLine(bodyX, bodyYEnd, bodyX - 5, bodyYEnd + legLength); // left leg
|
||
|
|
if (step >= 6) g2.drawLine(bodyX, bodyYEnd, bodyX + 5, bodyYEnd + legLength); // right leg
|
||
|
|
|
||
|
|
if (step == 6) drawAura(g2, headX, headY, headDiam, bodyX, bodyYStart, bodyYEnd, armLength, legLength);
|
||
|
|
}
|
||
|
|
|
||
|
|
private void drawAura(Graphics2D g2, int headX, int headY, int headDiam, int bodyX, int bodyYStart, int bodyYEnd, int armLength, int legLength) {
|
||
|
|
g2.setColor(new Color(0, 0, 255, 100));
|
||
|
|
g2.setStroke(new BasicStroke(8, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));
|
||
|
|
g2.drawOval(headX, headY, headDiam, headDiam);
|
||
|
|
g2.drawLine(bodyX, bodyYStart, bodyX, bodyYEnd);
|
||
|
|
g2.drawLine(bodyX, bodyYStart + 20, bodyX - armLength, bodyYStart + 20);
|
||
|
|
g2.drawLine(bodyX, bodyYStart + 20, bodyX + armLength, bodyYStart + 20);
|
||
|
|
g2.drawLine(bodyX, bodyYEnd, bodyX - 5, bodyYEnd + legLength);
|
||
|
|
g2.drawLine(bodyX, bodyYEnd, bodyX + 5, bodyYEnd + legLength);
|
||
|
|
}
|
||
|
|
|
||
|
|
private void drawSkull(Graphics2D g2) {
|
||
|
|
int skullX = 225, skullY = 100, skullDiam = 50;
|
||
|
|
|
||
|
|
// Skull
|
||
|
|
g2.setColor(Color.BLACK);
|
||
|
|
g2.fillOval(skullX, skullY, skullDiam, skullDiam);
|
||
|
|
|
||
|
|
// Eyes
|
||
|
|
g2.setColor(Color.WHITE);
|
||
|
|
g2.fillOval(skullX + skullDiam / 5, skullY + skullDiam / 6, skullDiam / 5, skullDiam / 5);
|
||
|
|
g2.fillOval(skullX + 3 * skullDiam / 5, skullY + skullDiam / 6, skullDiam / 5, skullDiam / 5);
|
||
|
|
|
||
|
|
// Nose
|
||
|
|
g2.fillOval(skullX + skullDiam / 2 - skullDiam / 12, skullY + skullDiam / 2 - skullDiam / 12, skullDiam / 6, skullDiam / 6);
|
||
|
|
|
||
|
|
// Mouth
|
||
|
|
g2.setStroke(new BasicStroke(2));
|
||
|
|
g2.drawLine(skullX + skullDiam / 5, skullY + 2 * skullDiam / 3,
|
||
|
|
skullX + 4 * skullDiam / 5, skullY + 2 * skullDiam / 3);
|
||
|
|
|
||
|
|
// GAME OVER message
|
||
|
|
g2.setColor(Color.RED);
|
||
|
|
g2.setFont(new Font("Arial", Font.BOLD, 36));
|
||
|
|
String message = "GAME OVER";
|
||
|
|
FontMetrics fm = g2.getFontMetrics();
|
||
|
|
int textWidth = fm.stringWidth(message);
|
||
|
|
int xText = (getWidth() - textWidth) / 2;
|
||
|
|
int yText = skullY - 20;
|
||
|
|
g2.drawString(message, xText, yText);
|
||
|
|
}
|
||
|
|
|
||
|
|
private void drawYouWinMessage(Graphics2D g2) {
|
||
|
|
g2.setColor(Color.GREEN);
|
||
|
|
g2.setFont(new Font("Arial", Font.BOLD, 36));
|
||
|
|
String message = "YOU WIN";
|
||
|
|
FontMetrics fm = g2.getFontMetrics();
|
||
|
|
int textWidth = fm.stringWidth(message);
|
||
|
|
int xText = (getWidth() - textWidth) / 2;
|
||
|
|
int yText = 50;
|
||
|
|
g2.drawString(message, xText, yText);
|
||
|
|
}
|
||
|
|
}
|