> show canvas only <


/* built with Studio Sketchpad: 
 *   https://sketchpad.cc
 * 
 * observe the evolution of this sketch: 
 *   https://studio.sketchpad.cc/sp/pad/view/ro.qdJriqoZLfP86flvFR64O-Lig3UYZBOLTZ1iJ0xytf-oph1cK0760iDhGB0i/rev.51373
 * 
 * authors: 
 *   
 *   Sebi
 *   
 *   
 *   
 *   
 *   
 *   TrobiiX
 *   Sebastian Rieger
 *   
 *   Sebi
 *   Mensch neben mir
 *   

 * license (unless otherwise specified): 
 *   creative commons attribution-share alike 3.0 license.
 *   https://creativecommons.org/licenses/by-sa/3.0/ 
 */ 



class erze {
    //häufigkeit
    int kohleanzahl = 5000;
    int bauxitanzahl = 1000;
    int goldanzahl = 500;
    int emeraldanzahl = 1000;
    
    //minimale tiefe unter der kartenhoehe
    int kohletiefe = 10;
    int bauxittiefe = 600;
    int goldtiefe = 2000;
    int emeraldtiefe = 4000;
    int maxtiefe = 5700;
    
    //items im inventar
    int kohleinv = 0;
    int bauxitinv = 0;
    int goldinv = 0;
    int emeraldinv = 0;
    
    //Kohle
    //Bauxit
    //Gold
    //Emerald
   
    int[] xkohle = new int[kohleanzahl]; 
    int[] xbauxit = new int[bauxitanzahl];
    int[] xgold = new int[goldanzahl];
    int[] xemerald = new int[emeraldanzahl];
    
    int[] ykohle = new int[kohleanzahl]; 
    int[] ybauxit = new int[bauxitanzahl];
    int[] ygold = new int[goldanzahl];
    int[] yemerald = new int[emeraldanzahl];
    
     int ik = 0;
     int ib = 0;
     int ig = 0;
     int ie = 0;
     
     String kurzinfo = "";
     int kurzinfozeit = 1000;
 
    erze() {
        }
        
  void display() {
        //x und y Koordinaten
        for(;ik<xkohle.length;ik++){
       xkohle[ik] = random(karte.b.chunksize*karte.b.x.length/xkohle.length*ik,karte.b.chunksize*karte.b.x.length/xkohle.length*(ik+1));
       ykohle[ik] = random(hoehenausgabe(xkohle[ik])-kohletiefe,hoehenausgabe(xkohle[ik])-maxtiefe);
        }
      for(;ib<xbauxit.length;ib++){
       xbauxit[ib] = random(karte.b.chunksize*karte.b.x.length/xbauxit.length*ib,karte.b.chunksize*karte.b.x.length/xbauxit.length*(ib+1));
       ybauxit[ib] = random(hoehenausgabe(xbauxit[ib])-bauxittiefe,hoehenausgabe(xbauxit[ib])-maxtiefe);
        }
        for(;ig<xgold.length;ig++){
       xgold[ig] = random(karte.b.chunksize*karte.b.x.length/xgold.length*ig,karte.b.chunksize*karte.b.x.length/xgold.length*(ig+1));
       ygold[ig] = random(hoehenausgabe(xgold[ig])-goldtiefe,hoehenausgabe(xgold[ig])-maxtiefe);
        }
        for(;ie<xemerald.length;ie++){
       xemerald[ie] = random(karte.b.chunksize*karte.b.x.length/xemerald.length*ie,karte.b.chunksize*karte.b.x.length/xemerald.length*(ie+1));
       yemerald[ie] = random(hoehenausgabe(xemerald[ie])-emeraldtiefe,hoehenausgabe(xemerald[ie])-maxtiefe);
        }
                //erze zeichnen
        for(int uk = 0;uk< xkohle.length; uk++){
                if( (xkohle[uk]+karte.b.kart) > (-karte.b.renderdistance) && (xkohle[uk]+karte.b.kart) < (width+karte.b.renderdistance) ){
            fill(0);
            oretexture (xkohle[uk]+karte.b.kart,height-ykohle[uk]+karte.b.karty,0,0,0);
                  if   (Math.abs(xkohle[uk]+25-karte.b.kart2)<80&&Math.abs(ykohle[uk]-karte.b.hoehe-karte.b.jump-100)<70)   {
                kohleinv = kohleinv + 1;
                kurzinfo = "collected 1 coal ore";
                kurzinfozeit = 0;
                xkohle[uk] = -1000;
                }
           } 
      }
        for(int ub = 0;ub< xbauxit.length; ub++){
         if( (xbauxit[ub]+karte.b.kart) > (-karte.b.renderdistance) && (xbauxit[ub]+karte.b.kart) < (width+karte.b.renderdistance) ){

            oretexture (xbauxit[ub]+karte.b.kart,height-ybauxit[ub]+karte.b.karty,180,180,180);    
    if (Math.abs(xbauxit[ub]+25-karte.b.kart2)<80&&Math.abs(ybauxit[ub]-karte.b.hoehe-karte.b.jump-100)<70) {
                bauxitinv = bauxitinv + 1;
                xbauxit[ub] = -1000;
                kurzinfo = "collected 1 bauxit ore";
                kurzinfozeit = 0
                }
           } 
       }
        for(int ug = 0;ug< xgold.length; ug++){
if( (xgold[ug]+karte.b.kart) > (-karte.b.renderdistance) && (xgold[ug]+karte.b.kart) < (width+karte.b.renderdistance) ){

             oretexture (xgold[ug]+karte.b.kart,height-ygold[ug]+karte.b.karty,255,255,0);
  if (Math.abs(xgold[ug]+25-karte.b.kart2)<80&&Math.abs(ygold[ug]-karte.b.hoehe-karte.b.jump-100)<70) {
                goldinv = goldinv + 1;
                xgold[ug] = -1000;
                kurzinfo = "collected 1 gold";
                kurzinfozeit = 0;
                }
           } 
       }
        for(int ue = 0;ue< xemerald.length; ue++){
if( (xemerald[ue]+karte.b.kart) > (-karte.b.renderdistance) && (xemerald[ue]+karte.b.kart) < (width+karte.b.renderdistance) ){

            emeraldtexture(xemerald[ue]+karte.b.kart,height-yemerald[ue]+karte.b.karty);
  if (Math.abs(xemerald[ue]+25-karte.b.kart2)<80&&Math.abs(yemerald[ue]-karte.b.hoehe-karte.b.jump-100)<70) {
                emeraldinv = emeraldinv + 1;
                xemerald[ue] = -1000;
                kurzinfo = "collected 1 emerald ore";
                kurzinfozeit = 0;
                }
           } 
      }
   if(kurzinfozeit<60){
       kurzinfozeit++;
      fill(255,0,255);
       text(kurzinfo,spieler.p.x+50,spieler.p.y-kurzinfozeit);
            }
        }
    }

//void weltgenerieren () {  }
void window(){
      fill(255);
           stroke(100);
           strokeWeight(10);
           rect(100,50,width-200,height-100, 15);
             //    textAlign(LEFT,CENTER);
          // textSize(25);
           strokeWeight(1);
           fill(0,160,0);
           
         if(660 < mouseX && mouseX < 700 && 50 < mouseY && mouseY < 90){
          if (mousePressed && (mouseButton == LEFT)) {
            }
            fill(255,0,0);
           }else{
               fill(155,0,0);
               }
               stroke(255,0,0);
           ellipse(680,70,20,20);
             strokeWeight(2);
           stroke(0);
           line(675,65,685,75);
           line(675,75,685,65);
           strokeWeight(0);
           noStroke();
           strokeWeight(1);
           stroke(0);
           textAlign(LEFT);
     resetgrapic();
    }
int closewindow(){
    boolean h = false;
             if(660 < mouseX && mouseX < 700 && 50 < mouseY && mouseY < 90){
          if (mousePressed && (mouseButton == LEFT)) {
              h = true;
              }
         }
    return h;
    }
void resetgrapic(){
    fill(0);
    strokeWeight(1);
    noStroke();
    stroke(0);
    textAlign(LEFT);
  //  textAlign(LEFT,CENTER);
    textSize(25);
    //imageMode(CORNER);
    }
int bewegungsmelder(int x,int y,int radius) {
      int t = 0;
 if( (abs(hoehenausgabe(x)+y-height) )< radius*2){
        if(abs(karte.b.kart2-x)<(radius*1) ){ 
            t = 1;
        }
                  for(int z = 0; z< mob.z.xPos.length; z++){
                         if(abs(x-mob.z.xPos[z])<radius*1.5){
                        t = 2;
                            }
                    }
                   for(int i = 0;i<mob.mensch1.xPos.length;i++){
                       if(abs(x-mob.mensch1.xPos[i])<radius*1.5){
                           t = 3.1;
                           }
                       } 
                   for(int i = 0;i<mob.mensch2.xPos.length;i++){
                       if(abs(x-mob.mensch2.xPos[i])<radius*1.5){
                           t = 3.2;
                           }
                       } 
                   for(int i = 0;i<mob.mensch3.xPos.length;i++){
                       if(abs(x-mob.mensch3.xPos[i])<radius*1.5){
                           t = 3.3;
                           }
                       } 
                   for(int i = 0;i<mob.mensch4.xPos.length;i++){
                       if(abs(x-mob.mensch4.xPos[i])<radius*1.5){
                           t = 3.4;
                           }
                       } 
             }        
      return t;
    }

void damage(int x,int y,int radius,int damage){
    if( (abs(hoehenausgabe(x)+y-height)) < radius*2){ 
        if(abs(karte.b.kart2-x)<(radius*1) ){ //-spieler.p.x
            mob.z.health = mob.z.health -damage;
        }
                      for(int z = 0; z< mob.z.xPos.length; z++){
                         if(abs(x-mob.z.xPos[z])<radius*1.5){
                           mob.z.health = mob.z.health + 30;
                           karte.l.Geld = karte.l.Geld + 5;
                           mob.z.zombiehealth [z] = mob.z.zombiehealth [z] -damage;
                            }
                    }
                   for(int i = 0;i<mob.mensch1.xPos.length;i++){
                       if(abs(x-mob.mensch1.xPos[i])<radius*1.5){
                           mob.mensch1.health[i] = mob.mensch1.health[i] - damage;
                           }
                       } 
                   for(int i = 0;i<mob.mensch2.xPos.length;i++){
                       if(abs(x-mob.mensch2.xPos[i])<radius*1.5){
                           mob.mensch2.health[i] = mob.mensch2.health[i] - damage;
                           }
                       } 
                   for(int i = 0;i<mob.mensch3.xPos.length;i++){
                       if(abs(x-mob.mensch3.xPos[i])<radius*1.5){
                           mob.mensch3.health[i] = mob.mensch3.health[i] - damage;
                           }
                       } 
                   for(int i = 0;i<mob.mensch4.xPos.length;i++){
                       if(abs(x-mob.mensch4.xPos[i])<radius*1.5){
                           mob.mensch4.health[i] = mob.mensch4.health[i] - damage;
                           }
                       } 
             }
    }
void alleitemsaus(){
    spieler.aktiv = true;
    karte.w.miningdrill = false;
    karte.w.shotgun = false;
    karte.w.mine = false;
    karte.w.raktenwerfer = false;
    karte.w.bombe = false;
    karte.w.pinsel = false;
    }
    
void karteanpassen(int hoehe,int start,int laenge){
    for(int i = round(start/karte.b.chunksize);i<( (start+laenge)/karte.b.chunksize);i++){
        if(karte.b.x[i]>(hoehe+1) ){
        karte.b.x[i] = karte.b.x[i]-1;
        }
        if(karte.b.x[i]<(hoehe-1) ){
                karte.b.x[i] = karte.b.x[i]+1;
                }
                if(i< ( (start+laenge/2)/karte.b.chunksize) ){
                    int weite = (i-start/karte.b.chunksize)/(laenge/2/karte.b.chunksize);
                    int tiefe =
                     (1-cos(1.5*PI+weite*PI/2))
                     *karte.b.x[round( (start-laenge/2)/karte.b.chunksize)-1]
                    +(cos(1.5*PI+weite*PI/2))
               *hoehe;

                        if( (karte.b.x[i-(laenge/2)/karte.b.chunksize])< (tiefe-1) ){
                            karte.b.x[i-(laenge/2)/karte.b.chunksize] = karte.b.x[i-(laenge/2)/karte.b.chunksize] + 1;
                        }
                        if( (karte.b.x[i-(laenge/2)/karte.b.chunksize])> (tiefe+1) ){
                            karte.b.x[i-(laenge/2)/karte.b.chunksize] = karte.b.x[i-(laenge/2)/karte.b.chunksize] - 1;
                        }
                    }else{
                    int weite2 = (i-(start+(laenge/2))/karte.b.chunksize)/(laenge/2/karte.b.chunksize);
int tiefe2 = 
cos(1.5*PI+weite2*PI/2)
 *karte.b.x[round((start+laenge+laenge/2)/karte.b.chunksize)+1]
 +(1-cos(1.5*PI+weite2*PI/2))
     *hoehe;
                
                        if( (karte.b.x[i+(laenge/2)/karte.b.chunksize])< (tiefe2-1) ){
                            karte.b.x[i+(laenge/2)/karte.b.chunksize] = karte.b.x[i+(laenge/2)/karte.b.chunksize] + 1;
                        }
                        if( (karte.b.x[i+(laenge/2)/karte.b.chunksize])> (tiefe2+1) ){
                            karte.b.x[i+(laenge/2)/karte.b.chunksize] = karte.b.x[i+(laenge/2)/karte.b.chunksize] - 1;
                        }
                   }
        }
    }

 void explosion(int xexplosion, int yexplosion, int explosionsradius){
  int extiefe = explosionsradius;
 // +200-abs(-height-yexplosion+hoehenausgabe(xexplosion)); 
  if (extiefe < 1){
      extiefe = 0;}
         for(int i = -explosionsradius/karte.b.chunksize;i<explosionsradius/karte.b.chunksize;i++){
                       karte.b.x[ round((xexplosion)/karte.b.chunksize+i) ] =   extiefe*sin(PI*(1-(i-explosionsradius/karte.b.chunksize)/(2*(explosionsradius/karte.b.chunksize)))) 
    +karte.b.x[ round(( xexplosion)/karte.b.chunksize+i) ] ;
                     }
                     damage(xexplosion,yexplosion,explosionsradius*3,100);
  g.ee.zeit = 0;
  g.ee.x = xexplosion; + karte.b.kart
  g.ee.y = yexplosion; + karte.b.karty
 g.ee.radius = explosionsradius;
    }
PImage webImg;
PImage webImg2;
PImage webImg3;
PImage webImg4;
PImage webImg5;
PImage webImg6;
PImage webImg7;
PImage webImg8;
PImage webImg9;
PImage webImg10;

player spieler = new player(0,400,300,"schwarz",40);
entity mob = new entity();
map karte = new map("gelb",100);
textfeld tf = new textfeld("gelb",20);
inventory inv = new inventory();
 gameengine g = new gameengine();
 
 
class gameengine {
    bluteffekt eb;
    explosionseffekt ee;
    tastenbelegung t;
    boolean aktiv = true;
    gameengine() {
        ee = new explosionseffekt();
        eb = new bluteffekt();
        t = new tastenbelegung();
        }
    void zeichne() {
        eb.display();
        ee.display();
        t.display();
        }
    }

class bluteffekt {
    int x;
    int y;
    
    bluteffekt(){
        }

    void display() {
        
        fill(0,255,0);
       
        }
    }
class explosionseffekt {
    int anzahl = 100;
    int[] yPos = new int[anzahl];
    int[] xPos = new int[anzahl];
    int[] xSpeed = new int[anzahl];
    int[] ySpeed = new int[anzahl];
    int[] rotation = new int[anzahl];
    int[] winkel = new int[anzahl];
    int[] laenge = new int[anzahl];
    int[] breite = new int[anzahl];
    int[] r = new int[anzahl];
    int[] g = new int[anzahl];
    int[] b = new int[anzahl];
    
    int x= 400;
    int maxspeed = 30;
    int y=50;
    int zeit = 200;
    int radius = 300;
    explosionseffekt (){
        }

    void display() {
      
        for(int u = 0; u < anzahl; u++){
         fill(r[u],g[u],b[u]);
            xPos[u] = xPos[u] + xSpeed[u];
            yPos[u] = yPos[u] + ySpeed[u];
            
pushMatrix();   
translate(xPos[u]+ karte.b.kart,yPos[u]+ karte.b.karty);
rotate(winkel[u]);
rect(-0.5*breite[u],-0.5*laenge[u],breite[u],laenge[u]);
popMatrix(); 
            if(yPos[u]>(-hoehenausgabe(xPos[u])+karte.b.karty+height) ){
                ySpeed[u] = 0;
                xSpeed[u] = 0;
                }else{
                    ySpeed[u] = ySpeed[u] +zeit/10;
                    winkel[u] = winkel[u] + rotation[u];
                    }
            
            }
        
        if(zeit<radius){
            if(zeit == 0){
                for(int j = 0;j<anzahl;j++){
                    xPos[j] = x;
                    yPos[j] = y;
                      maxspeed = radius/20;
                    xSpeed [j] = random(-maxspeed,maxspeed);
                    ySpeed [j] = random(-maxspeed,maxspeed);
                    rotation[j] = random(-0.3,0.3);
                    laenge[j] = random(3,20);
                    breite[j] = random(3,20);
                    winkel[j] = 0;
                    r[j] = random(0,255);
                    g[j] = random(0,255);
                    b[j] = random(0,255);
                    }
                }
        zeit = zeit+5;
      stroke(255-255*zeit/radius,255-255*zeit/radius,0);
      noFill();
      strokeWeight(  30*(1-zeit/radius) );
        ellipse(x+ karte.b.kart,y+ karte.b.karty,zeit*3,zeit*3);
   noStroke();
               fill(255-255*zeit/radius,0,0);
        ellipse(x+ karte.b.kart,y+ karte.b.karty,zeit,zeit); //+height-100
     //   for(int i = 0;i<100;i++){
      //      stroke(random(0,255-255*zeit/radius),random(0,255-255*zeit/radius),random(0,255-255*zeit/radius) );
  //          strokeWeight(random(1,4));
 //    pushMatrix();   
 //   translate(x,y);
 //   rotate(zeit);
 //   point(random(-zeit,zeit),random(-zeit,zeit));
 //   popMatrix(); 
    //        }
                }else{
            //  zeit = 0;
                    }
                    resetgrapic();
        }
    }
 
class tastenbelegung {
    
    tastenbelegung(){
        }

    void display() {
        
        
        }
    }
void setup () {
    
    smooth();
    String url = "http://fs5.directupload.net/images/170413/2pgppchs.png";
     //String url = "http://www.carworld-24.de/CMS/media/Hersteller_Fotos/Volkswagen/Volkswagen_Tiguan_Neuwagen.jpeg";
     String url2 = "http://fs5.directupload.net/images/170413/z4yu29q5.png";
     //String url2 = "http://news.meinauto.de/seat-ateca-2016-ausen-vorne.JPG";
     String url3 = "http://www.netanimations.net/tumblr_m9ul5vnUCo1qaw2kw.gif";
     String url4 = "https://lmgb7w.bn1301.livefilestore.com/y4mpXgzK0x0_TaivzYrGrq-A-XJngQf_GS7MPgrj05T6j6y5xa8gfO8p6tEmWk72nhjgLFnmZHNdoNxCESj9T0TH7i5MZG6vfU_yw9IlpY_dS3ro67Z0NxHrEK1fHz-pjGlF4AYck6ctODOmZ1hpvfZaxc-gu6V4zZVZgkDyLx1O37QkqbbBSZbzIVuvVt-80S6CarEK8bhkqIn8ViN76b1kw/ezgif.com-rotate%20%281%29.gif?psid=1";
     String url5 = "https://yrfqna.bn1301.livefilestore.com/y4mX0x3VgN7Cv2ALZXDfaNM1MMJXnlAFidNrTEw99Jq6lNwGcNln3wb3HLrHhIKgEhcIXqQOz7oP0JHdaDp-VT_O4ce7UDmnz8RqwJMg-Rtbcr8JQDuy_FViYka98jfGDRYDAMB-3C2BiO2ONIdO0hOKTHLBso7-5AI2eyVeLMf1-363f4ycK05VFVZyJwxUmyn7LHELqopbIwTt_jLxADLxw/bild.jpg?psid=1";
          String url6 = "https://2dq0jg.bn1301.livefilestore.com/y4m2ULgG6-HasDoVzV_oR3Tb8N37XaNiUtg3kz5D1E5w_-C4LvI7EJSuurZCIuvFV80IvRmPPtI2RyezWWT9zDJNHjXjWyprt8o5gmL8xjJLzPGvgMfScO5LtJ_WvF3wQf40HBQHiLmocwR00FHUllJXUIbmZAYu3WhfkuV6S0gKwRPic3BnpB3jQNgpH1ZXAi91buWdOg_q34lVeSCJKHblg/jetpack.png?psid=1";
          String url7 = "http://fs5.directupload.net/images/170421/j5qaurw4.png";
          String url8 = "http://fs5.directupload.net/images/170420/vwfuq44d.png"; //Bazooka
          String url9 = "http://fs5.directupload.net/images/170420/3c8woy2b.png"; //Rakete
        
 webImg = loadImage(url, "png");
 webImg2 = loadImage(url2, "png");
 webImg3 = loadImage(url3, "gif");
 webImg4 = loadImage(url4, "gif");
 webImg5 = loadImage(url5, "jpg");
 webImg6 = loadImage(url6, "png");
 webImg7 = loadImage(url7, "jpg");
 webImg8 = loadImage(url8, "png");
 webImg9 = loadImage(url9, "png");
 webImg10 = loadImage("http://view.stern.de/de/picture/1085563/wolken-wolkenstimmung-robbyb-weltuntergangsstimmung-kleine-weltuntergang-940.jpg");
  
    size(800,500);
    f = createFont("Arial",16,true);
    textFont(f,25);
    textAlign(LEFT);
    }
    
class entity {
    npc mensch1;
    npc mensch2;
    npc mensch3;
    npc mensch4;
    landschaft see;
    landschaft stadt;
    zug zug1;
    auto a;
    jetpack j;
    zombie z;
    boolean aktiv= false;
    entity() {
      z = new zombie();
      j = new jetpack();
      a = new auto();
      zug1 = new zug();
      mensch1 = new npc();
      mensch2 = new npc();
      mensch3 = new npc();
      mensch4 = new npc();
      see = new landschaft();
      stadt = new landschaft();
    }
    void zeichne() {
      zug1.display();
      z.display();
      j.display();
      a.display();
      see.display(1,"http://wl32www670.webland.ch/images/Baum_200x205-3.gif",200,200);
      stadt.display(1,"http://www.877getlimo.net/sitebuilder/images/ChicagoSkyline.gif",800,400);
      mensch1.display("sponge",50,"http://vignette4.wikia.nocookie.net/epic-rap-battles-of-cartoons/images/c/cb/SpongeBob.png/revision/latest?cb=20131030015532");
      mensch2.display("patrik",50,"http://vignette1.wikia.nocookie.net/fictionalcharacters/images/c/cf/Patrick.png/revision/latest?cb=20131121012334");
      mensch3.display("soldat",50,"http://images.esellerpro.com/2466/500.500@I/416/52/eb-4009.png");
      mensch4.display("feuerwehrmann",50,"http://www.feuerwehreisbergen.de/sites/default/files/dateianhaenge/137/feurewehrmannschwerehupfbekleidung.png");
    }
}

class landschaft {
    int maxanzahl = 100;
    int u = 0;
    int u2 = 0;
    int[] xPos = new int[maxanzahl];
    int[] yPos = new int[maxanzahl];
    int[] xP = new int[maxanzahl];
    int[] yP = new int[maxanzahl];
    int bild;
    landschaft() {
        }
    void display(int anzahl,String link,int a,int b) {
        if(u2<1){
            bild = loadImage(link);
            u2++; 
            }
        for(;u<anzahl;u++){
          xPos[u] = zufallsx();
          }
        for(int i = 0;i<anzahl;i++){
            yPos[i] = hoehenausgabe(xPos[i]);
            karteanpassen(yPos[i],xPos[i]-(a/2),a);
            
           // karteanpassen(100,karte.b.x.length*10,10000);
            
            xP[i] = xPos[i]+karte.b.kart;
            yP[i] = karte.b.karty-yPos[i]+height;
           imageMode(CENTER);
            image(bild,xP[i],yP[i]-b/2,a,b);
            imageMode(CORNER);
            }
        }
    }
class zug {
    int wartezeit = 4;
    int beschleunigung = 1;
    int entschleunigung = 3;
    int hoehstgeschwindigkeit = 80;
    int anzahl = 13;
    int zustand;
    int tastenanzahl;
    int haltezeit;
    int geschwindigkeit;
    boolean eingestiegen = false;
    boolean rechts = true;
    int station = 1;
    int xzug;
    int yzug;
    int xz;
    int yz;
    int[] xPos = new int[anzahl];
    int[] yPos = new int[anzahl];
    int[] xP = new int[anzahl];
    int[] yP = new int[anzahl];
    int u = 0;
    int images;
    int images2;
    zug() {
        images = loadImage("http://www.lokifahrer.ch/images/Lokgrafik/2103.gif");
        images2 = loadImage("https://www.shareicon.net/data/2016/07/07/792299_transportation_512x512.png");
        }
    void display() {
        
        for(;u<anzahl;u++){
          xPos[u] = random(
              karte.b.renderdistance/4+
                  (karte.b.chunksize*karte.b.x.length-karte.b.renderdistance/2)
                      /xPos.length*(u),
              karte.b.renderdistance/4+
                  (karte.b.chunksize*karte.b.x.length-karte.b.renderdistance/2)
                      /xPos.length*(u+1)  );
          xzug = xPos[0];
          }
        for(int i = 0;i<anzahl;i++){
            yPos[i] = hoehenausgabe(xPos[i]);
            xP[i] = xPos[i]+karte.b.kart;
            yP[i] = karte.b.karty-yPos[i]+height;
            imageMode(CENTER);
            image(images2,xP[i],yP[i]-100,600,200);
            
            karteanpassen(yPos[i],xPos[i]-300,600);
            
      }
            yzug = hoehenausgabe(xzug);
            xz = xzug+karte.b.kart;
            yz = karte.b.karty-yzug+height;
           
           image(images,xz,yz,2400,400);
           imageMode(CORNER);
           
  xzug = xzug + geschwindigkeit*(2*rechts-1);
  switch(zustand){
       case 0://halten
            if( abs(karte.b.kart2-xzug)<1200 ){
               if(eingestiegen == false){
                info("Press Arrow key down to enter train");
                }
                if(tastenanzahl == 1){
                    if(eingestiegen == false){
                    eingestiegen = true;
                    karte.w.nowalk = true;
                           }else{
                               eingestiegen = false;
                               karte.w.nowalk = false;
                               }
                        }
                }
                if(second()-haltezeit>wartezeit){
                    zustand = 1;
                    haltezeit = 0;
                    }
                break;
     case 1://beschleunigung
         if(geschwindigkeit < hoehstgeschwindigkeit){
                geschwindigkeit = geschwindigkeit+beschleunigung;
             }else{
                zustand = 2;
             }
                break;
    case 2://rollen
                if( ( (xPos[station]-xzug)*(2*rechts-1) )< (hoehstgeschwindigkeit/entschleunigung)   ){ 
                   station = station+(2*rechts-1); 
                    zustand = 3;
            }
                break;
   case 3://bremsen
                if(geschwindigkeit>0){
                    geschwindigkeit = geschwindigkeit -entschleunigung;
                    }else{
                      if( (xzug+100)>(xPos[xPos.length-1]) ){
                      rechts = false;
                      station = xPos.length-2;
                      }  
                  if( (xzug-100)<xPos[0]){
                      rechts = true;
                      station = 1;
                      }   
                        geschwindigkeit = 0;
                        zustand = 0;
                        haltezeit = second();
                        }
                break;
                }  
            if(eingestiegen == true){    
        if(rechts){
                      if(spieler.p.x < (3*width/4)){
                          spieler.p.x = spieler.p.x + geschwindigkeit*(2*rechts-1);
                          }else{
                              karte.b.kart = karte.b.kart -geschwindigkeit*(2*rechts-1);
                              }
        }else{
                                if(spieler.p.x > (width/4)) {     
           spieler.p.x = spieler.p.x + geschwindigkeit*(2*rechts-1);
                } else {
                karte.b.kart = karte.b.kart -geschwindigkeit*(2*rechts-1);
           
                              }
                      }

                karte.b.kart2 = karte.b.kart2 +geschwindigkeit*(2*rechts-1); //+(xzug-karte.b.kart2)/100;
 
            }
                if (keyPressed==true && keyCode == DOWN) {
                tastenanzahl++;
                }else{
                    tastenanzahl = 0;
               }
        }
    }

class npc {
    int maxanzahl = 401;
    int walkspeed = 6;
    int minaktionszeit = 20;
    int maxaktionszeit = 70;
    
    int[] xPos = new int[maxanzahl];
    int[] yPos = new int[maxanzahl];
    int[] xP = new int[maxanzahl];
    int[] yP = new int[maxanzahl];
    int[] aktionszeit = new int[maxanzahl];
    int[] jump = new int[maxanzahl];
    int[] langeweilezeit = new int[maxanzahl];
    int[] zustand = new int[maxanzahl];
    int[] health = new int[maxanzahl];
  //  int[] images = new int[2];
    int images;
    int u = 0;
    int u2 = 0;
    npc() {
     
        }
    void display(String name,int anzahl,String link) {
        if(u2<1){
            u2=u2+1;
           images = loadImage(link); 
        }else{
        for(;u<anzahl;u++){
          xPos[u] = zufallsx();
          health[u] = 100;
          }
        for(int i = 0;i<anzahl;i++){
            yPos[i] = hoehenausgabe(xPos[i]);
            
            xP[i] = xPos[i]+karte.b.kart;
            yP[i] = karte.b.karty-yPos[i]+height-jump[i];
            if(health[i]>0){
            image(images, xP[i],yP[i],100,-160);
            }
            langeweilezeit[i]++;
 switch(zustand[i]){
      case 0:
         if(langeweilezeit[i]<aktionszeit[i]){
             
            }else{
                zustand[i] = floor(random(0,4));
                langeweilezeit[i] = 0;
                aktionszeit[i] = random(minaktionszeit,maxaktionszeit);
                }
                break;
      case 1: //links gehen
       if(langeweilezeit[i]<aktionszeit[i]){
                xPos[i] = xPos[i]-walkspeed;
           }else{
                zustand[i] = 0;
                langeweilezeit[i] = 0;
                aktionszeit[i] = 2*random(minaktionszeit,maxaktionszeit);
                }
                break;
     case 2: //rechts gehen
       if(langeweilezeit[i]<aktionszeit[i]){
                xPos[i] = xPos[i]+walkspeed;
          }else{
                zustand[i] = 0;
                langeweilezeit[i] = 0;
                aktionszeit[i] = 2*random(minaktionszeit,maxaktionszeit);
                }
                break;
      case 3: //springen
                if(jump[i]>=0){
                    jump[i] = (langeweilezeit[i]-langeweilezeit[i]*langeweilezeit[i]/20)*20;
                    }else{
                        jump[i] = 0;
               zustand[i] = 0;
                langeweilezeit[i] = 0;
                aktionszeit[i] = 2*random(minaktionszeit,maxaktionszeit);
                        }
                break;
                    }
                }
            }
        }
    }

class kasten {
  int hoehe = 45;
  int breite = 45;
  int tastenanzahl = 0;
  boolean geoeffnet;

  kasten() {
  }
  
  void display() {
             if (keyPressed == true && key == '1') {
     alleitemsaus();
     karte.w.raktenwerfer = true;
     }
             if (keyPressed == true && key == '2') {
     alleitemsaus();
     karte.w.shotgun = true;
     }
             if (keyPressed == true && key == '3') {
     alleitemsaus();
     karte.w.mine = true;
     }
             if (keyPressed == true && key == '4') {
     alleitemsaus();
     karte.w.bombe = true;
     }
             if (keyPressed == true && key == '5') {
     alleitemsaus();
     karte.w.miningdrill = true;
     spieler.aktiv = false;
     }
             if (keyPressed == true && key == '6') {
     alleitemsaus();
     karte.w.pinsel = true;
     }

     if(tastenanzahl == 1 ) {
         if (geoeffnet == false){
             geoeffnet = true;
             } else {
                 geoeffnet = false
                 }
         } 
        if (keyPressed == true) {
        if(key == 'e') {
       tastenanzahl = tastenanzahl + 1;
   }
        }else{
       tastenanzahl = 0;
       }
      
      if(geoeffnet) {
      
      fill(255);
      rect(400-(hoehe*5),400,hoehe,breite); //links
 
      
      rect(400-(hoehe*4),400,hoehe,breite); //links
      rect(400-(hoehe*3),400,hoehe,breite); //links
      rect(400-(hoehe*2),400,hoehe,breite); //links
      rect(400-hoehe,400,hoehe,breite); //links
      rect(400,400,hoehe,breite); //mitte
      rect(400+hoehe,400,hoehe,breite); //rechts
      rect(400+(hoehe*2),400,hoehe,breite); //rechts
      rect(400+(hoehe*3),400,hoehe,breite); //rechts
      rect(400+(hoehe*4),400,hoehe,breite); //rechts
    //  rect(400+(hoehe*5),400,hoehe,breite); //rechts
      
      //Zeile 2
      rect(400-(hoehe*7),400+hoehe+3,hoehe,breite); //links 2
      rect(400-(hoehe*5),400+hoehe+3,hoehe,breite); //links
      rect(400-(hoehe*4),400+hoehe+3,hoehe,breite); //links
      rect(400-(hoehe*3),400+hoehe+3,hoehe,breite); //links
      rect(400-(hoehe*2),400+hoehe+3,hoehe,breite); //links
      rect(400-hoehe,400+hoehe+3,hoehe,breite); //links
      rect(400,400+hoehe+3,hoehe,breite); //mitte
      rect(400+hoehe,400+hoehe+3,hoehe,breite); //rechts
      rect(400+(hoehe*2),400+hoehe+3,hoehe,breite); //rechts
      rect(400+(hoehe*3),400+hoehe+3,hoehe,breite); //rechts
      rect(400+(hoehe*4),400+hoehe+3,hoehe,breite); //rechts
    //  rect(400+(hoehe*5),400+hoehe+3,hoehe,breite); //rechts
      rect(400+(hoehe*6),400+hoehe+3,hoehe,breite); //rechts 2
      fill(0,80,255);
           textSize(17);
   //   textAlign(RIGHT,BOTTOM);
      textAlign(RIGHT, BOTTOM);
    //  text("137",400-(hoehe*4),hoehe+3);
      
      
      textSize(25);
      textAlign(LEFT,BOTTOM);
      //hier bitte auch mit MouseX und MouseY programmieren
      } 
   }
}

class map {
    boden b;
    waffe w;
    sonne s;
    erze e;
    rakete r;
    menu m;
    laden l;
    boolean aktiv = true; 
    map(String cs,int cr) {
      b = new boden();
      w = new waffe();
      s = new sonne(cs,cr);
      e = new erze();
      r = new rakete();
      m = new menu();
      l = new laden();
    }
  void zeichne() {
    b.display();
    w.display();
    s.display();
    e.display();
    r.display();
    l.display();
    m.display();
    
  }
}
    
class boden {
    int renderdistance = 500; //8000
    int maxhoehe = 800;
    int minhoehe = 150;
    int mapsize = 10000;
    int chunksize = 20;
    int steilheit = 1.8;
   
    int jump;
    int jumptime;
    boolean springen;
    int karty;
    int hoehe;
    
    int walkspeed = 150*chunksize/100; 
    int walkspeed2;
    
    int chunky1;
    int chunky2;
    int chunkx;
    int alpha;

     int[] x = new int[mapsize]; //*100/chunksize
     int u = 2;
    int  kart = -x.length*chunksize/2;
    int kart2 =  spieler.p.x- kart+chunksize;

    boden() {  
    }
     
      void display() {
          
        for ( ;u<x.length; u++) {
            x [0] = 200;
            x [1] = 200;
      x[u] =   Math.abs(
                x[u-1]         // wie die letzt höhe 
                + (x[u-1] - x[u-2])            //wie die letzte steigung
                /( (2+Math.abs
               (steilheit*6-Math.abs(x[u-1] - x[u-2]))
               -(steilheit*6-Math.abs(x[u-1] - x[u-2]))
               )/2)
                +random(-steilheit-(Math.abs(maxhoehe-x[u-1])-(maxhoehe-x[u-1]))/2
                ,steilheit+
                (Math.abs(x[u-1]-minhoehe)-(x[u-1]-minhoehe))/2)/chunksize*25);
    
      }

          noStroke ();
            for (int i = (Math.floor(kart2/chunksize)-renderdistance/chunksize); i   < (Math.floor(kart2/chunksize)+renderdistance/chunksize); i++) {
          stroke(0,205,0);
          strokeWeight(33);
          noFill();
          curve(
              chunksize*i-1*chunksize+kart,height-x[i+0]+karty,
              chunksize*i+0*chunksize+kart,height-x[i+1]+karty,
              chunksize*i+1*chunksize+kart,height-x[i+2]+karty,
              chunksize*i+2*chunksize+kart,height-x[i+3]+karty);

          noStroke();
          strokeWeight(1);

          fill(139,69,19);     //Braun
          stroke(139,69,19);
          quad(chunksize*i-chunksize+kart,height+karty,
          chunksize*i+kart+1,height+karty,
          chunksize*i+kart+1,height-x[i+1]+karty,
          chunksize*i-chunksize+kart,height-x[i+0]+karty); //Erde
          
          stroke(0);
          //gestein
          fill(100,100,100);
          image(webImg5,0,500+karty);
          
          if((karty-x[i+0])<0){
      
              }
         }
                if(karte.b.kart2<renderdistance){
                    karte.b.kart = karte.b.kart -x.length*chunksize+2*renderdistance;
                  karte.b.kart2 = karte.b.kart2 +x.length*chunksize-2*renderdistance;         
                  }
                if(karte.b.kart2>x.length*chunksize-renderdistance){
                    karte.b.kart = karte.b.kart +x.length*chunksize-2*renderdistance;
                  karte.b.kart2 = karte.b.kart2 -x.length*chunksize+2*renderdistance;
                  }
      }
}


class rakete {
    boolean launched = false;
    int rockettexture;
    int raketenzustand = 0;
    int xrakete;
    int yrakete;
    int winkel;
    
    int raketenspeed = 13;
    int altekart;
    int altekart2;
    int altehoehe;
    int hoehenabweichung;
    
    int yspielerabweichung;
    int altespielerpx;
    int starttime;
    int m;
int raketentreibstoff;
int norocketboosttime;
    
    int xexplosion;
    int yexplosion;
    int explosionsradius = 100;

    rakete() {
        rockettexture = loadImage("http://vignette4.wikia.nocookie.net/fallout/images/c/c3/FNV_ICBM_rocket.png/revision/latest?cb=20140408142037");
        }
    void display() {
        if(launched){
          //  rect(100,100,200,200);
          switch(raketenzustand){
             case 0: //Initialisierung
                  karte.w.nowalk = true;
                  mob.a.nodrive = true;
             xrakete = spieler.p.x;
             yrakete = spieler.p.y;
             starttime = starttime + (millis()-m);
             m = millis();
             fill(255,0,0);
             textSize(100-(starttime%1000)/15);
             text(ceil(starttime/1000),350,250);
             resetgrapic();
           
             if(starttime>3000){
                     altekart = karte.b.kart;
                  altekart2 = karte.b.kart2;
                  xrakete = spieler.p.x;
                  yrakete = spieler.p.y;
                  altehoehe = karte.b.hoehe;
                  altespielerpx = spieler.p.x;
                  raketentreibstoff = 100;
             raketenzustand = 1;
             }
              break;
            case 1: //Flug
            raketentreibstoff = raketentreibstoff - 0.4;
            

                  fill(100,255,100);
                  rect(20,460,raketentreibstoff,20);
                  if(raketentreibstoff < 1){
                      raketentreibstoff = 0;
                      norocketboosttime++;
                      }else{
                          norocketboosttime = 0;
                          }
            
                yspielerabweichung = yspielerabweichung - raketenspeed*sin(winkel-PI/2)-norocketboosttime; 
                  karte.b.jump = yspielerabweichung-karte.b.hoehe + altehoehe;
 
 
  if( ((abs(winkel)) %   (2*PI)) > (PI) ){
      
      if(xrakete > width/4) {
        //    xrakete = xrakete + raketenspeed*cos(winkel-PI/2);
            } else {
                 karte.b.kart = karte.b.kart - raketenspeed*cos(winkel-PI/2);
                  spieler.p.x = spieler.p.x - raketenspeed*cos(winkel-PI/2);
                }
        }else {
          if(xrakete < 3*width/4) {
         //   xrakete = xrakete + raketenspeed*cos(winkel-PI/2);
        } else {
                 karte.b.kart = karte.b.kart - raketenspeed*cos(winkel-PI/2);
                  spieler.p.x = spieler.p.x - raketenspeed*cos(winkel-PI/2);
                }
}
                  if((yspielerabweichung+altehoehe+100)< (hoehenausgabe(-karte.b.kart+xrakete)) ){
                   //   raketenzustand = 2;
                      }
                   xexplosion = xrakete-karte.b.kart;
                  yexplosion = yspielerabweichung+altehoehe+100;

              break;
           case 2: //explosion
           winkel = 0;
           
           fill(256-raketenexplosionszeit*3,0,0);
                  ellipse(xrakete,yrakete,raketenexplosionszeit,raketenexplosionszeit);
                  raketenexplosionszeit = raketenexplosionszeit +7;
                 if(raketenexplosionszeit> 100){
                explosion(xrakete-karte.b.kart,yrakete+karte.b.karty,explosionsradius);
                  spieler.p.x = altespielerpx;
                  karte.b.kart = altekart;
                  karte.b.kart2 = altekart2;
                  yrakete = 0;
                  xrakete = 0;
                  yspielerabweichung = 0;
                  
                  karte.b.jump = 0;
                  fill(255,0,0);
                  raketenexplosionszeit = 0;
                  nowalk = false;
                  mob.a.nodrive = false;
                  karte.b.springen = true;
                  raketenzustand = 0;
                  }
              break;
              }
         if (keyPressed==true && keyCode == RIGHT) {
            winkel = winkel +0.13;
                      }
        if (keyPressed==true && keyCode == LEFT) {
            winkel = winkel -0.13;
                                   }
            }else{
                m = millis();
                }
 pushMatrix();   
translate(xrakete, yrakete+36);
rotate(winkel);
image(rockettexture,-45,-125,90,250);
popMatrix(); 
        }
    }
    
class menu {
        boolean geoeffneth = false;
        boolean geoeffnets = false;
        boolean geoeffneta = false;
        boolean music = true;
        boolean sound = true;
        int tmusic;
        int tsound;
        int tastenanzahl = 0;
        boolean geoeffnet = true;
        boolean noinfo = true;
        boolean loadmap;
        int u = 2;
        int ikart = 10000;
        int ik = 10000;
        int ib = 10000;
        int ig = 10000;
        int ie = 10000;
        int igame = 10000;
        int[] gamedata = new int [16];
    menu() {
        }
            void display() {
    gamedata[0] = karte.l.Geld;
    gamedata[1] = mob.z.health;
    gamedata[2] = mob.j.fuel;
    gamedata[3] = karte.b.kart2;
    gamedata[4] = karte.e.kohleinv;
    gamedata[5] = karte.e.bauxitinv;
    gamedata[6] = karte.e.goldinv;
    gamedata[7] = karte.e.emeraldinv;
    gamedata[8] = karte.l.xwaffenladen;
    gamedata[9] = karte.l.xraketenladen;
    gamedata[10] = karte.l.xerzladen;
    gamedata[11] = karte.l.xitemladen;
    gamedata[12] = karte.b.kart;
                
           if(tastenanzahl == 1 ) {
         if (geoeffnet == false){
             geoeffnet = true;
         inv.aktiv = false;
      mob.aktiv= false;
      spieler.aktiv = false;
             } else {
                 geoeffnet = false;
                 noinfo = false;
                 karte.w.nowalk = false;
            karte.w.noitem = false;
      mob.a.nodrive = false;
            inv.aktiv = true;
      spieler.aktiv = true;
          mob.aktiv= true;
                 }
         } 
        if (keyPressed == true) {
        if(key == 'm') {
       tastenanzahl = tastenanzahl + 1;
   }
        }else{
       tastenanzahl = 0;
       }
      if(geoeffnet) {
     image(webImg7, 0, 0);
      karte.w.nowalk =true;
      karte.w.noitem = true;
      mob.a.nodrive = true;
        noinfo = true;
      
      textSize(50);
      textAlign(LEFT,TOP);
      fill(255,00,100);
     if(100 < mouseX && mouseX < 400 && 35 < mouseY && mouseY < 115){
               fill(255,100,0);
    if (mousePressed && (mouseButton == LEFT)) {
karte.b.kart = -karte.b.x.length*karte.b.chunksize/2;
karte.b.kart2 =  spieler.p.x- karte.b.kart+karte.b.chunksize;
    karte.b.u = 2;
     karte.e.ik = 0;
    karte.e.ib = 0;
    karte.e.ig = 0;
     karte.e.ie = 0;
        karte.l.xwaffenladen = zufallsx();
        karte.l.xraketenladen = zufallsx();
        karte.l.xerzladen = zufallsx();
        karte.l.xitemladen = zufallsx();
        karte.e.kohleinv = 0;
        karte.e.bauxitinv = 0;
        karte.e.goldinv = 0;
        karte.e.emeraldinv = 0;
    mob.z.health = 200;
    karte.l.Geld = 10;
    mob.j.fuel = 0;

    mob.mensch1.u = 0;
    mob.mensch2.u = 0;
    mob.mensch3.u = 0;
    mob.mensch4.u = 0;

    mob.zug1.u = 0;
    mob.see.u = 0;
    mob.stadt.u = 0;
    mob.see.u2 = 0;
    mob.stadt.u2 = 0;
    karte.b.springen = true;
      geoeffnet = false;
      noinfo = false;
      karte.w.nowalk = false;
      mob.a.nodrive = false;
      karte.w.noitem = false;
          inv.aktiv = true;
          spieler.aktiv = true;
          mob.aktiv= true;
      }
    }
      text("New World",100,50);
            fill(255,00,100);
     if(100 < mouseX && mouseX < 400 && 135 < mouseY && mouseY < 215){
               fill(255,100,0);
    if (mousePressed && (mouseButton == LEFT)) {
    karte.b.springen = true;
      ikart = 0;
      igame = 0;  
      ik = 0;
      ib = 0;
      ig = 0;
      ie = 0;
      loadmap = true; 
      geoeffnet = false;
      noinfo = false;
    karte.w.nowalk = false;
    mob.a.nodrive = false;
    karte.w.noitem = false;
    
              inv.aktiv = true;
      spieler.aktiv = true;
          mob.aktiv= true;
      }
    }
      text("Load Game",100,150);
            fill(255,00,100);
     if(100 < mouseX && mouseX < 400 && 235 < mouseY && mouseY < 315){
               fill(255,100,0);
    if (mousePressed && (mouseButton == LEFT)) {
      saveStrings("kartendata.txt",karte.b.x);
      saveStrings("gamedat.txt",gamedata);
      
      saveStrings("datakohlex.txt",karte.e.xkohle);
      saveStrings("databauxitx.txt",karte.e.xbauxit);
      saveStrings("datagoldx.txt",karte.e.xgold);
      saveStrings("dataemeraldx.txt",karte.e.xemerald);
      
      saveStrings("datakohley.txt",karte.e.ykohle);
      saveStrings("databauxity.txt",karte.e.ybauxit);
      saveStrings("datagoldy.txt",karte.e.ygold);
      saveStrings("dataemeraldy.txt",karte.e.yemerald);
      }
    }
      text("Save Game",100,250);
            fill(255,00,100);
     if(100 < mouseX && mouseX < 400 && 335 < mouseY && mouseY < 415){
               fill(255,100,0);
    if (mousePressed && (mouseButton == LEFT)) {
        fill(0);
        rect(0,0,width,height);
     System.exit();
      }
    }
    text("Exit",100,350);
      textSize(25);
      fill(255,255,0);
     if(100 < mouseX && mouseX < 200 && 445 < mouseY && mouseY < 485){
               fill(200,200,100);
    if (mousePressed && (mouseButton == LEFT)) {
       geoeffnets = true;
      }
    }
    textAlign(LEFT,TOP);
        text("Settings",100,450);
        
        if(geoeffnets == true){
        window();
          if(closewindow() == true){
              geoeffnets = false;
              }
    }

//archievements
    fill(255,255,0);
     if(250 < mouseX && mouseX < 400 && 445 < mouseY && mouseY < 485){
               fill(200,200,100);
    if (mousePressed && (mouseButton == LEFT)) {
      geoeffneta = true;
      }
    }
     textAlign(LEFT,TOP);
 text("Archievements",250,450);
    if(geoeffneta == true){
           window();
          if(closewindow() == true){
              geoeffneta = false;
              }
    }    
//help
            fill(255,255,0);
     if(500 < mouseX && mouseX < 570 && 445 < mouseY && mouseY < 485){
               fill(200,200,100);
    if (mousePressed && (mouseButton == LEFT)) {
      geoeffneth = true;
      }
    }
    textAlign(LEFT,TOP);
text("Help",500,450);
      if(geoeffneth == true){
           window();
          if(closewindow() == true){
              geoeffneth = false;
              }
    }    
//credits
     if(650 < mouseX && mouseX < 730 && 445 < mouseY && mouseY < 485){
               fill(200,200,100);
    if (mousePressed && (mouseButton == LEFT)) {
      fill(random(100,255),random(100,255),random(100,255));
      text("Tobias v. d. Reith and Sebastian R.",400,400,650,450);
      }
      fill(200,200,100);
    }else{
        fill(255,255,0);
        }
        textAlign(LEFT,TOP);
      text("Credits",650,450);
      
      //musik
                if(music){
          fill(0,255,0);
          }else{
            fill(255,0,0);
              }
     if(600 < mouseX && mouseX < 670 && 0 < mouseY && mouseY < 35){
                if(music){
          fill(120,255,120);
          }else{
            fill(255,120,120);
              }
    if (mousePressed && (mouseButton == LEFT)) {
      tmusic++;
      }else{
          tmusic = 0;
          }
    }
     if(tmusic == 1){
          if(music){
    music= false;
    }else{
        music= true;
        }
    }
   textAlign(LEFT,TOP);
      text("Musik",600,0);
      
      //Sound
      if(sound){
          fill(0,255,0);
          }else{
            fill(255,0,0);
              }
     if(700 < mouseX && mouseX < 780 && 0 < mouseY && mouseY < 35){
                if(sound){
          fill(120,255,120);
          }else{
            fill(255,120,120);
              }
    if (mousePressed && (mouseButton == LEFT)) {
        tsound++;
      }else{
          tsound = 0;
          }
    }
    if(tsound == 1){
          if(sound){
    sound = false;
    }else{
        sound = true;
        }
    }
    textAlign(LEFT,TOP);
      text("Sound",700,0);
      
      textSize(70);
      fill(100,255,0);
    //  text("Stickman Evolved",450,150,500,800);
      
      textAlign(TOP);
      textSize(25);
      }
   if(loadmap == true){
        String[] datal = loadStrings("kartendata.txt");
        String[] datag = loadStrings("gamedat.txt");
        
        String[] datakx = loadStrings("datakohlex.txt");
        String[] databx = loadStrings("databauxitx.txt");
        String[] datagx = loadStrings("datagoldx.txt");
        String[] dataex = loadStrings("dataemeraldx.txt");
        
         String[] dataky = loadStrings("datakohley.txt");
        String[] databy = loadStrings("databauxity.txt");
        String[] datagy = loadStrings("datagoldy.txt");
        String[] dataey = loadStrings("dataemeraldy.txt");
       
 for (; ikart < datal.length; ikart++){
     karte.b.x[ikart] = datal[ikart]/1;
     }
 for (; igame < 1; igame++){
   //  karte.b.kart = datag [12];
    //karte.b.kart2 = datag[3];
    
    karte.l.Geld = datag[0];
    mob.z.health = datag[1];
    mob.j.fuel = datag[2];
    
    karte.e.kohleinv = datag[4];
    karte.e.bauxitinv = datag[5];
    karte.e.goldinv = datag[6];
    karte.e.emeraldinv = datag[7];
    karte.l.xwaffenladen = datag[8];
    karte.l.xraketenladen = datag[9];
    karte.l.xerzladen = datag[10];
    karte.l.xitemladen = datag[11];
     }
     for (; ik < datakx.length; ik++){
     karte.e.xkohle [ik] = datakx[ik]/1;
     karte.e.ykohle [ik] = dataky[ik]/1;
     }
      for (; ib < databx.length; ib++){
     karte.e.xbauxit [ib] = databx[ib]/1;
     karte.e.ybauxit [ib] = databy[ib]/1;
     }
      for (; ig < datagx.length; ig++){
     karte.e.xgold [ig] = datagx[ig]/1;
     karte.e.ygold [ig] = datagy[ig]/1;
     }
      for (; ie < dataex.length; ie++){
     karte.e.xemerald [ie] = dataex[ie]/1;
     karte.e.yemerald [ie] = dataey[ie]/1;
     }
     //  ellipse(datal[i]/5,100,10,10);
       if(ikart >= datal.length 
       && ik >= datakx.length 
       && ib >= databx.length 
       && ig >= datagx.length 
       && ie >= dataex.length
       && igame >= 1
       ){
           loadmap = false;
           }
       }
    }
}
    
class laden {
    //waffenladen
    int xwaffenladen;
    int ywaffenladen;
    //raketenladen
    int xraketenladen;
    int yraketenladen;
    //erzladen
    int xerzladen;
    int yerzladen;
    //itemladen
    int xitemladen;
    int yitemladen;
    int i = 0;
   
   boolean geoeffnetw;
   int tastenanzahlw;
   boolean geoeffnetr;
   int tastenanzahlr;
   boolean geoeffnete;
   int tastenanzahle;
   boolean geoeffneti;
   int tastenanzahli;
   
   int kohlewert = 10;
   int bauxitwert = 20;
   int goldwert = 50;
   int emeraldwert = 100;
    
    int Geld= 10;
    int tastenanzahl;
    
    laden() {
       // weltgenerieren ();
        }
    void display() {
        
        for(;i<1;i++){
        karte.l.xwaffenladen = zufallsx();
        karte.l.xraketenladen = zufallsx();
        karte.l.xerzladen = zufallsx();
        karte.l.xitemladen = zufallsx();
        }
        ywaffenladen = hoehenausgabe(xwaffenladen);
        yraketenladen = hoehenausgabe(xraketenladen);
        yerzladen = hoehenausgabe(xerzladen);
        yitemladen = hoehenausgabe(xitemladen);
        
        //waffenladen
        fill(0);
        text("Weapon shop",xwaffenladen+karte.b.kart-75,height-ywaffenladen+karte.b.karty-110);
        fill(0,255,255);
        rect(xwaffenladen+karte.b.kart-100,height-ywaffenladen+karte.b.karty-100,200,100);
    //  ellipse(xPos+karte.b.kart,height-yPos+karte.b.karty,200,200);
    
        //raketenladen
        fill(0);
        text("Rocket base",xraketenladen+karte.b.kart-75,height-yraketenladen+karte.b.karty-110);
        fill(255,0,0);
        rect(xraketenladen+karte.b.kart-100,height-yraketenladen+karte.b.karty-100,200,100);
        
        //erzladen
        fill(0);
        text("Ore refinery",xerzladen+karte.b.kart-75,height-yerzladen+karte.b.karty-110);
        fill(255,0,255);
        rect(xerzladen+karte.b.kart-100,height-yerzladen+karte.b.karty-100,200,100);
    
        //itemladen
        fill(0);
        text("Junk shop",xitemladen+karte.b.kart-75,height-yitemladen+karte.b.karty-110);
        fill(255,255,0);
        rect(xitemladen+karte.b.kart-100,height-yitemladen+karte.b.karty-100,200,100);
        
        //waffenladen
    if(tastenanzahlw == 1 ) {
        if (geoeffnetw == false){
            geoeffnetw = true;
        }else{
            geoeffnetw = false;
         }
    } 
    if (Math.abs(xwaffenladen+25-karte.b.kart2)<180&&Math.abs(ywaffenladen-karte.b.hoehe-karte.b.jump-100)<170) {
      info("Press arrow key down to enter Weapon shop");
        if (keyPressed == true) {
        if(keyCode== DOWN) {
       tastenanzahlw = tastenanzahlw + 1;
       }
        }else{
       tastenanzahlw = 0;
       }
    }
       if( geoeffnetw ){
                    window();
          if(closewindow() == true){
           geoeffnetw = false;
              }
            
         
           }
         //raketenladen
    if(tastenanzahlr == 1 ) {
        if (geoeffnetr == false){
            geoeffnetr = true;
        }else{
            geoeffnetr = false;
         }
    } 
      if   (Math.abs(xraketenladen+25-karte.b.kart2)<180&&Math.abs(yraketenladen-karte.b.hoehe-karte.b.jump-100)<170)   {
      info("Press arrow key down to enter the rocket base");
        if (keyPressed == true) {
        if(keyCode== DOWN) {
       tastenanzahlr = tastenanzahlr + 1;
       }
        }else{
       tastenanzahlr = 0;
       }
    }
       if( geoeffnetr ){
          window();
          if(closewindow() == true){
              geoeffnetr = false;
              }
           fill(255,00,00);
           rect(550-5,400-5,150,50);
           textSize(50);
           if(mouseX >545 && mouseX < 695 && mouseY > 395 && mouseY < 445){
           fill(80);
           if (mousePressed && (mouseButton == LEFT)) {
               geoeffnetr = false;
               }
           }else{
           fill(0);
           }
           text("launch",550-5,400-5+50);
        karte.r.launched = true;
           }
         //erzladen
    if(tastenanzahle == 1 ) {
        if (geoeffnete == false){
            geoeffnete = true;
        }else{
            geoeffnete = false;
         }
    } 
    if (Math.abs(xerzladen+25-karte.b.kart2)<180&&Math.abs(yerzladen-karte.b.hoehe-karte.b.jump-100)<170) {
      info("Press arrow key down to enter the ore refinery");
        if (keyPressed == true) {
        if(keyCode== DOWN) {
       tastenanzahle = tastenanzahle + 1;
       }
        }else{
       tastenanzahle = 0;
       }
    }
       if( geoeffnete ){
                    window();
          if(closewindow() == true){
              geoeffnete = false;
              }
           
           textAlign(LEFT,CENTER);
           textSize(25);
           strokeWeight(1);
           fill(0,160,0);
           text("Coal ore",190,75,130,50);
           text("Bauxit ore",190,150,130,50);
           text("Gold ore",190,225,130,50);
           text("Emerald",190,300,130,50);
           
           text(karte.e.kohleinv,340,75,60,50);
           text(karte.e.bauxitinv,340,150,60,50);
           text(karte.e.goldinv,340,225,60,50);
           text(karte.e.emeraldinv,340,300,60,50);
           
           text("x",420,75,20,50);
           text("x",420,150,20,50);
           text("x",420,225,20,50);
           text("x",420,300,20,50);
           
           text("= $"+kohlewert*karte.e.kohleinv,555,75,120,50);
           text("= $"+bauxitwert*karte.e.bauxitinv,555,150,120,50);
           text("= $"+goldwert*karte.e.goldinv,555,225,120,50);
           text("= $"+emeraldwert*karte.e.emeraldinv,555,300,120,50);
           
           text("$"+kohlewert,460,75,75,50);
           text("$"+bauxitwert,460,150,75,50);
           text("$"+goldwert,460,225,75,50);
           text("$"+emeraldwert,460,300,75,50);
           
           strokeWeight(3);
           stroke(0,160,0);
           line(560,375,670,375);
           
           strokeWeight(0);
           noStroke();
           
           textAlign(RIGHT,CENTER);
               text("$"+round(emeraldwert*karte.e.emeraldinv+goldwert*karte.e.goldinv+bauxitwert*karte.e.bauxitinv+kohlewert*karte.e.kohleinv),460,375,220,50);
           
           textAlign(CENTER,CENTER);
           
           if(310 < mouseX && mouseX < 480 && 375 < mouseY && mouseY < 425){
               
          if (mousePressed && (mouseButton == LEFT)) {
              
                Geld = Geld   +round(emeraldwert*karte.e.emeraldinv+goldwert*karte.e.goldinv+bauxitwert*karte.e.bauxitinv+kohlewert*karte.e.kohleinv);
              karte.e.kohleinv = 0;
              karte.e.bauxitinv = 0;
              karte.e.goldinv = 0;
              karte.e.emeraldinv = 0;
              }
           fill(0);
           } else {
               fill(0,random(120,200),0);
               }
           text("[SELL ALL]",300,375,200,50);
 
    //Kohle
           oretexture (120,75,0,0,0);
     //Bauxit
         oretexture (120,150,180,180,180);
     //Gold
         oretexture (120,225,255,255,0);
      //Emerald  
      emeraldtexture(125,300);
           
           }
         //itemladen  
    if(tastenanzahli == 1 ) {
        if (geoeffneti == false){
            geoeffneti = true;
        }else{
            geoeffneti = false;
         }
    } 
    if (Math.abs(xitemladen+25-karte.b.kart2)<180&&Math.abs(yitemladen-karte.b.hoehe-karte.b.jump-100)<170) {
      info("Press arrow key down to enter the Junk shop");
        if (keyPressed == true) {
        if(keyCode== DOWN) {
       tastenanzahli = tastenanzahli + 1;
       }
        }else{
       tastenanzahli = 0;
       }
    }
       if( geoeffneti ){
                   window();
          if(closewindow() == true){
           geoeffneti = false;
              }
           
          
           }
        if( geoeffnetw == true || geoeffnete == true || geoeffnete == true || geoeffneti == true){
            tastenanzahl = 0;
        karte.w.nowalk =true;
      karte.w.noitem = true;
      mob.a.nodrive = true;
        }else{
            tastenanzahl++;
           } 
        if(tastenanzahl == 1) {
      karte.w.nowalk =false;
      karte.w.noitem = false;
      mob.a.nodrive = false;
            }
        }
    }
    
class textfeld {
  boolean aktiv = true;
  int score;
  int radius; //coin
  String ziel = "";
  farbe f;
  textfeld(String cs,int mr) {
    erzielt();
    f = new farbe(cs);
    radius = mr;
    return ziel;
  }
  String erzielt() {
    ziel = "";
      for (int i = 0; i<1;i++) {
            }
    return ziel;
  }
  void display() {
      ziel = karte.l.Geld;
      //height-100-karte.b.jump-karte.b.hoehe;
 if(karte.m.noinfo == false){  
          fill(255);
  rect(3,3,170 , 50, 7); //feld
     fill(f.rot,f.gruen,f.blau);
     ellipse(18,26,radius,radius);   
     }
  }
}

class waffe {
    boolean noitem = false; 
   boolean nowalk;
   boolean rechts;
    
    boolean miningdrill = false;
    boolean shotgun = false;
    boolean mine = false;
    boolean raktenwerfer = true;
    boolean bombe = false;
    boolean pinsel = false;
    
       int leertastenanzahl; 
    
    int shotgunammo = 10;
    int shotgunbullettime=800;
    int shotgunbulletspeed = 20;
    int shotgunbulletspeed2;
    int xPs;
    int yPs;
    int xPoss;
    int yPoss;
    int shotguntexture;
    
    int minenzeit;
    int mineninv = 7;
    int minennummer;
    int maxminenanzahl = 3;
    int xPm;
    int yPm;
  int[] xPosm = new int[maxminenanzahl]; 
  int[] yPosm = new int[maxminenanzahl]; 
    
    int winkel;
    boolean raketeausrichten;
    boolean raketesteuern;
    int raketentastenanzahl;
    int raketenzustand = 0;
    int raketenspeed = 13;
    int altekart;
    int altekart2;
    int altehoehe;
    int hoehenabweichung;
    int xrakete;
    int yrakete;
 
    int yspielerabweichung;
    int altespielerpx;
    int raketentreibstoff;
    int raketennachladung = 20;
    int norocketboosttime;
    int raketenexplosionszeit;
    int xexplosion;
    int yexplosion;
    int explosionsradius = 100;
    
int pinseli; 
int pinselstriche = 1000;
    int[] pinselstrichx = new int[pinselstriche]; 
    int[] pinselstrichy = new int[pinselstriche];
 int[] pinselr = new int[pinselstriche]; 
int[] pinselg = new int[pinselstriche]; 
 int[] pinselb = new int[pinselstriche]; 
 int[] pinsels = new int[pinselstriche]; 
    int pr= 50;
    int pg= 50;
    int pb= 50;
    int ps = 50;
    
    int bombtexture;
    int remotetexture;
    int landminetexture;
    int drilltexture;
    
    int bombenzustand;
    int bombeninv = 7;
    int xPosb;
    int yPosb;
    int xPb;
    int yPb;
    
    int drillfuel = 100;
    int drillradius = 200;
    int drillspeed = 1;
    int drillfuelconsumtion = 0.02;
    int m;
    
  waffe() {
      shotguntexture = loadImage("http://pre07.deviantart.net/6ac5/th/pre/f/2015/087/8/0/shotgun_by_francotieppo-d5d99eg.png");
      bombtexture = loadImage("https://vignette2.wikia.nocookie.net/fallout/images/1/1e/C-4plasticexplosive.png/revision/latest?cb=20110209083859");
      remotetexture = loadImage("https://www.bittel.bg/web/img/201409/1575/3054/0/remote-control-nippon-eck-7031-r.png");
      landminetexture = loadImage("http://vignette3.wikia.nocookie.net/fallout/images/c/c4/FragMine.png/revision/latest?cb=20110209084434");
      drilltexture = loadImage("http://www.mecalac.com/medias/1478507293_mecalac-as-210e-3-4-png.png");
   //   http://www.holeproducts.com/userfiles/fck/image/products/drill_bits_and_accessories/image5.png");
  }
  void display() {
            if (keyPressed==true && keyCode==LEFT) {
            rechts = false;
      }
            if (keyPressed==true && keyCode==RIGHT) {
            rechts = true;
      }
      fill(117,117,117);
   //   rect (bulletposx-10,bulletposy-4,10,8)
    //  ellipse(bulletposx,bulletposy,20,8);   
   if (keyPressed==true && key == ' ') {
       leertastenanzahl++;
       }else{
           leertastenanzahl = 0;
           }
      if (noitem == false){
          if(bombe){
              switch(bombenzustand){
                  case 0:
                  if(bombeninv>0){
                  image(bombtexture,spieler.p.x-30,spieler.p.y+30,60,40);
                  
                 // ellipse(200,200,200,200);
                  if(leertastenanzahl == 1){
                      bombeninv--;
                      xPosb = karte.b.kart2;
                      yPosb = height-hoehenausgabe(xPosb);
                      bombenzustand = 1;
                      }
                    }
                  break;
                  case 1:
                  image(remotetexture,spieler.p.x-10,spieler.p.y+30,60,40);
                  if(leertastenanzahl == 1){
                      explosion(xPosb,yPosb,200);
                      xPosb = -1000;
                      bombenzustand = 0;
                      }
                  break;
                  }
              }
              xPb =xPosb + karte.b.kart;
              yPb =yPosb + karte.b.karty;
              image(bombtexture,xPb-30,yPb-20,60,40);
                  if(mine){
    if(mineninv>0){
             //   fill(0,120,0);
            //  ellipse(spieler.p.x,spieler.p.y+60,50,15);
            //  fill(255,0,0);
           //   ellipse(spieler.p.x-20,spieler.p.y-5+60,50,15);
        image(landminetexture,spieler.p.x-30,spieler.p.y+30,60,40);
                  if (leertastenanzahl == 1) {
                  xPosm[minennummer] = karte.b.kart2;
                 yPosm[minennummer] = height-karte.b.hoehe;
            minennummer++;
            mineninv--;
            minenzeit = 0;
                  }
          }
       }  
       minenzeit++; 
       for(int mi = 0; mi < (minennummer) ;mi++){
              xPm = xPosm[mi]+karte.b.kart;
              yPm = yPosm[mi]+karte.b.karty;
           //     fill(0,120,0);
           //   ellipse(xPm,yPm,50,15);
           //   fill(255,0,0);
          //    ellipse(xPm,yPm-5,50,15);
          image(landminetexture,xPm-40,yPm-30,60,40);
              
              if(minenzeit>30){
                  if( ( bewegungsmelder(xPosm[mi],yPosm[mi],20) ) > 0 ){
                  
                  explosion(xPosm[mi],yPosm[mi],100);
                  xPosm[mi] = -1000;
                  minenzeit = 0;
                      }
                  }
              }
          if(pinsel){
        if (mousePressed && (mouseButton == LEFT)) {
            pinseli++;
            pinselstrichx[pinseli] = mouseX-karte.b.kart;
            pinselstrichy[pinseli] = mouseY-karte.b.karty;
            pinsels[pinseli] = ps/2+1;
            pinselr[pinseli] = 255*pr/100;
            pinselg[pinseli] = 255*pg/100;
            pinselb[pinseli] = 255*pb/100;
            }

              for(int ai = 0; ai<100; ai++){
              stroke(100,100,100);
                  line(680+ai,100,680+ai,100+ai/3);
             stroke(255*ai/100,0,0);
                  line(680+ai,140,680+ai,170);
             stroke(0,255*ai/100,0);
                  line(680+ai,180,680+ai,210);
             stroke(0,0,255*ai/100);
                  line(680+ai,220,680+ai,250);
                  }
                  if (mousePressed && (mouseButton == LEFT)) {
                      if(680<mouseX && mouseX < 780){
                      if(100 < mouseY && mouseY < 133){
                          ps = mouseX - 680;
                          }
                         if(140 < mouseY && mouseY < 170){
                           pr = mouseX - 680;
                          }
                          if(180 < mouseY && mouseY < 210){
                           pg = mouseX - 680;
                          }
                         if(220 < mouseY && mouseY < 250){
                           pb = mouseX - 680;
                          }
                       }
                  }
                      fill(255*pr/100,255*pg/100,255*pb/100);
                      ellipse(mouseX,mouseY,ps/2+1,ps/2+1);
                  fill(0);
                  rect(680+ps,100-2,4,8+ps/3);
                  fill(255-255*pr/100);
                  rect(680+pr,140-2,4,34);
                  fill(255-255*pg/100);
                  rect(680+pg,180-2,4,34);
                  fill(255-255*pb/100);
                  rect(680+pb,220-2,4,34);
              }
for(int pi = 0;pi<(pinseli-3);pi++){
         fill(pinselr[pi],pinselg[pi],pinselb[pi]);
           stroke(pinselr[pi],pinselg[pi],pinselb[pi]);
           strokeWeight(pinsels[pi]);
           //     line(pinselstrichx[pi]+karte.b.kart,pinselstrichy[pi]+karte.b.karty,    pinselstrichx[pi+1]+karte.b.kart,pinselstrichy[pi+1]+karte.b.karty );
         curve(pinselstrichx[pi]+karte.b.kart,pinselstrichy[pi]+karte.b.karty,
         pinselstrichx[pi+1]+karte.b.kart,pinselstrichy[pi+1]+karte.b.karty,
         pinselstrichx[pi+2]+karte.b.kart,pinselstrichy[pi+2]+karte.b.karty, 
         pinselstrichx[pi+3]+karte.b.kart,pinselstrichy[pi+3]+karte.b.karty );
            noStroke();
            stroke(0);
            strokeWeight(1);
            // ellipse( pinselstrichx[pi]+karte.b.kart,pinselstrichy[pi]+karte.b.karty,pinsels[pi],pinsels[pi] );
            }
              
      if(miningdrill){   

  if(rechts == true){
    image(drilltexture,spieler.p.x-95,spieler.p.y-55,300,200); 
    }else{
           pushMatrix();
    scale(-1,1);
    image(drilltexture,-200-(spieler.p.x-95),spieler.p.y-55,300,200); 
    popMatrix();
        }
                       fill(100,255,100);
                  rect(20,460,drillfuel,20);
          
      if (keyPressed==true && key == ' ') {
          if(drillfuel>0){
          drillfuel=drillfuel-drillfuelconsumtion*(millis()-m)/1000;
          m = millis();
  //          for(int i = -Math.abs(width/karte.b.chunksize)*10; i< Math.abs(width/karte.b.chunksize)*10;i++) {
//karte.b.x[i+Math.floor(karte.b.kart2/karte.b.chunksize)] = 
//    karte.b.x[i+Math.floor(karte.b.kart2/karte.b.chunksize)]
//    -Math.abs(90/(Math.abs(i)+35));
       //                 }
       for(int i = -drillradius/karte.b.chunksize;i< (drillradius/karte.b.chunksize);i++){
             karte.b.x[i+Math.floor(karte.b.kart2/karte.b.chunksize)] =   karte.b.x[i+Math.floor(karte.b.kart2/karte.b.chunksize)] -drillspeed;
           //*sin(PI*abs(0.5*i/(drillradius/karte.b.chunksize) ));
           }
       
                    }
                 }else{
                     m = millis();
                     }   
          } 
          
          if(shotgun){
              fill(120);
            //  rect(spieler.p.x-60+rechts*50,spieler.p.y+50,70,6);
            if(rechts == true){
            image(shotguntexture,spieler.p.x-70,spieler.p.y+40,140,30);
              }else{
     pushMatrix();
    scale(-1,1);
    image(shotguntexture,-140-(spieler.p.x-70),spieler.p.y+40,140,30);
  // rect(-100,-100,200,200);
    popMatrix(); 
                  }
       if(leertastenanzahl == 1){
                  if(shotgunammo>0){
                      shotgunammo--;
                  xPoss = karte.b.kart2-20+(rechts*2-1)*50;
                  yPoss = height-100-karte.b.jump-karte.b.hoehe+50;
                  shotgunbullettime = 0;
                  shotgunbulletspeed2 = (rechts*2-1)*shotgunbulletspeed;
                      }
                  }
            if(shotgunbullettime< (karte.b.renderdistance/shotgunbulletspeed) ){
              shotgunbullettime++;
              }else{
                  xPoss = -1000;
                  }
              xPs = xPoss+shotgunbulletspeed2*shotgunbullettime+karte.b.kart;
              yPs = yPoss+karte.b.karty;
              
              ellipse(xPs,yPs,10,10);
              ellipse(xPs,yPs+shotgunbullettime/2,10,10);
              ellipse(xPs,yPs-shotgunbullettime/2,10,10);
              damage(xPoss+shotgunbulletspeed2*shotgunbullettime,yPoss,shotgunbulletspeed,100);
    
     }
  if(raktenwerfer){
              if (keyPressed==true && key == ' ') {
              raketentastenanzahl++;
              }else{
                  raketentastenanzahl = 0;
                  }
              if(raketentastenanzahl == 1 && raketennachladung > 0){
                  raketenzustand++;
                  }
              switch(raketenzustand % 4){
                  case 0: //zeichne einen raktenwerfer in der hand
                  winkel = -0.3;
                  break;
                  case 1: //den abschusswinkel waehlen
                  nowalk = true;
                  mob.a.nodrive = true;
                  altekart = karte.b.kart;
                  altekart2 = karte.b.kart2;
                  xrakete = spieler.p.x;
                  yrakete = spieler.p.y;
                  altehoehe = karte.b.hoehe;
                  altespielerpx = spieler.p.x;
                  raketentreibstoff = 100;
                  break;
                  case 2: //rakete steuern
                  raketentreibstoff = raketentreibstoff - 0.4;
                  fill(100,255,100);
                  rect(20,460,raketentreibstoff,20);
                  if(raketentreibstoff < 1){
                      raketentreibstoff = 0;
                      norocketboosttime = norocketboosttime + 0.7;
                      }else{
                          norocketboosttime = 0;
                          }
                  yspielerabweichung = yspielerabweichung - raketenspeed*sin(winkel)-norocketboosttime;
                  karte.b.jump = yspielerabweichung-karte.b.hoehe + altehoehe;
 //karte.b.kart2 = karte.b.kart2 + raketenspeed*cos(winkel);
 
  if( ((abs(winkel)+PI/2) %   (2*PI)) > (PI) ){
      
      if(xrakete > width/4) {
            xrakete = xrakete + raketenspeed*cos(winkel);
            } else {
                 karte.b.kart = karte.b.kart - raketenspeed*cos(winkel);
                  spieler.p.x = spieler.p.x - raketenspeed*cos(winkel);
                }
        }else {
          if(xrakete < 3*width/4) {
            xrakete = xrakete + raketenspeed*cos(winkel);
        } else {
                 karte.b.kart = karte.b.kart - raketenspeed*cos(winkel);
                  spieler.p.x = spieler.p.x - raketenspeed*cos(winkel);
                }
}
                  if((yspielerabweichung+altehoehe+100)< (hoehenausgabe(-karte.b.kart+xrakete)) ){
                      raketenzustand = 3;
                      }
                   xexplosion = xrakete-karte.b.kart;
                  yexplosion = yspielerabweichung+altehoehe+100;//yrakete+karte.b.karty;
                  break;
                  case 3: //rakete explodiert
            //      fill(256-raketenexplosionszeit*3,0,0);
              //    ellipse(xrakete,yrakete,raketenexplosionszeit,raketenexplosionszeit);
if(raketenexplosionszeit == 0){
explosion(xrakete-karte.b.kart,yrakete+karte.b.karty,explosionsradius);
}
                  raketenexplosionszeit = raketenexplosionszeit +3;
                 if(raketenexplosionszeit> 100){
                  spieler.p.x = altespielerpx;
                  karte.b.kart = altekart;
                  karte.b.kart2 = altekart2;
                  yrakete = 0;
                  xrakete = 0;
                  yspielerabweichung = 0;
                  
                  karte.b.jump = 0;
                  fill(255,0,0);
                  raketenexplosionszeit = 0;
                  nowalk = false;
                  mob.a.nodrive = false;
                  karte.b.springen = true;
raketennachladung = raketennachladung - 1;
                  raketenzustand = 0;
                  }
                  break;
               }
pushMatrix();   
rectMode(CENTER);  
translate(spieler.p.x, spieler.p.y+36);
rotate(winkel);
  
image(webImg8, -60, -10,140,40);

rectMode(CORNER);
popMatrix();  

pushMatrix();   
rectMode(CENTER);  
translate(xrakete, yrakete+36);
rotate(winkel);
fill(255,0,255);
//rect(0, 0, 40, 8);
image(webImg9, -30, -12,130,40);
rectMode(CORNER);
popMatrix();  
                 if (keyPressed==true && keyCode == RIGHT) {
                      winkel = winkel +0.13;
                      }
                  if (keyPressed==true && keyCode == LEFT) {
                      winkel = winkel -0.13;
                      }
              }
          
     } 
  }
}

class sonne {
    int schnelligkeit = 0.05;
    boolean nacht;
  int radius;
  int zeit= 220;
 // farbe f;
  sonne(String cs, int cr) {
 //   f = new farbe(cs);
    radius = cr;
  }
  void display() {
      
      if(nacht){
      zeit = zeit -schnelligkeit;
      } else {
     zeit = zeit +schnelligkeit;
          }
      
     // fill(f.rot,f.gruen,f.blau);
     if (zeit < 120){
         nacht = false;
         }
    if (zeit>255){
        nacht = true;
        }
     fill(zeit,zeit,00);
      ellipse(788,10,radius,radius);   //745,55,100,100 oder 788,10,100,100
  }
}

void draw () {
    karte.b.chunky1 = karte.b.x[0+Math.floor(karte.b.kart2/karte.b.chunksize)];
    karte.b.chunky2 = karte.b.x[1+Math.floor(karte.b.kart2/karte.b.chunksize)];
    karte.b.chunkx = karte.b.kart2-karte.b.chunksize*Math.floor(karte.b.kart2/karte.b.chunksize);
karte.b.hoehe = hoehenausgabe(karte.b.kart2);

    if (height-100-karte.b.jump-karte.b.hoehe <= height/10) {
        spieler.p.y = height/10 + karte.w.yspielerabweichung;
        karte.b.karty =-( height-100-karte.b.jump-karte.b.hoehe)+height/10; 
        } else if (height-100-karte.b.jump-karte.b.hoehe > 300){
            spieler.p.y = 300;
            karte.b.karty =-( height-100-karte.b.jump-karte.b.hoehe)+300
        }else {
           spieler.p.y = height-100-karte.b.jump-karte.b.hoehe; 
        }
        
    spieler.p.halsansatz = spieler.k.radius/2+spieler.p.y;
    spieler.p.huefte = spieler.p.halsansatz+spieler.r.leange;
  karte.b.alpha = Math.abs(atan((karte.b.chunky2-karte.b.chunky1)/karte.b.chunksize)*180/PI);

 if (karte.b.springen){
     karte.b.jumptime = karte.b.jumptime+1.2;
     karte.b.jump=30*karte.b.jumptime-karte.b.jumptime*karte.b.jumptime;
     }
 if (karte.b.jump<0){
     karte.b.springen = false;
     karte.b.jumptime=0;
     karte.b.jump =0;
     }

if (karte.w.nowalk==false && mob.a.auto == false){   
    if (keyPressed==true) {
         if(karte.b.jump < 0){
             karte.b.jump = 0;}
         if(keyCode== UP){
            mob.j.noboost = false;
            if(mob.j.jetpack) {
                mob.j.fly =true;
            }else{
                karte.b.springen =true;
            }
         }else {
             mob.j.noboost = true;
    } 
}  
      if (keyPressed==true) {
            if (keyCode==LEFT) {
                if(karte.b.chunky1 < karte.b.chunky2){
                    karte.b.walkspeed2 = karte.b.walkspeed*(1+karte.b.alpha*2/76);
                } else {
                    karte.b.walkspeed2 = karte.b.walkspeed*(1-(1/3/76*karte.b.alpha));
                }
                if(spieler.p.x > width/4) {   
                    spieler.p.x-=karte.b.walkspeed2;
                    karte.b.kart2 = karte.b.kart2-karte.b.walkspeed2;
                } else {
                     karte.b.kart = karte.b.kart +karte.b.walkspeed2;
                     karte.b.kart2 = karte.b.kart2-karte.b.walkspeed2;
                }
        }
        if (keyCode==RIGHT) {
            if(karte.b.chunky1 < karte.b.chunky2){
                karte.b.walkspeed2 = karte.b.walkspeed*(1-(1/3/76*karte.b.alpha));
            } else {
                 karte.b.walkspeed2 = karte.b.walkspeed*(1+karte.b.alpha*2/76);
            }
             if(spieler.p.x < 3*width/4) {
                spieler.p.x+=karte.b.walkspeed2;
                karte.b.kart2 = karte.b.kart2 +karte.b.walkspeed2;
            } else {
                karte.b.kart = karte.b.kart -karte.b.walkspeed2;
                karte.b.kart2 = karte.b.kart2 +karte.b.walkspeed2;
            }
        }    
    } 
}
    
//int background1;
//backgroud1 = loadImage("http://view.stern.de/de/picture/1085563/wolken-wolkenstimmung-robbyb-weltuntergangsstimmung-kleine-weltuntergang-940.jpg");
  background(1); //karte.r.x
 image(webImg10,0,0,width,height);
//webImg9
    if (karte.aktiv == true) {
      karte.zeichne();    
  }
    stroke(0);

    if (g.aktiv == true) {
g.zeichne();
}
    if (inv.aktiv == true) {
      inv.zeichne();    
  }
    if (mob.aktiv == true) {
      mob.zeichne();   
  }
  if (tf.aktiv == true) {
      tf.display();    
  }
      if (spieler.aktiv == true) {
      spieler.zeichne();   
  }
  if(karte.m.noinfo == false){
      fill(0);
      textSize(25);
      String ausgabe = "Money: "+tf.ziel+"$";
      text(ausgabe,width/27,35);
  }
 if (keyPressed==false) {
     if(keyCode== UP ){
        mob.j.noboost = true;  
    } 
 } 
    if (mob.a.auto){
     if (keyPressed==false) {
    if (keyCode==LEFT) {
   mob.a.bremsenl = true;
        } else{ 
            mob.a.bremsenr = true;
        }
        if (keyCode==RIGHT) {
      mob.a.bremsenr = true;
                } else {
                      mob.a.beschleunigungr = true; 
                 }
            }  
     }
}

//void zufallx (anzahln) {
 //   int[] xPos = new int[anzahln];
 //   for (int u = 0; u < anzahln; u++){
// xPos[u] = random(100);
 //random(karte.b.chunksize*karte.b.x.length/xPos.length*u,karte.b.chunksize*karte.b.x.length/xPos.length*(u+1));
 //   }
  //  return xPos;
 //  } 
int hoehenausgabe (xwert) {
    int nky1 = karte.b.x[0+Math.floor(xwert/karte.b.chunksize)];
   int nky2 = karte.b.x[1+Math.floor(xwert/karte.b.chunksize)];
   int nkx = xwert-karte.b.chunksize*Math.floor(xwert/karte.b.chunksize);

    if(nky1 < nky2){
    int y =  nky1+((nky2 - nky1)*nkx/karte.b.chunksize);    } 
        if(nky1 > nky2){
            int y = nky2+((nky1 - nky2)*(karte.b.chunksize-nkx)/karte.b.chunksize);} 
    return y;
    }    

    int zufallsx() {
      //  for (int u = 0; u < anzahln; u++){
      int z = random(karte.b.renderdistance,karte.b.chunksize*karte.b.x.length-karte.b.renderdistance);
     // }
      return z;
    }

void info (String infotext) {
           fill(0);
        if(spieler.p.x<width/2){
    text(infotext,spieler.p.x+50,spieler.p.y,width/2-50,height);
        }else{
        text(infotext,spieler.p.x-width/2+50,spieler.p.y,width/2-50,height);
        }
    }


    
void oretexture (int x, int y, int r, int g, int b){
    fill(r,g,b);
        quad(0+x,10+y,0+x,20+y,20+x,0+y,10+x,0+y);
        quad(30+x,0+y,40+x,0+y,0+x,40+y,0+x,30+y);
        quad(50+x,0+y,50+x,10+y,10+x,50+y,0+x,50+y);
        quad(50+x,20+y,50+x,30+y,30+x,50+y,20+x,50+y);
        triangle(50+x,40+y,50+x,50+y,40+x,50+y);
    }
void emeraldtexture(int x, int y){
        fill(0,255,0);
       quad(0+x,10+y,0+x,40+y,10+x,50+y,10+x,0+y);
       quad(10+x,0+y,10+x,50+y,30+x,50+y,30+x,0+y);
       quad(30+x,0+y,30+x,50+y,40+x,40+y,40+x,10+y);
       fill(130,255,130);
       stroke(255);
       quad(10+x,10+y,10+x,40+y,30+x,40+y,30+x,10+y); 
    }
class auto {
    int anzahl = 200;
    int hoehstgeschwindidkeit= 299;
    int fuelconsumtion = 0.001;
    
    boolean aktiv = true;
    boolean nodrive;
    int[] xPos = new int[anzahl];
    int[] yPos = new int[anzahl];
    int[] xP = new int[anzahl];
    int[] yP = new int[anzahl];
    int u = 0;
  int[] autotreibstoff = new int[anzahl];
    boolean rechts=false;
    boolean auto=false;
    int autoPos;
    boolean beschleunigungl;
    boolean beschleunigungr;
    int speedl;
    int speedr;
    boolean bremsenr= false;
    boolean bremsenl= false;
    
    boolean autoeingesammelt = false;
    int tastenanzahl = 0;
  boolean geoeffnet;
  int altexPos;
    int autozeit = 0;
    int noautozeit = 0;
    int vollgas;
    int vollgastime;
    int vergangenfuel;
    int vergangenzeit;
  
         auto() {}
    void display() {
        if(hoehstgeschwindidkeit==round(speedr+speedl)){
            vollgastime = vollgastime+1;
            }else{
                vollgastime = 0;
                }
                vollgas = vollgastime*5-vollgastime*vollgastime/5;
        if(vollgas<0){
            vollgas = 0;
          
            }
        if(nodrive == true){
            bremsenr = true;
            bremsenl = true;
            beschleunigungl = false;
            beschleunigungr = false;
            }
                    if(spieler.p.x > (width/4+100) ) {     
           spieler.p.x-=speedl;
           karte.b.kart2 = karte.b.kart2-speedl;
           
           } else {
                karte.b.kart = karte.b.kart +speedl;
                  karte.b.kart2 = karte.b.kart2-speedl;
                } 
                            if(spieler.p.x < (3*width/4-100)   ) {
            spieler.p.x+=speedr;
            karte.b.kart2 = karte.b.kart2 +speedr;
            } else {
                karte.b.kart = karte.b.kart -speedr;
                karte.b.kart2 = karte.b.kart2 +speedr;
               }
        if (beschleunigungl) {
            speedl = Math.abs(speedl*(1-1/hoehstgeschwindidkeit) +1.19);
}
                if (beschleunigungr) {
            speedr = Math.abs(speedr*(1-1/hoehstgeschwindidkeit) +1.19);
            }
            if(bremsenl) {
                speedl = speedl*(1+1/hoehstgeschwindidkeit) -2.2;
                }
                    if(bremsenr) {
                speedr = speedr*(1+1/hoehstgeschwindidkeit) -2.2;
                }
                if (speedl<0) {
                    speedl =0;
                 //   beschleunigungr =false;
                  //  beschleunigungl =false;
                    }
                    
                     if (speedr<0) {
                    speedr =0;
                 //   beschleunigungr =false;
                  //  beschleunigungl =false;
                    }
         
        if (speedl>hoehstgeschwindidkeit){
            speedl = hoehstgeschwindidkeit;
            }
        if (speedr>hoehstgeschwindidkeit){
            speedr = hoehstgeschwindidkeit;
            }
      //  fill(255,255,255);
        if(autotreibstoff[autoPos]<0) { 
        autotreibstoff[autoPos] = 0; 
                  autozeit = 0;
                 autoeingesammelt = false;
                xPos[autoPos]  = karte.b.kart2;
                spieler.aktiv = true;
     auto = false;}
    
         if(auto){
             autozeit++;
             } else {
                 autozeit = 0;
                 }
            if(auto == false){
                noautozeit ++;
                } else{
                    noautozeit = 0;
                    }
                 
     if(autozeit>20){
                 if (keyPressed==true) {
            if (keyCode== DOWN ) { 
                if(auto == true){
                  //   geoeffnet = false;
                      autozeit = 0;
                    autoeingesammelt = false;
                     auto = false;
                     spieler.aktiv = true;
                    xPos[autoPos]  = karte.b.kart2;
                      }
                    }
                }
             }
        
        if(autotreibstoff[autoPos]>200){
            autotreibstoff[autoPos] = 200;
            mob.z.health = mob.z.health + 10;}
        
        for ( ;u<xPos.length; u++) {
        autotreibstoff[u] = random(20,150);
        xPos[u] = random(0,karte.b.chunksize*karte.b.x.length);}
        
        for (int i = 0; i < xPos.length; i++) {
            yPos[i] = hoehenausgabe(xPos[i]);
        
               if(80>(Math.abs(karte.b.kart2-xPos[i]))){
                   info("Arrow key down to steel the car");
            if (keyPressed==true) {
            if (keyCode== DOWN ) { 
                if(noautozeit>20){
                tastenanzahl = tastenanzahl + 1;
                 altexPos = xPos[i];
                  xPos[i] = -1000;
                autoPos = i;
         auto = true; 
         spieler.aktiv = false;
               autoeingesammelt = true; 
               }
                  } 
                 } else{
                     tastenanzahl = 0;
                     }
            }else{
            autoeingesammelt = false;
            }   
     if(autoeingesammelt){
         }else{
           yP[i] = height-yPos[i]+karte.b.karty;
        xP[i] = xPos[i]+karte.b.kart; 
        }

    if (auto){
            fill(255,255,0);
        rect(10,120,autotreibstoff[autoPos],20);
        fill(0);
        textSize(19);
        text("Car fuel",10,123,autotreibstoff[autoPos],20);
        
                // fill(0);
                 textSize(25+vollgas);
                     fill(random(0,255*(speedr+speedl)/hoehstgeschwindidkeit),random(0,255*(speedr+speedl)/hoehstgeschwindidkeit),random(0,255*(speedr+speedl)/hoehstgeschwindidkeit));
        text(round(speedr+speedl)+"km/h",12,height-12);
        textSize(25);
        
     if (keyPressed==true) {
    if (keyCode==LEFT) {
    rechts = true; 
    beschleunigungl = true;
    beschleunigungr = false;
        autotreibstoff[autoPos] = autotreibstoff[autoPos]-((millis() -vergangenzeit)*fuelconsumtion); 
        vergangenzeit = millis();
         bremsenl = false;
        bremsenr = true;
        } else{ 
            bremsenl = true;
        }
        if (keyCode==RIGHT) {
        rechts= false;
          autotreibstoff[autoPos] = autotreibstoff[autoPos]-((millis() -vergangenzeit)*fuelconsumtion); 
            vergangenzeit = millis();
             bremsenr = false;  
 beschleunigungl = false;
    beschleunigungr = true;      
                } else {
                    bremsenr = true;
                    }
            }else{
                vergangenzeit = millis();
                }  
        xP[autoPos] = spieler.p.x;
        yP[autoPos] = spieler.p.y+50;  
    }else{
        speedr = 0;
        speedl = 0;
        }
        if(rechts){
        image(webImg,xP[i]-200 , yP[i]-100);
        }else{
      image(webImg2, xP[i]-200, yP[i]-100);
            }
       }
    }
}

class jetpack {
    boolean jetpackiminv=false;
    
    int jetPos;
    int fuel;
    boolean jetpack;
    boolean noboost;
    boolean fly;
    int flyspeed = 1.75;
    int jetpackfuelconsumtion = 36;
    int flytime;
    int noboosttime;
    int anzahl = 300;
    int[] xPos = new int[anzahl];
    int[] yPos = new int[anzahl];
    int[] xP = new int[anzahl];
    int[] yP = new int[anzahl];
    int u = 0;
    int m;
    int m2;
     jetpack() {}
    void display() {
        if(fuel<0) {
            fuel = 0;
            jetpack = false;
            fly = false;
            }
        
        if(fuel>200){
            fuel = 200;
            mob.z.health = mob.z.health + 10;
            }
        
        fill (0,0,255);
        for ( ;u<xPos.length; u++) {
        xPos[u] = random(0,karte.b.chunksize*karte.b.x.length);}
        for (int i = 0; i < xPos.length; i++) {
            
            if(80>(Math.abs(karte.b.kart2-mob.j.xPos[i]))){
                info("Press arrow key down to collect jetpack");
      if (keyPressed==true) {
            if (keyCode==DOWN) {
 jetpackeinsammeln ();
                }
            }
            }else{
             jetpackiminv = false;
            }   

if(jetpackiminv){
                mob.j.xPos[i] = -1000;
            jetPos = i;
    }else {
     yP[i] = height-yPos[i]+karte.b.karty;
     xP[i] = xPos[i]+karte.b.kart;
        }

         if (fly){
     if(noboost==false){
     karte.b.jump= karte.b.jump + flyspeed*(millis()-m)/6;
         noboosttime = 0;
         fuel = fuel -jetpackfuelconsumtion*(millis()-m)/10000;
         }else{
             noboosttime = noboosttime+(millis()-m2)/1000;
         karte.b.jump = karte.b.jump -noboosttime;
             }
         }
         m = millis();
         m2 = millis();
        if(jetpack ==false){
            if (karte.b.jump>0){
                    flytime =0;
          }
    }
               if(jetpack){   
         fill(0,0,255);
        rect(10,90,fuel,20);
         fill(150,150,0);
        textSize(19);
        text("Jetpack fuel",10,93,fuel,20);
        fill(0,0,255);
         xP[jetPos] = spieler.p.x;
         yP[jetPos] = spieler.p.y+50;  
               
    if (karte.b.jump<0){
     fly = false;
     flytime=0;
     karte.b.jump =0;
     noboosttime = 0;
        }
     }   
        image(webImg6,xP[i]-15,yP[i]-25);
        
        yPos[i] = hoehenausgabe (xPos[i]);
         }
        }
        void jetpackeinsammeln (){
            jetpackiminv = true;
            fuel = fuel+random(20,80);
            jetpack = true;
            }
    }
class zombie {
    int anzahl = 800;
    
    int zombietotzeit;
    int u = 0;
    int wspeed = 4;
    //abs(900/1000);
    int health = 200;
    int damage = 0.1;
    int breite = 40;
    int[] xPos = new int[anzahl];
    int[] yPos = new int[anzahl];
    int[] zombiehealth = new int[anzahl];

    zombie() {}
    void display() {
        
        if (health>200){
            health = 200;
            karte.l.Geld = karte.l.Geld + 10;
            } 
         for ( ;u<xPos.length; u++) {
        xPos[u] = random(karte.b.chunksize*karte.b.x.length/xPos.length*u,karte.b.chunksize*karte.b.x.length/xPos.length*(u+1));
        zombiehealth [u] = 100;
        }
        for (int i = 0; i < xPos.length; i++) {
            
          if (zombiehealth [i]<1)  {
              zombietotzeit++;
                     xPos[i] = -1000;
              if(zombietotzeit > 1000){
                  zombietotzeit = 0;
                    xPos[i] =   random(karte.b.chunksize*karte.b.x.length/xPos.length*i,karte.b.chunksize*karte.b.x.length/xPos.length*(i+1)); 
                   zombiehealth [i] = 100;
                  }
              }
if(xPos[i]<karte.b.kart2){ //xPos sind positiv nach rechts steigend
      image(webImg4, xPos[i]+karte.b.kart-80, height-yPos[i]+karte.b.karty-110);
    if (i == (xPos.length-1)) { 
       xPos[i] = xPos[i]+wspeed; //nach rechts gehen 
     }   
    if((xPos[i+1] - xPos[i]) >(breite*1.2)){
        xPos[i] = xPos[i]+wspeed; //nach rechts gehen
            }
    }  else{
         image(webImg3, xPos[i]+karte.b.kart-80, height-yPos[i]+karte.b.karty-110);
        }
if(xPos[i]>karte.b.kart2){
       if (i == 0) {
    xPos[i] = xPos[i]-wspeed;
    }
        if ((xPos[i]-xPos[i-1])>(breite*1.2)) { 
           xPos[i] = xPos[i]-wspeed; //nach links gehen
            }
    }
 
        yPos[i] = hoehenausgabe(xPos[i]);
        
        if(karte.m.noinfo == false){
        fill(255,00,00);
        rect(10,60,health,20);
        fill(0);
        textSize(19);
        text("Health",10,63,health,20);
        }
        if(karte.b.jump<50) {
                if (Math.abs(xPos[i]-karte.b.kart2)<300) {
                    if(mob.a.auto == false){
                health = Math.abs(health - damage);
                }else{
                    zombiehealth [i] = zombiehealth [i] - 2*(mob.a.speedr+mob.a.speedl);
                    mob.a.speedr = mob.a.speedr*0.97;
                mob.a.speedl = mob.a.speedl*0.97;
                }
           } 
    if(health<1){
        health = 0;
        textSize(200);
      fill(255,0,0);
      text("Game Over",120,50,500,800);
      strokeWeight(0);
      noStroke;
      textSize(0);
      karte.w.nowalk =true;
      karte.w.noitem = true;
      mob.a.nodrive = true;
                }
            }
        }
    }
}

class player {
    position p;
    kopf k; 
    rumpf r; 
    arm al; 
    arm ar; 
    bein bl; 
    bein br; 
    boolean aktiv = false;
    player(int cn,int cx, int cy, String cs, int cr) {
        p = new position (cx,cy);
        k = new kopf(p,cs,cr,cn);
        r = new rumpf(p,k);
        al = new arm(p,"links");
        ar = new arm(p,"rechts");
        bl = new bein(p,"links");
        br = new bein(p,"rechts");
    }
    void zeichne() {
        k.display(); 
        r.display();   
        al.display();
        ar.display();
        bl.display();
        br.display();
    }
}

class inventory {
    kasten k;
    boolean aktiv = false;
    
    inventory() {
        k = new kasten();
    }
    void zeichne() {
        k.display();
        
    }
}  
class kopf {
    boolean spielernicken = false;
    int radius;
    int radiusa; //radius auge 
    farbe f;
    position p;
    int positiona; //position1 auge
    int positiona2; //position2 auge
    int n = 0; 
    int faktor = 12;  
    boolean is_vorne = false;  
    String time_to_nick = 3;  
    kopf (position cp, String cs, int cr, int cn) {
        p = cp;
        f = new farbe(cs);
        radius = cr;
        n = cn;

    }
    void nicken() {
        if (time_to_nick == 30) {
            if (is_vorne) {
                radius+=faktor;
                is_vorne=false;
                p.y-=10;
            } else {
                radius-=faktor;
                is_vorne=true;
                p.y+=10;
            }
            time_to_nick = n;
        }
    }

    void display() {
        if(spielernicken){
        nicken();
        }
        time_to_nick++;
        fill(f.rot,f.gruen,f.blau);
        ellipse(p.x,p.y,radius,radius); 
        
        radiusa = radius-30;   //auge
        positiona = p.x+10;    //auge    
        positiona2 = p.y-5;    //auge
        fill(255); //augenfarbe
        ellipse(positiona,positiona2,radiusa,radiusa); //Auge
        ellipse(positiona-13,positiona2,radiusa,radiusa);
      //ellipse(positiona-10,positiona2+5,10,10);
        ellipse(positiona-10,positiona2+17,22,5);
    }
}

class rumpf {
    int leange = 50;
    farbe f = new farbe("rot");
    position p;
    kopf k;
    rumpf (position cp, kopf ck) {
        p = cp;        
        k = ck;
     //   p.halsansatz = p.y+ck.radius/2;
      //  p.huefte = p.halsansatz+leange;
    }
    void display() {
        
        strokeWeight(7);
        fill(f.rot,f.gruen,f.blau);
        line(p.x,p.halsansatz,p.x,p.halsansatz+leange);    
        strokeWeight(1);
    }
}

class bein {
    int laenge = 36;
    int laengeX = laenge;
    int laengeY = laenge;
    boolean links;
    position p;
    boolean move = false;
    int speed= 1.5;
    int Winkel = 35;
    
    bein(position cp, String s) {
        p= cp;
        if (s == "links") {
            links = true;            
        } else {
            links = false;    
        }
    }
 void bewegen() {
        if (move) {
             Winkel+=speed;
             laengeX=cos(Winkel*PI/180)*laenge;
             laengeY=sin(Winkel*PI/180)*laenge;
        }  
        if  (Winkel>80|| Winkel<30) {
            speed*=-1;
        }            
    }
    void display() {
        
        strokeWeight(7);
        bewegen();
        if (links==true) {
            line(p.x,p.huefte,p.x-laengeX,p.huefte+laengeY);
        } else {
            line(p.x,p.huefte,p.x+laengeX,p.huefte+laengeY);
         strokeWeight(1);   
        }
    }
}

class arm {
    int laenge = 30;
    int laengeX = laenge;
    int laengeY = laenge;
    boolean links;
    position p;
    boolean move = false;
    int speed = 1;
    int Winkel = 45;
    
    arm(position cp, String s) {
        p = cp; 
        if (s == "links") {
            links = true;            
        } else {
            links = false;    
        }
    }
    void bewegen() {
        if (move) {
             Winkel+=speed;
             laengeX=cos(Winkel*PI/180)*laenge;
             laengeY=sin(Winkel*PI/180)*laenge;
        }  
        if  (Winkel>60|| Winkel<0) {
            speed*=-1;
        }
    }
    void display() {
        strokeWeight(7);
        
        bewegen();
        if (links==true) {
            
            line(p.x, p.halsansatz, p.x-laengeX,p.halsansatz+laengeY);  
        } else {
             line(p.x, p.halsansatz, p.x+laengeX,p.halsansatz+laengeY);  
             strokeWeight(1);
                   
        }
    }
}  
class position {
    int x;
    int y;
    int halsansatz;
    int huefte;
    position (int xc, int yc) {
        x = xc;
        y = yc;       
    }    
}
class farbe {
    private int rot;
    private int gruen;
    private int blau;  
    farbe (String color) {
        anmalen(color);
    }
    void anmalen(String color){
         if (color == "rot"){
            rot=255;gruen=0;blau=0;
        }else if (color == "blau") {
            rot=0;gruen=0;blau=255;    
        }else  if (color == "gruen") {
            rot=0;gruen=255;blau=0;  
        }else if (color == "gelb") {
             rot=255;gruen=255;blau=0;     
        }else if (color == "lila") {
             rot=131;gruen=0;blau=255;  
        }else if (color == "tuerkis") {
             rot=64;gruen=224;blau=208;
        }else if (color == "türkis") {
             rot=64;gruen=224;blau=208;
        }else if (color == "braun") {
             rot=165;gruen=42;blau=42;
        }else if (color == "pink") {
             rot=255;gruen=192;blau=203;
        }else if (color == "violet") {
             rot=238;gruen=130;blau=238;
        }else if (color == "gold") {
             rot=255;gruen=215;blau=0;
        }else if (color == "grau") {
             rot=190;gruen=190;blau=190;
        }else if (color == "cyan") {
             rot=0;gruen=255;blau=255;
        }else if (color == "magenta") {
             rot=255;gruen=0;blau=255;
        }else if (color == "schwarz") {
             rot=0;gruen=0;blau=0;
        }else if (color == "weiß") {
             rot=255;gruen=255;blau=255;
        }else if (color == "weiss") {
             rot=255;gruen=255;blau=255;
        }else {
             rot=0;gruen=0;blau=0; 
        }        
    }
}