Advertisement
Debml

backup videojuegos, mayo 5 8 pm

May 5th, 2015
210
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 79.30 KB | None | 0 0
  1. package runmaurorun;
  2.  
  3. import java.awt.Color;
  4. import java.awt.Dimension;
  5. import java.awt.Graphics;
  6. import java.awt.Graphics2D;
  7. import java.awt.Image;
  8. import java.awt.Rectangle;
  9. import java.awt.Toolkit;
  10. import java.awt.event.KeyAdapter;
  11. import java.awt.event.KeyEvent;
  12. import java.awt.event.KeyListener;
  13. import java.awt.event.MouseAdapter;
  14. import java.awt.event.MouseEvent;
  15. import java.awt.event.MouseListener;
  16. import java.awt.event.WindowEvent;
  17. import java.io.BufferedReader;
  18. import java.io.File;
  19. import java.io.FileNotFoundException;
  20. import java.io.FileReader;
  21. import java.io.IOException;
  22. import java.net.URL;
  23. import java.util.ArrayList;
  24. import java.util.Iterator;
  25. import java.util.logging.Level;
  26. import java.util.logging.Logger;
  27. import javax.swing.ImageIcon;
  28. import javax.swing.JPanel;
  29.  
  30. /**
  31. * Board
  32. *
  33. * Modela la definición de todos los objetos de tipo <code>Board</code>.
  34. *
  35. * @author Fabián Montemayor A01280156, Mauro Amarante A01191903,
  36. * Patricio Sánchez A01191893 & David Benítez A01191731
  37. * @version 3.0
  38. * @date 8/04/2015
  39. */
  40. public class Board extends JPanel implements Runnable, KeyListener,
  41. MouseListener {
  42. //variables de medidaas del JPanel
  43. private final int iWidth = 1280; //define ancho del JPanel
  44. private final int iHeight = 739; //define altura del JPanel
  45.  
  46. //objetos
  47. private Mauro mauMauro; //objeto para Mauro
  48. private Map mapMaps; //objeto para Map
  49. private Morpheus morMorpheus; //objeto para morfeo
  50.  
  51. //objetos ed tipo MenuButton
  52. private MenuButton mbtBack; //botón de Back
  53. private MenuButton mbtAbout; //botón de About
  54. private MenuButton mbtPlay; //botón de Play
  55. private MenuButton mbtInstructions; //botón de Instrucciones
  56. private MenuButton mbtOptions; //botón de Opciones
  57. private MenuButton mbtScores; //botón de Puntajes
  58. private MenuButton mbtExit; //botón de Salida
  59. private MenuButton mbtGameOverMenu; //boton al menu cuando pierede el juego
  60.  
  61. //variables de Mauro
  62. private final int iHeightMauro = 32; //define altura de Mauro
  63. private final int iWidthMauro = 18; //deine anho de Mauro
  64. private int iVelocityMauro; //define la velocidad de Mauro
  65. private int iDirectionMauro; //define la direccion de Mauro
  66.  
  67. //variables de morfeo
  68. private final int iHeightMorpheus = 32; //define altura de morfeo
  69. private final int iWidthMorpheus = 18; //deine anho de morfeo
  70. private int iDirectionMorpheus; //define la direccion de morfeo
  71.  
  72. //variables de tipo integer
  73. private int iLevel; //define nivel actual en el juego
  74. private int iPosX; //define la ubicacion de un objeto en X
  75. private int iPosY; //define la ubicacion de un objeto en Y
  76. private int iDoorOpenKey; //auxiliar para contorl de puertas y llaves
  77. private int iMouseX; //deinfe la posicion en X del mouse
  78. private int iMouseY; //define la posicion en Y del mouse
  79. private int iMenu; //define el menú correspondiente
  80. private int iLevelChange; //auxiliar que checa si hubo cambio de nivel
  81. private int iPreviousX; //auxiliar para revisar posicion previa
  82. private int iPreviousY; //auxiliar para revisar posicion previa
  83. private int iPauseTimeDiff;
  84.  
  85. //variables de tipo long
  86. private long lImmuneTimeMauro; //define el tiempo que Mauro es immune
  87. private long lTime; //tiempo restante en el juego
  88. private long lAnimationTime; //tiempo animacion
  89. private long lPauseTime; //tiempo al activar pausa
  90. private long lStopPauseTime; //tiempo al desactivar pausa
  91. private long lCurrentTimePauseFix; /*auxiliar que ayuda a resolver
  92. conflicto de tiempo durante la pausa*/
  93.  
  94. //variables de tipo boolean
  95. private boolean bTime; //define si tiempo del juego ha terminado
  96. private boolean bEndGame; //define si termian el juego o no
  97. private boolean bGameOver; //si se acabo el juego
  98. private boolean bMorpheusStart; //si paso el tiempo morfeo aparece
  99. private boolean bPause; //define si el jeugo esta en pausa
  100.  
  101. //listas
  102. private ArrayList arlEnemies; //lista de enemigos
  103. private ArrayList arlMapObjectsLevel1; //lista de Maps del nivel 1
  104. private ArrayList arlMapObjectsLevel2; //lista de Maps del nivel 2
  105. private ArrayList arlMapObjectsLevel3; //lista de Maps del nivel 3
  106. private ArrayList arlMapObjectsLevel4; //lista de Maps del nivel 4
  107. private ArrayList arlMorpheusSteps; //pasos que seguira morfeo
  108.  
  109. //arreglos
  110. private boolean[] bButtonsLevel1; //define cuales botones estan activos
  111. private boolean[] bButtonsLevel2; //define cuales botones estan activos
  112. private boolean[] bButtonsLevel3; //define cuales botones estan activos
  113. private boolean[] bButtonsLevel4; //define cuales botones estan activos
  114.  
  115. //thread
  116. private Thread thread; //variable para el thread del JPanel
  117.  
  118. //variables de control de tiempo para animacion
  119. private long lCurrentTime; //tiempo actual
  120. private long lInitialTime; //tiempo inicial
  121. private long lElapsedTime; //tiempo transcurrido
  122.  
  123. //variables control de tiempo para morfeo
  124. private long lMorpheusStartTime;
  125. private long lMorpheusCurrentTime;
  126. private int iMorpheusElapsedTime;
  127. private int iMorpheusTimeLimit;
  128.  
  129. //variables control de tiempo para pwrup de zapatos
  130. private long lShoesStartTime;
  131. private long lShoesCurrentTime;
  132. private int iShoesElapsedTime;
  133. private int iShoesTimeLimit;
  134.  
  135. //variables para controlar la barra de tiempo
  136. private long lTimerInitial; //tiempo en donde se empieza a contar la barra
  137. private long lCurrentTimer; //tiempo actual
  138. private int iElapsedTimeTimer;//tiempo transcurrido
  139. private int iLimitTime; //tiempo limite del nivel en segundos
  140.  
  141. //variables para controlar los powerups
  142. private boolean bLightOn; //deinfe si esta prendido
  143. private long lInitialTimeLight;//define el seg. donde hay colision con Mauro
  144. private int iElapsedTimeLight; //define cuantos segundos han pasado
  145. private boolean bClockOn; //define si hubo colision con Mauro
  146.  
  147. //variables de sonido
  148. private SoundClip sndLevel1Song; //cancion nivel 1
  149. private SoundClip sndLevel2Song; //cancion nivel 2
  150. private SoundClip sndLevel3Song; //cancion nivel 3
  151. private SoundClip sndLevel4Song; //cancion nivel 4
  152.  
  153. //variables efecto de sonido
  154. private SoundClip bPwrUp; //efecto de sonido de pwr up
  155. private SoundClip sndCarCrash; //efecto de choque de carro
  156. private SoundClip sndDoor; //efecto de sonido de puerta
  157. private SoundClip sndStarbucks; //efecto al tomar el starbucks
  158. private SoundClip sndCarSound; //efecto de sonido de carro arrancando
  159. private SoundClip sndWin; //efecto de victoria
  160. private SoundClip sndTrap; //efecto de sonido de la trampa
  161. private SoundClip sndGameOver; //efecto de sonido de game over
  162. private SoundClip sndBark; //efecto de sonido de ladrido de perro
  163. private SoundClip sndMenuClick; //efecto de sonido de presionar boton
  164. private SoundClip sndPwrDown; //efecto de sonido de pwr down
  165. private SoundClip sndYawn; //efecto de sonido de boztezo
  166.  
  167. /**
  168. * Board
  169. *
  170. * Metodo sobrescrito de la clase <code>JPanel</code>.<P>
  171. * En este metodo se inizializan las variables o se crean los objetos
  172. * a usarse en el <code>JPanel</code> y se definen funcionalidades.
  173. *
  174. */
  175. public Board() {
  176. /* se le añade la opcion al JFrame de ser escuchado por los eventos
  177. del teclado y mouse*/
  178. addKeyListener(this);
  179. addMouseListener(this);
  180.  
  181. //define en cual panel definir enfoque
  182. setFocusable(true);
  183.  
  184. //iniciar juego
  185. GameInit();
  186. setDoubleBuffered(true);
  187. }
  188.  
  189. /**
  190. * GameInit
  191. *
  192. * Metodo que inicializa el juego.
  193. *
  194. */
  195. public void GameInit() {
  196. //Nivel de inicio, animacion inical
  197. iLevel = 0; // era 0
  198.  
  199. //siguiente nivel
  200. iLevelChange = 1; //era 1
  201.  
  202. //menu inicial
  203. iMenu = 1;
  204.  
  205. //no inicia en pausa
  206. bPause = false;
  207.  
  208. //no es necesario si la pausa no esta activa
  209. lCurrentTimePauseFix = 0;
  210.  
  211. //variables que definen que le juego no ha terminado o perdido el juego
  212. bEndGame = false;
  213. bGameOver = false;
  214.  
  215. //Se define sonido de fondo para cada nivel
  216. //nivel 1
  217. sndLevel1Song = new SoundClip("Musica/nivel1.wav");
  218. sndLevel1Song.setLooping(true);
  219. //nivel 2
  220. sndLevel2Song = new SoundClip("Musica/nivel2.wav");
  221. sndLevel2Song.setLooping(true);
  222. //nivel 3
  223. sndLevel3Song = new SoundClip("Musica/nivel3.wav");
  224. sndLevel3Song.setLooping(true);
  225. //nivel 4
  226. sndLevel4Song = new SoundClip("Musica/nivel4.wav");
  227. sndLevel4Song.setLooping(true);
  228.  
  229. //incializar efectos de sonido
  230. bPwrUp = new SoundClip("Sfx/powerup.wav");
  231. bPwrUp.setLooping(false);
  232. sndCarCrash = new SoundClip("Sfx/carcrash.wav");
  233. sndCarCrash.setLooping(false);
  234. sndDoor = new SoundClip("Sfx/door.wav");
  235. sndDoor.setLooping(false);
  236. sndStarbucks = new SoundClip("Sfx/starbucks.wav");
  237. sndStarbucks.setLooping(false);
  238. sndCarSound = new SoundClip("Sfx/vroom.wav");
  239. sndCarSound.setLooping(false);
  240. sndWin = new SoundClip("Sfx/win.wav");
  241. sndWin.setLooping(false);
  242. sndTrap = new SoundClip("Sfx/stab.wav");
  243. sndTrap.setLooping(false);
  244. sndGameOver = new SoundClip("Sfx/gameover.wav");
  245. sndGameOver.setLooping(false);
  246. sndBark = new SoundClip("Sfx/bark.wav");
  247. sndBark.setLooping(false);
  248. sndMenuClick = new SoundClip("Sfx/menuclick.wav");
  249. sndMenuClick.setLooping(false);
  250. sndPwrDown = new SoundClip("Sfx/powerdown.wav");
  251. sndPwrDown.setLooping(false);
  252. sndYawn = new SoundClip("Sfx/yawn.wav");
  253. sndYawn.setLooping(false);
  254.  
  255. //inicializar arreglo de botones
  256. bButtonsLevel1 = new boolean[5];
  257. bButtonsLevel2 = new boolean[9];
  258. bButtonsLevel3 = new boolean[5];
  259. bButtonsLevel4 = new boolean[5];
  260.  
  261. //llenar arreglos
  262. for (int i = 0; i < 5; i++) {
  263. bButtonsLevel1[i] = false;
  264. }
  265. for (int i = 0; i < 5; i++) {
  266. bButtonsLevel2[i] = false;
  267. }
  268. for (int i = 0; i < 5; i++) {
  269. bButtonsLevel3[i] = false;
  270. }
  271. for (int i = 0; i < 5; i++) {
  272. bButtonsLevel4[i] = false;
  273. }
  274.  
  275. //incializar a Mauro
  276. iVelocityMauro = 2;
  277. iDirectionMauro = 0;
  278. lImmuneTimeMauro = 0;
  279. String sMauro = "Animation/Mauro/mauro1.png";
  280. ImageIcon imiImage = new ImageIcon(this.getClass().getResource(sMauro));
  281. mauMauro = new Mauro(iVelocityMauro, iDirectionMauro,
  282. iWidthMauro, iHeightMauro, imiImage.getImage(),
  283. lImmuneTimeMauro);
  284.  
  285. //inicializar a morfeo
  286. iDirectionMorpheus = 0;
  287. String sMorpheus = "Animation/Mauro/mauro1.png";
  288. imiImage = new ImageIcon(this.getClass().getResource(sMauro));
  289. morMorpheus = new Morpheus(iDirectionMorpheus, iWidthMorpheus,
  290. iHeightMorpheus, imiImage.getImage());
  291.  
  292. //inicializar lista de pasos morfeo
  293. arlMorpheusSteps = new ArrayList();
  294.  
  295. //inicializar tiempo de morfeo en 9
  296. iMorpheusTimeLimit = 9; //en segundos
  297.  
  298. //inicializar tiempo de los zapatos en 5
  299. iShoesTimeLimit = 5; //en segundos
  300.  
  301. //incicializar posiciones previas
  302. iPreviousX = -1; //auxiliar para definri posiciones de morfeo
  303. iPreviousY = -1; //auxiliar para definri posiciones de morfeo
  304.  
  305. //inicializar que morfeo no se pinta aun
  306. bMorpheusStart = false;
  307.  
  308. //crea las listas de los Mapas
  309. arlMapObjectsLevel1 = new ArrayList();
  310. arlMapObjectsLevel2 = new ArrayList();
  311. arlMapObjectsLevel3 = new ArrayList();
  312. arlMapObjectsLevel4 = new ArrayList();
  313.  
  314. //Inicializa todos los mapas
  315. try {
  316. GameInitMaps();
  317. } catch (IOException ex) {
  318. Logger.getLogger(Board.class.getName()).log(Level.SEVERE, null, ex);
  319. }
  320.  
  321. // Inicializa botones del menu
  322. String sBack = "Menus/bot_back.png";
  323. String sAbout = "Menus/bot_acerca.png";
  324. String sInstructions = "Menus/bot_instrucciones.png";
  325. String sOptions = "Menus/bot_opciones.png";
  326. String sPlay = "Menus/bot_jugar.png";
  327. String sScores = "Menus/bot_puntos.png";
  328. String sExit = "Menus/bot_salir.png";
  329. String sGameOverMenu = "Menus/boton_menu.png";
  330.  
  331. imiImage = new ImageIcon(this.getClass().getResource(sBack));
  332. mbtBack = new MenuButton(imiImage.getImage(),
  333. 1280 - imiImage.getIconWidth(), 30,
  334. imiImage.getIconWidth(), imiImage.getIconHeight());
  335. imiImage = new ImageIcon(this.getClass().getResource(sAbout));
  336. mbtAbout = new MenuButton(imiImage.getImage(),
  337. 1280/2 - imiImage.getIconWidth()/2, 420,
  338. imiImage.getIconWidth(), imiImage.getIconHeight());
  339. imiImage = new ImageIcon(this.getClass().getResource(sInstructions));
  340. mbtInstructions = new MenuButton(imiImage.getImage(),
  341. 1280/2 - imiImage.getIconWidth()/2, 330,
  342. imiImage.getIconWidth(), imiImage.getIconHeight());
  343. imiImage = new ImageIcon(this.getClass().getResource(sOptions));
  344. mbtOptions = new MenuButton(imiImage.getImage(),
  345. 1280/2 - imiImage.getIconWidth()/2, 360,
  346. imiImage.getIconWidth(), imiImage.getIconHeight());
  347. imiImage = new ImageIcon(this.getClass().getResource(sPlay));
  348. mbtPlay = new MenuButton(imiImage.getImage(),
  349. 1280/2 - imiImage.getIconWidth()/2, 300,
  350. imiImage.getIconWidth(), imiImage.getIconHeight());
  351. imiImage = new ImageIcon(this.getClass().getResource(sScores));
  352. mbtScores = new MenuButton(imiImage.getImage(),
  353. 1280/2 - imiImage.getIconWidth()/2, 390,
  354. imiImage.getIconWidth(), imiImage.getIconHeight());
  355. imiImage = new ImageIcon(this.getClass().getResource(sExit));
  356. mbtExit = new MenuButton(imiImage.getImage(),
  357. 1280/2 - imiImage.getIconWidth()/2, 450,
  358. imiImage.getIconWidth(), imiImage.getIconHeight());
  359. imiImage = new ImageIcon(this.getClass().getResource(sGameOverMenu));
  360. mbtGameOverMenu = new MenuButton(imiImage.getImage(),
  361. 1280/2 - imiImage.getIconWidth()/2, 450,
  362. imiImage.getIconWidth(), imiImage.getIconHeight());
  363.  
  364. // inicializa el thread
  365. if (thread == null || !bEndGame) {
  366. thread = new Thread(this);
  367. thread.start();
  368. }
  369. }
  370.  
  371. /**
  372. * GameInitMaps
  373. *
  374. * Metodo que inicializa todos los mapas del juego.
  375. *
  376. */
  377. private void GameInitMaps() throws IOException {
  378. //variables
  379. //variables que definen un=bicacion de imagenes
  380. String sLevel1WallVertical = "Nivel1/paredVerticalNivel1.jpg";
  381. String sLevel1WallHorizontal = "Nivel1/paredHorizontalNivel1.png";
  382. String sLevel1Trap = "Nivel1/picos0.png";
  383. String sLevel1Finish = "Nivel1/meta_nivel1.png";
  384. String sLevel1Text = "src/runmaurorun/Nivel1/Nivel1.txt";
  385. String sLevel2Text = "src/runmaurorun/nivel2/Nivel2.txt";
  386. String sLevel3Text = "src/runmaurorun/nivel3/Nivel3.txt";
  387.  
  388. String sData; //almacena lectura de texto
  389.  
  390. char cObjectType; //revisa tipo objeto a leer
  391. char cAuxObjectType; //auxiliar q almacena el tipo de objeto
  392.  
  393. int iWidthObject; //variable para ancho del objeto
  394. int iHeightObject; //variable para altura del objeto
  395. int iDoorKey; //varaible para control de acceso de puertas
  396. int iX;
  397. int iY;
  398. int iDoorLength;
  399.  
  400. boolean bFinishFileRead; //variable que define si se termino la lectura
  401.  
  402. ImageIcon imiImage; //imagen utilizada para crear mapas
  403.  
  404. //buscar y leer archivo de Nivel 1
  405. BufferedReader fileIn;
  406.  
  407. //inicializar variables
  408. cObjectType = ' ';
  409. iWidthObject = 0;
  410. iHeightObject = 0;
  411. imiImage = new ImageIcon(this.getClass().getResource(
  412. sLevel1WallHorizontal));
  413.  
  414. Map mapObject;
  415.  
  416. //--------------------------NIVEL 1------------------------------------
  417. //duracion del juego
  418. iLimitTime = 20; //2 minutos
  419.  
  420. //pwrup de luz
  421. bLightOn = false; //no tiene el powerUp
  422.  
  423. //pwrup reloj
  424. bClockOn = false; //No tiene el powerup
  425.  
  426. try {
  427. fileIn = new BufferedReader(new FileReader(sLevel1Text));
  428. } catch (FileNotFoundException e) {
  429. System.out.println("FILE NOT FOUND!");
  430. fileIn = new BufferedReader(new FileReader(
  431. sLevel1Text));
  432. }
  433.  
  434. //file has not been read
  435. bFinishFileRead = false;
  436.  
  437. //leer archivo hasta terminar de leerlo
  438. sData = fileIn.readLine();
  439. do {
  440. //si el primer caracter es una letra
  441. if (sData.charAt(0) - 97 >= 0 ) {
  442. cObjectType = sData.charAt(0);
  443. sData = fileIn.readLine();
  444. }
  445.  
  446. //si la linea es un comentario
  447. if (sData.charAt(0) == '/') {
  448. sData = fileIn.readLine();
  449. }
  450.  
  451. //leer coordenadas X y Y
  452. iX = Integer.parseInt(sData);
  453. sData = fileIn.readLine();
  454. iY = Integer.parseInt(sData);
  455.  
  456. //definir medidas e imagen a utilizar dependiendo del objeto
  457. switch (cObjectType) {
  458. case 'a': //pared horizontal
  459. iWidthObject = 76;
  460. iHeightObject = 19;
  461. imiImage = new ImageIcon(this.getClass().getResource(
  462. sLevel1WallHorizontal));
  463. mapObject = new Map(imiImage.getImage(),
  464. iX, iY, iWidthObject, iHeightObject,
  465. false, false);
  466. mapObject.setImage(imiImage.getImage());
  467. arlMapObjectsLevel1.add(mapObject);
  468. break;
  469. case 'b': //pared vertical
  470. iWidthObject = 19;
  471. iHeightObject = 76;
  472. imiImage = new ImageIcon(this.getClass().getResource(
  473. sLevel1WallVertical));
  474. mapObject = new Map(imiImage.getImage(),
  475. iX, iY, iWidthObject, iHeightObject,
  476. false, false);
  477. mapObject.setImage(imiImage.getImage());
  478. arlMapObjectsLevel1.add(mapObject);
  479. break;
  480. case 'c': //trampa
  481. iWidthObject = 32;
  482. iHeightObject = 19;
  483. imiImage = new ImageIcon(this.getClass().getResource(
  484. sLevel1Trap));
  485. mapObject = new Trap(imiImage.getImage(),
  486. iX, iY, iWidthObject, iHeightObject, -1,
  487. false);
  488. mapObject.setImage(imiImage.getImage());
  489. arlMapObjectsLevel1.add(mapObject);
  490. break;
  491. case 'd': //puerta horizontal
  492. iWidthObject = 92;
  493. iHeightObject = 8;
  494. sData = fileIn.readLine();
  495. iDoorKey = Integer.parseInt(sData);
  496. sData = fileIn.readLine();
  497. imiImage = new ImageIcon(this.getClass().getResource(
  498. sData));
  499. mapObject = new Door(imiImage.getImage(),
  500. iX, iY, iWidthObject, iHeightObject,
  501. false, iDoorKey, false);
  502. mapObject.setImage(imiImage.getImage());
  503. arlMapObjectsLevel1.add(mapObject);
  504. break;
  505. case 'e': //puerta vertical
  506. iWidthObject = 8;
  507. iHeightObject = 90;
  508. sData = fileIn.readLine();
  509. iDoorKey = Integer.parseInt(sData);
  510. sData = fileIn.readLine();
  511. imiImage = new ImageIcon(this.getClass().getResource(
  512. sData));
  513. mapObject = new Door(imiImage.getImage(),
  514. iX, iY, iWidthObject, iHeightObject,
  515. false, iDoorKey, false);
  516. mapObject.setImage(imiImage.getImage());
  517. arlMapObjectsLevel1.add(mapObject);
  518. break;
  519. case 'f': //boton
  520. iWidthObject = 32;
  521. iHeightObject = 19;
  522. sData = fileIn.readLine();
  523. iDoorKey = Integer.parseInt(sData);
  524. sData = fileIn.readLine();
  525. imiImage = new ImageIcon(this.getClass().getResource(
  526. sData));
  527. mapObject = new Button(imiImage.getImage(),
  528. iX, iY, iWidthObject, iHeightObject,
  529. false, false, iDoorKey);
  530. mapObject.setImage(imiImage.getImage());
  531. arlMapObjectsLevel1.add(mapObject);
  532. break;
  533. case 'g': //powerup
  534. iWidthObject = 16;
  535. iHeightObject = 25;
  536. sData = fileIn.readLine();
  537. int iPwrUpType = Integer.parseInt(sData);
  538. sData = fileIn.readLine();
  539. imiImage = new ImageIcon(this.getClass().getResource(
  540. sData));
  541. mapObject = new PwrUp(false, false, imiImage.getImage(),
  542. iX, iY, iWidthObject, iHeightObject,
  543. iPwrUpType, -1);
  544. mapObject.setImage(imiImage.getImage());
  545. arlMapObjectsLevel1.add(mapObject);
  546. break;
  547. case 'h': //meta
  548. iWidthObject = 83;
  549. iHeightObject = 47;
  550. imiImage = new ImageIcon(this.getClass().getResource(
  551. sLevel1Finish));
  552. mapObject = new Map(imiImage.getImage(),
  553. iX, iY, iWidthObject, iHeightObject,
  554. false, true);
  555. mapObject.setImage(imiImage.getImage());
  556. arlMapObjectsLevel1.add(mapObject);
  557. break;
  558. default:
  559. break;
  560. }
  561.  
  562. sData = fileIn.readLine();
  563.  
  564. //si se termino la lectura
  565. if (sData.charAt(0) == 'x') {
  566. bFinishFileRead = true;
  567. }
  568. } while (!bFinishFileRead);
  569.  
  570. //--------------------------NIVEL 2------------------------------------
  571. String sLevel2WallVertical = "Nivel2/pared_vertical_nivel2.png";
  572. String sLevel2WallHorizontal = "Nivel2/pared_horizontal_nivel2.png";
  573.  
  574. try {
  575. fileIn = new BufferedReader(new FileReader(sLevel2Text));
  576. } catch (FileNotFoundException e) {
  577. System.out.println("FILE NOT FOUND!");
  578. fileIn = new BufferedReader(new FileReader(sLevel2Text));
  579. }
  580.  
  581. //file has not been read
  582. bFinishFileRead = false;
  583.  
  584. //leer archivo hasta terminar de leerlo
  585. sData = fileIn.readLine();
  586. do {
  587. //si el primer caracter es una letra
  588. if (sData.charAt(0) - 97 >= 0 ) {
  589. cObjectType = sData.charAt(0);
  590. sData = fileIn.readLine();
  591. }
  592.  
  593. //si la linea es un comentario
  594. if (sData.charAt(0) == '/') {
  595. sData = fileIn.readLine();
  596. }
  597.  
  598. //leer coordenadas X y Y
  599. iX = Integer.parseInt(sData);
  600. sData = fileIn.readLine();
  601. iY = Integer.parseInt(sData);
  602.  
  603. //definir medidas e imagen a utilizar dependiendo del objeto
  604. switch (cObjectType) {
  605. case 'a': //pared horizontal
  606. iWidthObject = 76;
  607. iHeightObject = 19;
  608. imiImage = new ImageIcon(this.getClass().getResource(
  609. sLevel2WallHorizontal));
  610. mapObject = new Map(imiImage.getImage(),
  611. iX, iY, iWidthObject, iHeightObject,
  612. true, false);
  613. mapObject.setImage(imiImage.getImage());
  614. arlMapObjectsLevel2.add(mapObject);
  615. break;
  616. case 'b': //pared vertical
  617. iWidthObject = 19;
  618. iHeightObject = 76;
  619. imiImage = new ImageIcon(this.getClass().getResource(
  620. sLevel2WallVertical));
  621. mapObject = new Map(imiImage.getImage(),
  622. iX, iY, iWidthObject, iHeightObject,
  623. true, false);
  624. mapObject.setImage(imiImage.getImage());
  625. arlMapObjectsLevel2.add(mapObject);
  626. break;
  627. case 'c': //decoracion de casa
  628. sData = fileIn.readLine();
  629. iDoorLength = Integer.parseInt(sData);
  630. iWidthObject = iDoorLength;
  631. sData = fileIn.readLine();
  632. iDoorLength = Integer.parseInt(sData);
  633. iHeightObject = iDoorLength;
  634. sData = fileIn.readLine();
  635. imiImage = new ImageIcon(this.getClass().getResource(
  636. sData));
  637. mapObject = new Map(imiImage.getImage(),
  638. iX, iY, iWidthObject, iHeightObject,
  639. true, false);
  640. mapObject.setImage(imiImage.getImage());
  641. arlMapObjectsLevel2.add(mapObject);
  642. break;
  643. case 'd': //puerta horizontal
  644. sData = fileIn.readLine();
  645. iDoorLength = Integer.parseInt(sData);
  646. iWidthObject = iDoorLength;
  647. sData = fileIn.readLine();
  648. iDoorLength = Integer.parseInt(sData);
  649. iHeightObject = iDoorLength;
  650. sData = fileIn.readLine();
  651. iDoorKey = Integer.parseInt(sData);
  652. sData = fileIn.readLine();
  653. imiImage = new ImageIcon(this.getClass().getResource(
  654. sData));
  655. mapObject = new Door(imiImage.getImage(),
  656. iX, iY, iWidthObject, iHeightObject,
  657. false, iDoorKey, true);
  658. mapObject.setImage(imiImage.getImage());
  659. arlMapObjectsLevel2.add(mapObject);
  660. break;
  661. case 'e': //puerta vertical
  662. sData = fileIn.readLine();
  663. iDoorLength = Integer.parseInt(sData);
  664. iWidthObject = iDoorLength;
  665. sData = fileIn.readLine();
  666. iDoorLength = Integer.parseInt(sData);
  667. iHeightObject = iDoorLength;
  668. sData = fileIn.readLine();
  669. iDoorKey = Integer.parseInt(sData);
  670. sData = fileIn.readLine();
  671. imiImage = new ImageIcon(this.getClass().getResource(
  672. sData));
  673. mapObject = new Door(imiImage.getImage(),
  674. iX, iY, iWidthObject, iHeightObject,
  675. false, iDoorKey, true);
  676. mapObject.setImage(imiImage.getImage());
  677. arlMapObjectsLevel2.add(mapObject);
  678. break;
  679. case 'f': //boton
  680. iWidthObject = 32;
  681. iHeightObject = 19;
  682. sData = fileIn.readLine();
  683. iDoorKey = Integer.parseInt(sData);
  684. sData = fileIn.readLine();
  685. imiImage = new ImageIcon(this.getClass().getResource(
  686. sData));
  687. mapObject = new Button(imiImage.getImage(),
  688. iX, iY, iWidthObject, iHeightObject,
  689. true, false, iDoorKey);
  690. mapObject.setImage(imiImage.getImage());
  691. arlMapObjectsLevel2.add(mapObject);
  692. break;
  693. case 'g': //powerup
  694. iWidthObject = 16;
  695. iHeightObject = 25;
  696. sData = fileIn.readLine();
  697. int iPwrUpType = Integer.parseInt(sData);
  698. sData = fileIn.readLine();
  699.  
  700. imiImage = new ImageIcon(this.getClass().getResource(
  701. sData));
  702. mapObject = new PwrUp(false, true, imiImage.getImage(),
  703. iX, iY, iWidthObject, iHeightObject,
  704. iPwrUpType, -1);
  705. mapObject.setImage(imiImage.getImage());
  706. arlMapObjectsLevel2.add(mapObject);
  707. break;
  708. case 'h': //meta
  709. iWidthObject = 52;
  710. iHeightObject = 30;
  711. sData = fileIn.readLine();
  712. imiImage = new ImageIcon(this.getClass().getResource(
  713. sData));
  714. mapObject = new Map(imiImage.getImage(),
  715. iX, iY, iWidthObject, iHeightObject,
  716. true, true);
  717. mapObject.setImage(imiImage.getImage());
  718. arlMapObjectsLevel2.add(mapObject);
  719. break;
  720. case 'i': //barandales
  721. sData = fileIn.readLine();
  722. iDoorLength = Integer.parseInt(sData);
  723. iWidthObject = iDoorLength;
  724. sData = fileIn.readLine();
  725. iDoorLength = Integer.parseInt(sData);
  726. iHeightObject = iDoorLength;
  727. sData = fileIn.readLine();
  728. boolean bVisible = Boolean.parseBoolean(sData);
  729.  
  730. sData = fileIn.readLine();
  731. imiImage = new ImageIcon(this.getClass().getResource(
  732. sData));
  733.  
  734. mapObject = new Map(imiImage.getImage(),
  735. iX, iY, iWidthObject, iHeightObject,
  736. bVisible, false);
  737. mapObject.setImage(imiImage.getImage());
  738. arlMapObjectsLevel2.add(mapObject);
  739. break;
  740. default:
  741. break;
  742. }
  743.  
  744. sData = fileIn.readLine();
  745.  
  746. //si se termino la lectura
  747. if (sData.charAt(0) == 'x') {
  748. bFinishFileRead = true;
  749. }
  750. } while (!bFinishFileRead);
  751.  
  752. //--------------------------NIVEL 3------------------------------------
  753. String sLevel3WallVertical = "nivel3/pared_vertical_nivel3.png";
  754. String sLevel3WallHorizontal = "nivel3/pared_horizontal_nivel3.png";
  755.  
  756. try {
  757. fileIn = new BufferedReader(new FileReader(sLevel3Text));
  758. } catch (FileNotFoundException e) {
  759. System.out.println("FILE NOT FOUND!");
  760. fileIn = new BufferedReader(new FileReader(sLevel3Text));
  761. }
  762.  
  763. //file has not been read
  764. bFinishFileRead = false;
  765.  
  766. //leer archivo hasta terminar de leerlo
  767. sData = fileIn.readLine();
  768. do {
  769. //si el primer caracter es una letra
  770. if (sData.charAt(0) - 97 >= 0 ) {
  771. cObjectType = sData.charAt(0);
  772. sData = fileIn.readLine();
  773. }
  774.  
  775. //si la linea es un comentario
  776. if (sData.charAt(0) == '/') {
  777. sData = fileIn.readLine();
  778. }
  779.  
  780. //leer coordenadas X y Y
  781. iX = Integer.parseInt(sData);
  782. sData = fileIn.readLine();
  783. iY = Integer.parseInt(sData);
  784.  
  785. //definir medidas e imagen a utilizar dependiendo del objeto
  786. switch (cObjectType) {
  787. case 'a': //paredes horizontales
  788. iWidthObject = 83;
  789. iHeightObject = 27;
  790. imiImage = new ImageIcon(this.getClass().getResource(
  791. sLevel3WallHorizontal));
  792. mapObject = new Map(imiImage.getImage(),
  793. iX, iY, iWidthObject, iHeightObject,
  794. true, false);
  795. mapObject.setImage(imiImage.getImage());
  796. arlMapObjectsLevel3.add(mapObject);
  797.  
  798. break;
  799. case 'b': //pared vertical
  800. iWidthObject = 27;
  801. iHeightObject = 83;
  802. imiImage = new ImageIcon(this.getClass().getResource(
  803. sLevel3WallVertical));
  804. mapObject = new Map(imiImage.getImage(),
  805. iX, iY, iWidthObject, iHeightObject,
  806. true, false);
  807. mapObject.setImage(imiImage.getImage());
  808. arlMapObjectsLevel3.add(mapObject);
  809. break;
  810. case 'c': //decoracion
  811. sData = fileIn.readLine();
  812. iDoorLength = Integer.parseInt(sData);
  813. iWidthObject = iDoorLength;
  814. sData = fileIn.readLine();
  815. iDoorLength = Integer.parseInt(sData);
  816. iHeightObject = iDoorLength;
  817. sData = fileIn.readLine();
  818. imiImage = new ImageIcon(this.getClass().getResource(
  819. sData));
  820. mapObject = new Map(imiImage.getImage(),
  821. iX, iY, iWidthObject, iHeightObject,
  822. true, false);
  823. mapObject.setImage(imiImage.getImage());
  824. arlMapObjectsLevel3.add(mapObject);
  825. break;
  826. case 'd': //puerta horizontal
  827. sData = fileIn.readLine();
  828. iDoorLength = Integer.parseInt(sData);
  829. iWidthObject = iDoorLength;
  830. sData = fileIn.readLine();
  831. iDoorLength = Integer.parseInt(sData);
  832. iHeightObject = iDoorLength;
  833. sData = fileIn.readLine();
  834. iDoorKey = Integer.parseInt(sData);
  835. sData = fileIn.readLine();
  836. imiImage = new ImageIcon(this.getClass().getResource(
  837. sData));
  838. mapObject = new Door(imiImage.getImage(),
  839. iX, iY, iWidthObject, iHeightObject,
  840. false, iDoorKey, true);
  841. mapObject.setImage(imiImage.getImage());
  842. arlMapObjectsLevel3.add(mapObject);
  843. break;
  844. case 'e': //puerta vertical
  845. sData = fileIn.readLine();
  846. iDoorLength = Integer.parseInt(sData);
  847. iWidthObject = iDoorLength;
  848. sData = fileIn.readLine();
  849. iDoorLength = Integer.parseInt(sData);
  850. iHeightObject = iDoorLength;
  851. sData = fileIn.readLine();
  852. iDoorKey = Integer.parseInt(sData);
  853. sData = fileIn.readLine();
  854. imiImage = new ImageIcon(this.getClass().getResource(
  855. sData));
  856. mapObject = new Door(imiImage.getImage(),
  857. iX, iY, iWidthObject, iHeightObject,
  858. false, iDoorKey, true);
  859. mapObject.setImage(imiImage.getImage());
  860. arlMapObjectsLevel3.add(mapObject);
  861. break;
  862. case 'f': //botones
  863. iWidthObject = 48;
  864. iHeightObject = 28;
  865. sData = fileIn.readLine();
  866. iDoorKey = Integer.parseInt(sData);
  867. sData = fileIn.readLine();
  868. imiImage = new ImageIcon(this.getClass().getResource(
  869. sData));
  870. mapObject = new Button(imiImage.getImage(),
  871. iX, iY, iWidthObject, iHeightObject,
  872. true, false, iDoorKey);
  873. mapObject.setImage(imiImage.getImage());
  874. arlMapObjectsLevel3.add(mapObject);
  875. break;
  876. case 'g': //
  877.  
  878. break;
  879. case 'h': //meta
  880. iWidthObject = 52;
  881. iHeightObject = 30;
  882. sData = fileIn.readLine();
  883. imiImage = new ImageIcon(this.getClass().getResource(
  884. sData));
  885. mapObject = new Map(imiImage.getImage(),
  886. iX, iY, iWidthObject, iHeightObject,
  887. true, true);
  888. mapObject.setImage(imiImage.getImage());
  889. arlMapObjectsLevel3.add(mapObject);
  890. break;
  891. case 'i': //
  892.  
  893. break;
  894. default:
  895. break;
  896. }
  897.  
  898. sData = fileIn.readLine();
  899.  
  900. //si se termino la lectura
  901. if (sData.charAt(0) == 'x') {
  902. bFinishFileRead = true;
  903. }
  904. } while (!bFinishFileRead);
  905. }
  906.  
  907. /**
  908. * run
  909. *
  910. * Metodo que corre el juego y actualiza el hilo.
  911. *
  912. */
  913. public void run() {
  914. //variables para el control de tiempo
  915. long lTimeDiff; //diferencia del tiempo contra tiempo actual en un punto
  916. long lSleep; //canitdad limite para dormir el thread en ms
  917.  
  918. //loop que cicla el juego hasta que termina
  919. while (!bEndGame) {
  920. //pinta y actualiza
  921. repaint();
  922. if (!bPause) {
  923. //actualiza datos
  924. AnimationCycle();
  925. }
  926.  
  927. //Calcula la diferencia de tiempo con la ultima marca de tiempo
  928. lTimeDiff = System.currentTimeMillis() - lCurrentTime;
  929. lSleep = 17 - lTimeDiff;
  930.  
  931. //define canitdad a dormir el thread
  932. if (lSleep < 0)
  933. lSleep = 2;
  934. try {
  935. Thread.sleep(lSleep);
  936. } catch (InterruptedException e) {
  937. System.out.println("interrupted");
  938. }
  939.  
  940. //actuializa el tiempo actual
  941. lCurrentTime = System.currentTimeMillis();
  942. }
  943. }
  944.  
  945. /**
  946. * AnimationCycle
  947. *
  948. * Metodo que actualiza el juego
  949. *
  950. */
  951. public void AnimationCycle() {
  952. /*Determina el tiempo que ha transcurrido desde que el Applet inicio su
  953. ejecución*/
  954. lElapsedTime = System.currentTimeMillis() - lCurrentTime;
  955.  
  956. //Guarda el tiempo actual
  957. lCurrentTime += lElapsedTime;
  958.  
  959. //actualiza el jugador
  960. mauMauro.updateMovement(iDirectionMauro);
  961.  
  962. //si se cambio al siguiente nivel define posicion inical de mauro
  963. if (iLevel == iLevelChange) {
  964. switch (iLevel) {
  965. case 1: { //nivel 1
  966. mauMauro.setX(1200); //70
  967. mauMauro.setY(100); //640
  968. break;
  969. }
  970. case 2: { //nivel 2
  971. mauMauro.setX(1200);
  972. mauMauro.setY(100);
  973. break;
  974. }
  975. case 3: { //nivel 3
  976. mauMauro.setX(50);
  977. mauMauro.setY(50);
  978. break;
  979. }
  980. case 4: { //nivel 4
  981. mauMauro.setX(70);
  982. mauMauro.setY(640);
  983. break;
  984. }
  985. default: {
  986. break;
  987. }
  988. }
  989. //incrementar variable para estar listo para el siguiente nivel
  990. iLevelChange++;
  991. }
  992.  
  993. //--------------------------NIVEL 1------------------------------------
  994. //actualizar efectos nivel 1
  995. if (iLevel == 1) {
  996. //variables
  997. int iPositionDifferenceMauro; //diferencia en posision de Mauro
  998. int iIncreaseRectangleSize; //incremento en tamaño de rectangulo
  999. int iTimeLimitLight = 5; //duracion maxima efecto luz
  1000.  
  1001. //si pwrup de luz NO esta activo
  1002. if (!bLightOn) {
  1003. iPositionDifferenceMauro = 100;
  1004. iIncreaseRectangleSize = 150;
  1005. }
  1006.  
  1007. else {
  1008. iPositionDifferenceMauro = 1000;
  1009. iIncreaseRectangleSize = 1750;
  1010.  
  1011. //si termina el tiempo apagar pwrup
  1012. if ((lCurrentTime-lInitialTimeLight)/1000 >= iTimeLimitLight) {
  1013. bLightOn = !bLightOn;
  1014. sndPwrDown.play();
  1015. }
  1016. }
  1017.  
  1018. //iterador de objetos de la lista
  1019. Iterator it = arlMapObjectsLevel1.iterator();
  1020.  
  1021. // mientras existan objetos en la lista
  1022. while (it.hasNext()) {
  1023. Map mapObject = (Map) it.next();
  1024. // revisar si estan en el area de Mauro
  1025. if (mapObject.PlayerColission(mapObject, mauMauro,
  1026. iPositionDifferenceMauro,
  1027. iIncreaseRectangleSize)) {
  1028. mapObject.setVisible(true); //muestra el objeto
  1029. }
  1030. else {
  1031. mapObject.setVisible(false); //esconde el objeto
  1032. }
  1033.  
  1034. //si es un puerta revisar si debe estar abierta
  1035. if (mapObject instanceof Door) {
  1036. Door mapDoor = (Door) mapObject;
  1037. if (bButtonsLevel1[mapDoor.getDoorNo()]) {
  1038. mapDoor.setOpen(true);
  1039. mapDoor.setSolid(false);
  1040. }
  1041. }
  1042. }
  1043.  
  1044. //cambios barra del tiempo
  1045. //Saca el tiempo actual para barra del tiempo
  1046. lCurrentTimer = System.currentTimeMillis();
  1047.  
  1048. //Saca el tiempo que ha pasado desde el inicio del nivel
  1049. iElapsedTimeTimer = (int)(lCurrentTimer - lTimerInitial)/1000;
  1050.  
  1051. //si el pwrup del reloj esta activo aumentar reloj
  1052. if (bClockOn) {
  1053. lTimerInitial += 8000;
  1054. bClockOn = !bClockOn;
  1055. }
  1056.  
  1057. //si el tiempo en el juego se termino
  1058. if (iLimitTime - iElapsedTimeTimer < 0) {
  1059. bGameOver = true;
  1060. iLevel = 5;
  1061. sndLevel1Song.stop();
  1062. sndGameOver.play();
  1063. gameOverRestart();
  1064.  
  1065. //regresar a primera posicion
  1066. mauMauro.setX(70);
  1067. mauMauro.setY(640);
  1068.  
  1069. //reset de siguiente nivel
  1070. iLevelChange = 1;
  1071. }
  1072.  
  1073. //checa colision
  1074. checkCollisionLevel1();
  1075. }
  1076.  
  1077. //--------------------------NIVEL 2------------------------------------
  1078. else if (iLevel == 2) {
  1079. //grabar posiciones de mauro para morfeo si no esta detenido
  1080. if (iDirectionMauro != 0 && (mauMauro.getX() != iPreviousX ||
  1081. mauMauro.getY() != iPreviousY)) {
  1082. arlMorpheusSteps.add(iDirectionMauro);
  1083. arlMorpheusSteps.add(mauMauro.getX());
  1084. arlMorpheusSteps.add(mauMauro.getY());
  1085. }
  1086.  
  1087. //empezar a contar tiempo de aparicion de morfeo
  1088. //tiempo actual
  1089. lMorpheusCurrentTime = System.currentTimeMillis();
  1090. lShoesCurrentTime = System.currentTimeMillis();
  1091.  
  1092. //calculo de tiempo transcurrido desde que inicio nivel
  1093. iMorpheusElapsedTime = (int)(lMorpheusCurrentTime -
  1094. lMorpheusStartTime)/1000;
  1095.  
  1096. //calculo de tiempo transcurrido desde que se agrarraron los zapatos
  1097. iShoesElapsedTime = (int)(lShoesCurrentTime -
  1098. lShoesStartTime)/1000;
  1099.  
  1100. //si ya pasaron los 90 segundos empezar a pintar a morfeo
  1101. if (iMorpheusTimeLimit - iMorpheusElapsedTime < 0) {
  1102. bMorpheusStart = true;
  1103. }
  1104.  
  1105. //si ya pasaron los 90 segundos empezar a pintar a morfeo
  1106. if (iShoesTimeLimit - iShoesElapsedTime < 0) {
  1107. iVelocityMauro = 2;
  1108. mauMauro.setVelocity(iVelocityMauro);
  1109. }
  1110.  
  1111.  
  1112. if (bMorpheusStart) {
  1113. //iterador de objetos de la lista
  1114. Iterator it = arlMorpheusSteps.iterator();
  1115.  
  1116. //obtener direccion de morfeo
  1117. int iDirection = (int) it.next();
  1118. it.remove();
  1119. int iX = (int) it.next();
  1120. it.remove();
  1121. int iY = (int) it.next();
  1122. it.remove();
  1123.  
  1124.  
  1125. //si mauro no esta detenido
  1126. if (iDirection != 0 && (iX != iPreviousX || iY != iPreviousY)) {
  1127. iDirectionMorpheus = iDirection;
  1128. //obtener X de morfeo
  1129. morMorpheus.setX(iX);
  1130. iPreviousX = iX;
  1131. //obtener Y de morfeo
  1132. morMorpheus.setY(iY);
  1133. iPreviousY = iY;
  1134. }
  1135. }
  1136.  
  1137. //cambios barra del tiempo
  1138. //Saca el tiempo actual para barra del tiempo
  1139. lCurrentTimer = System.currentTimeMillis();
  1140.  
  1141. //Saca el tiempo que ha pasado desde el inicio del nivel
  1142. iElapsedTimeTimer = (int)(lCurrentTimer - lTimerInitial)/1000;
  1143.  
  1144. //si el tiempo en el juego se termino
  1145. if (iLimitTime - iElapsedTimeTimer < 0) {
  1146. bGameOver = true;
  1147. iLevel = 5;
  1148. sndLevel2Song.stop();
  1149. sndGameOver.play();
  1150. gameOverRestart();
  1151.  
  1152. //regresar a primera posicion
  1153. mauMauro.setX(70);
  1154. mauMauro.setY(640);
  1155.  
  1156. //reset de siguiente nivel
  1157. iLevelChange = 1;
  1158. }
  1159.  
  1160. //checa colision
  1161. checkCollisionLevel2();
  1162. }
  1163. //--------------------------NIVEL 3------------------------------------
  1164. else if (iLevel == 3) {
  1165.  
  1166. //checa colision
  1167. checkCollisionLevel3();
  1168. }
  1169. }
  1170.  
  1171. public void checkCollisionLevel1() {
  1172. //colision con las paredes
  1173. Iterator it = arlMapObjectsLevel1.iterator();
  1174.  
  1175. // mientras existan objetos en la lista
  1176. while (it.hasNext()) {
  1177. Map mapObject = (Map) it.next();
  1178.  
  1179. //Si el objeto es solido y existe colision...
  1180. if (mapObject.isSolid() && mauMauro.colission(mapObject)) {
  1181. //Si es una trampa
  1182. if (mapObject instanceof Trap) {
  1183. //regresar a mauro a posicion inicial
  1184. mauMauro.setX(70);
  1185. mauMauro.setY(640);
  1186. sndTrap.play();
  1187. }
  1188.  
  1189. //Si es un boton, abrir puerta
  1190. else if (mapObject instanceof Button) {
  1191. Button mapButton = (Button) mapObject;
  1192. iDoorOpenKey = mapButton.getButtonNo();
  1193. if (!bButtonsLevel1[iDoorOpenKey]) {
  1194. sndDoor.play();
  1195. }
  1196. mapButton.setClicked(true);
  1197. bButtonsLevel1[iDoorOpenKey] = true;
  1198. }
  1199.  
  1200. //Si agarra un PowerUp
  1201. else if (mapObject instanceof PwrUp) {
  1202. PwrUp mapUp = (PwrUp) mapObject;
  1203.  
  1204. //Si es un foco
  1205. if (mapUp.getType() == 2) {
  1206. if (!mapUp.getGrabbed()) {
  1207. bPwrUp.play();
  1208. lInitialTimeLight = System.currentTimeMillis();
  1209. bLightOn = true;
  1210. mapUp.setGrabbed(true);
  1211. mapUp.setVisible(false);
  1212. }
  1213. }
  1214. //Si es un reloj
  1215. else{
  1216. if (!mapUp.getGrabbed()) {
  1217. bPwrUp.play();
  1218. bClockOn = true;
  1219. mapUp.setGrabbed(true);
  1220. mapUp.setVisible(false);
  1221. }
  1222. }
  1223. }
  1224.  
  1225. //cambiar de nivel si llega a la salida
  1226. else if (mapObject.isExit() && mauMauro.colission(mapObject) &&
  1227. iLevel != iLevelChange) {
  1228. iLevel++;
  1229. sndWin.play();
  1230. sndLevel1Song.stop();
  1231. lMorpheusStartTime = System.currentTimeMillis();
  1232. sndLevel2Song.play();
  1233. iLimitTime = 200;
  1234. lTimerInitial = System.currentTimeMillis()+5000;
  1235. }
  1236.  
  1237. //Si es una pared (o puerta solida), anular movimiento
  1238. else{
  1239. if (iDirectionMauro == 1) {
  1240. mauMauro.updateMovement(2);
  1241. }
  1242. else if (iDirectionMauro == 2) {
  1243. mauMauro.updateMovement(1);
  1244. }
  1245. else if (iDirectionMauro == 3) {
  1246. mauMauro.updateMovement(4);
  1247. }
  1248. else if (iDirectionMauro == 4) {
  1249. mauMauro.updateMovement(3);
  1250. }
  1251. }
  1252. }
  1253. }
  1254. }
  1255.  
  1256. public void checkCollisionLevel2() {
  1257. //colision con las paredes
  1258. Iterator it = arlMapObjectsLevel2.iterator();
  1259.  
  1260. // mientras existan objetos en la lista
  1261. while (it.hasNext()) {
  1262. Map mapObject = (Map) it.next();
  1263.  
  1264. //Si el objeto es solido y existe colision...
  1265. if (mapObject.isSolid() && mauMauro.colission(mapObject)) {
  1266. //Si es una trampa
  1267. if (mapObject instanceof Trap) {
  1268. //regresar a mauro a posicion inicial
  1269. mauMauro.setX(70);
  1270. mauMauro.setY(640);
  1271. }
  1272.  
  1273. //Si es un boton, abrir puerta
  1274. else if (mapObject instanceof Button) {
  1275. Button mapButton = (Button) mapObject;
  1276. iDoorOpenKey = mapButton.getButtonNo();
  1277. if (!bButtonsLevel2[iDoorOpenKey]) {
  1278. sndDoor.play();
  1279. }
  1280. mapButton.setClicked(true);
  1281. bButtonsLevel2[iDoorOpenKey] = true;
  1282.  
  1283. //busca su puerta correspondiente
  1284. Iterator it2 = arlMapObjectsLevel2.iterator();
  1285.  
  1286. // mientras existan objetos en la lista
  1287. while (it2.hasNext()) {
  1288. Map mapObject2 = (Map) it2.next();
  1289.  
  1290. //si es un puerta revisar si debe estar abierta
  1291. if (mapObject2 instanceof Door) {
  1292. Door mapDoor = (Door) mapObject2;
  1293. if (bButtonsLevel2[mapDoor.getDoorNo()]) {
  1294. mapDoor.setOpen(true);
  1295. mapDoor.setSolid(false);
  1296. }
  1297. }
  1298. }
  1299. }
  1300.  
  1301. //Si agarra un PowerUp
  1302. else if (mapObject instanceof PwrUp) {
  1303. PwrUp mapUp = (PwrUp) mapObject;
  1304.  
  1305. //Si son los zapatos
  1306. if (mapUp.getType() == 3) {
  1307. if (!mapUp.getGrabbed()) {
  1308. bPwrUp.play();
  1309. mapUp.setGrabbed(true);
  1310. mapUp.setVisible(false);
  1311. lShoesStartTime = System.currentTimeMillis();
  1312. iVelocityMauro = 5;
  1313. mauMauro.setVelocity(iVelocityMauro);
  1314. }
  1315. }
  1316. //Si es la puerta de la izquierda
  1317. else if (mapUp.getType() == 4) {
  1318. if (!mapUp.getGrabbed()) {
  1319. bPwrUp.play();
  1320. mauMauro.setX(700);
  1321. }
  1322. }
  1323. //si es la puerta de derecha
  1324. else {
  1325. bPwrUp.play();
  1326. mauMauro.setX(303);
  1327. }
  1328. }
  1329.  
  1330. //cambiar de nivel si llega a la salida
  1331. else if (mapObject.isExit() && mauMauro.colission(mapObject) &&
  1332. iLevel != iLevelChange) {
  1333. iLevel++;
  1334. sndLevel2Song.stop();
  1335. }
  1336.  
  1337. //Si es una pared (o puerta solida), anular movimiento
  1338. else {
  1339. if (iDirectionMauro == 1) {
  1340. mauMauro.updateMovement(2);
  1341. }
  1342. else if (iDirectionMauro == 2) {
  1343. mauMauro.updateMovement(1);
  1344. }
  1345. else if (iDirectionMauro == 3) {
  1346. mauMauro.updateMovement(4);
  1347. }
  1348. else if (iDirectionMauro == 4) {
  1349. mauMauro.updateMovement(3);
  1350. }
  1351. }
  1352. }
  1353. }
  1354.  
  1355. //si mauro colisiona con morfeo
  1356. if (mauMauro.colission(morMorpheus)) {
  1357. //tocar sonido
  1358. sndYawn.play();
  1359. //reinicar nivel
  1360. gameOverRestart();
  1361. //asignar nivel 2
  1362. iLevel = 2;
  1363. //reposicionar a mauro
  1364. //regresar a primera posicion
  1365. mauMauro.setX(1200);
  1366. mauMauro.setY(100);
  1367. //reinciio tiempo morfeo
  1368. lMorpheusStartTime = System.currentTimeMillis();
  1369. //vaciar lista de pasos de morfeo
  1370. arlMorpheusSteps.clear();
  1371. //reinciar variable
  1372. bMorpheusStart = false;
  1373. //reiniciar musica
  1374. sndLevel2Song.stop();
  1375. sndLevel2Song.play();
  1376. }
  1377. }
  1378.  
  1379. public void checkCollisionLevel3() {
  1380. //colision con las paredes
  1381. Iterator it = arlMapObjectsLevel3.iterator();
  1382.  
  1383. // mientras existan objetos en la lista
  1384. while (it.hasNext()) {
  1385. Map mapObject = (Map) it.next();
  1386.  
  1387. //Si el objeto es solido y existe colision...
  1388. if (mapObject.isSolid() && mauMauro.colission(mapObject)) {
  1389.  
  1390. if (mapObject instanceof Button) {
  1391. Button mapButton = (Button) mapObject;
  1392. iDoorOpenKey = mapButton.getButtonNo();
  1393. if (!bButtonsLevel3[iDoorOpenKey]) {
  1394. sndDoor.play();
  1395. }
  1396. mapButton.setClicked(true);
  1397. bButtonsLevel3[iDoorOpenKey] = true;
  1398.  
  1399. //busca su puerta correspondiente
  1400. Iterator it2 = arlMapObjectsLevel3.iterator();
  1401.  
  1402. // mientras existan objetos en la lista
  1403. while (it2.hasNext()) {
  1404. Map mapObject2 = (Map) it2.next();
  1405.  
  1406. //si es un puerta revisar si debe estar abierta
  1407. if (mapObject2 instanceof Door) {
  1408. Door mapDoor = (Door) mapObject2;
  1409. if (bButtonsLevel3[mapDoor.getDoorNo()]) {
  1410. mapDoor.setOpen(true);
  1411. mapDoor.setSolid(false);
  1412. }
  1413. }
  1414. }
  1415. }
  1416.  
  1417. //cambiar de nivel si llega a la salida
  1418. else if (mapObject.isExit() && mauMauro.colission(mapObject) &&
  1419. iLevel != iLevelChange) {
  1420. iLevel++;
  1421. sndLevel3Song.stop();
  1422. }
  1423.  
  1424. //Si es una pared (o puerta solida), anular movimiento
  1425. else {
  1426. if (iDirectionMauro == 1) {
  1427. mauMauro.updateMovement(2);
  1428. }
  1429. else if (iDirectionMauro == 2) {
  1430. mauMauro.updateMovement(1);
  1431. }
  1432. else if (iDirectionMauro == 3) {
  1433. mauMauro.updateMovement(4);
  1434. }
  1435. else if (iDirectionMauro == 4) {
  1436. mauMauro.updateMovement(3);
  1437. }
  1438. }
  1439. }
  1440. }
  1441. }
  1442.  
  1443. public void gameOverRestart() {
  1444. //reset de botones de puertas en los niveles
  1445. for (int i = 0; i < 5; i++) {
  1446. bButtonsLevel1[i] = false;
  1447. }
  1448. for (int i = 0; i < 5; i++) {
  1449. bButtonsLevel2[i] = false;
  1450. }
  1451. for (int i = 0; i < 5; i++) {
  1452. bButtonsLevel3[i] = false;
  1453. }
  1454. for (int i = 0; i < 5; i++) {
  1455. bButtonsLevel4[i] = false;
  1456. }
  1457.  
  1458. //reset variables Mauro
  1459. iVelocityMauro = 2;
  1460. iDirectionMauro = 0;
  1461. lImmuneTimeMauro = 0;
  1462.  
  1463. //reinicializa todos los mapas
  1464. try {
  1465. GameInitMaps();
  1466. } catch (IOException ex) {
  1467. Logger.getLogger(Board.class.getName()).log(Level.SEVERE, null, ex);
  1468. }
  1469. }
  1470.  
  1471. /**
  1472. * Metodo <I>paint</I> sobrescrito
  1473. * de la clase <code>JPanel</code>,
  1474. * heredado de la clase Container.<P>
  1475. * En este metodo se dibuja la imagen con la posicion actualizada,
  1476. * ademas que cuando la imagen es cargada te despliega una advertencia.
  1477. * @param graGrafico es el <code>objeto grafico</code> usado para dibujar.
  1478. */
  1479. public void paint(Graphics graGrafico) {
  1480. //llama al paint de la clase que heredaste
  1481. super.paint(graGrafico);
  1482.  
  1483. switch (iLevel) {
  1484. case -1: //animacion inical
  1485.  
  1486. break;
  1487. case 0: //menu
  1488. drawMenu(graGrafico);
  1489. break;
  1490. case 1:
  1491. Graphics2D g2d = (Graphics2D) graGrafico;
  1492. g2d.setColor(Color.decode("#1d2e4c"));
  1493. g2d.fillOval(mauMauro.getX()-50, mauMauro.getY()-45, 120,
  1494. 120);
  1495. g2d.drawOval(mauMauro.getX()-50, mauMauro.getY()-45, 120,
  1496. 120);
  1497. setBackground(Color.black);
  1498. drawMaps(graGrafico);
  1499. drawMauro(graGrafico);
  1500. if (!bGameOver) {
  1501. drawTimeBar(graGrafico);
  1502. }
  1503. break;
  1504. case 2:
  1505. String sLevel2Background = "Nivel2/background.png";
  1506. ImageIcon imiImage = new ImageIcon(this.getClass().
  1507. getResource(sLevel2Background));
  1508. graGrafico.drawImage(imiImage.getImage(), 0, 0, this);
  1509. drawMaps(graGrafico);
  1510. drawMauro(graGrafico);
  1511. if (bMorpheusStart) {
  1512. drawMorpheus(graGrafico);
  1513. }
  1514. if (!bGameOver) {
  1515. drawTimeBar(graGrafico);
  1516. }
  1517. break;
  1518. case 3:
  1519. String sLevel3Background = "nivel3/background.png";
  1520. ImageIcon imiImage3 = new ImageIcon(this.getClass().
  1521. getResource(sLevel3Background));
  1522. graGrafico.drawImage(imiImage3.getImage(), 0, 0, this);
  1523. drawMaps(graGrafico);
  1524. drawMauro(graGrafico);
  1525. break;
  1526. case 4:
  1527. graGrafico.setColor(Color.gray);
  1528. drawMaps(graGrafico);
  1529. drawMauro(graGrafico);
  1530. break;
  1531. default: // game over
  1532. drawGameOver(graGrafico);
  1533. break;
  1534. }
  1535.  
  1536. //comandos para paint
  1537. Toolkit.getDefaultToolkit().sync();
  1538. graGrafico.dispose();
  1539. }
  1540.  
  1541. /**
  1542. * drawMauro
  1543. *
  1544. * Metodo que dibuja a Mauro.
  1545. *
  1546. * @param graGrafico es el <code>objeto grafico</code> usado para dibujar.
  1547. */
  1548. public void drawMauro(Graphics graGrafico) {
  1549. // mientras exista Mauro
  1550. if (mauMauro.isVisible() && iLevel != 0) {
  1551. mauMauro.getAnimation().actualiza(lElapsedTime);
  1552. mauMauro.setAnimation(iDirectionMauro);
  1553. graGrafico.drawImage(mauMauro.getAnimation().getImagen(),
  1554. mauMauro.getX(), mauMauro.getY(), this);
  1555. }
  1556. }
  1557.  
  1558. public void drawMorpheus(Graphics graGrafico) {
  1559. if (morMorpheus.isVisible()) {
  1560. morMorpheus.getAnimation().actualiza(lElapsedTime);
  1561. morMorpheus.setAnimation(iDirectionMorpheus);
  1562. graGrafico.drawImage(morMorpheus.getAnimation().getImagen(),
  1563. morMorpheus.getX(), morMorpheus.getY(), this);
  1564. }
  1565. }
  1566.  
  1567. /**
  1568. * drawMaps
  1569. *
  1570. * Metodo que dibuja los Maps
  1571. *
  1572. * @param graGrafico es el <code>objeto grafico</code> usado para dibujar.
  1573. */
  1574. public void drawMaps(Graphics graGrafico) {
  1575. //dependiendo del nivel se pintara dichos objetos
  1576. switch (iLevel) {
  1577. case 1:
  1578. Iterator it = arlMapObjectsLevel1.iterator();
  1579.  
  1580. // mientras existan objetos en la lista
  1581. while (it.hasNext()) {
  1582. Map mapObject = (Map) it.next();
  1583. mapObject.paint(graGrafico, mapObject, lElapsedTime, this);
  1584. }
  1585. break;
  1586. case 2:
  1587. Iterator it2 = arlMapObjectsLevel2.iterator();
  1588.  
  1589. // mientras existan objetos en la lista
  1590. while (it2.hasNext()) {
  1591. Map mapObject = (Map) it2.next();
  1592. mapObject.paint(graGrafico, mapObject, lElapsedTime, this);
  1593. }
  1594. break;
  1595. case 3:
  1596. Iterator it3 = arlMapObjectsLevel3.iterator();
  1597.  
  1598. // mientras existan objetos en la lista
  1599. while (it3.hasNext()) {
  1600. Map mapObject = (Map) it3.next();
  1601. mapObject.paint(graGrafico, mapObject, lElapsedTime, this);
  1602. }
  1603. break;
  1604. case 4:
  1605. Iterator it4 = arlMapObjectsLevel4.iterator();
  1606.  
  1607. // mientras existan objetos en la lista
  1608. while (it4.hasNext()) {
  1609. Map mapObject = (Map) it4.next();
  1610. mapObject.paint(graGrafico, mapObject, lElapsedTime, this);
  1611. }
  1612. break;
  1613. default:
  1614.  
  1615. break;
  1616. }
  1617. }
  1618.  
  1619. /**
  1620. * drawGameOver
  1621. *
  1622. * Metodo que dibuja el game over
  1623. *
  1624. * @param graGrafico es el <code>objeto grafico</code> usado para dibujar.
  1625. */
  1626. public void drawGameOver(Graphics graGrafico) {
  1627. graGrafico.setColor(Color.black);
  1628. String sGameOver = "Menus/gameover.png";
  1629. ImageIcon imiImageGameOver2 = new ImageIcon(this.getClass().
  1630. getResource(sGameOver));
  1631. graGrafico.drawImage(imiImageGameOver2.getImage(), 0, 0,
  1632. this);
  1633. //boton
  1634. mbtGameOverMenu.paint(graGrafico, this);
  1635. }
  1636.  
  1637. /**
  1638. * drawTimeBar
  1639. *
  1640. * Metodo que dibuja la barra del tiempo
  1641. *
  1642. * @param graGrafico es el <code>objeto grafico</code> usado para dibujar.
  1643. */
  1644. public void drawTimeBar(Graphics graGrafico) {
  1645. //Crea el fondo de la barra de tiempo
  1646. String sBar = "Menus/barraTiempo_Fondo.png";
  1647. ImageIcon imiImage = new ImageIcon(this.getClass().getResource(sBar));
  1648. graGrafico.drawImage(imiImage.getImage(), 0, iHeight-41, this);
  1649.  
  1650. //si el limite de tiempo no ha sido alcanzado
  1651. if (iLimitTime - iElapsedTimeTimer > 0) {
  1652. //Se dibuja la barra verde que se modifica con el tiempo
  1653. graGrafico.setColor(Color.GREEN);
  1654. graGrafico.fillRect(85, iHeight - 38,(1115 / iLimitTime) *
  1655. (iLimitTime - iElapsedTimeTimer),13);
  1656. }
  1657. }
  1658.  
  1659. /**
  1660. * drawMenu
  1661. *
  1662. * Metodo que dibuja el menu y los submenús.
  1663. *
  1664. * @param graGrafico es el <code>objeto grafico</code> usado para dibujar.
  1665. */
  1666. public void drawMenu(Graphics graGrafico) {
  1667. URL urlMenu;
  1668. Image imaMenu;
  1669. // Switch que se utiliza para ver qué pantalla desplegar
  1670. switch (iMenu) {
  1671. case 1: { // se despliega el MENU
  1672. // dibuja el fondo
  1673. urlMenu = this.getClass().getResource("Menus/menu3.png");
  1674. imaMenu = Toolkit.getDefaultToolkit().getImage(urlMenu);
  1675. graGrafico.drawImage(imaMenu, 0, 0, this);
  1676. // dibuja los botones
  1677. mbtPlay.paint(graGrafico, this);
  1678. mbtInstructions.paint(graGrafico, this);
  1679. mbtAbout.paint(graGrafico, this);
  1680. mbtOptions.paint(graGrafico, this);
  1681. mbtScores.paint(graGrafico, this);
  1682. mbtExit.paint(graGrafico, this);
  1683. break;
  1684. }
  1685. case 2: { // se dibujan las instrucciones
  1686. // dibuja el fondo
  1687. urlMenu = this.getClass().getResource("Menus/menu4.png");
  1688. imaMenu = Toolkit.getDefaultToolkit().getImage(urlMenu);
  1689. graGrafico.drawImage(imaMenu, 0, 0, this);
  1690. // dibuja el botón back y lo pone visible
  1691. mbtBack.paint(graGrafico, this);
  1692. break;
  1693. }
  1694. case 3: { // se dibujan las opciones
  1695. urlMenu = this.getClass().getResource("Menus/menu5.png");
  1696. imaMenu = Toolkit.getDefaultToolkit().getImage(urlMenu);
  1697. graGrafico.drawImage(imaMenu, 0, 0, this);
  1698. // dibuja el botón back y lo pone visible
  1699. mbtBack.paint(graGrafico, this);
  1700. break;
  1701. }
  1702. case 4: { // se dibuja el acerca
  1703. urlMenu = this.getClass().getResource("Menus/menu6.png");
  1704. imaMenu = Toolkit.getDefaultToolkit().getImage(urlMenu);
  1705. graGrafico.drawImage(imaMenu, 0, 0, this);
  1706. // dibuja el botón back y lo pone visible
  1707. mbtBack.paint(graGrafico, this);
  1708. break;
  1709. }
  1710. case 5: { // se dibujan los puntajes
  1711. urlMenu = this.getClass().getResource("Menus/menu7.png");
  1712. imaMenu = Toolkit.getDefaultToolkit().getImage(urlMenu);
  1713. graGrafico.drawImage(imaMenu, 0, 0, this);
  1714. // dibuja el botón back y lo pone visible
  1715. mbtBack.paint(graGrafico, this);
  1716. break;
  1717. }
  1718. }
  1719. }
  1720.  
  1721. /**
  1722. * keyTyped
  1723. *
  1724. * Metodo sobrescrito de la interface <code>KeyListener</code>.<P>
  1725. * En este metodo maneja el evento que se genera al presionar una
  1726. * tecla que no es de accion.
  1727. *
  1728. * @param keyEvent es el <code>KeyEvent</code> que se genera en al
  1729. * presionar.
  1730. *
  1731. */
  1732. public void keyTyped(KeyEvent keyEvent) {
  1733. // no hay codigo pero se debe escribir el metodo
  1734. }
  1735.  
  1736. /**
  1737. * keyPressed
  1738. *
  1739. * Metodo sobrescrito de la interface <code>KeyListener</code>.<P>
  1740. * En este metodo maneja el evento que se genera al dejar presionada
  1741. * alguna tecla.
  1742. * Se cambia la direccion al presionar una tecla
  1743. *
  1744. * @param keyEvent es el <code>KeyEvent</code> que se genera en al
  1745. * presionar.
  1746. *
  1747. */
  1748. public void keyPressed(KeyEvent keyEvent) {
  1749. // si presiono la flecha arriba
  1750. if (keyEvent.getKeyCode() == KeyEvent.VK_UP) {
  1751. iDirectionMauro = 1;
  1752. }
  1753. // si presiono la flecha abajo
  1754. if (keyEvent.getKeyCode() == KeyEvent.VK_DOWN) {
  1755. iDirectionMauro = 2;
  1756. }
  1757. // si presiono la flecha izquierda
  1758. if (keyEvent.getKeyCode() == KeyEvent.VK_LEFT) {
  1759. iDirectionMauro = 3;
  1760. }
  1761. // si presiono la flecha derecha
  1762. if (keyEvent.getKeyCode() == KeyEvent.VK_RIGHT) {
  1763. iDirectionMauro = 4;
  1764. }
  1765. }
  1766.  
  1767. /**
  1768. * keyReleased
  1769. * Metodo sobrescrito de la interface <code>KeyListener</code>.<P>
  1770. * En este metodo maneja el evento que se genera al soltar la tecla.
  1771. *
  1772. * @param keyEvent es el <code>KeyEvent</code> que se genera en al soltar.
  1773. *
  1774. */
  1775. public void keyReleased(KeyEvent keyEvent) {
  1776. // si presiono la flecha arriba
  1777. if (keyEvent.getKeyCode() == KeyEvent.VK_UP) {
  1778. iDirectionMauro = 0;
  1779. }
  1780. // si presiono la flecha abajo
  1781. if (keyEvent.getKeyCode() == KeyEvent.VK_DOWN) {
  1782. iDirectionMauro = 0;
  1783. }
  1784. // si presiono la flecha izquierda
  1785. if (keyEvent.getKeyCode() == KeyEvent.VK_LEFT) {
  1786. iDirectionMauro = 0;
  1787. }
  1788. // si presiono la flecha derecha
  1789. if (keyEvent.getKeyCode() == KeyEvent.VK_RIGHT) {
  1790. iDirectionMauro = 0;
  1791. }
  1792. // si presiono la tecla p
  1793. if (keyEvent.getKeyCode() == KeyEvent.VK_P) {
  1794. if (!bPause) {
  1795. bPause = true;
  1796. lPauseTime = System.currentTimeMillis();
  1797. }
  1798. else {
  1799. bPause = false;
  1800. lStopPauseTime = System.currentTimeMillis();
  1801. //actualiza tiempo que ayuda a arreglar tiempo durante pausa
  1802. lCurrentTimePauseFix = lStopPauseTime - lPauseTime;
  1803. lTimerInitial += lCurrentTimePauseFix;
  1804. //iPauseTimeDiff = (int)(lPauseTime - (lTimerInitial+(lStopPauseTime-lPauseTime)))/1000;
  1805. //System.out.println(iPauseTimeDiff);
  1806. }
  1807. }
  1808. }
  1809.  
  1810. /**
  1811. * mouseClicked
  1812. *
  1813. * Metodo sobrescrito de la clase <code>MouseListener</code>.<P>
  1814. * En este metodo maneja el evento que se genera al clickear el mouse.
  1815. *
  1816. * @param mseEvent es el <code>MouseEvent</code> que se genera en
  1817. * al presionar.
  1818. *
  1819. */
  1820. public void mouseClicked(MouseEvent mseEvent) {
  1821. // no hay codigo pero se debe escribir el metodo
  1822. }
  1823.  
  1824. /**
  1825. * mousePressed
  1826. *
  1827. * Metodo sobrescrito de la clase <code>MouseListener</code>.<P>
  1828. * En este metodo maneja el evento que se genera al presionar el mouse.
  1829. *
  1830. * @param mseEvent es el <code>MouseEvent</code> que se genera en
  1831. * al presionar.
  1832. *
  1833. */
  1834. public void mousePressed(MouseEvent mseEvent) {
  1835. // no hay codigo pero se debe escribir el metodo
  1836. }
  1837.  
  1838. /**
  1839. * mouseReleased
  1840. *
  1841. * Metodo sobrescrito de la clase <code>MouseListener</code>.<P>
  1842. * En este metodo maneja el evento que se genera al soltar el mouse.
  1843. *
  1844. * @param mseEvent es el <code>MoseEvent</code> que se genera en
  1845. * al presionar.
  1846. *
  1847. */
  1848. public void mouseReleased(MouseEvent mseEvent) {
  1849. // variables que guardan la posición del mouse
  1850. iMouseX = mseEvent.getX();
  1851. iMouseY = mseEvent.getY();
  1852. if (iLevel == 0) {
  1853. sndMenuClick.play();
  1854.  
  1855. /* Checa si el mouse colisiona con algún botón y cambia la variable de
  1856. menú a la adecuada.
  1857. */
  1858. if (mbtBack.intersectMouse(iMouseX, iMouseY) && iMenu != 1) {
  1859. iMenu = 1;
  1860. }
  1861.  
  1862. else if (mbtPlay.intersectMouse(iMouseX, iMouseY) && iMenu == 1) {
  1863. iMenu = 1;
  1864. iLevel = 1;
  1865. //define el tiempo que se tiene en el nivel 1
  1866. lTimerInitial = System.currentTimeMillis()+5000;
  1867.  
  1868. //se toca cancion nivel 1
  1869. sndLevel1Song.play();
  1870.  
  1871. //el juego no se ha perdido
  1872. bGameOver = false;
  1873.  
  1874. }
  1875. else if (mbtInstructions.intersectMouse(iMouseX, iMouseY) &&
  1876. iMenu == 1) {
  1877. iMenu = 2;
  1878. }
  1879. else if (mbtOptions.intersectMouse(iMouseX, iMouseY) &&
  1880. iMenu == 1) {
  1881. iMenu = 3;
  1882. }
  1883. else if (mbtAbout.intersectMouse(iMouseX, iMouseY) &&
  1884. iMenu == 1) {
  1885. iMenu = 4;
  1886.  
  1887. }
  1888. else if (mbtScores.intersectMouse(iMouseX, iMouseY) &&
  1889. iMenu == 1) {
  1890. iMenu = 5;
  1891.  
  1892. }
  1893. else if (mbtExit.intersectMouse(iMouseX, iMouseY) &&
  1894. iMenu != 1) {
  1895. System.exit(0);
  1896. }
  1897. }
  1898.  
  1899. if(iLevel == 5) { //si es game over
  1900. sndMenuClick.play();
  1901. if (mbtGameOverMenu.intersectMouse(iMouseX, iMouseY)) {
  1902. iMenu = 1;
  1903. iLevel = 0;
  1904. System.out.println("FUCK");
  1905. }
  1906. }
  1907.  
  1908. }
  1909.  
  1910. /**
  1911. * mouseEntered
  1912. *
  1913. * Metodo sobrescrito de la clase <code>MouseListener</code>.<P>
  1914. * En este metodo maneja el evento que se genera cuando el mouse entra en
  1915. * el applet.
  1916. *
  1917. * @param mseEvent es el <code>MoseEvent</code> que se genera en
  1918. * al presionar.
  1919. *
  1920. */
  1921. public void mouseEntered(MouseEvent mseEvent) {
  1922. // no hay codigo pero se debe escribir el metodo
  1923. }
  1924.  
  1925. /**
  1926. * mouseExited
  1927. *
  1928. * Metodo sobrescrito de la clase <code>MouseListener</code>.<P>
  1929. * En este metodo maneja el evento que se genera cuando el mouse sale en
  1930. * el applet.
  1931. *
  1932. * @param mseEvent es el <code>MoseEvent</code> que se genera en
  1933. * al presionar.
  1934. *
  1935. */
  1936. public void mouseExited(MouseEvent mseEvent) {
  1937. // no hay codigo pero se debe escribir el metodo
  1938. }
  1939. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement