Mattie

Mattie

Apr 9th, 2010
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 14.58 KB | None | 0 0
  1. package bomberman18;
  2.  
  3. import java.awt.*;
  4. import java.awt.event.ActionEvent;
  5. import java.awt.event.ActionListener;
  6. import java.awt.event.KeyEvent;
  7. import java.awt.event.KeyListener;
  8. import java.util.*;
  9. import javax.swing.*;
  10.  
  11. public class Level extends JPanel implements KeyListener, ActionListener
  12. {
  13.     Bomberman bomberman, bombermanGroen, bombermanGeel, bombermanRood, bombermanZwart;
  14.     javax.swing.Timer timer0;
  15.     javax.swing.Timer timer1;
  16.     javax.swing.Timer timer2;
  17.     javax.swing.Timer timer3;
  18.     private int afteller0;
  19.     private int afteller1;
  20.     private int afteller2;
  21.     private int afteller3;
  22.     private final int ONTPLOFFINGSTIJD = 4;
  23.     private int vakgrootte = 30;
  24.     Random generator = new Random();
  25.     private ArrayList<Bomberman> objecten;
  26.     private ArrayList<RandomLevel> levelLijst;
  27.     private ArrayList<Bom> bomLijst;
  28.     private ArrayList<Explosie> explosieLijst;
  29.     private Boolean botsing = false;
  30.     private Boolean botsing2 = false;
  31.     private Boolean botsing3 = false;
  32.  
  33.     private Boolean bomberman0Bom = false;
  34.     private Boolean bomberman1Bom = false;
  35.     private Boolean bomberman2Bom = false;
  36.     private Boolean bomberman3Bom = false;
  37.  
  38.     //nodig om later de keys te changen
  39.     private int nulOmhoog, nulOmlaag, nulLinks, nulRechts, nulPlaatsBom;
  40.     private int eenOmhoog, eenOmlaag, eenLinks, eenRechts, eenPlaatsBom;
  41.     private int tweeOmhoog, tweeOmlaag, tweeLinks, tweeRechts, tweePlaatsBom;
  42.     private int drieOmhoog, drieOmlaag, drieLinks, drieRechts, driePlaatsBom;
  43.  
  44.     public Level()
  45.     {
  46.  
  47.         setLayout(null);
  48.         addKeyListener(this);
  49.         setFocusable(true);
  50.         requestFocus();
  51.  
  52.         objecten = new ArrayList<Bomberman>();
  53.         levelLijst = new ArrayList<RandomLevel>();
  54.         bomLijst = new ArrayList<Bom>();
  55.         explosieLijst = new ArrayList<Explosie>();
  56.         // maak de bombermans (getal doorkrijgen van het menu)
  57.         // afhankelijk van het aantal gekozen spelers
  58.         plaatsBomberman(4);
  59.  
  60.         genereerLevel();
  61.         genereerMuur();
  62.  
  63.         setKeys();
  64.        
  65.         afteller0 = ONTPLOFFINGSTIJD;
  66.         afteller1 = ONTPLOFFINGSTIJD;
  67.         afteller2 = ONTPLOFFINGSTIJD;
  68.         afteller3 = ONTPLOFFINGSTIJD;
  69.     }
  70.  
  71.     public void setKeys() // de default keys
  72.     {
  73.         nulOmhoog = 38; // keycode voor pijl omhoog
  74.         nulOmlaag = 40; // pijl omlaag
  75.         nulLinks = 37; // pijl links
  76.         nulRechts = 39; // pijl rechts
  77.         nulPlaatsBom = 32; // SPACE
  78.         //------------------
  79.         eenOmhoog = 87; // W
  80.         eenOmlaag = 83; // S
  81.         eenLinks = 65; // A
  82.         eenRechts = 68; // D
  83.         eenPlaatsBom = 81; // Q
  84.         //------------------
  85.         tweeOmhoog = 104; //NUM 8
  86.         tweeLinks = 100; //NUM 4
  87.         tweeOmlaag = 98; //NUM 2
  88.         tweeRechts = 102; //NUM 6
  89.         tweePlaatsBom = 103; //NUM 7
  90.         //------------------
  91.         drieOmhoog = 73; // I
  92.         drieOmlaag = 75; // K
  93.         drieLinks = 74; // J
  94.         drieRechts = 76; // L      
  95.         driePlaatsBom = 85; // U
  96.  
  97.     }
  98.  
  99.     public void paintComponent(Graphics g)
  100.     {
  101.         super.paintComponent(g);
  102.         this.setBackground(Color.CYAN);
  103.         tekenLevel(g);
  104.     }
  105.  
  106.     public void tekenLevel(Graphics g)
  107.     {
  108.         for (int i = 0; i <= (getWidth() / 10); i++) // horizontale "grid"
  109.         {
  110.             g.drawLine(0, i * vakgrootte, getWidth(), i * vakgrootte);
  111.         }
  112.  
  113.         for (int i = 0; i <= (getHeight() / 10); i++) // verticale "grid"
  114.         {
  115.             g.drawLine(i * vakgrootte, 0, i * vakgrootte, getHeight());
  116.         }
  117.     }
  118.  
  119.     public void genereerLevel()
  120.     {
  121.         int id = 0;
  122.         int locatieX = 0;
  123.         int locatieY = 0;
  124.  
  125.         for (int y = 2; y < 18; y++)
  126.         {
  127.             for (int x = 2; x < 18; x++)
  128.             {
  129.                 id++;
  130.                 int randomGetal = generator.nextInt(6);
  131.                 switch (randomGetal)
  132.                 {
  133.                 case 0 : // leeg = nix
  134.                 break;
  135.                 case 1 :
  136.                 case 2 :
  137.                 case 3 :
  138.                 case 4 :
  139.                 case 5 :
  140.                     locatieX = x * vakgrootte + 1;
  141.                     locatieY = y * vakgrootte + 1;
  142.                     RandomLevel test = new RandomLevel(id, randomGetal, locatieX, locatieY);
  143.                     add(test);
  144.                     levelLijst.add(test);
  145.                 break;
  146.                 }
  147.             }
  148.         }
  149.     }
  150.  
  151.     public void genereerMuur() // maakt de muur om het level heen
  152.     {
  153.         int id = 1000;
  154.         int y = 0;
  155.         for (int x = 0; x <= 20; x++)
  156.         {
  157.             id++;
  158.             RandomLevel muur = new RandomLevel(id, 99, x * vakgrootte, y * vakgrootte);
  159.             add(muur);
  160.             levelLijst.add(muur);
  161.         }
  162.         y = 19;
  163.         for (int x = 0; x <= 20; x++)
  164.         {
  165.             id++;
  166.             RandomLevel muur = new RandomLevel(id, 99, x * vakgrootte, y * vakgrootte);
  167.             add(muur);
  168.             levelLijst.add(muur);
  169.         }
  170.  
  171.         int x = 0;
  172.         for (int yPOS = 1; yPOS <= 20; yPOS++)
  173.         {
  174.             id++;
  175.             RandomLevel muur = new RandomLevel(id, 99, 0, yPOS * vakgrootte);
  176.             add(muur);
  177.             levelLijst.add(muur);
  178.         }
  179.         x = 19;
  180.         for (int yPOS = 0; yPOS <= 20; yPOS++)
  181.         {
  182.             id++;
  183.             RandomLevel muur = new RandomLevel(id, 99, x * vakgrootte, yPOS * vakgrootte);
  184.             add(muur);
  185.             levelLijst.add(muur);
  186.         }
  187.     }
  188.  
  189.     public void plaatsBomberman(int aantal)
  190.     {
  191.         int locatieX = 0;
  192.         int locatieY = 0;
  193.         String kleur = null;
  194.  
  195.         for (int nummer = 0; nummer <= aantal; nummer++)
  196.         {
  197.             if (nummer == 0)//links boven
  198.             {
  199.                 kleur = "groen";
  200.                 locatieX = 1 * vakgrootte + 1;
  201.                 locatieY = 1 * vakgrootte + 1;
  202.                 bombermanGroen = new Bomberman(0, locatieX, locatieY, kleur); // het 1e cijfer is nodig voor het botsing detectie
  203.                 add(bombermanGroen);
  204.                 objecten.add(bombermanGroen);
  205.                 timer0 = new javax.swing.Timer(1000, this);
  206.             }
  207.             if (nummer == 2)//rechts boven
  208.             {
  209.                 kleur = "geel";
  210.                 locatieX = 18 * vakgrootte + 1;
  211.                 locatieY = 1 * vakgrootte + 1;
  212.                 bombermanGeel = new Bomberman(1, locatieX, locatieY, kleur);
  213.                 add(bombermanGeel);
  214.                 objecten.add(bombermanGeel);
  215.                 timer1 = new javax.swing.Timer(1000, this);
  216.             }
  217.             if (nummer == 3)// links onder
  218.             {
  219.                 kleur = "rood";
  220.                 locatieX = 1 * vakgrootte + 1;
  221.                 locatieY = 18 * vakgrootte + 1;
  222.                 bombermanRood = new Bomberman(2, locatieX, locatieY, kleur);
  223.                 add(bombermanRood);
  224.                 objecten.add(bombermanRood);
  225.                 timer2 = new javax.swing.Timer(1000, this);
  226.             }
  227.             if (nummer == 4)//R onder
  228.             {
  229.                 kleur = "zwart";
  230.                 locatieX = 18 * vakgrootte + 1;
  231.                 locatieY = 18 * vakgrootte + 1;
  232.                 bombermanZwart = new Bomberman(3, locatieX, locatieY, kleur);
  233.                 add(bombermanZwart);
  234.                 objecten.add(bombermanZwart);
  235.                 timer3 = new javax.swing.Timer(1000, this);
  236.             }
  237.         }
  238.     }
  239.  
  240.     public void keyPressed(KeyEvent e)
  241.     {
  242.  
  243.         int keyCode = e.getKeyCode();
  244.  
  245.         // afhankelijk van de gebruikte keys wordt naar de juiste verplaatsxxx() verwezen
  246.  
  247.         //groen links boven
  248.         if (keyCode == nulOmlaag || keyCode == nulOmhoog || keyCode == nulRechts || keyCode == nulLinks)
  249.         {
  250.             verplaatsBomberman(keyCode, 0);
  251.         }
  252.         //geel rechts boven
  253.         if (keyCode == eenOmlaag || keyCode == eenOmhoog || keyCode == eenRechts || keyCode == eenLinks)
  254.         {
  255.             verplaatsBomberman(keyCode, 1);
  256.         }
  257.         //rood links onder
  258.         if (keyCode == tweeOmlaag || keyCode == tweeOmhoog || keyCode == tweeRechts || keyCode == tweeLinks)
  259.         {
  260.             verplaatsBomberman(keyCode, 2);
  261.         }
  262.         //zwart rechts onder
  263.         if (keyCode == drieOmlaag || keyCode == drieOmhoog || keyCode == drieRechts || keyCode == drieLinks)
  264.         {
  265.             verplaatsBomberman(keyCode, 3);
  266.         }
  267.  
  268.         if (keyCode == nulPlaatsBom)
  269.         {
  270.             if (!bomberman0Bom)
  271.             {
  272.                 afteller0 = 5;
  273.                 plaatsBom(0, "groen");
  274.                 bomberman0Bom = true;
  275.             }
  276.         }
  277.  
  278.         if (keyCode == eenPlaatsBom)
  279.         {
  280.             if (!bomberman1Bom)
  281.             {
  282.                 afteller1 = 5;
  283.                 plaatsBom(1, "geel");
  284.                 bomberman1Bom = true;
  285.             }
  286.         }
  287.  
  288.         if (keyCode == tweePlaatsBom)
  289.         {
  290.             if (!bomberman2Bom)
  291.             {
  292.                 afteller2 = 5;
  293.                 plaatsBom(2, "rood");
  294.                 bomberman2Bom = true;
  295.             }
  296.         }
  297.  
  298.         if (keyCode == driePlaatsBom)
  299.         {
  300.             if (!bomberman3Bom)
  301.             {
  302.                 afteller3 = 5;
  303.                 plaatsBom(3, "zwart");
  304.                 bomberman3Bom = true;
  305.             }
  306.         }
  307.     }
  308.  
  309.     public void plaatsBom(int id, String kleur)
  310.     {
  311.         Bomberman b1 = objecten.get(id); // chekken welke positsie de bomberman is
  312.         int xpos = b1.getX();
  313.         int ypos = b1.getY();
  314.         Bom bom1 = new Bom(kleur, id, xpos, ypos); // maak een bom op de zelfde pos als bomberman
  315.         add(bom1);
  316.         bomLijst.add(bom1);
  317.         repaint(); // repaint anders komt ie niet :p
  318.  
  319.         if (id == 0)
  320.             timer0.start();
  321.  
  322.         if (id == 1)
  323.             timer1.start();
  324.  
  325.         if (id == 2)
  326.             timer2.start();
  327.  
  328.         if (id == 3)
  329.             timer3.start();
  330.     }
  331.  
  332.     public void controleerBotsingBom(int bombermanID)
  333.     {
  334.         botsing3 = false;
  335.         for (int i = 0; i < bomLijst.size(); i++)
  336.         {
  337.             Bomberman b1 = objecten.get(bombermanID);
  338.             Bom bom1 = bomLijst.get(i);
  339.  
  340.             if (Botsing.overlapt(bom1, b1))
  341.             {
  342.                 botsing = true;
  343.             }
  344.         }
  345.     }
  346.  
  347.     public void controleerBotsingLevel(int bombermanID)
  348.     {
  349.         botsing2 = false;
  350.         for (int i = 0; i < levelLijst.size(); i++)
  351.         {
  352.             Bomberman b1 = objecten.get(bombermanID);
  353.             RandomLevel l1 = levelLijst.get(i);
  354.  
  355.             if (Botsing.overlapt(b1, l1))
  356.             {
  357.                 botsing2 = true;
  358.             }
  359.         }
  360.     }
  361.  
  362.     public void controleerBotsing()
  363.     //doet een controle of 1 van de bomberman's enige andere bomberman overlapt
  364.     //zo ja dan wordt botsing true en wordt de verplaatsing teruggedraait
  365.     {
  366.         botsing = false;
  367.         //BELANGRIJK! DIT IS VAN 0 TOT GETAL DUS 3 == MAXIMUM!
  368.         int aantal_checks_om_te_doen = 3; //ofwel aantal bomerman's in het spel
  369.         //BELANGRIJK! DIT IS VAN 0 TOT GETAL DUS 3 == MAXIMUM!
  370.         int aantal_checks_gedaan = 0;
  371.         int objectnummer_om_te_checken = 0; // beginnen met bomberman 0    
  372.  
  373.         for (int i = 0; i <= aantal_checks_om_te_doen; i++)
  374.         {
  375.             for (int positie = 0; positie < objecten.size(); positie++)
  376.             // loop elke positie langs
  377.             // met andere woorden doe dit:
  378.             // bomberman 0 overlapt 0 => bomberman 0 overlapt 1 => overlapt 2 ed
  379.             {
  380.                 Bomberman b1 = objecten.get(positie);
  381.                 Bomberman b2 = objecten.get(objectnummer_om_te_checken);
  382.  
  383.                 if (Botsing.overlapt(b2, b1) && b1 != b2)
  384.                 {
  385.                     botsing = true;
  386.                 }
  387.  
  388.                 if (positie == 3) // is hij bij bomberman3 (de laatste ookwel)?
  389.                 {
  390.                     if (!botsing) // geen botsing? => bomberman 0 raakt niks
  391.                     {
  392.                         aantal_checks_gedaan++;
  393.  
  394.                         if (aantal_checks_gedaan <= aantal_checks_om_te_doen)
  395.                         {
  396.                             objectnummer_om_te_checken++; // verhoog het nummertje zodat een andere aan de beurt is
  397.                         }
  398.                     }
  399.                 }
  400.             }
  401.         }
  402.     }
  403.  
  404.     public void verplaatsBomberman(int keyCode, int bombermanID)
  405.     {
  406.  
  407.         int richting = 0;
  408.  
  409.         if (keyCode == nulOmlaag || keyCode == eenOmlaag || keyCode == tweeOmlaag || keyCode == drieOmlaag)
  410.             richting = 1;
  411.  
  412.         if (keyCode == nulOmhoog || keyCode == eenOmhoog || keyCode == tweeOmhoog || keyCode == drieOmhoog)
  413.             richting = 2;
  414.  
  415.         if (keyCode == nulRechts || keyCode == eenRechts || keyCode == tweeRechts || keyCode == drieRechts)
  416.             richting = 3;
  417.  
  418.         if (keyCode == nulLinks || keyCode == eenLinks || keyCode == tweeLinks || keyCode == drieLinks)
  419.             richting = 4;
  420.  
  421.         Bomberman b1 = objecten.get(bombermanID);
  422.  
  423.         switch (richting)
  424.         {
  425.         case 1 :
  426.             b1.verplaatsBomberman("onder");
  427.             controleerBotsing();
  428.             controleerBotsingLevel(bombermanID);
  429.             controleerBotsingBom(bombermanID);
  430.             if (botsing || botsing2 || botsing3)
  431.                 b1.verplaatsBomberman("boven");
  432.         break;
  433.  
  434.         case 2 :
  435.             b1.verplaatsBomberman("boven");
  436.             controleerBotsing();
  437.             controleerBotsingLevel(bombermanID);
  438.             controleerBotsingBom(bombermanID);
  439.             if (botsing || botsing2 || botsing3)
  440.                 b1.verplaatsBomberman("onder");
  441.         break;
  442.  
  443.         case 3 :
  444.             b1.verplaatsBomberman("rechts");
  445.             controleerBotsing();
  446.             controleerBotsingLevel(bombermanID);
  447.             controleerBotsingBom(bombermanID);
  448.             if (botsing || botsing2 || botsing3)
  449.                 b1.verplaatsBomberman("links");
  450.         break;
  451.  
  452.         case 4 :
  453.             b1.verplaatsBomberman("links");
  454.             controleerBotsing();
  455.             controleerBotsingLevel(bombermanID);
  456.             controleerBotsingBom(bombermanID);
  457.             if (botsing || botsing2 || botsing3)
  458.                 b1.verplaatsBomberman("rechts");
  459.         break;
  460.         }
  461.  
  462.     }
  463.  
  464.     public void actionPerformed(ActionEvent e)
  465.     {
  466.  
  467.         if (e.getSource() == timer0)
  468.         {
  469.             maakExplosie(0);
  470.             afteller0--;
  471.         }
  472.  
  473.         if (e.getSource() == timer1)
  474.         {
  475.             maakExplosie(1);
  476.             afteller1--;
  477.         }
  478.  
  479.         if (e.getSource() == timer2)
  480.         {
  481.             maakExplosie(2);
  482.             afteller2--;
  483.         }
  484.  
  485.         if (e.getSource() == timer3)
  486.         {
  487.             maakExplosie(3);
  488.             afteller3--;
  489.         }
  490.  
  491.         System.out.println("action");
  492.         repaint();
  493.     }
  494.  
  495.     public void maakExplosie(int id)
  496.     {
  497.  
  498.         System.out.println("expl");
  499.  
  500.         if (afteller0 == 0)
  501.         {
  502.             int test = 0;
  503.             timer0.stop();
  504.             afteller0 = ONTPLOFFINGSTIJD;
  505.             for (int nummer = 1; nummer < bomLijst.size(); nummer++)
  506.             {
  507.                 Bom b1 = bomLijst.get(nummer);
  508.                 String bla = "" + b1.getTest();
  509.                 if (bla.equalsIgnoreCase("groen"))
  510.                 {
  511.                     test = nummer;
  512.                 }
  513.             }
  514.             Bom b1 = bomLijst.get(test);
  515.             int xpos;
  516.             int ypos;
  517.             xpos = b1.getX();
  518.             ypos = b1.getY();
  519.             b1.setVisible(false);
  520.             b1.remove(b1);
  521.             bomLijst.remove(test);
  522.  
  523.             Explosie e = new Explosie(0, xpos, ypos);
  524.             add(e);
  525.             explosieLijst.add(e);
  526.             bomberman0Bom = false;
  527.             repaint();
  528.         }
  529.  
  530.         if (afteller1 == 0)
  531.         {
  532.             int test = 0;
  533.             timer1.stop();
  534.             afteller1 = ONTPLOFFINGSTIJD;
  535.             for (int nummer = 1; nummer < bomLijst.size(); nummer++)
  536.             {
  537.                 Bom b1 = bomLijst.get(nummer);
  538.                 String bla = "" + b1.getTest();
  539.                 if (bla.equalsIgnoreCase("geel"))
  540.                 {
  541.                     test = nummer;
  542.                 }
  543.             }
  544.             Bom b1 = bomLijst.get(test);
  545.             int xpos;
  546.             int ypos;
  547.             xpos = b1.getX();
  548.             ypos = b1.getY();
  549.             b1.setVisible(false);
  550.             b1.remove(b1);
  551.             bomLijst.remove(test);
  552.  
  553.             Explosie e = new Explosie(1, xpos, ypos);
  554.             add(e);
  555.             explosieLijst.add(e);
  556.             bomberman1Bom = false;
  557.             repaint();
  558.         }
  559.        
  560.         if (afteller2 == 0)
  561.         {
  562.             int test = 0;
  563.             timer2.stop();
  564.             afteller2 = ONTPLOFFINGSTIJD;
  565.             for (int nummer = 1; nummer < bomLijst.size(); nummer++)
  566.             {
  567.                 Bom b1 = bomLijst.get(nummer);
  568.                 String bla = "" + b1.getTest();
  569.                 if (bla.equalsIgnoreCase("rood"))
  570.                 {
  571.                     test = nummer;
  572.                 }
  573.             }
  574.             Bom b1 = bomLijst.get(test);
  575.             int xpos;
  576.             int ypos;
  577.             xpos = b1.getX();
  578.             ypos = b1.getY();
  579.             b1.setVisible(false);
  580.             b1.remove(b1);
  581.             bomLijst.remove(test);
  582.  
  583.             Explosie e = new Explosie(1, xpos, ypos);
  584.             add(e);
  585.             explosieLijst.add(e);
  586.             bomberman2Bom = false;
  587.             repaint();
  588.         }
  589.        
  590.         if (afteller3 == 0)
  591.         {
  592.             int test = 0;
  593.             timer3.stop();
  594.             afteller3 = ONTPLOFFINGSTIJD;
  595.             for (int nummer = 1; nummer < bomLijst.size(); nummer++)
  596.             {
  597.                 Bom b1 = bomLijst.get(nummer);
  598.                 String bla = "" + b1.getTest();
  599.                 if (bla.equalsIgnoreCase("zwart"))
  600.                 {
  601.                     test = nummer;
  602.                 }
  603.             }
  604.             Bom b1 = bomLijst.get(test);
  605.             int xpos;
  606.             int ypos;
  607.             xpos = b1.getX();
  608.             ypos = b1.getY();
  609.             b1.setVisible(false);
  610.             b1.remove(b1);
  611.             bomLijst.remove(test);
  612.  
  613.             Explosie e = new Explosie(1, xpos, ypos);
  614.             add(e);
  615.             explosieLijst.add(e);
  616.             bomberman3Bom = false;
  617.             repaint();
  618.         }
  619.        
  620.        
  621.     }
  622.  
  623.     public void keyReleased(KeyEvent e)
  624.     {
  625.     }
  626.  
  627.     public void keyTyped(KeyEvent e)
  628.     {
  629.     }
  630.  
  631. }
Add Comment
Please, Sign In to add comment