Share Pastebin
Guest
Public paste!

wwwvaniomeurercombr

By: a guest | Nov 12th, 2009 | Syntax: Java | Size: 5.78 KB | Hits: 516 | Expires: Never
Copy text to clipboard
  1. import java.awt.Color;
  2. import java.awt.EventQueue;
  3. import java.awt.Graphics;
  4. import java.awt.Graphics2D;
  5. import java.awt.geom.Ellipse2D;
  6. import java.awt.geom.GeneralPath;
  7. import java.awt.geom.QuadCurve2D;
  8. import java.awt.geom.Rectangle2D;
  9.  
  10. import javax.swing.JFrame;
  11.  
  12. /**
  13.  * Pintando fantasminha do PacMan com Java 2D.
  14.  *
  15.  * @author Vānio Meurer
  16.  * @since 10/11/2009 11:38:12
  17.  */
  18. public class FantasmaPacMan extends JFrame {
  19.  
  20.         private static final long serialVersionUID = 8366583475473482894L;
  21.  
  22.         private final static int TAMANHO_X = 100;
  23.         private final static int TAMANHO_Y = 50;
  24.         private final static int TAMANHO_X_PATA = 20;
  25.         private final static int TAMANHO_Y_PATA = 50;
  26.         private final static int DISTANCIA_X_PATA = 6;
  27.         private final static int RAIO_OLHO = 13;
  28.         private final static int RAIO_OLHO_CRISTALINO = 5;
  29.         private final static int DISTANCIA_X_OLHOS = (RAIO_OLHO << 1) + 10;
  30.  
  31.         private final static int EFEITO_ELLIPSE = 23;
  32.         private final static int EFEITO_ELLIPSE_PATA = 10;
  33.  
  34.         public FantasmaPacMan() {
  35.  
  36.                 super("Fantasminha Pac Man");
  37.                 this.setSize(200, 300);
  38.                 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  39.                 this.setLocationRelativeTo(null);
  40.  
  41.         }
  42.  
  43.         private int move = 50;
  44.  
  45.         public static void main(String[] args) {
  46.  
  47.                 final FantasmaPacMan fpm = new FantasmaPacMan();
  48.  
  49.                 EventQueue.invokeLater(new Runnable() {
  50.  
  51.                         public void run() {
  52.                                 fpm.setVisible(true);
  53.                         }
  54.                 });
  55.  
  56.         }
  57.  
  58.         @Override
  59.         public void paint(Graphics g) {
  60.                 super.paint(g);
  61.  
  62.                 Graphics2D g2d = (Graphics2D) g.create();
  63.  
  64.                 g2d.setPaint(Color.BLACK);
  65.                 g2d.fillRect(0, 0, this.getSize().width, this.getSize().height);
  66.  
  67.                 pintarFantasma(g2d, Color.RED, move, 50);
  68.  
  69.                 pintarFantasmaV2(g2d, Color.MAGENTA, 50, 150);
  70.  
  71.         }
  72.  
  73.         public void pintarFantasmaV2(Graphics2D g2d, Color color, int x, int y) {
  74.  
  75.                 g2d.setPaint(color);
  76.  
  77.                 int xBkp = x, yBkp = y;
  78.  
  79.                 GeneralPath gp = new GeneralPath(GeneralPath.WIND_EVEN_ODD);
  80.  
  81.                 // Movendo um pouco a baixo para equivaler a ellipse
  82.                 gp.moveTo(x, y + EFEITO_ELLIPSE);
  83.                 y += EFEITO_ELLIPSE;
  84.                 gp.curveTo(x + 25, yBkp, x + 25 + 50, yBkp, x + TAMANHO_X, y);
  85.                 x += TAMANHO_X;
  86.                 gp.lineTo(x, y + 30);
  87.                 y += 30;
  88.                 gp.curveTo(x - EFEITO_ELLIPSE_PATA, y + TAMANHO_Y_PATA, x
  89.                                 - (EFEITO_ELLIPSE_PATA << 1), y, x - (EFEITO_ELLIPSE_PATA << 1),
  90.                                 y);
  91.                 x -= EFEITO_ELLIPSE_PATA << 1;
  92.                 gp.lineTo(x - DISTANCIA_X_PATA, y);
  93.                 x -= DISTANCIA_X_PATA;
  94.                 gp.curveTo(x - EFEITO_ELLIPSE_PATA, y + TAMANHO_Y_PATA, x
  95.                                 - (EFEITO_ELLIPSE_PATA << 1), y, x - (EFEITO_ELLIPSE_PATA << 1),
  96.                                 y);
  97.                 x -= EFEITO_ELLIPSE_PATA << 1;
  98.                 gp.lineTo(x - DISTANCIA_X_PATA, y);
  99.                 x -= DISTANCIA_X_PATA;
  100.                 gp.curveTo(x - EFEITO_ELLIPSE_PATA, y + TAMANHO_Y_PATA, x
  101.                                 - (EFEITO_ELLIPSE_PATA << 1), y, x - (EFEITO_ELLIPSE_PATA << 1),
  102.                                 y);
  103.                 x -= EFEITO_ELLIPSE_PATA << 1;
  104.                 gp.lineTo(x - (DISTANCIA_X_PATA + 1), y);
  105.                 x -= (DISTANCIA_X_PATA + 1);
  106.                 gp.curveTo(x - EFEITO_ELLIPSE_PATA, y + TAMANHO_Y_PATA, x
  107.                                 - (EFEITO_ELLIPSE_PATA << 1), y, x - (EFEITO_ELLIPSE_PATA << 1),
  108.                                 y);
  109.                 gp.closePath();
  110.                 g2d.fill(gp);
  111.  
  112.                 x = xBkp;
  113.                 y = yBkp;
  114.  
  115.                 g2d.setPaint(Color.WHITE);
  116.                 g2d
  117.                                 .fill(new Ellipse2D.Float((x + (TAMANHO_X / 3)) - RAIO_OLHO, y
  118.                                                 + (TAMANHO_Y >> 1) - RAIO_OLHO, RAIO_OLHO << 1,
  119.                                                 RAIO_OLHO << 1));
  120.                 g2d.setPaint(Color.BLUE);
  121.                 g2d.fill(new Ellipse2D.Float((x + (TAMANHO_X / 3))
  122.                                 - RAIO_OLHO_CRISTALINO, y + (TAMANHO_Y >> 1)
  123.                                 - RAIO_OLHO_CRISTALINO, RAIO_OLHO_CRISTALINO << 1,
  124.                                 RAIO_OLHO_CRISTALINO << 1));
  125.                 g2d.setPaint(Color.WHITE);
  126.                 g2d.fill(new Ellipse2D.Float((x + (TAMANHO_X / 3)) - RAIO_OLHO
  127.                                 + DISTANCIA_X_OLHOS, y + (TAMANHO_Y >> 1) - RAIO_OLHO,
  128.                                 RAIO_OLHO << 1, RAIO_OLHO << 1));
  129.                 g2d.setPaint(Color.BLUE);
  130.                 g2d.fill(new Ellipse2D.Float((x + (TAMANHO_X / 3))
  131.                                 - RAIO_OLHO_CRISTALINO + DISTANCIA_X_OLHOS, y
  132.                                 + (TAMANHO_Y >> 1) - RAIO_OLHO_CRISTALINO,
  133.                                 RAIO_OLHO_CRISTALINO << 1, RAIO_OLHO_CRISTALINO << 1));
  134.  
  135.         }
  136.  
  137.         public void pintarFantasma(Graphics2D g2d, Color color, int x, int y) {
  138.                 g2d.setPaint(color);
  139.                 g2d.fill(new Ellipse2D.Float(x, y, TAMANHO_X, TAMANHO_Y));
  140.                 g2d.fill(new Rectangle2D.Float(x, y + (TAMANHO_Y >> 1), TAMANHO_X,
  141.                                 TAMANHO_Y >> 1));
  142.  
  143.                 int xBkp = x;
  144.  
  145.                 g2d.fill(new QuadCurve2D.Float(x, y + TAMANHO_Y, x
  146.                                 + (TAMANHO_X_PATA >> 1), y + TAMANHO_Y + TAMANHO_Y_PATA, x
  147.                                 + TAMANHO_X_PATA, y + TAMANHO_Y));
  148.                 x = x + TAMANHO_X_PATA + DISTANCIA_X_PATA;
  149.                 g2d.fill(new QuadCurve2D.Float(x, y + TAMANHO_Y, x
  150.                                 + (TAMANHO_X_PATA >> 1), y + TAMANHO_Y + TAMANHO_Y_PATA, x
  151.                                 + TAMANHO_X_PATA, y + TAMANHO_Y));
  152.                 x = x + TAMANHO_X_PATA + DISTANCIA_X_PATA;
  153.                 g2d.fill(new QuadCurve2D.Float(x, y + TAMANHO_Y, x
  154.                                 + (TAMANHO_X_PATA >> 1), y + TAMANHO_Y + TAMANHO_Y_PATA, x
  155.                                 + TAMANHO_X_PATA, y + TAMANHO_Y));
  156.                 x = x + TAMANHO_X_PATA + DISTANCIA_X_PATA + 1;
  157.                 g2d.fill(new QuadCurve2D.Float(x, y + TAMANHO_Y, x
  158.                                 + (TAMANHO_X_PATA >> 1), y + TAMANHO_Y + TAMANHO_Y_PATA, x
  159.                                 + TAMANHO_X_PATA, y + TAMANHO_Y));
  160.  
  161.                 x = xBkp;
  162.  
  163.                 g2d.setPaint(Color.WHITE);
  164.                 g2d
  165.                                 .fill(new Ellipse2D.Float((x + (TAMANHO_X / 3)) - RAIO_OLHO, y
  166.                                                 + (TAMANHO_Y >> 1) - RAIO_OLHO, RAIO_OLHO << 1,
  167.                                                 RAIO_OLHO << 1));
  168.                 g2d.setPaint(Color.BLUE);
  169.                 g2d.fill(new Ellipse2D.Float((x + (TAMANHO_X / 3))
  170.                                 - RAIO_OLHO_CRISTALINO, y + (TAMANHO_Y >> 1)
  171.                                 - RAIO_OLHO_CRISTALINO, RAIO_OLHO_CRISTALINO << 1,
  172.                                 RAIO_OLHO_CRISTALINO << 1));
  173.                 g2d.setPaint(Color.WHITE);
  174.                 g2d.fill(new Ellipse2D.Float((x + (TAMANHO_X / 3)) - RAIO_OLHO
  175.                                 + DISTANCIA_X_OLHOS, y + (TAMANHO_Y >> 1) - RAIO_OLHO,
  176.                                 RAIO_OLHO << 1, RAIO_OLHO << 1));
  177.                 g2d.setPaint(Color.BLUE);
  178.                 g2d.fill(new Ellipse2D.Float((x + (TAMANHO_X / 3))
  179.                                 - RAIO_OLHO_CRISTALINO + DISTANCIA_X_OLHOS, y
  180.                                 + (TAMANHO_Y >> 1) - RAIO_OLHO_CRISTALINO,
  181.                                 RAIO_OLHO_CRISTALINO << 1, RAIO_OLHO_CRISTALINO << 1));
  182.  
  183.         }
  184.  
  185. }