package net.diegamingbrueder.games.DoodleJump;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.ArrayList;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;
import com.sun.xml.internal.ws.api.ResourceLoader;
public class DoodleJump extends JPanel implements KeyListener, MouseMotionListener, Runnable {
// Deklarationen
private static final long serialVersionUID = 1L;
public static final int width = 500, height = 500;
private ArrayList<Rectangle> platforms = new ArrayList<Rectangle>();
private Rectangle doodle;
public static final double jumpHeight = 50;
protected int doodlePic = 1;
public static BufferedImage doodles, platformPic;
public static final int doodleWidth = 20, doodleHeight = 50;
public static final int platformWidth = 50, platformHeight = 20;
// Konstruktoren
public DoodleJump() { }
public DoodleJump( int width, int height ) {
try { doodles = ImageIO.read( ResourceLoader.class.getResource( "/net/diegamingbrueder/games/DoodleJump/res/doodles.png" ) ); } catch ( IOException e ) { e.printStackTrace(); }
try { platformPic = ImageIO.read( ResourceLoader.class.getResource( "/net/diegamingbrueder/games/DoodleJump/res/platform.png" ) ); } catch ( IOException e ) { e.printStackTrace(); }
setFocusable( true );
setSize( width, height );
addKeyListener ( this );
addMouseMotionListener( this );
setVisible( true );
doodle = new Rectangle( ( getWidth() - doodleWidth ) / 2, getHeight() - doodleHeight - 20, doodleWidth, doodleHeight );
new Thread( this ).start();
}
// Methoden
public static void main( String[] args ) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
frame.setSize( width, height );
frame.setResizable( false );
frame.setUndecorated( true );
frame.setLocationRelativeTo( null );
frame.add( new DoodleJump( width, height ) );
frame.setVisible( true );
}
@Override
public void paintComponent( Graphics g ) {
super.paintComponent( g );
Graphics2D g2 = (Graphics2D) g;
for ( int i = 0; i < platforms.size(); i++ ) {
g2.drawImage( platformPic, platforms.get( i ).x, platforms.get( i ).y, platformWidth, platformHeight, this ); }
g2.drawImage( doodles, doodle.x, doodle.y, doodleWidth, doodleHeight, doodlePic * doodleWidth, 0, doodlePic * doodleWidth + doodleWidth, doodleHeight, this );
g2.drawImage( doodles, doodle.x, doodle.y, doodleWidth, doodleHeight, this );
g2.drawRect ( doodle.x, doodle.y, doodleWidth, doodleHeight );
}
@ Override
public void run() {
int x, y;
while( true ) {
try { Thread.sleep( 10 ); }
catch ( InterruptedException e ) { e.printStackTrace(); }
if ( doodle.getY() < getHeight() / 2 ) {
x = (int) ( Math.random() * getWidth () );
y = (int) ( Math.random() * ( getHeight() - jumpHeight ) - jumpHeight );
platforms.add( new Rectangle( x, y, platformWidth, platformHeight ) );
}
repaint();
}
}
@ Override
public void mouseDragged( MouseEvent e ) { }
@ Override
public void mouseMoved ( MouseEvent e ) {
if ( e.getX() < doodle.x + doodleWidth / 2 ) doodlePic = 0;
else if ( e.getX() > doodle.x + doodleWidth / 2 ) doodlePic = 2;
doodle.setLocation( e.getX() - doodleWidth / 2 , doodle.y );
}
@ Override
public void keyPressed ( KeyEvent e ) { switch ( e.getKeyCode() ) { case KeyEvent.VK_ESCAPE : System.exit( 0 ); break; } }
@ Override
public void keyReleased ( KeyEvent e ) { }
@ Override
public void keyTyped ( KeyEvent e ) { }
}