All pastes #537780 Raw Edit

Lunar Commander

public text v1 · immutable
·published 2007-06-04 21:03 UTC
rendered paste body
//imports
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.applet.*;
import javax.swing.*;
import javax.swing.event.*; 
import java.io.File;
import java.applet.Applet;
import java.applet.AudioClip;
import java.net.URL;
import javax.imageio.ImageIO;
import java.io.*;
	
 public class rts extends JFrame implements Runnable, KeyListener, MouseListener, MouseMotionListener
 { 

	//obersicht rohstoffe geld einheiten bilder
	Image limit; // unit limit
	Image elec; // building limit
	
	    long oldtime;
    long newtime;
	
	//menue pics
	//---
	Image img_corvette;
	Image map;
	Image menu;
	Image menu_build;
	Image menu_comm;
	Image menu_mucro;
	Image menu_qps;
	Image menu_qt;
	Image menu_station;
	//---


    int framecount = 0;
	int bbar = 0;			// variable fur progrssbar beim units bauen

	String level = "0"; // level variable
	
	int e_z = 0; // gegner units zaehler
	
	// positionsvariablen
	//---
	int menux = 915;
	int menuy = 80;
	int menu_width = 100;
	int menu_height = 120;
	int menu_buildy = menuy + 35;
	//---
	
	//status sounds
	AudioClip s_win;
	AudioClip s_lose;
	AudioClip s_unitfull;
	AudioClip s_nomoney;
	AudioClip s_error;
	
	boolean wires = false;	// programers wireframe, true setzten und sich wireframes anschaun
	boolean starto = false; // match beginnt variable
	boolean loser = false;  // man selbst hat verloren boolean
	boolean winner = false; // man selbst hat gewonnen boolean
	
	Image pic_lose;			// variable für "you lose bild"
	Image pic_win;			// variable für "you win bild"
	
	boolean ai = true; // in DIESER alpha version des Spiels ist der Gegner immer eine KI
	
	int zahler; // zahl deiner einheiten DEINER
	
	//bilder der units
	//---
	Image buff_alium[] = new Image[8];
	Image buff_comm[] = new Image[8];
	Image buff_mucro[] = new Image[8];
	Image buff_missl[] = new Image[8];
	Image buff_hit[] = new Image[9];
	Image buff_expl[] = new Image[12];
	//gebaeude
	Image buff_station;
	Image buff_qps;
	Image buff_qt;
	//---
	
	//verschiende angriffs- und flug variablen
	//---
	int conx1 = 0;
	int cony1 = 0;
	int conx2 = 1000;
	int cony2 = 1000;
	int attx = 0;
	int atty = 0;
	Image att;
	boolean attb = false;
	int px = 0;
	int py = 0;
	//---
	
	int marki = 0; // markierung
	
	int mapx = 0; // mapposition x
	int mapy = 0; // mapposition y
	static int mapwidth=2500; // map breite
	static int mapheight=2000;//map hohe
	
	String mapname; // mapname zum laden
	
	int player = 1; // 1 = player1, 2 = multiplayer oder CPU
	// if player 1 dann die eine ecke, 2 andere ecke
	// dieses spiel war darauf ausgelegt das man es im netzwerk nutzen konnte
	
	String direction; // richtung
	
	float lplus = 0f; // rechnungsvariable fur layze (geld)
	
	int mb; //mouse button
	
	AudioClip create; // qps spawn sound
	
	//positionsvariablen
	//--
	int rx = 0;
   	int ry = 0;
   	int rx2 = 0;
   	int ry2 = 0;
   //---
   
   int whichship = 0; // variable bei spawnen von units
   
   boolean marking = false; // wird mit der maus makiert ?

   int unit_count = 0;		// zaehlen von units 
      
   int kc;		// keycode
   
   int layze = 18000; // start layze -9000 ;)
   Image img_layze;	// mini bild fur layze anzeige
   Image img_qps;	//mini bild fur qps
   
   int QPS = 0;		// QPS = Quanten Potential Scanner, anzahl
   
   static int ulimit = 24; // limit für units
   unit acunit[] = new unit[ulimit+2]; // instanzen der klasse unit bilden

	// maus koordinaten
	int mx = 400;
	int my = 400;

	// hintergrundmusik
   AudioClip music;
   boolean playm = true;
   
   // farben
   Color bg = new Color(0,0,0);	
   Color mark = new Color(255,255,0);
   Color fontcolor = new Color(180,180,240);
   
   Cursor c;	//Cursor variable
   
   static int screenx = 1024; // festgelegte breite
   static int screeny = 740;  // und hoehe des fensters
   
   //thread sachen
   Thread th;
   boolean running;
   int schlaf = 20;

   //fur double buffering
   private Image dbImage;
   private Graphics dbg;
 
  public static void main(String[] args)
   {
	//wird von anderen klassen instanziert
   }
 
 public rts(String in_lvl)
   {
   	  level = in_lvl;	// level holen
      setTitle("Lunar Commander - Level "+level); // titel mit level angabe
      setBackground(bg); // background auf schwarz
      addKeyListener(this); // key listener adden für keyboard eingaben
      addMouseListener(this); // mouse listener adden für maus klicks
	  addMouseMotionListener(this); // motion listener adden für maus bewegung
      Container cp = getContentPane(); // contenpane deklarieren
      //closing adapter
      addWindowListener( new WindowAdapter() {public void windowClosing ( WindowEvent e) {System.exit(0); }});
      setSize(screenx,screeny); // groesse des fenster setzen
      setLayout(null); // layout null = koordinaten system
      
      for (int ni = 0; ni < ulimit+2; ni++) // initializieren aller units
      {
      acunit[ni] = new unit(); // mit konstruktor aufruf
      }
      
      Font f = new Font( "Lucida", Font.PLAIN, 10 ); //neue schriftart erzeugen
      setFont(f);									// schriftart benutzen
      
      //alle bilder in buffer schreiben / laden
      //---------------------------------------->>>>>
      buff_alium[0] = load_img("units\\alium\\u.gif");
      buff_alium[1] = load_img("units\\alium\\ru.gif");
      buff_alium[2] = load_img("units\\alium\\r.gif");
      buff_alium[3] = load_img("units\\alium\\rd.gif");
      buff_alium[4] = load_img("units\\alium\\d.gif");
      buff_alium[5] = load_img("units\\alium\\ld.gif");
      buff_alium[6] = load_img("units\\alium\\l.gif");
      buff_alium[7] = load_img("units\\alium\\lu.gif");
      //->
      buff_comm[0] = load_img("units\\commeatus\\u.gif");
      buff_comm[1] = load_img("units\\commeatus\\ru.gif");
      buff_comm[2] = load_img("units\\commeatus\\r.gif");
      buff_comm[3] = load_img("units\\commeatus\\rd.gif");
      buff_comm[4] = load_img("units\\commeatus\\d.gif");
      buff_comm[5] = load_img("units\\commeatus\\ld.gif");
      buff_comm[6] = load_img("units\\commeatus\\l.gif");
      buff_comm[7] = load_img("units\\commeatus\\lu.gif");
      //->
      buff_mucro[0] = load_img("units\\mucro\\u.gif");
      buff_mucro[1] = load_img("units\\mucro\\ru.gif");
      buff_mucro[2] = load_img("units\\mucro\\r.gif");
      buff_mucro[3] = load_img("units\\mucro\\rd.gif");
      buff_mucro[4] = load_img("units\\mucro\\d.gif");
      buff_mucro[5] = load_img("units\\mucro\\ld.gif");
      buff_mucro[6] = load_img("units\\mucro\\l.gif");
      buff_mucro[7] = load_img("units\\mucro\\lu.gif");
      //->
      buff_missl[0] = load_img("rocket\\0.gif");
      buff_missl[1] = load_img("rocket\\1.gif");
      buff_missl[2] = load_img("rocket\\2.gif");
      buff_missl[3] = load_img("rocket\\3.gif");
      buff_missl[4] = load_img("rocket\\4.gif");
      buff_missl[5] = load_img("rocket\\5.gif");
      buff_missl[6] = load_img("rocket\\6.gif");
      buff_missl[7] = load_img("rocket\\7.gif");
      //->
      buff_hit[0] = load_img("rocket\\EX1.gif");
      buff_hit[1] = load_img("rocket\\EX2.gif");
      buff_hit[2] = load_img("rocket\\EX3.gif");
      buff_hit[3] = load_img("rocket\\EX4.gif");
      buff_hit[4] = load_img("rocket\\EX5.gif");
      buff_hit[5] = load_img("rocket\\EX6.gif");
      buff_hit[6] = load_img("rocket\\EX7.gif");
      buff_hit[7] = load_img("rocket\\EX8.gif");
      buff_hit[8] = load_img("rocket\\EX9.gif");
      //->
      buff_expl[0] = load_img("explo\\E1.gif");
      buff_expl[1] = load_img("explo\\E2.gif");
      buff_expl[2] = load_img("explo\\E3.gif");
      buff_expl[3] = load_img("explo\\E4.gif");
      buff_expl[4] = load_img("explo\\E5.gif");
      buff_expl[5] = load_img("explo\\E6.gif");
      buff_expl[6] = load_img("explo\\E7.gif");
      buff_expl[7] = load_img("explo\\E8.gif");
      buff_expl[8] = load_img("explo\\E9.gif");
      buff_expl[9] = load_img("explo\\E10.gif");
      buff_expl[10] = load_img("explo\\E11.gif");
      buff_expl[11] = load_img("explo\\E12.gif");
      //->
      buff_station = load_img("buildings\\station.gif");
      buff_qps = load_img("qps.gif");
      buff_qt = load_img("buildings\\gate.gif");
      //---------------------------------------->>>>>
      
      music = load_sound("songs\\song"+level+".wav");	//hintergrundmusik laden
      
      //sound files laden
      //---
      create = load_sound("sounds\\create.wav");
      s_unitfull = load_sound("sounds\\unitfull.wav");
      s_nomoney = load_sound("sounds\\nomoney.wav");
      s_error = load_sound("sounds\\error.wav");
      s_win = load_sound("sounds\\win.wav");
      s_lose = load_sound("sounds\\lose.wav");
      //---
      
      c = getToolkit().createCustomCursor(new ImageIcon("cur\\DANI1.gif").getImage(),new Point(0,0),"Cursor");
      setCursor(c);  //cursor deklarieren und nutzen
      
      mapname = "lvl"+level;	// mapname setzt sich zusammen aus dem wort lvl und der level zahl
      direction = "";		//richtung
      
      //grund pics werden geladen
      //---
      att = load_img("shot.gif");
      map = load_img("maps\\"+mapname+".jpg");
      img_corvette = load_img("corvette.gif");
      menu_build = load_img("menu\\b_alium_up.gif");
      menu_qps = load_img("menu\\b_qps_up.gif");
      menu = load_img("menu.gif");
      menu_comm = load_img("menu\\b_commeatus_up.gif");
      menu_mucro = load_img("menu\\b_mucro_up.gif");
	  menu_qt = load_img("menu\\b_qt_up.gif");
	  menu_station = load_img("menu\\b_station_up.gif");
      limit = load_img("limit.gif");
      elec = load_img("elec.gif");
      img_layze = load_img("layze.gif");
      Image icony = load_img("ico.gif");
      img_qps = load_img("mqps.gif");
      //---
      
	  setIconImage(icony);					//windows applikations icon setzen
	  
	  pic_lose = load_img("lose.gif");		// bild laden "You lose"
	  pic_win = load_img("win.gif");		// bild laden "You win"
	  
	  add_ship(5,1,120,40);					// Basis Station Spieler 1
	  add_ship(5,2,120+2150,40+1750);		// Basis Station Spieler 2
	  
	  starto = true; // match beginnt
	  
	  // 7 zufaellige gegnerische einheiten spawnen
	  //---
	  	add_ship((int)Math.floor((Math.random()*3)+1),2,(int)Math.floor((Math.random()*1500)+1000),(int)Math.floor((Math.random()*1000)+800));
		add_ship((int)Math.floor((Math.random()*3)+1),2,(int)Math.floor((Math.random()*1500)+1000),(int)Math.floor((Math.random()*1000)+800));	  		
		add_ship((int)Math.floor((Math.random()*3)+1),2,(int)Math.floor((Math.random()*1500)+1000),(int)Math.floor((Math.random()*1000)+800));	  		
		add_ship((int)Math.floor((Math.random()*3)+1),2,(int)Math.floor((Math.random()*1500)+1000),(int)Math.floor((Math.random()*1000)+800));	  		
		add_ship((int)Math.floor((Math.random()*3)+1),2,(int)Math.floor((Math.random()*1500)+1000),(int)Math.floor((Math.random()*1000)+800));	  		
		add_ship((int)Math.floor((Math.random()*3)+1),2,(int)Math.floor((Math.random()*1500)+1000),(int)Math.floor((Math.random()*1000)+800));	  		
		add_ship((int)Math.floor((Math.random()*3)+1),2,(int)Math.floor((Math.random()*1500)+1000),(int)Math.floor((Math.random()*1000)+800));	  		
	   //---
    }
    
  public void fpsa()
  	{
  	setTitle("fps: "+framecount);
  	framecount=0;
  	}
     
  public void keyReleased(KeyEvent e) 
  	{
		kc = 0; // key code bei loslassen zurücksetzen
  	}
  	
  public void keyPressed(KeyEvent e)
  	{
  		kc = e.getKeyCode(); // keycode  in variable schreiben
  		if (kc == 27) { dispose(); System.exit(0); } // ESC = beenden
  		
  		if (winner) // beenden nach gewonnen und tastendruck
  		{
     	dispose(); //fenster schliessen
     	System.exit(0); // java programm beenden
		}
    	
  		if (loser)  { System.exit(0); } // wenn verloren , beenden, bei tasten druck
	}
  	
  public void keyTyped(KeyEvent e) {}
     
  public AudioClip load_sound(String str)  // funktion zum sound files laden
  	{
  		File f = new File(str);
  		AudioClip lol;
  		URL u = null;
  		try { u = f.toURL();}
	  	catch (Exception e) {}
		lol = Applet.newAudioClip(u);
		return lol;
  	}
  
  static public Image load_img(String str2)  // funktion zum bilder laden
	{
		File f = new File(str2);
		Image img1 = null;
		try  { img1 = ImageIO.read( f ); } 
		catch (Exception e ) {} 
		return img1;
	}
  	
  	public void add_ship(int typo, int own, int xx, int yy)
  	{
  		int takethis = 222; // 222 = kein slot frei
  	
		for (int gx = ulimit-1; gx >= 0; gx--) // algorithmus um einen freien unit slot zu finden
  		{	
  			if (gx < 0) {gx = 0;}
  			if (acunit[gx].alive == false) {takethis = gx;}
  		}
		
  		if (takethis != 222) // wenn kein slot gefunden worden ist ist diese zahl immernoch 222		
  		{		
			if (typo == 1)			// wenn typ = 1
			{				
			acunit[takethis].speed = 1; // geschwindigkeit = 1
         	acunit[takethis].uwidth = 80;//breite der einheit = 80
         	acunit[takethis].uheight =90;// hohe = 90
         	acunit[takethis].hp = 5;		//hp = 5
         	acunit[takethis].range = 350; // range = 350
         	acunit[takethis].unitpic = buff_alium[0]; // bild der einheit typ entsprechend
         	acunit[takethis].upath = "units\\alium\\"; //pfad typ entsprechend
         	if (own == player) {layze-=4000;} // wenn spieler baut, geld abzug
         	}
         	else if (typo == 2) // siehe oben
			{
			acunit[takethis].speed = 1; // siehe oben
         	acunit[takethis].uwidth = 50; // " "
         	acunit[takethis].uheight =50;
         	acunit[takethis].hp = 5;
         	acunit[takethis].range = 250;
         	acunit[takethis].upath = "units\\commeatus\\";
         	acunit[takethis].unitpic = buff_comm[0];
         	if (own == player) {layze-=800;}
         	} 
         	else if (typo == 3) // siehe oben
			{
			acunit[takethis].speed = 1; // siehe oben
         	acunit[takethis].uwidth = 100;// " "
         	acunit[takethis].uheight =100;
         	acunit[takethis].hp = 5;
         	acunit[takethis].range = 500;
         	acunit[takethis].upath = "units\\mucro\\";
         	acunit[takethis].unitpic = buff_mucro[0];
         	if (own == player) {layze-=2750;}
         	} 
         	else if (typo == 4) // siehe oben
			{
			acunit[takethis].speed = 0; // siehe oben
         	acunit[takethis].uwidth = 63; // " "
         	acunit[takethis].uheight =61;
         	acunit[takethis].hp = 3;
         	acunit[takethis].range = 0;
         	acunit[takethis].upath = "buildings\\";
         	acunit[takethis].unitpic = buff_qps;
         	QPS++; // qps zaehler erhoehen
         	create.play(); // sound abspielen
         	if (own == player) {layze-=3000;}
         	} 
         	else if (typo == 5) // siehe oben
			{
			acunit[takethis].speed = 0; // siehe oben
         	acunit[takethis].uwidth = 170; // " "
         	acunit[takethis].uheight =170;
         	acunit[takethis].hp = 15;
         	acunit[takethis].range = 0;
         	acunit[takethis].upath = "buildings\\";
         	acunit[takethis].unitpic = buff_station;
         	//create.play();
         	if (own == player) {layze-=9000;}
         	} 
         	else if (typo == 6) // siehe oben
			{
			acunit[takethis].speed = 0; // siehe oben
         	acunit[takethis].uwidth = 300; // " "
         	acunit[takethis].uheight =115;
         	acunit[takethis].hp = 7;
         	acunit[takethis].range = 0;
         	acunit[takethis].upath = "buildings\\";
         	acunit[takethis].unitpic = buff_qt;
         	if (own == player) {layze-=7500;}
         	} 
         	
         	acunit[takethis].prep = 0; // richtungs variable auf "up" hoch setzen = 0
   			acunit[takethis].alive = true; // unit lebt nun
   			acunit[takethis].s_ex = load_sound("sounds\\ex.wav"); //sounds laden
   			acunit[takethis].s_hit = load_sound("sounds\\hit.wav"); //sounds laden
   			acunit[takethis].s_shot = load_sound("rocket\\rocket.wav"); //sounds laden
			acunit[takethis].s_voice_des = load_sound(acunit[takethis].upath+"voice_des.wav"); //sounds laden
			acunit[takethis].s_voice_spawn = load_sound(acunit[takethis].upath+"voice_spawn.wav"); //sounds laden
			acunit[takethis].s_voice_cmd =	 load_sound(acunit[takethis].upath+"voice_cmd.wav"); //sounds laden
			if (own == player) {acunit[takethis].s_voice_spawn.play();} //sound spielen wenn vom spieler
			acunit[takethis].utype = typo; //typ setzen
			acunit[takethis].cmdd = false; // nicht auf dem weg irgendwo hin
			acunit[takethis].chose = false; // nicht ausgewahlt
   			if (xx == 0) {acunit[takethis].ux = (int)Math.floor((Math.random()*300)+110+mapx);}
   						else {acunit[takethis].ux = xx;} // spawn point in random
   			if (yy == 0) {acunit[takethis].uy = (int)Math.floor((Math.random()*300)+30+mapy);}
   						else {acunit[takethis].uy = yy;} // spawn point in random
         	acunit[takethis].desx = 0; // keine destination
         	acunit[takethis].desy = 0; // keine destination
         	acunit[takethis].hitc = 0; // animationspic auf null
         	acunit[takethis].ishot = false; // kein schuss
         	acunit[takethis].atdelay = 150; // delay vom schiessen
         	acunit[takethis].attx = acunit[takethis].ux; // rakete unsichtbar positionieren
         	acunit[takethis].atty = acunit[takethis].uy; // rakete unsichtbar positionieren        	
         	acunit[takethis].attack = false; // kein angriff
         	if (own == player) {acunit[takethis].attpic = buff_missl[0];} // einheit bild laden
         	else {acunit[takethis].attpic = buff_missl[4];}// einheit bild laden
         	acunit[takethis].target = 0;  // index of targetted "victim"
         	acunit[takethis].owner = own; // besitzer des raumschiffes zuweisen
   			unit_count++; // einheit zaehler erhoehen
		}
	
  	}
  	
  	public void destroy_ship(int iindex) // funktion um ein bestimmtes schiff zu loeschen
  	{ // parameter ist index des schiffes
         if (acunit[iindex].utype == 4 && acunit[iindex].owner == 1) {QPS--;} // wenn es ein qps vom spieler ist dann qps runter zaehlen
         acunit[iindex].alive = false; // nicht mehr aktiv
         acunit[iindex] = new unit(); // konstruktor zum default setzen
         unit_count--; // und runter zaehlen
  	}
  
	public void mouseDragged(MouseEvent e) 
	{
		rx2 = e.getX(); //maus daten speichern
		ry2 = e.getY(); //maus daten speichern
	}
	public void mouseEntered (MouseEvent e) {}
	public void mouseExited (MouseEvent e){}
	public void mouseMoved (MouseEvent e)
	{
		mx = e.getX(); //maus daten speichern
		my = e.getY();	 //maus daten speichern	
		mb = e.getModifiers(); //maus daten speichern
	} 
	public void mouseClicked (MouseEvent e){} 
	
	public void mousePressed (MouseEvent e) 
	{
			int tempx = e.getX(); //maus daten speichern
			int tempy = e.getY(); //maus daten speichern
			
			mb = e.getModifiers(); //maus daten speichern
			
			rx = e.getX(); // maus daten in rechnungsvariablen schreiben
			ry = e.getY(); // maus daten in rechnungsvariablen schreiben
			rx2 = rx; // maus daten in rechnungsvariablen schreiben
			ry2 = ry; // maus daten in rechnungsvariablen schreiben
			if (e.getModifiers() == 16) {marking = true;} // linke maus taste = markieren
		
			for (int es = 0; es < unit_count; es++)
			{
					if ((tempx >= acunit[es].ux && tempx <= acunit[es].ux+acunit[es].uwidth) && (tempy >= acunit[es].uy && tempy <= acunit[es].uy+acunit[es].uheight)	)
					{ // kollision abfrage fur auswaehlen
						if (e.getModifiers() == 16 && acunit[es].alive == true && acunit[es].owner == player)
						{ // wenn linke maustaste, und einheit lebt, und es ist meine einheit
							noselect(); //alle deselektieren
							acunit[es].chose = true; // genau diesen hier markieren / auswahlen
							acunit[es].s_voice_cmd.play(); // und sound spielen
						}
					}
					else if (acunit[es].chose == true) // wenn einheit ausgewaehlt
					{
							if (e.getModifiers() == 4) //rechtsklick
							{
							acunit[es].desx = e.getX();//ziel des raumschiffes wo die maus ist;
							acunit[es].desy = e.getY();//ziel des raumschiffes wo die maus ist;
							px = e.getX(); //merken
							py = e.getY(); //merken
							acunit[es].desx +=(int)Math.floor((Math.random()*100)-50); // das ziel soll nicht ganz genau sein					
							acunit[es].desy +=(int)Math.floor((Math.random()*100)-50); // das ziel soll nicht ganz genau sein
							acunit[es].cmdd = true; // los schicken
							acunit[es].atdelay = 150; // mit delay
							acunit[es].s_voice_des.play(); // und sound spielen
							marki = 1; // status variable
							acunit[es].attack = false; // kein angriff wärend des fluges
    						acunit[es].attx = acunit[es].ux + (acunit[es].uwidth/2); //rakete zurückholen
    						acunit[es].atty = acunit[es].uy + (acunit[es].uheight/2); //rakete zurückholen
							}
							else if (e.getModifiers() == 16) // maus links, auserhalb von einheiten
							{noselect();} // deselektieren
					}
			}
			
			if (tempx >= menux && tempx <= menux+menu_width) // grundsätzliches, ausrichtung
			{
				if (tempy >= menu_buildy && tempy <= menu_buildy+menu_height)
				{
				menu_build = load_img("menu\\b_alium_down.gif");
				}
				
				if (tempy >= menu_buildy+125 && tempy <= menu_buildy+menu_height+125)
				{
				menu_comm = load_img("menu\\b_commeatus_down.gif");
				}
				
				if (tempy >= menu_buildy+250 && tempy <= menu_buildy+menu_height+250)
				{
				menu_mucro = load_img("menu\\b_mucro_down.gif");
				}
			}
			
			if (tempx >= 10 && tempx <= 10+100)
			{
				if(e.getY() >= menu_buildy && e.getY() <= menu_buildy+menu_height)
				{
				menu_qps = load_img("menu\\b_qps_down.gif");
				}
				
				if(e.getY() >= menu_buildy+125 && e.getY() <= menu_buildy+menu_height+125)
				{
				menu_station = load_img("menu\\b_station_down.gif");
				}
				
				if(e.getY() >= menu_buildy+250 && e.getY() <= menu_buildy+menu_height+250)
				{
				menu_qt = load_img("menu\\b_qt_down.gif");
				}
			}
	}
	
	public void mouseReleased (MouseEvent e)
	{ 
		marking = false;
		rx2 = rx;
		ry2 = ry;
	
		if (e.getX() >= menux && e.getX() <= menux+menu_width)  //menu klicks
		{
			if(e.getY() >= menu_buildy && e.getY() <= menu_buildy+menu_height)  //menu klicks
			{
			menu_build = load_img("menu\\b_alium_up.gif"); //pic animations
			if ((layze >= 4000) && (zahler < ulimit/2)) {whichship=1;bbar=1;} //unit bauen
			if (layze < 4000) { s_nomoney.play();} // kein geld sound
			if (zahler >= ulimit/2) { s_unitfull.play();}// units voll sound
			}
			
			if(e.getY() >= menu_buildy+125 && e.getY() <= menu_buildy+menu_height+125)
			{
			menu_comm = load_img("menu\\b_commeatus_up.gif"); // siehe oben etc
			if ((layze >= 800) && (zahler < ulimit/2)) {whichship=2;bbar=1;}
			if (layze < 800) { s_nomoney.play();}
			if (zahler >= ulimit/2) { s_unitfull.play();}
			}
			
			if(e.getY() >= menu_buildy+250 && e.getY() <= menu_buildy+menu_height+250)
			{
			menu_mucro = load_img("menu\\b_mucro_up.gif"); // siehe oben etc
			if ((layze >= 2750) && (zahler < ulimit/2)) {whichship=3;bbar=1;}
			if (layze < 2750) { s_nomoney.play();}
			if (zahler >= ulimit/2) { s_unitfull.play();}
			}
		}
		
		if (e.getX() >= 10 && e.getX() <= 10+100)
		{
			if(e.getY() >= menu_buildy && e.getY() <= menu_buildy+menu_height)
			{
			menu_qps = load_img("menu\\b_qps_up.gif"); // siehe oben etc
			if ((layze >= 3000) && (zahler < ulimit/2)) {whichship=4;bbar=1;}
			if (layze < 3000) { s_nomoney.play();}
			if (zahler >= ulimit/2) { s_unitfull.play();}
			}
			
			if(e.getY() >= menu_buildy+125 && e.getY() <= menu_buildy+menu_height+125)
			{
			menu_station = load_img("menu\\b_station_up.gif"); // siehe oben etc
			if ((layze >= 9000) && (zahler < ulimit/2)) {whichship=5;bbar=1;}
			if (layze < 9000) { s_nomoney.play();}
			if (zahler >= ulimit/2) { s_unitfull.play();}
			}
			
			if(e.getY() >= menu_buildy+250 && e.getY() <= menu_buildy+menu_height+250)
			{
			menu_qt = load_img("menu\\b_qt_up.gif"); // siehe oben etc
			if ((layze >= 7500) && (zahler < ulimit/2)) {whichship=6;bbar=1;}
			if (layze < 7500) { s_nomoney.play();}
			if (zahler >= ulimit/2) { s_unitfull.play();}
			}
		}
	}
     
  public void noselect() // funktion zum deselektieren aller einheiten
  {
  	for (int no = 0; no < unit_count; no++) //schleife vom index 0 bis soviele wie es gibt
  		{
		acunit[no].chose = false;	//ausgewaehlt = nein
		conx1=0;			//rechnungsvariablen auch null
		conx2=0;
		cony1=0;
		cony2=0;
		}
  }
     
  public void start() // start funktion des threads
   {
     if (th == null) {
       running = true;
       th = new Thread(this);
       th.setPriority(10);
       th.start();
    }
   }
 
  public void stop() // stop funktion des threads
  {
    if (th != null) {
      running = false;
       th = null;
    }
  }
 
  public void run() // run funktion des threads, gameloop
  {
    while (running) // gameloop
    	{
    		
    		  	
      	if (newtime-oldtime >= 1000) {fpsa();oldtime=System.currentTimeMillis();}
    		
    	newtime = System.currentTimeMillis();
    	

    		zahler = 0; 
			for (int cc = 0; cc < unit_count; cc++)
			{
				if (acunit[cc].owner == player && acunit[cc].alive) { zahler++; }
			} // eigene einheiten lokal gezaehlt
    		
    		if (mx <= 25 && mapx <= 0) // map und einheiten bewegen durch maus bewegung
			{
			mapx+=2;
  			for (int ji = 0; ji < unit_count; ji++)
  				{	
  					if (acunit[ji].alive == true) // wenn einheit aktiv auch bewegen
  					{
  						acunit[ji].ux+=2;
  						acunit[ji].desx+=2; // rechts bewegung der map und einheiten
  						acunit[ji].attx+=2;
  					}
  				}	
			}
			if (mx >= 999 && mapx >= -1460)
			{ 
			mapx-=2;
  			for (int ji = 0; ji < unit_count; ji++)
  				{					// siehe oben nur andere richtung immer
  					if (acunit[ji].alive == true)
  					{
  						acunit[ji].ux-=2;
  						acunit[ji].desx-=2;
  						acunit[ji].attx-=2;
  					}
  				}
			}
			if (my <= 45 && mapy <= 0)
			{				// siehe oben nur andere richtung immer
			mapy+=2;
  			for (int ji = 0; ji < unit_count; ji++)
  				{
  					if (acunit[ji].alive == true)
  					{
  						acunit[ji].uy+=2;
  						acunit[ji].desy+=2;
  						acunit[ji].atty+=2;
  					}
  				}
			}
			if (my >= 715 && mapy >= -1260)
			{				// siehe oben nur andere richtung immer
			mapy-=2;
  			for (int ji = 0; ji < unit_count; ji++)
  				{
  					if (acunit[ji].alive == true)
  					{
  						acunit[ji].uy-=2;
  						acunit[ji].desy-=2;
  						acunit[ji].atty-=2;
  					}
  				}
			}
    		
    		if (bbar > 0) {bbar++;} // wenn bbar > 0 dann gehts los
    		if (bbar >= 100) { bbar=0;add_ship(whichship,player,0,0);} // wenn fertig: bauen
    		
    		for (int sc = 0; sc < QPS;sc++) // layze durch qps erhoehen
    		{
    			lplus+=0.5f;
    		}
    		if (lplus >= 7.0f) {layze+=1; lplus=0f;} // layze durch qps erhoehen
    		
    	   	if (playm)			//MUSIK
    		{					//MUSIK
			music.loop();		//MUSIK
			playm = false;		//MUSIK
    		}					//MUSIK
    		
    		//-----------------------------------------------
    		//ENCOUNTER
    		
    		for (int e1 = 0; e1 < unit_count; e1++)		
			{

				for (int e2 = 0; e2 < unit_count; e2++)	//algorithmus um gegner in 
				{								// der nahe zu finden und anzugreifen		
					if (acunit[e1].alive && acunit[e2].alive) // wenn beide leben
					{
					if (acunit[e1].owner != acunit[e2].owner) // wenn anderer dem gegner gehort
					{
						if((acunit[e1].ux >= acunit[e2].ux-200 && acunit[e1].ux <= acunit[e2].ux+200) && (acunit[e1].uy >= acunit[e2].uy-200 && acunit[e1].uy <= acunit[e2].uy+200))
						{		// wenn im bereich (range)
						acunit[e1].attack = true; // angreifen
						acunit[e1].target = e2;	// target ist die index des gegners			
						}
						else
						{
						acunit[e1].attack = false; // sonst nicht angreifen
						}
					}
					}
				}	
					
			}
			
			//			ENCOUNTER
			//----------------------------------------------------------
			// Shoot

			for (int ts = 0; ts < unit_count; ts++)
			{
				if (acunit[ts].attack == false)
				{
				acunit[ts].attx = acunit[ts].ux + (acunit[ts].uwidth/2);
    			acunit[ts].atty = acunit[ts].uy + (acunit[ts].uheight/2);
				}
				
				if (acunit[ts].hitc > 0) { acunit[ts].hitc++;}
				
				if (acunit[ts].alive && acunit[ts].attack)
				{
					
					if (acunit[ts].cmdd)
					{
					acunit[ts].attx = acunit[ts].ux + (acunit[ts].uwidth/2);
    				acunit[ts].atty = acunit[ts].uy + (acunit[ts].uheight/2);
					}
					
					if (acunit[ts].cmdd == false && acunit[ts].attack)
					{	acunit[ts].prep = 0;
				// hier wird die richtung der einheit neu eingestellt
				//je nach gegebenheiten
						if (acunit[ts].ux < (acunit[acunit[ts].target].ux-(acunit[acunit[ts].target].uwidth/2)))
						{
								acunit[ts].prep = 2;
							if (acunit[ts].uy < (acunit[acunit[ts].target].uy-(acunit[acunit[ts].target].uheight/2)))
							{
								acunit[ts].prep = 3;
							}
							if (acunit[ts].uy > (acunit[acunit[ts].target].uy-(acunit[acunit[ts].target].uheight/2)))
							{
								acunit[ts].prep = 1;
							}
						}						
						else if (acunit[ts].ux > (acunit[acunit[ts].target].ux-(acunit[acunit[ts].target].uwidth/2)))
							{
							acunit[ts].prep = 6;
							if (acunit[ts].uy < (acunit[acunit[ts].target].uy-(acunit[acunit[ts].target].uheight/2)))
							{
								acunit[ts].prep = 5;
							}
							if (acunit[ts].uy > (acunit[acunit[ts].target].uy-(acunit[acunit[ts].target].uheight/2)))
							{
								acunit[ts].prep = 7;
							}
						}
						else
						{
							if (acunit[ts].uy < (acunit[acunit[ts].target].uy-(acunit[acunit[ts].target].uheight/2)))
							{
								acunit[ts].prep = 4;
							}
							if (acunit[ts].uy > (acunit[acunit[ts].target].uy-(acunit[acunit[ts].target].uheight/2)))
							{
								acunit[ts].prep = 0;
							}
						}
						
						if (acunit[ts].explo == false)
						{
						if (acunit[ts].utype == 1) // alium
							{acunit[ts].unitpic = buff_alium[acunit[ts].prep];}
						if (acunit[ts].utype == 2) // commeatus
							{acunit[ts].unitpic = buff_comm[acunit[ts].prep];}
						if (acunit[ts].utype == 3) // mucro
							{acunit[ts].unitpic = buff_mucro[acunit[ts].prep];}
						}
					}
					

					
					if (acunit[ts].atdelay <= 0) //150
					{
						if (acunit[ts].ishot == false && acunit[ts].cmdd == false)
						{
						acunit[ts].s_shot.play();
						acunit[ts].ishot=true;
						}
								if (acunit[ts].hitc == 0) //0
								{
					if (acunit[ts].attx+30 < acunit[acunit[ts].target].ux+(acunit[acunit[ts].target].uwidth/2)) {acunit[ts].attx+=2;}
					if (acunit[ts].attx+30 > acunit[acunit[ts].target].ux+acunit[acunit[ts].target].uwidth) {acunit[ts].attx-=2;}
					if (acunit[ts].atty+30 < acunit[acunit[ts].target].uy+(acunit[acunit[ts].target].uheight/2)) {acunit[ts].atty+=2;}
					if (acunit[ts].atty+30 > acunit[acunit[ts].target].uy+acunit[acunit[ts].target].uheight) {acunit[ts].atty-=2;}
								}
							
					}
					else
					{
					acunit[ts].atdelay--;
					}
					
					
					
					if (acunit[ts].attx+30 >= acunit[acunit[ts].target].ux + (acunit[acunit[ts].target].uwidth/2))
						{if (acunit[ts].attx+30 <= acunit[acunit[ts].target].ux+acunit[acunit[ts].target].uwidth)
							{if (acunit[ts].atty+30 >= acunit[acunit[ts].target].uy + (acunit[acunit[ts].target].uheight/2))
								{if (acunit[ts].atty+30 <= acunit[acunit[ts].target].uy+acunit[acunit[ts].target].uheight)
									{
										if (acunit[ts].hitc == 0) {acunit[ts].hitc = 1;}	
									}
								}
							}
						}
						
						// hier passieren sachen mit angreifen
						// wie kollision der rakete etc und hp abziehen
						
						if (acunit[ts].hitc == 10) {acunit[ts].attpic = buff_hit[0];}
										if (acunit[ts].hitc == 20) {acunit[ts].attpic = buff_hit[1];}
										if (acunit[ts].hitc == 30) {acunit[ts].attpic = buff_hit[2];acunit[ts].s_hit.play();}
										if (acunit[ts].hitc == 40) {acunit[ts].attpic = buff_hit[3];}
										if (acunit[ts].hitc == 50) {acunit[ts].attpic = buff_hit[4];}
										if (acunit[ts].hitc == 60) {acunit[ts].attpic = buff_hit[5];}
										if (acunit[ts].hitc == 70) {acunit[ts].attpic = buff_hit[6];}
										if (acunit[ts].hitc == 80) {acunit[ts].attpic = buff_hit[7];}
										if (acunit[ts].hitc == 90) {acunit[ts].attpic = buff_hit[8];}
										
										if (acunit[ts].hitc == 100)
										{
										acunit[ts].attx = acunit[ts].ux + (acunit[ts].uwidth/2);
										acunit[ts].atty = acunit[ts].uy + (acunit[ts].uheight/2);
										acunit[ts].atdelay = 150;
										acunit[acunit[ts].target].hp--;
										acunit[ts].ishot = false;
										
										//für hit animation sorgen indem die attpic = explo pics wird
										// und dieses festhalten solang
										acunit[ts].hitc = 0;
										}

											if (acunit[acunit[ts].target].hp <= 0)
											{
											acunit[ts].attack = false;
											acunit[ts].attpic = buff_missl[0];
											acunit[acunit[ts].target].explo = true;
											}

						
							if (acunit[acunit[ts].target].alive == false)
							{
							acunit[ts].attx = acunit[ts].ux + (acunit[ts].uwidth/2);
							acunit[ts].atty = acunit[ts].uy + (acunit[ts].uheight/2);
							acunit[ts].atdelay = 150;
							acunit[acunit[ts].target].hp--;
							acunit[ts].ishot = false;
							acunit[ts].hitc = 0;
							}	
				}	
			}
			
			for (int sdreh = 0; sdreh < unit_count; sdreh++)
			{
				if ((acunit[sdreh].cmdd == false) && (acunit[sdreh].hitc == 0))
				{
					acunit[sdreh].attpic = buff_missl[0];
					
				// je nach richtung werden hier die raketen bewegt
				
				if (acunit[sdreh].attx < (acunit[acunit[sdreh].target].ux+(acunit[acunit[sdreh].target].uwidth/2)))
					{
					acunit[sdreh].attpic = buff_missl[2];
						if (acunit[sdreh].atty < (acunit[acunit[sdreh].target].uy+(acunit[acunit[sdreh].target].uheight/2)))
						{
						acunit[sdreh].attpic = buff_missl[3];
						}
						if (acunit[sdreh].atty > (acunit[acunit[sdreh].target].uy+(acunit[acunit[sdreh].target].uheight/2)))
						{
						acunit[sdreh].attpic = buff_missl[1];
						}
					}						
				else if (acunit[sdreh].attx > (acunit[acunit[sdreh].target].ux+(acunit[acunit[sdreh].target].uwidth/2)))
					{
					acunit[sdreh].attpic = buff_missl[6];
						if (acunit[sdreh].atty < (acunit[acunit[sdreh].target].uy+(acunit[acunit[sdreh].target].uheight/2)))
						{
						acunit[sdreh].attpic = buff_missl[5];
						}
						if (acunit[sdreh].atty > (acunit[acunit[sdreh].target].uy+(acunit[acunit[sdreh].target].uheight/2)))
						{
						acunit[sdreh].attpic = buff_missl[7];
						}
					}
				else
					{
						if (acunit[sdreh].atty < (acunit[acunit[sdreh].target].uy+(acunit[acunit[sdreh].target].uheight/2)))
						{
						acunit[sdreh].attpic = buff_missl[4];
						}
						if (acunit[sdreh].atty > (acunit[acunit[sdreh].target].uy+(acunit[acunit[sdreh].target].uheight/2)))
						{
						acunit[sdreh].attpic = buff_missl[0];
						}
					}	
				}
			}

			// Shoot
			//----------------------------------------------------------
    	
    		//Schuss bewegung, komplexe sachen :)
			for (int oo = 0; oo < unit_count; oo++)
			{
				if (acunit[oo].hitc > 0 && acunit[oo].alive == false) {acunit[oo].attpic=buff_missl[0];}
				
				if (acunit[oo].cmdd == true)
				{	acunit[oo].prep = 0;
				
				if (acunit[oo].ux < (acunit[oo].desx-(acunit[oo].uwidth/2)))
					{
					acunit[oo].prep = 2;
					acunit[oo].ux+=acunit[oo].speed; // je nach richtung wird hier eine einheit zum ziel bewegt
						if (acunit[oo].uy < (acunit[oo].desy-(acunit[oo].uheight/2)))
						{
						acunit[oo].uy+=acunit[oo].speed;
						acunit[oo].prep = 3;
						}
						if (acunit[oo].uy > (acunit[oo].desy-(acunit[oo].uheight/2)))
						{
						acunit[oo].uy-=acunit[oo].speed;
						acunit[oo].prep = 1;
						}
					}						
				else if (acunit[oo].ux > (acunit[oo].desx-(acunit[oo].uwidth/2)))
					{
					acunit[oo].ux-=acunit[oo].speed;
					acunit[oo].prep = 6;
						if (acunit[oo].uy < (acunit[oo].desy-(acunit[oo].uheight/2)))
						{
						acunit[oo].uy+=acunit[oo].speed;
						acunit[oo].prep = 5;
						}
						if (acunit[oo].uy > (acunit[oo].desy-(acunit[oo].uheight/2)))
						{
						acunit[oo].uy-=acunit[oo].speed;
						acunit[oo].prep = 7;
						}
					}
				else
					{
						if (acunit[oo].uy < (acunit[oo].desy-(acunit[oo].uheight/2)))
						{
						acunit[oo].uy+=acunit[oo].speed;
						acunit[oo].prep = 4;
						}
						if (acunit[oo].uy > (acunit[oo].desy-(acunit[oo].uheight/2)))
						{
						acunit[oo].uy-=acunit[oo].speed;
						acunit[oo].prep = 0;
						} 
					}
				if ((acunit[oo].ux == (acunit[oo].desx-(acunit[oo].uwidth/2))) && (acunit[oo].uy == (acunit[oo].desy-(acunit[oo].uheight/2))) ) {acunit[oo].cmdd = false;}

				if (acunit[oo].utype == 1) // alium
					{
					acunit[oo].unitpic = buff_alium[acunit[oo].prep];
					}
				if (acunit[oo].utype == 2) // commeatus
					{
					acunit[oo].unitpic = buff_comm[acunit[oo].prep];
					}
				if (acunit[oo].utype == 3) // mucro
					{
					acunit[oo].unitpic = buff_mucro[acunit[oo].prep];
					}
				}
			}
			
			// v explosion v
			
			for (int aa = 0; aa < unit_count; aa++)
			{
				if (acunit[aa].alive && acunit[aa].explo)
				{
					acunit[aa].ex++;
					//explosions animation
					if (acunit[aa].ex == 10) {acunit[aa].unitpic = buff_expl[0];}
					if (acunit[aa].ex == 20) {acunit[aa].unitpic = buff_expl[1];}
					if (acunit[aa].ex == 30) {acunit[aa].unitpic = buff_expl[2];acunit[aa].s_ex.play();}
					if (acunit[aa].ex == 40) {acunit[aa].unitpic = buff_expl[3];}
					if (acunit[aa].ex == 50) {acunit[aa].unitpic = buff_expl[4];}
					if (acunit[aa].ex == 60) {acunit[aa].unitpic = buff_expl[5];}
					if (acunit[aa].ex == 70) {acunit[aa].unitpic = buff_expl[6];}
					if (acunit[aa].ex == 80) {acunit[aa].unitpic = buff_expl[7];}
					if (acunit[aa].ex == 90) {acunit[aa].unitpic = buff_expl[8];}
					if (acunit[aa].ex == 100) {acunit[aa].unitpic = buff_expl[9];}
					if (acunit[aa].ex == 110) {acunit[aa].unitpic = buff_expl[10];}
					if (acunit[aa].ex == 120) {acunit[aa].unitpic = buff_expl[10];}
					
					if  (acunit[aa].ex == 130)
					{
					destroy_ship(aa); // schiff zerstoeren wenn explosion endet
					acunit[aa].ex = 0;
					acunit[aa].explo = false;
					}
					
				}
			}
			
			// ^ explosion ^
			
			for (int qq = 0; qq < unit_count; qq++)			
			{
				if((acunit[qq].ux >= acunit[acunit[qq].target].ux-acunit[qq].range && acunit[qq].ux <= acunit[acunit[qq].target].ux+acunit[qq].range) && (acunit[qq].uy >= acunit[acunit[qq].target].uy-acunit[qq].range && acunit[qq].uy <= acunit[acunit[qq].target].uy+acunit[qq].range))
				{/*alles ok und so*/} else { acunit[qq].attack = false; } // attack bedingungen nochmals prüfen und ggf attacke unterbrechen
			}
			
		if ( zahler == 0 && starto) {loser = true;this.stop();music.stop();s_lose.play();} // wenn deine einheiten 0 dann verloren
		
		

			for (int cg = 0; cg < unit_count; cg++) // gegnerische einheiten zaehlen
			{
				if (acunit[cg].owner != player && acunit[cg].alive) { e_z++; }
			}
		
		if (e_z == 0) {winner = true;this.stop();music.stop();s_win.play();} // wenn gegner keine einheiten mehr hat dann gewonnen	

      	repaint();
    
    	framecount++;
      	
      	try	
      		{
        		Thread.sleep(schlaf); // thread wartezeit
      		}
      		catch (InterruptedException e)
      		{
         		//nothing
      		}
     	}
  }
  
	public void update (Graphics g) // double buffering
	{
		// Initialisierung des DoubleBuffers
		if (dbImage == null)
		{
			dbImage = createImage (this.getSize().width, this.getSize().height);
			dbg = dbImage.getGraphics ();
		}
		// Bildschirm im Hintergrund löschen
		dbg.setColor (getBackground ());
		dbg.fillRect (0, 0, this.getSize().width, this.getSize().height);
		// Auf gelöschten Hintergrund Vordergrund zeichnen
		dbg.setColor (getForeground());
		paint (dbg);
		// Nun fertig gezeichnetes Bild Offscreen auf dem richtigen Bildschirm anzeigen
		g.drawImage (dbImage, 0, 0, this);
	}
 
	public void paint(Graphics g)
	{  		
			g.drawImage(map,mapx,mapy,this); // map, karte zeichnen
			
			for (int ei = 0; ei < unit_count; ei++)
			{
				
				if (acunit[ei].alive == true)
					{
					g.drawImage(acunit[ei].unitpic,acunit[ei].ux,acunit[ei].uy,this);
					if (wires) // wenn wires aktiv sind
					{
					g.setColor(mark); // wires zu targets und zum schiff mittel punkt
					g.drawLine(acunit[ei].ux,acunit[ei].uy,acunit[acunit[ei].target].ux,acunit[acunit[ei].target].uy);
					g.setColor(new Color(244,80,80));
					g.drawLine(acunit[ei].ux,acunit[ei].uy,acunit[ei].attx,acunit[ei].atty);
					}
					if (marking)
						{
							if (acunit[ei].ux >= conx1 && acunit[ei].ux <= conx2 && acunit[ei].uy >= cony1 && acunit[ei].uy <= cony2)
							{
								if (acunit[ei].owner == player) { acunit[ei].chose = true;}
							}
						}
					}
					
				if (acunit[ei].chose == true)
					{
						g.setColor(mark); 
						g.drawRect(acunit[ei].ux,acunit[ei].uy,acunit[ei].uwidth,acunit[ei].uheight);
						if (marki > 0)
							{
							g.setColor(new Color(100,240,100));
							g.fillOval(px-3, py-3, 7,7);
							g.drawOval(px-marki,py-marki,((marki*2)+1),((marki*2)+1));
							g.setColor(mark);
							marki++;
							}
						if (marki >= 25) { marki = 0; }
					}
						
			}
			
			for (int ho = 0; ho < unit_count; ho++) // die raketen zeichnen wenn ein angriff besteht
			{
					if (acunit[ho].attack == true && acunit[ho].atdelay == 0 && acunit[ho].alive == true)
					{
					g.drawImage(acunit[ho].attpic,acunit[ho].attx,acunit[ho].atty,this);
					}
			}
			
			g.setColor(bg);
			g.fillRect(870,45,70,16);		
			g.fillRect(980,45,35,16);
			
			g.setColor(Color.white);
			g.fillRect(menux, menu_buildy-15,bbar,10);
			g.drawImage(menu_build,menux,menu_buildy,this);
			g.drawImage(menu_comm,menux,menu_buildy+125,this);
			g.drawImage(menu_mucro,menux,menu_buildy+250,this);
			g.drawImage(menu_qps,10,menu_buildy,this);
			g.drawImage(menu_station,10,menu_buildy+125,this);
			g.drawImage(menu_qt,10,menu_buildy+250,this);
			g.setColor(fontcolor);
			g.drawImage(img_qps,745,40,this);
			g.drawString(""+QPS,790,57);			
			g.drawImage(img_layze,835,40,this);
			g.drawString(" "+layze,872,57);	
			g.drawImage(limit,945,40,this);
			
			g.drawString(""+zahler+"/"+ulimit/2,982,57);
			
			
			g.setColor(mark);
			if (marking == true && mb == 16) // maus makierung zeichnen, wenn man gedrueckt haelt
											// war tricky ;)
	        	{	
	        		if (((rx2-rx) > 0) && ((ry2-ry) > 0))
	        		{
	        		g.drawRect(rx,ry,(rx2-rx),(ry2-ry));
	        		conx1 = rx;
	        		cony1 = ry;
	        		conx2 = rx + (rx2-rx);
	        		cony2 = ry + (ry2-ry);
	        		}
	        		else if (((rx2-rx) < 0) && ((ry2-ry) < 0))
	        		{
	        		g.drawRect(rx2,ry2,(rx-rx2),(ry-ry2));
	        		conx1 = rx2;
	        		cony1 = ry2;
	        		conx2 = rx2 + (rx-rx2);
	        		cony2 = ry2 + (ry-ry2);	
	        		}
	        		else if (((rx2-rx) > 0) && ((ry2-ry) < 0))
	        		{
	        		g.drawRect(rx,ry2,(rx2-rx),(ry-ry2));	
	        		conx1 = rx;
	        		cony1 = ry2;
	        		conx2 = rx  + (rx2-rx);
	        		cony2 = ry2 + (ry-ry2);
	        		}
	        		else if (((rx2-rx) < 0) && ((ry2-ry) > 0))
	        		{
	        		g.drawRect(rx2,ry,(rx-rx2),(ry2-ry));	
	        		conx1 = rx2;
	        		cony1 = ry;
	        		conx2 = rx2 + (rx-rx2);
	        		cony2 = ry + (ry2-ry);
	        		}
	        	}
	        	
	        if (winner) {g.drawImage(pic_win,250,330,this);} // wenn gewonnen "you win" zeichnen
	        if (loser)  {g.drawImage(pic_lose,250,330,this);} // wenn verloren "you lose" zeichnen
     }
}