import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.util.*;
import javax.swing.*;
class GamePanel extends JPanel implements KeyListener
{
private static final long serialVersionUID = 1L;
JFrame frame;
Random rand = new Random();
boolean up;
boolean down;
boolean left;
boolean right;
JButton level1;
JButton level2;
JButton level3;
JButton level4;
JButton level5;
JButton level6;
JButton level7;
JButton level8;
JButton level9;
JButton level10;
JButton level11;
JButton level12;
JButton level13;
JDialog dialog;
int level=1;
int xjumpto=0;
int yjumpto=0;
static boolean eingesammelt=false;
static boolean laufen=true;
boolean passieren=false;
boolean go=true;
int x=5;
int y=5;
int x3=50;
int y3=50;
Rectangle rectangle=new Rectangle(x3,y3,10,10);
Rectangle rec=new Rectangle(x,y,10,10);
Line2D.Double bar=new Line2D.Double(0,0,0,0);
Line2D.Double bar1=new Line2D.Double(0,0,0,0);
Line2D.Double bar2=new Line2D.Double(0,0,0,0);
Line2D.Double bar3=new Line2D.Double(0,0,0,0);
Line2D.Double bar4=new Line2D.Double(0,0,0,0);
Line2D.Double bar5=new Line2D.Double(0,0,0,0);
Line2D.Double bar6=new Line2D.Double(0,0,0,0);
Line2D.Double bar7=new Line2D.Double(0,0,0,0);
Line2D.Double bar8=new Line2D.Double(0,0,0,0);
Line2D.Double bar9=new Line2D.Double(0,0,0,0);
Rectangle2D.Double whole=new Rectangle2D.Double(200,70,20,50);
Rectangle2D.Double jump=new Rectangle2D.Double(100,100,20,20);
boolean barriere;
Thread thread;
Thread thr;
Thread threed;
Vector<Line2D.Double> lines=new Vector<Line2D.Double>(50,2);
public GamePanel (int w, int h)
{
lines.add(bar);
lines.add(bar1);
lines.add(bar2);
lines.add(bar3);
lines.add(bar4);
lines.add(bar5);
lines.add(bar6);
lines.add(bar7);
lines.add(bar8);
lines.add(bar9);
choose();
this.setPreferredSize(new Dimension(w,h));
frame=new JFrame("Spiel");
frame.setResizable(false);
frame.setLocation(300,150);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(this);
frame.addKeyListener(this);
frame.pack();
thread=new Thread(new Move());
thread.start();
thr=new Thread(new Ask());
thr.start();
threed=new Thread(new Line());
threed.start();
frame.getContentPane().setBackground(Color.black);
frame.setVisible(true);
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
g.setColor(Color.green);
g.fillRect(x3, y3, 20, 20);
g.setColor(Color.blue);
g.fillRect(rec.x, rec.y, 10, 10);
g.setColor(Color.red); //LEVEL 1-2 +++ grundbarriere die immer überschrieben wird
g2.draw(lines.elementAt(0));
if(level>2) //AB LEVEL 3
{
g.setColor(Color.red);
g2.draw(lines.elementAt(1));
if(level>4)
{
g.setColor(Color.red);
g2.draw(lines.elementAt(2));
if(level==6)
{
g.setColor(Color.BLACK);
g2.draw(whole);
g.setColor(Color.red);
g2.draw(lines.elementAt(3));
g.setColor(Color.red);
g2.draw(lines.elementAt(4));
}
else if(level==7||level==8||level==9)
{
g.setColor(Color.green);
g2.draw(jump);
if(level==8)
g2.drawString("?", 57,65);
if(level==9)
{
g2.draw(lines.elementAt(9));
}
}
}
}
{ //RÄNDER
g.setColor(Color.red);
g2.draw(new Line2D.Double(0,0,600,0));
g.setColor(Color.red);
g2.draw(new Line2D.Double(0,0,0,600));
g.setColor(Color.red);
g2.draw(new Line2D.Double(599,0,599,600));
g.setColor(Color.red);
g2.draw(new Line2D.Double(0,599,599,599));
}
}
public static void main(String[]args) //Fenster
{
new GamePanel(600,600);
}
public void choose()
{
dialog=new JDialog((JFrame)frame,false);
dialog.setLayout(new FlowLayout());
level1=new JButton("1");dialog.add(level1);level1.setEnabled(true);level1.addActionListener(new LevelListener());
level2=new JButton("2");dialog.add(level2);level2.setEnabled(true);level2.addActionListener(new LevelListener());
level3=new JButton("3");dialog.add(level3);level3.setEnabled(true);level3.addActionListener(new LevelListener());
level4=new JButton("4");dialog.add(level4);level4.setEnabled(true);level4.addActionListener(new LevelListener());
level5=new JButton("5");dialog.add(level5);level5.setEnabled(true);level5.addActionListener(new LevelListener());
level6=new JButton("6");dialog.add(level6);level6.setEnabled(true);level6.addActionListener(new LevelListener());
level7=new JButton("7");dialog.add(level7);level7.setEnabled(true);level7.addActionListener(new LevelListener());
level8=new JButton("8");dialog.add(level8);level8.setEnabled(true);level8.addActionListener(new LevelListener());
level9=new JButton("9");dialog.add(level9);level9.setEnabled(true);level9.addActionListener(new LevelListener());
level10=new JButton("10");dialog.add(level10);level10.setEnabled(false);level10.addActionListener(new LevelListener());
level11=new JButton("11");dialog.add(level11);level11.setEnabled(false);level11.addActionListener(new LevelListener());
level12=new JButton("12");dialog.add(level12);level12.setEnabled(false);level12.addActionListener(new LevelListener());
level13=new JButton("13");dialog.add(level13);level13.setEnabled(false);level13.addActionListener(new LevelListener());
dialog.setResizable(false);
dialog.setTitle("Choisir niveaux");
dialog.pack();
dialog.setVisible(true);
}
class LevelListener implements ActionListener
{
public void actionPerformed(ActionEvent evt)
{
Object event = evt.getSource();
repaint();
if(event==level1)
level=1;
else if(event==level2)
level=2;
else if(event==level3)
level=3;
else if(event==level4)
level=4;
else if(event==level5)
level=5;
else if(event==level6)
level=6;
else if(event==level7)
level=7;
else if(event==level8)
level=8;
else if(event==level9)
level=9;
else if(event==level10)
level=10;
else if(event==level11)
level=11;
else if(event==level12)
level=12;
else if(event==level13)
level=13;
new Level();
}
}
public void keyPressed(KeyEvent e)
{
if(go)
{
if(e.getKeyCode()==KeyEvent.VK_UP)
up=true;
if(e.getKeyCode()==KeyEvent.VK_DOWN)
down=true;
if(e.getKeyCode()==KeyEvent.VK_LEFT)
left=true;
if(e.getKeyCode()==KeyEvent.VK_RIGHT)
right=true;
}
}
public void keyReleased(KeyEvent e)
{
if(e.getKeyCode()==KeyEvent.VK_UP)
{
up=false;
}
if(e.getKeyCode()==KeyEvent.VK_DOWN)
{
down=false;
}
if(e.getKeyCode()==KeyEvent.VK_LEFT)
{
left=false;
}
if(e.getKeyCode()==KeyEvent.VK_RIGHT)
{
right=false;
}
}
public void check()
{
if(up)
{
if(rec.y!=0)
{
rec.y=rec.y-1;
}
}
if(down)
{
if(rec.y<588)
{
rec.y=rec.y+1;
}
}
if(left)
{
if(rec.x!=0)
{
rec.x=rec.x-1;
}
}
if(right)
{
if(rec.x<588)
{
rec.x=rec.x+1;
}
}
}
private void abfrage()
{
eingesammelt=rec.intersects(rectangle);
if(rec.x==0||rec.intersectsLine(lines.elementAt(0))||rec.intersectsLine(lines.elementAt(1))||rec.intersectsLine(lines.elementAt(2))||rec.intersectsLine(lines.elementAt(3))||rec.intersectsLine(lines.elementAt(4))||rec.intersectsLine(lines.elementAt(5))||rec.intersectsLine(lines.elementAt(6))||rec.intersectsLine(lines.elementAt(7))||rec.intersectsLine(lines.elementAt(8))||rec.intersectsLine(lines.elementAt(9))||(level==6&&rec.intersects(whole))||rec.x>587||rec.y==0||rec.y>587)
{
barriere = true;
go=false;
}
else if((level==7||level==8||level==9)&&rec.intersects(jump))
{
rec.x=xjumpto;
rec.y=yjumpto;
}
if(eingesammelt==true)
{
eingesammelt=false;
levelNew();
}
if(barriere)
{
levelRepeat();
}
}
public void levelRepeat() throws IllegalMonitorStateException
{
up=false;
down=false;
left=false;
right=false;
check();
try{Thread.sleep(1);} catch(InterruptedException e){}
if(rec.intersects(whole))
JOptionPane.showMessageDialog(null, "Tu est tombé dans un trou noir.");
JOptionPane.showMessageDialog(null, "Mission échouée");
go=true;
barriere=false;
new Level();
}
public void levelNew()
{
up=false;
down=false;
left=false;
right=false;
check();
JOptionPane.showMessageDialog(null, "Mission réussie");
eingesammelt=false;
level++;
new Level();
}
class Move implements Runnable
{
public void run()
{
while(true) //endlos viele level.... endlos schleife
{
while(laufen==true)
{
while(eingesammelt==false)
{
check();
repaint();
try{Thread.sleep(9);}catch(InterruptedException e){}
}
}
level++;
laufen=true;
eingesammelt=false;
}
}
}
class Ask implements Runnable
{
public void run()
{
while(eingesammelt==false)
{
try{Thread.sleep(5);}catch(InterruptedException e){}
abfrage();
}
}
}
class Line implements Runnable
{
public void run()
{
while(true)
{
if(level==9)
{
increase();
}
try{Thread.sleep(10);}catch(InterruptedException e){}
}
}
}
public void increase()
{
int z=290;
int s=270;
if(s>5||z<595)
{
s=s-5;z=z+5;
lines.elementAt(9).setLine(300,s,300,z);
repaint();
}
else
{
s=270;
z=290;
}
}
class Level
{
public Level()
{
levelInfos(level);
}
public void levelInfos(int level)
{
if(level==1) //1
{
x=1;
y=1;
x3=50;
y3=50;
lines.elementAt(0).setLine(600,600,600,600);
rec.setRect(x, y, 10, 10);
rectangle.setRect(x3, y3, 10, 10);
}
else if(level==2) //1
{
x=1;
y=1;
x3=100;
y3=200;
lines.elementAt(0).setLine(5, 50, 200, 50);
rec.setRect(x, y, 10, 10);
rectangle.setRect(x3, y3, 10, 10);
}
else if(level==3) //2
{
x=25;
y=25;
x3=80;
y3=160;
lines.elementAt(0).setLine(10,50,75,150);
lines.elementAt(1).setLine(160, 0, 100, 150);
rec.setRect(x, y, 10, 10);
rectangle.setRect(x3, y3, 10, 10);
}
else if(level==4) //2
{
x=25;
y=25;
x3=210;
y3=200;
lines.elementAt(0).setLine(5,50,200,50);
lines.elementAt(1).setLine(220, 50, 590, 50);
rec.setRect(x, y, 10, 10);
rectangle.setRect(x3, y3, 10, 10);
}
else if(level==5)
{
x=25;
y=50;
x3=300;
y3=50;
lines.elementAt(0).setLine(50,25,50,200);
lines.elementAt(1).setLine(70, 0, 70, 105);
lines.elementAt(2).setLine(70, 125, 70, 590);
rec.setRect(x, y, 10, 10);
rectangle.setRect(x3, y3, 10, 10);
}
else if(level==6)
{
x=200;
y=10;
x3=300;
y3=400;
lines.elementAt(0).setLine(0,50,200,50);
lines.elementAt(1).setLine(220,50,600,50);
lines.elementAt(2).setLine(0,0,0,0);
rec.setRect(x, y, 10, 10);
rectangle.setRect(x3, y3, 10, 10);
}
else if(level==7)
{
x=200;
y=200;
x3=400;
y3=200;
xjumpto=350;
yjumpto=150;
lines.elementAt(0).setLine(300,0,300,600);
lines.elementAt(1).setLine(0,0,0,0);
lines.elementAt(2).setLine(0,0,0,0);
rec.setRect(x, y, 10, 10);
rectangle.setRect(x3, y3, 10, 10);
}
else if(level==8)
{
x=20;
y=20;
x3=400;
y3=400;
xjumpto=rand.nextInt(500);
try{Thread.sleep(rand.nextInt(6));}catch(InterruptedException e){}
yjumpto=rand.nextInt(500);
lines.elementAt(0).setLine(100,0,100,200);
lines.elementAt(1).setLine(0,100,100,100);
lines.elementAt(2).setLine(12,200,100,200);
rec.setRect(x, y, 10, 10);
rectangle.setRect(x3, y3, 10, 10);
jump.setRect(50, 50, 20, 20);
}
else if(level==9)
{
x=20;
y=20;
x3=400;
y3=400;
xjumpto=rand.nextInt(500);
try{Thread.sleep(rand.nextInt(6));}catch(InterruptedException e){}
yjumpto=rand.nextInt(500);
lines.elementAt(0).setLine(100,0,100,200);
lines.elementAt(1).setLine(0,100,100,100);
lines.elementAt(2).setLine(12,200,100,200);
lines.elementAt(9).setLine(300,270,300,290);
rec.setRect(x, y, 10, 10);
rectangle.setRect(x3, y3, 10, 10);
jump.setRect(50, 50, 20, 20);
}
else if(level==10)
{
JOptionPane.showMessageDialog(null, "Operation terminée");
dialog.dispose();
System.exit(0);
}
}
}
@Override
public void keyTyped(KeyEvent arg0) {
}
}