Advertisement
Debml

backup videojuegos, mayo 3 10:08

May 3rd, 2015
240
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 58.02 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 iVelocityMorpheus; //define la velocidad de morfeo
  71. private int iDirectionMorpheus; //define la direccion de morfeo
  72.  
  73. //variables de tipo integer
  74. private int iLevel; //define nivel actual en el juego
  75. private int iPosX; //define la ubicacion de un objeto en X
  76. private int iPosY; //define la ubicacion de un objeto en Y
  77. private int iDoorOpenKey; //auxiliar para contorl de puertas y llaves
  78. private int iMouseX; //deinfe la posicion en X del mouse
  79. private int iMouseY; //define la posicion en Y del mouse
  80. private int iMenu; //define el menú correspondiente
  81. private int iLevelChange; //auxiliar que checa si hubo cambio de nivel
  82.  
  83. //variables de tipo long
  84. private long lImmuneTimeMauro; //define el tiempo que Mauro es immune
  85. private long lTime; //tiempo restante en el juego
  86. private long lAnimationTime; //tiempo animacion
  87.  
  88. //variables de tipo boolean
  89. private boolean bTime; //define si tiempo del juego ha terminado
  90. private boolean bEndGame; //define si termian el juego o no
  91. private boolean bGameOver; //si se acabo el juego
  92.  
  93. //listas
  94. private ArrayList arlEnemies; //lista de enemigos
  95. private ArrayList arlMapObjectsLevel1; //lista de Maps del nivel 1
  96. private ArrayList arlMapObjectsLevel2; //lista de Maps del nivel 2
  97. private ArrayList arlMapObjectsLevel3; //lista de Maps del nivel 3
  98. private ArrayList arlMapObjectsLevel4; //lista de Maps del nivel 4
  99. private ArrayList arlMorpheusSteps; //pasos que seguira morfeo
  100.  
  101. //arreglos
  102. private boolean[] bButtonsLevel1; //define cuales botones estan activos
  103. private boolean[] bButtonsLevel2; //define cuales botones estan activos
  104. private boolean[] bButtonsLevel3; //define cuales botones estan activos
  105. private boolean[] bButtonsLevel4; //define cuales botones estan activos
  106.  
  107. //thread
  108. private Thread thread; //variable para el thread del JPanel
  109.  
  110. //variables de control de tiempo para animacion
  111. private long lCurrentTime; //tiempo actual
  112. private long lInitialTime; //tiempo inicial
  113. private long lElapsedTime; //tiempo transcurrido
  114.  
  115. //variables para controlar la barra de tiempo
  116. private long lTimerInitial; //tiempo en donde se empieza a contar la barra
  117. private long lCurrentTimer; //tiempo actual
  118. private int iElapsedTimeTimer;//tiempo transcurrido
  119. private int iLimitTime; //tiempo limite del nivel en segundos
  120.  
  121. //variables para controlar los powerups
  122. private boolean bLightOn; //deinfe si esta prendido
  123. private long lInitialTimeLight;//define el seg. donde hay colision con Mauro
  124. private int iElapsedTimeLight; //define cuantos segundos han pasado
  125. private boolean bClockOn; //define si hubo colision con Mauro
  126.  
  127. //variables de sonido
  128. private SoundClip sndLevel1Song; //cancion nivel 1
  129. private SoundClip sndLevel2Song; //cancion nivel 2
  130. private SoundClip sndLevel3Song; //cancion nivel 3
  131. private SoundClip sndLevel4Song; //cancion nivel 4
  132.  
  133. //variables efecto de sonido
  134. private SoundClip sndClockTick; //efecto de sonido del reloj
  135. private SoundClip sndCarCrash; //efecto de choque de carro
  136. private SoundClip sndDoor; //efecto de sonido de puerta
  137. private SoundClip sndLightSwitch; //efecto de sonido de activar la luz
  138. private SoundClip sndStarbucks; //efecto al tomar el starbucks
  139. private SoundClip sndCarSound; //efecto de sonido de carro arrancando
  140. private SoundClip sndWin; //efecto de victoria
  141.  
  142.  
  143. /**
  144. * Board
  145. *
  146. * Metodo sobrescrito de la clase <code>JPanel</code>.<P>
  147. * En este metodo se inizializan las variables o se crean los objetos
  148. * a usarse en el <code>JPanel</code> y se definen funcionalidades.
  149. *
  150. */
  151. public Board() {
  152. /* se le añade la opcion al JFrame de ser escuchado por los eventos
  153. del teclado y mouse*/
  154. addKeyListener(this);
  155. addMouseListener(this);
  156.  
  157. //define en cual panel definir enfoque
  158. setFocusable(true);
  159.  
  160. //iniciar juego
  161. GameInit();
  162. setDoubleBuffered(true);
  163. }
  164.  
  165. /**
  166. * GameInit
  167. *
  168. * Metodo que inicializa el juego.
  169. *
  170. */
  171. public void GameInit() {
  172. //Nivel de inicio, animacion inical
  173. iLevel = 0; // era 0
  174.  
  175. //siguiente nivel
  176. iLevelChange = 1; //era 1
  177.  
  178. //menu inicial
  179. iMenu = 1;
  180.  
  181. //variables que definen que le juego no ha terminado o perdido el juego
  182. bEndGame = false;
  183. bGameOver = false;
  184.  
  185. //Se define sonido de fondo para cada nivel
  186. //nivel 1
  187. sndLevel1Song = new SoundClip("Musica/nivel1.wav");
  188. sndLevel1Song.setLooping(true);
  189. //nivel 2
  190. sndLevel2Song = new SoundClip("Musica/nivel2.wav");
  191. sndLevel2Song.setLooping(true);
  192. //nivel 3
  193. sndLevel3Song = new SoundClip("Musica/nivel3.wav");
  194. sndLevel3Song.setLooping(true);
  195. //nivel 4
  196. sndLevel4Song = new SoundClip("Musica/nivel4.wav");
  197. sndLevel4Song.setLooping(true);
  198.  
  199. //incializar efectos de sonido
  200. sndClockTick = new SoundClip("Sfx/clocktick.wav");
  201. sndClockTick.setLooping(false);
  202. sndCarCrash = new SoundClip("Sfx/carcrash.wav");
  203. sndCarCrash.setLooping(false);
  204. sndDoor = new SoundClip("Sfx/door.wav");
  205. sndDoor.setLooping(false);
  206. sndLightSwitch = new SoundClip("Sfx/light_switch.wav");
  207. sndLightSwitch.setLooping(false);
  208. sndStarbucks = new SoundClip("Sfx/starbucks.wav");
  209. sndStarbucks.setLooping(false);
  210. sndCarSound = new SoundClip("Sfx/vroom.wav");
  211. sndCarSound.setLooping(false);
  212. sndWin = new SoundClip("Sfx/win.wav");
  213. sndWin.setLooping(false);
  214.  
  215. //inicializar arreglo de botones
  216. bButtonsLevel1 = new boolean[5];
  217. bButtonsLevel2 = new boolean[9];
  218. bButtonsLevel3 = new boolean[5];
  219. bButtonsLevel4 = new boolean[5];
  220.  
  221. //llenar arreglos
  222. for (int i = 0; i < 5; i++) {
  223. bButtonsLevel1[i] = false;
  224. }
  225. for (int i = 0; i < 5; i++) {
  226. bButtonsLevel2[i] = false;
  227. }
  228. for (int i = 0; i < 5; i++) {
  229. bButtonsLevel3[i] = false;
  230. }
  231. for (int i = 0; i < 5; i++) {
  232. bButtonsLevel4[i] = false;
  233. }
  234.  
  235. //incializar a Mauro
  236. iVelocityMauro = 2;
  237. iDirectionMauro = 0;
  238. lImmuneTimeMauro = 0;
  239. String sMauro = "Animation/Mauro/mauro1.png";
  240. ImageIcon imiImage = new ImageIcon(this.getClass().getResource(sMauro));
  241. mauMauro = new Mauro(iVelocityMauro, iDirectionMauro,
  242. iWidthMauro, iHeightMauro, imiImage.getImage(),
  243. lImmuneTimeMauro);
  244.  
  245. //inicializar a morfeo
  246. iVelocityMorpheus = 2;
  247. iDirectionMorpheus = 0;
  248. String sMorpheus = "Animation/Mauro/mauro1.png";
  249. imiImage = new ImageIcon(this.getClass().getResource(sMauro));
  250. morMorpheus = new Morpheus(iVelocityMorpheus, iDirectionMorpheus,
  251. iWidthMorpheus, iHeightMorpheus, imiImage.getImage());
  252.  
  253. //inicializar lista de pasos morfeo
  254. arlMorpheusSteps = new ArrayList();
  255.  
  256. //crea las listas de los Mapas
  257. arlMapObjectsLevel1 = new ArrayList();
  258. arlMapObjectsLevel2 = new ArrayList();
  259. arlMapObjectsLevel3 = new ArrayList();
  260. arlMapObjectsLevel4 = new ArrayList();
  261.  
  262. //Inicializa todos los mapas
  263. try {
  264. GameInitMaps();
  265. } catch (IOException ex) {
  266. Logger.getLogger(Board.class.getName()).log(Level.SEVERE, null, ex);
  267. }
  268.  
  269. // Inicializa botones del menu
  270. String sBack = "Menus/bot_back.png";
  271. String sAbout = "Menus/bot_acerca.png";
  272. String sInstructions = "Menus/bot_instrucciones.png";
  273. String sOptions = "Menus/bot_opciones.png";
  274. String sPlay = "Menus/bot_jugar.png";
  275. String sScores = "Menus/bot_puntos.png";
  276. String sExit = "Menus/bot_salir.png";
  277. String sGameOverMenu = "Menus/boton_menu.png";
  278.  
  279. imiImage = new ImageIcon(this.getClass().getResource(sBack));
  280. mbtBack = new MenuButton(imiImage.getImage(),
  281. 1280 - imiImage.getIconWidth(), 30,
  282. imiImage.getIconWidth(), imiImage.getIconHeight());
  283. imiImage = new ImageIcon(this.getClass().getResource(sAbout));
  284. mbtAbout = new MenuButton(imiImage.getImage(),
  285. 1280/2 - imiImage.getIconWidth()/2, 420,
  286. imiImage.getIconWidth(), imiImage.getIconHeight());
  287. imiImage = new ImageIcon(this.getClass().getResource(sInstructions));
  288. mbtInstructions = new MenuButton(imiImage.getImage(),
  289. 1280/2 - imiImage.getIconWidth()/2, 330,
  290. imiImage.getIconWidth(), imiImage.getIconHeight());
  291. imiImage = new ImageIcon(this.getClass().getResource(sOptions));
  292. mbtOptions = new MenuButton(imiImage.getImage(),
  293. 1280/2 - imiImage.getIconWidth()/2, 360,
  294. imiImage.getIconWidth(), imiImage.getIconHeight());
  295. imiImage = new ImageIcon(this.getClass().getResource(sPlay));
  296. mbtPlay = new MenuButton(imiImage.getImage(),
  297. 1280/2 - imiImage.getIconWidth()/2, 300,
  298. imiImage.getIconWidth(), imiImage.getIconHeight());
  299. imiImage = new ImageIcon(this.getClass().getResource(sScores));
  300. mbtScores = new MenuButton(imiImage.getImage(),
  301. 1280/2 - imiImage.getIconWidth()/2, 390,
  302. imiImage.getIconWidth(), imiImage.getIconHeight());
  303. imiImage = new ImageIcon(this.getClass().getResource(sExit));
  304. mbtExit = new MenuButton(imiImage.getImage(),
  305. 1280/2 - imiImage.getIconWidth()/2, 450,
  306. imiImage.getIconWidth(), imiImage.getIconHeight());
  307. imiImage = new ImageIcon(this.getClass().getResource(sGameOverMenu));
  308. mbtGameOverMenu = new MenuButton(imiImage.getImage(),
  309. 1280/2 - imiImage.getIconWidth()/2, 450,
  310. imiImage.getIconWidth(), imiImage.getIconHeight());
  311.  
  312. // inicializa el thread
  313. if (thread == null || !bEndGame) {
  314. thread = new Thread(this);
  315. thread.start();
  316. }
  317. }
  318.  
  319. /**
  320. * GameInitMaps
  321. *
  322. * Metodo que inicializa todos los mapas del juego.
  323. *
  324. */
  325. private void GameInitMaps() throws IOException {
  326. //variables
  327. //variables que definen un=bicacion de imagenes
  328. String sLevel1WallVertical = "Nivel1/paredVerticalNivel1.jpg";
  329. String sLevel1WallHorizontal = "Nivel1/paredHorizontalNivel1.png";
  330. String sLevel1Trap = "Nivel1/picos0.png";
  331. String sLevel1Finish = "Nivel1/meta_nivel1.png";
  332. String sLevel1Text = "src/runmaurorun/Nivel1/Nivel1.txt";
  333. String sLevel2Text = "src/runmaurorun/nivel2/Nivel2.txt";
  334.  
  335. String sData; //almacena lectura de texto
  336.  
  337. char cObjectType; //revisa tipo objeto a leer
  338. char cAuxObjectType; //auxiliar q almacena el tipo de objeto
  339.  
  340. int iWidthObject; //variable para ancho del objeto
  341. int iHeightObject; //variable para altura del objeto
  342. int iDoorKey; //varaible para control de acceso de puertas
  343. int iX;
  344. int iY;
  345. int iDoorLength;
  346.  
  347. boolean bFinishFileRead; //variable que define si se termino la lectura
  348.  
  349. ImageIcon imiImage; //imagen utilizada para crear mapas
  350.  
  351. //buscar y leer archivo de Nivel 1
  352. BufferedReader fileIn;
  353.  
  354. //inicializar variables
  355. cObjectType = ' ';
  356. iWidthObject = 0;
  357. iHeightObject = 0;
  358. imiImage = new ImageIcon(this.getClass().getResource(
  359. sLevel1WallHorizontal));
  360.  
  361. Map mapObject;
  362.  
  363. //--------------------------NIVEL 1------------------------------------
  364. //duracion del juego
  365. iLimitTime = 10; //2 minutos
  366.  
  367. //pwrup de luz
  368. bLightOn = false; //no tiene el powerUp
  369.  
  370. //pwrup reloj
  371. bClockOn = false; //No tiene el powerup
  372.  
  373. try {
  374. fileIn = new BufferedReader(new FileReader(sLevel1Text));
  375. } catch (FileNotFoundException e) {
  376. System.out.println("FILE NOT FOUND!");
  377. fileIn = new BufferedReader(new FileReader(
  378. sLevel1Text));
  379. }
  380.  
  381. //file has not been read
  382. bFinishFileRead = false;
  383.  
  384. //leer archivo hasta terminar de leerlo
  385. sData = fileIn.readLine();
  386. do {
  387. //si el primer caracter es una letra
  388. if (sData.charAt(0) - 97 >= 0 ) {
  389. cObjectType = sData.charAt(0);
  390. sData = fileIn.readLine();
  391. }
  392.  
  393. //si la linea es un comentario
  394. if (sData.charAt(0) == '/') {
  395. sData = fileIn.readLine();
  396. }
  397.  
  398. //leer coordenadas X y Y
  399. iX = Integer.parseInt(sData);
  400. sData = fileIn.readLine();
  401. iY = Integer.parseInt(sData);
  402.  
  403. //definir medidas e imagen a utilizar dependiendo del objeto
  404. switch (cObjectType) {
  405. case 'a': //pared horizontal
  406. iWidthObject = 76;
  407. iHeightObject = 19;
  408. imiImage = new ImageIcon(this.getClass().getResource(
  409. sLevel1WallHorizontal));
  410. mapObject = new Map(imiImage.getImage(),
  411. iX, iY, iWidthObject, iHeightObject,
  412. false, false);
  413. mapObject.setImage(imiImage.getImage());
  414. arlMapObjectsLevel1.add(mapObject);
  415. break;
  416. case 'b': //pared vertical
  417. iWidthObject = 19;
  418. iHeightObject = 76;
  419. imiImage = new ImageIcon(this.getClass().getResource(
  420. sLevel1WallVertical));
  421. mapObject = new Map(imiImage.getImage(),
  422. iX, iY, iWidthObject, iHeightObject,
  423. false, false);
  424. mapObject.setImage(imiImage.getImage());
  425. arlMapObjectsLevel1.add(mapObject);
  426. break;
  427. case 'c': //trampa
  428. iWidthObject = 32;
  429. iHeightObject = 19;
  430. imiImage = new ImageIcon(this.getClass().getResource(
  431. sLevel1Trap));
  432. mapObject = new Trap(imiImage.getImage(),
  433. iX, iY, iWidthObject, iHeightObject, -1,
  434. false);
  435. mapObject.setImage(imiImage.getImage());
  436. arlMapObjectsLevel1.add(mapObject);
  437. break;
  438. case 'd': //puerta horizontal
  439. iWidthObject = 92;
  440. iHeightObject = 8;
  441. sData = fileIn.readLine();
  442. iDoorKey = Integer.parseInt(sData);
  443. sData = fileIn.readLine();
  444. imiImage = new ImageIcon(this.getClass().getResource(
  445. sData));
  446. mapObject = new Door(imiImage.getImage(),
  447. iX, iY, iWidthObject, iHeightObject,
  448. false, iDoorKey, false);
  449. mapObject.setImage(imiImage.getImage());
  450. arlMapObjectsLevel1.add(mapObject);
  451. break;
  452. case 'e': //puerta vertical
  453. iWidthObject = 8;
  454. iHeightObject = 90;
  455. sData = fileIn.readLine();
  456. iDoorKey = Integer.parseInt(sData);
  457. sData = fileIn.readLine();
  458. imiImage = new ImageIcon(this.getClass().getResource(
  459. sData));
  460. mapObject = new Door(imiImage.getImage(),
  461. iX, iY, iWidthObject, iHeightObject,
  462. false, iDoorKey, false);
  463. mapObject.setImage(imiImage.getImage());
  464. arlMapObjectsLevel1.add(mapObject);
  465. break;
  466. case 'f': //boton
  467. iWidthObject = 32;
  468. iHeightObject = 19;
  469. sData = fileIn.readLine();
  470. iDoorKey = Integer.parseInt(sData);
  471. sData = fileIn.readLine();
  472. imiImage = new ImageIcon(this.getClass().getResource(
  473. sData));
  474. mapObject = new Button(imiImage.getImage(),
  475. iX, iY, iWidthObject, iHeightObject,
  476. false, false, iDoorKey);
  477. mapObject.setImage(imiImage.getImage());
  478. arlMapObjectsLevel1.add(mapObject);
  479. break;
  480. case 'g': //powerup
  481. iWidthObject = 16;
  482. iHeightObject = 25;
  483. sData = fileIn.readLine();
  484. int iPwrUpType = Integer.parseInt(sData);
  485. sData = fileIn.readLine();
  486. imiImage = new ImageIcon(this.getClass().getResource(
  487. sData));
  488. mapObject = new PwrUp(false, false, imiImage.getImage(),
  489. iX, iY, iWidthObject, iHeightObject,
  490. iPwrUpType, -1);
  491. mapObject.setImage(imiImage.getImage());
  492. arlMapObjectsLevel1.add(mapObject);
  493. break;
  494. case 'h': //meta
  495. iWidthObject = 83;
  496. iHeightObject = 47;
  497. imiImage = new ImageIcon(this.getClass().getResource(
  498. sLevel1Finish));
  499. mapObject = new Map(imiImage.getImage(),
  500. iX, iY, iWidthObject, iHeightObject,
  501. false, true);
  502. mapObject.setImage(imiImage.getImage());
  503. arlMapObjectsLevel1.add(mapObject);
  504. break;
  505. default:
  506. break;
  507. }
  508.  
  509. sData = fileIn.readLine();
  510.  
  511. //si se termino la lectura
  512. if (sData.charAt(0) == 'x') {
  513. bFinishFileRead = true;
  514. }
  515. } while (!bFinishFileRead);
  516.  
  517. //--------------------------NIVEL 2------------------------------------
  518. String sLevel2WallVertical = "Nivel2/pared_vertical_nivel2.png";
  519. String sLevel2WallHorizontal = "Nivel2/pared_horizontal_nivel2.png";
  520.  
  521. try {
  522. fileIn = new BufferedReader(new FileReader(sLevel2Text));
  523. } catch (FileNotFoundException e) {
  524. System.out.println("FILE NOT FOUND!");
  525. fileIn = new BufferedReader(new FileReader(sLevel2Text));
  526. }
  527.  
  528. //file has not been read
  529. bFinishFileRead = false;
  530.  
  531. //leer archivo hasta terminar de leerlo
  532. sData = fileIn.readLine();
  533. do {
  534. //si el primer caracter es una letra
  535. if (sData.charAt(0) - 97 >= 0 ) {
  536. cObjectType = sData.charAt(0);
  537. sData = fileIn.readLine();
  538. }
  539.  
  540. //si la linea es un comentario
  541. if (sData.charAt(0) == '/') {
  542. sData = fileIn.readLine();
  543. }
  544.  
  545. //leer coordenadas X y Y
  546. iX = Integer.parseInt(sData);
  547. sData = fileIn.readLine();
  548. iY = Integer.parseInt(sData);
  549.  
  550. //definir medidas e imagen a utilizar dependiendo del objeto
  551. switch (cObjectType) {
  552. case 'a': //pared horizontal
  553. iWidthObject = 76;
  554. iHeightObject = 19;
  555. imiImage = new ImageIcon(this.getClass().getResource(
  556. sLevel2WallHorizontal));
  557. mapObject = new Map(imiImage.getImage(),
  558. iX, iY, iWidthObject, iHeightObject,
  559. true, false);
  560. mapObject.setImage(imiImage.getImage());
  561. arlMapObjectsLevel2.add(mapObject);
  562. break;
  563. case 'b': //pared vertical
  564. iWidthObject = 19;
  565. iHeightObject = 76;
  566. imiImage = new ImageIcon(this.getClass().getResource(
  567. sLevel2WallVertical));
  568. mapObject = new Map(imiImage.getImage(),
  569. iX, iY, iWidthObject, iHeightObject,
  570. true, false);
  571. mapObject.setImage(imiImage.getImage());
  572. arlMapObjectsLevel2.add(mapObject);
  573. break;
  574. case 'c': //decoracion de casa
  575. sData = fileIn.readLine();
  576. iDoorLength = Integer.parseInt(sData);
  577. iWidthObject = iDoorLength;
  578. sData = fileIn.readLine();
  579. iDoorLength = Integer.parseInt(sData);
  580. iHeightObject = iDoorLength;
  581. sData = fileIn.readLine();
  582. imiImage = new ImageIcon(this.getClass().getResource(
  583. sData));
  584. mapObject = new Map(imiImage.getImage(),
  585. iX, iY, iWidthObject, iHeightObject,
  586. true, false);
  587. mapObject.setImage(imiImage.getImage());
  588. arlMapObjectsLevel2.add(mapObject);
  589. break;
  590. case 'd': //puerta horizontal
  591. sData = fileIn.readLine();
  592. iDoorLength = Integer.parseInt(sData);
  593. iWidthObject = iDoorLength;
  594. sData = fileIn.readLine();
  595. iDoorLength = Integer.parseInt(sData);
  596. iHeightObject = iDoorLength;
  597. sData = fileIn.readLine();
  598. iDoorKey = Integer.parseInt(sData);
  599. sData = fileIn.readLine();
  600. imiImage = new ImageIcon(this.getClass().getResource(
  601. sData));
  602. mapObject = new Door(imiImage.getImage(),
  603. iX, iY, iWidthObject, iHeightObject,
  604. false, iDoorKey, true);
  605. mapObject.setImage(imiImage.getImage());
  606. arlMapObjectsLevel2.add(mapObject);
  607. break;
  608. case 'e': //puerta vertical
  609. sData = fileIn.readLine();
  610. iDoorLength = Integer.parseInt(sData);
  611. iWidthObject = iDoorLength;
  612. sData = fileIn.readLine();
  613. iDoorLength = Integer.parseInt(sData);
  614. iHeightObject = iDoorLength;
  615. sData = fileIn.readLine();
  616. iDoorKey = Integer.parseInt(sData);
  617. sData = fileIn.readLine();
  618. imiImage = new ImageIcon(this.getClass().getResource(
  619. sData));
  620. mapObject = new Door(imiImage.getImage(),
  621. iX, iY, iWidthObject, iHeightObject,
  622. false, iDoorKey, true);
  623. mapObject.setImage(imiImage.getImage());
  624. arlMapObjectsLevel2.add(mapObject);
  625. break;
  626. case 'f': //boton
  627. iWidthObject = 32;
  628. iHeightObject = 19;
  629. sData = fileIn.readLine();
  630. iDoorKey = Integer.parseInt(sData);
  631. sData = fileIn.readLine();
  632. imiImage = new ImageIcon(this.getClass().getResource(
  633. sData));
  634. mapObject = new Button(imiImage.getImage(),
  635. iX, iY, iWidthObject, iHeightObject,
  636. true, false, iDoorKey);
  637. mapObject.setImage(imiImage.getImage());
  638. arlMapObjectsLevel2.add(mapObject);
  639. break;
  640. case 'g': //powerup
  641. iWidthObject = 16;
  642. iHeightObject = 25;
  643. sData = fileIn.readLine();
  644. int iPwrUpType = Integer.parseInt(sData);
  645. sData = fileIn.readLine();
  646.  
  647. imiImage = new ImageIcon(this.getClass().getResource(
  648. sData));
  649. mapObject = new PwrUp(false, true, imiImage.getImage(),
  650. iX, iY, iWidthObject, iHeightObject,
  651. iPwrUpType, -1);
  652. mapObject.setImage(imiImage.getImage());
  653. arlMapObjectsLevel2.add(mapObject);
  654. break;
  655. case 'h': //meta
  656. iWidthObject = 52;
  657. iHeightObject = 30;
  658. sData = fileIn.readLine();
  659. imiImage = new ImageIcon(this.getClass().getResource(
  660. sData));
  661. mapObject = new Map(imiImage.getImage(),
  662. iX, iY, iWidthObject, iHeightObject,
  663. true, true);
  664. mapObject.setImage(imiImage.getImage());
  665. arlMapObjectsLevel2.add(mapObject);
  666. break;
  667. default:
  668. break;
  669. }
  670.  
  671. sData = fileIn.readLine();
  672.  
  673. //si se termino la lectura
  674. if (sData.charAt(0) == 'x') {
  675. bFinishFileRead = true;
  676. }
  677. } while (!bFinishFileRead);
  678. }
  679.  
  680. /**
  681. * run
  682. *
  683. * Metodo que corre el juego y actualiza el hilo.
  684. *
  685. */
  686. public void run() {
  687. //Guarda el tiempo actual del sistema
  688. lCurrentTime = System.currentTimeMillis();
  689.  
  690. //variables para el control de tiempo
  691. long lTimeDiff; //diferencia del tiempo contra tiempo actual en un punto
  692. long lSleep; //canitdad limite para dormir el thread en ms
  693.  
  694. //loop que cicla el juego hasta que termina
  695. while (!bEndGame) {
  696. //pinta y actualiza
  697. repaint();
  698.  
  699. //actualiza datos
  700. AnimationCycle();
  701.  
  702. //Calcula la diferencia de tiempo con la ultima marca de tiempo
  703. lTimeDiff = System.currentTimeMillis() - lCurrentTime;
  704. lSleep = 17 - lTimeDiff;
  705.  
  706. //define canitdad a dormir el thread
  707. if (lSleep < 0)
  708. lSleep = 2;
  709. try {
  710. Thread.sleep(lSleep);
  711. } catch (InterruptedException e) {
  712. System.out.println("interrupted");
  713. }
  714.  
  715. //actuializa el tiempo actual
  716. lCurrentTime = System.currentTimeMillis();
  717. }
  718. }
  719.  
  720. /**
  721. * AnimationCycle
  722. *
  723. * Metodo que actualiza el juego
  724. *
  725. */
  726. public void AnimationCycle() {
  727. /*Determina el tiempo que ha transcurrido desde que el Applet inicio su
  728. ejecución*/
  729. lElapsedTime = System.currentTimeMillis() - lCurrentTime;
  730.  
  731. //Guarda el tiempo actual
  732. lCurrentTime += lElapsedTime;
  733.  
  734. //actualiza el jugador
  735. mauMauro.updateMovement(iDirectionMauro);
  736.  
  737. //si se cambio al siguiente nivel define posicion inical de mauro
  738. if (iLevel == iLevelChange) {
  739. switch (iLevel) {
  740. case 1: { //nivel 1
  741. mauMauro.setX(1200); //70
  742. mauMauro.setY(100); //640
  743. break;
  744. }
  745. case 2: { //nivel 2
  746. mauMauro.setX(1200);
  747. mauMauro.setY(100);
  748. break;
  749. }
  750. case 3: { //nivel 3
  751. mauMauro.setX(70);
  752. mauMauro.setY(640);
  753. break;
  754. }
  755. case 4: { //nivel 4
  756. mauMauro.setX(70);
  757. mauMauro.setY(640);
  758. break;
  759. }
  760. default: {
  761. break;
  762. }
  763. }
  764. //incrementar variable para estar listo para el siguiente nivel
  765. iLevelChange++;
  766. }
  767.  
  768. //--------------------------NIVEL 1------------------------------------
  769. //actualizar efectos nivel 1
  770. if (iLevel == 1) {
  771. //variables
  772. int iPositionDifferenceMauro; //diferencia en posision de Mauro
  773. int iIncreaseRectangleSize; //incremento en tamaño de rectangulo
  774. int iTimeLimitLight = 5; //duracion maxima efecto luz
  775.  
  776. //si pwrup de luz NO esta activo
  777. if (!bLightOn) {
  778. iPositionDifferenceMauro = 100;
  779. iIncreaseRectangleSize = 150;
  780. }
  781.  
  782. else {
  783. iPositionDifferenceMauro = 1000;
  784. iIncreaseRectangleSize = 1750;
  785.  
  786. //si termina el tiempo apagar pwrup
  787. if ((lCurrentTime-lInitialTimeLight)/1000 >= iTimeLimitLight) {
  788. bLightOn = !bLightOn;
  789. }
  790. }
  791.  
  792. //iterador de objetos de la lista
  793. Iterator it = arlMapObjectsLevel1.iterator();
  794.  
  795. // mientras existan objetos en la lista
  796. while (it.hasNext()) {
  797. Map mapObject = (Map) it.next();
  798. // revisar si estan en el area de Mauro
  799. if (mapObject.PlayerColission(mapObject, mauMauro,
  800. iPositionDifferenceMauro,
  801. iIncreaseRectangleSize)) {
  802. mapObject.setVisible(true); //muestra el objeto
  803. }
  804. else {
  805. mapObject.setVisible(false); //esconde el objeto
  806. }
  807.  
  808. //si es un puerta revisar si debe estar abierta
  809. if (mapObject instanceof Door) {
  810. Door mapDoor = (Door) mapObject;
  811. if (bButtonsLevel1[mapDoor.getDoorNo()]) {
  812. mapDoor.setOpen(true);
  813. mapDoor.setSolid(false);
  814. }
  815. }
  816. }
  817.  
  818. //cambios barra del tiempo
  819. //Saca el tiempo actual para barra del tiempo
  820. lCurrentTimer = System.currentTimeMillis();
  821.  
  822. //Saca el tiempo que ha pasado desde el inicio del nivel
  823. iElapsedTimeTimer = (int)(lCurrentTimer - lTimerInitial)/1000;
  824.  
  825. //si el pwrup del reloj esta activo aumentar reloj
  826. if (bClockOn) {
  827. lTimerInitial += 8000;
  828. bClockOn = !bClockOn;
  829. }
  830.  
  831. //si el tiempo en el juego se termino
  832. if (iLimitTime - iElapsedTimeTimer < 0) {
  833. bGameOver = true;
  834. iLevel = 5;
  835. sndLevel1Song.stop();
  836. gameOverRestart();
  837. }
  838.  
  839. //checa colision
  840. checkCollisionLevel1();
  841. }
  842. else if (iLevel == 2) {
  843.  
  844. //checa colision
  845. checkCollisionLevel2();
  846.  
  847.  
  848. }
  849. }
  850.  
  851. public void checkCollisionLevel1() {
  852. //colision con las paredes
  853. Iterator it = arlMapObjectsLevel1.iterator();
  854.  
  855. // mientras existan objetos en la lista
  856. while (it.hasNext()) {
  857. Map mapObject = (Map) it.next();
  858.  
  859. //Si el objeto es solido y existe colision...
  860. if (mapObject.isSolid() && mauMauro.colission(mapObject)) {
  861. //Si es una trampa
  862. if (mapObject instanceof Trap) {
  863. //regresar a mauro a posicion inicial
  864. mauMauro.setX(70);
  865. mauMauro.setY(640);
  866. }
  867.  
  868. //Si es un boton, abrir puerta
  869. else if (mapObject instanceof Button) {
  870. sndDoor.play();
  871. Button mapButton = (Button) mapObject;
  872. iDoorOpenKey = mapButton.getButtonNo();
  873. mapButton.setClicked(true);
  874. bButtonsLevel1[iDoorOpenKey] = true;
  875. }
  876.  
  877. //Si agarra un PowerUp
  878. else if (mapObject instanceof PwrUp) {
  879. PwrUp mapUp = (PwrUp) mapObject;
  880.  
  881. //Si es un foco
  882. if (mapUp.getType() == 2) {
  883. if (!mapUp.getGrabbed()) {
  884. sndLightSwitch.play();
  885. lInitialTimeLight = System.currentTimeMillis();
  886. bLightOn = true;
  887. mapUp.setGrabbed(true);
  888. mapUp.setVisible(false);
  889. }
  890. }
  891. //Si es un reloj
  892. else{
  893. if (!mapUp.getGrabbed()) {
  894. sndClockTick.play();
  895. bClockOn = true;
  896. mapUp.setGrabbed(true);
  897. mapUp.setVisible(false);
  898. }
  899. }
  900. }
  901.  
  902. //cambiar de nivel si llega a la salida
  903. else if (mapObject.isExit() && mauMauro.colission(mapObject) &&
  904. iLevel != iLevelChange) {
  905. iLevel++;
  906. sndWin.play();
  907. sndLevel1Song.stop();
  908. }
  909.  
  910. //Si es una pared (o puerta solida), anular movimiento
  911. else{
  912. if (iDirectionMauro == 1) {
  913. mauMauro.updateMovement(2);
  914. }
  915. else if (iDirectionMauro == 2) {
  916. mauMauro.updateMovement(1);
  917. }
  918. else if (iDirectionMauro == 3) {
  919. mauMauro.updateMovement(4);
  920. }
  921. else if (iDirectionMauro == 4) {
  922. mauMauro.updateMovement(3);
  923. }
  924. }
  925. }
  926. }
  927. }
  928.  
  929. public void checkCollisionLevel2() {
  930. //colision con las paredes
  931. Iterator it = arlMapObjectsLevel2.iterator();
  932.  
  933. // mientras existan objetos en la lista
  934. while (it.hasNext()) {
  935. Map mapObject = (Map) it.next();
  936.  
  937. //Si el objeto es solido y existe colision...
  938. if (mapObject.isSolid() && mauMauro.colission(mapObject)) {
  939. //Si es una trampa
  940. if (mapObject instanceof Trap) {
  941. //regresar a mauro a posicion inicial
  942. mauMauro.setX(70);
  943. mauMauro.setY(640);
  944. }
  945.  
  946. //Si es un boton, abrir puerta
  947. else if (mapObject instanceof Button) {
  948. sndDoor.play();
  949. Button mapButton = (Button) mapObject;
  950. iDoorOpenKey = mapButton.getButtonNo();
  951. mapButton.setClicked(true);
  952. bButtonsLevel2[iDoorOpenKey] = true;
  953.  
  954. //busca su puerta correspondiente
  955. Iterator it2 = arlMapObjectsLevel2.iterator();
  956.  
  957. // mientras existan objetos en la lista
  958. while (it2.hasNext()) {
  959. Map mapObject2 = (Map) it2.next();
  960.  
  961. //si es un puerta revisar si debe estar abierta
  962. if (mapObject2 instanceof Door) {
  963. Door mapDoor = (Door) mapObject2;
  964. if (bButtonsLevel2[mapDoor.getDoorNo()]) {
  965. mapDoor.setOpen(true);
  966. mapDoor.setSolid(false);
  967. }
  968. }
  969. }
  970. }
  971.  
  972. //Si agarra un PowerUp
  973. else if (mapObject instanceof PwrUp) {
  974. PwrUp mapUp = (PwrUp) mapObject;
  975.  
  976. //Si es un foco
  977. if (mapUp.getType() == 2) {
  978. if (!mapUp.getGrabbed()) {
  979. sndLightSwitch.play();
  980. lInitialTimeLight = System.currentTimeMillis();
  981. bLightOn = true;
  982. mapUp.setGrabbed(true);
  983. mapUp.setVisible(false);
  984. }
  985. }
  986. //Si es un reloj
  987. else{
  988. if (!mapUp.getGrabbed()) {
  989. sndClockTick.play();
  990. bClockOn = true;
  991. mapUp.setGrabbed(true);
  992. mapUp.setVisible(false);
  993. }
  994. }
  995. }
  996.  
  997. //cambiar de nivel si llega a la salida
  998. else if (mapObject.isExit() && mauMauro.colission(mapObject) &&
  999. iLevel != iLevelChange) {
  1000. iLevel++;
  1001. sndLevel2Song.stop();
  1002. }
  1003.  
  1004. //Si es una pared (o puerta solida), anular movimiento
  1005. else{
  1006. if (iDirectionMauro == 1) {
  1007. mauMauro.updateMovement(2);
  1008. }
  1009. else if (iDirectionMauro == 2) {
  1010. mauMauro.updateMovement(1);
  1011. }
  1012. else if (iDirectionMauro == 3) {
  1013. mauMauro.updateMovement(4);
  1014. }
  1015. else if (iDirectionMauro == 4) {
  1016. mauMauro.updateMovement(3);
  1017. }
  1018. }
  1019. }
  1020. }
  1021. }
  1022.  
  1023. public void gameOverRestart() {
  1024. //regresar a primera posicion
  1025. mauMauro.setX(70);
  1026. mauMauro.setY(640);
  1027.  
  1028. //reset de siguiente nivel
  1029. iLevelChange = 1;
  1030.  
  1031. //reset de botones de puertas en los niveles
  1032. for (int i = 0; i < 5; i++) {
  1033. bButtonsLevel1[i] = false;
  1034. }
  1035. for (int i = 0; i < 5; i++) {
  1036. bButtonsLevel2[i] = false;
  1037. }
  1038. for (int i = 0; i < 5; i++) {
  1039. bButtonsLevel3[i] = false;
  1040. }
  1041. for (int i = 0; i < 5; i++) {
  1042. bButtonsLevel4[i] = false;
  1043. }
  1044.  
  1045. //reset variables Mauro
  1046. iVelocityMauro = 2;
  1047. iDirectionMauro = 0;
  1048. lImmuneTimeMauro = 0;
  1049.  
  1050. //reinicializa todos los mapas
  1051. try {
  1052. GameInitMaps();
  1053. } catch (IOException ex) {
  1054. Logger.getLogger(Board.class.getName()).log(Level.SEVERE, null, ex);
  1055. }
  1056. }
  1057.  
  1058. /**
  1059. * Metodo <I>paint</I> sobrescrito de la clase <code>JPanel</code>,
  1060. * heredado de la clase Container.<P>
  1061. * En este metodo se dibuja la imagen con la posicion actualizada,
  1062. * ademas que cuando la imagen es cargada te despliega una advertencia.
  1063. * @param graGrafico es el <code>objeto grafico</code> usado para dibujar.
  1064. */
  1065. public void paint(Graphics graGrafico) {
  1066. //llama al paint de la clase que heredaste
  1067. super.paint(graGrafico);
  1068.  
  1069. switch (iLevel) {
  1070. case -1: //animacion inical
  1071.  
  1072. break;
  1073. case 0: //menu
  1074. drawMenu(graGrafico);
  1075. break;
  1076. case 1:
  1077. Graphics2D g2d = (Graphics2D) graGrafico;
  1078. g2d.setColor(Color.decode("#1d2e4c"));
  1079. g2d.fillOval(mauMauro.getX()-50, mauMauro.getY()-45, 120,
  1080. 120);
  1081. g2d.drawOval(mauMauro.getX()-50, mauMauro.getY()-45, 120,
  1082. 120);
  1083. setBackground(Color.black);
  1084. drawMaps(graGrafico);
  1085. drawMauro(graGrafico);
  1086. if (!bGameOver) {
  1087. drawTimeBar(graGrafico);
  1088. }
  1089. break;
  1090. case 2:
  1091. String sLevel2Background = "Nivel2/background.png";
  1092. ImageIcon imiImage = new ImageIcon(this.getClass().
  1093. getResource(sLevel2Background));
  1094. graGrafico.drawImage(imiImage.getImage(), 0, 0, this);
  1095. drawMaps(graGrafico);
  1096. drawMauro(graGrafico);
  1097. break;
  1098. case 3:
  1099. graGrafico.setColor(Color.decode("#1d2e4c"));
  1100. break;
  1101. case 4:
  1102. graGrafico.setColor(Color.decode("#1d2e4c"));
  1103. break;
  1104. default: // game over
  1105. drawGameOver(graGrafico);
  1106. break;
  1107. }
  1108.  
  1109. //comandos para paint
  1110. Toolkit.getDefaultToolkit().sync();
  1111. graGrafico.dispose();
  1112. }
  1113.  
  1114. /**
  1115. * drawMauro
  1116. *
  1117. * Metodo que dibuja a Mauro.
  1118. *
  1119. * @param graGrafico es el <code>objeto grafico</code> usado para dibujar.
  1120. */
  1121. public void drawMauro(Graphics graGrafico) {
  1122. // mientras exista Mauro
  1123. if (mauMauro.isVisible() && iLevel != 0) {
  1124. mauMauro.getAnimation().actualiza(lElapsedTime);
  1125. mauMauro.setAnimation(iDirectionMauro);
  1126. graGrafico.drawImage(mauMauro.getAnimation().getImagen(),
  1127. mauMauro.getX(), mauMauro.getY(), this);
  1128. }
  1129. }
  1130.  
  1131. /**
  1132. * drawMaps
  1133. *
  1134. * Metodo que dibuja los Maps
  1135. *
  1136. * @param graGrafico es el <code>objeto grafico</code> usado para dibujar.
  1137. */
  1138. public void drawMaps(Graphics graGrafico) {
  1139. //dependiendo del nivel se pintara dichos objetos
  1140. switch (iLevel) {
  1141. case 1:
  1142. Iterator it = arlMapObjectsLevel1.iterator();
  1143.  
  1144. // mientras existan objetos en la lista
  1145. while (it.hasNext()) {
  1146. Map mapObject = (Map) it.next();
  1147. mapObject.paint(graGrafico, mapObject, lElapsedTime, this);
  1148. }
  1149. break;
  1150. case 2:
  1151. Iterator it2 = arlMapObjectsLevel2.iterator();
  1152.  
  1153. // mientras existan objetos en la lista
  1154. while (it2.hasNext()) {
  1155. Map mapObject = (Map) it2.next();
  1156. mapObject.paint(graGrafico, mapObject, lElapsedTime, this);
  1157. }
  1158. break;
  1159. case 3:
  1160.  
  1161. break;
  1162. case 4:
  1163.  
  1164. break;
  1165. default:
  1166.  
  1167. break;
  1168. }
  1169. }
  1170.  
  1171. /**
  1172. * drawGameOver
  1173. *
  1174. * Metodo que dibuja el game over
  1175. *
  1176. * @param graGrafico es el <code>objeto grafico</code> usado para dibujar.
  1177. */
  1178. public void drawGameOver(Graphics graGrafico) {
  1179. graGrafico.setColor(Color.black);
  1180. String sGameOver = "Menus/gameover.png";
  1181. ImageIcon imiImageGameOver2 = new ImageIcon(this.getClass().
  1182. getResource(sGameOver));
  1183. graGrafico.drawImage(imiImageGameOver2.getImage(), 0, 0,
  1184. this);
  1185. //boton
  1186. mbtGameOverMenu.paint(graGrafico, this);
  1187. }
  1188.  
  1189. /**
  1190. * drawTimeBar
  1191. *
  1192. * Metodo que dibuja la barra del tiempo
  1193. *
  1194. * @param graGrafico es el <code>objeto grafico</code> usado para dibujar.
  1195. */
  1196. public void drawTimeBar(Graphics graGrafico) {
  1197. //Crea el fondo de la barra de tiempo
  1198. String sBar = "Menus/barraTiempo_Fondo.png";
  1199. ImageIcon imiImage = new ImageIcon(this.getClass().getResource(sBar));
  1200. graGrafico.drawImage(imiImage.getImage(), 0, iHeight-41, this);
  1201.  
  1202. //si el limite de tiempo no ha sido alcanzado
  1203. if (iLimitTime - iElapsedTimeTimer > 0) {
  1204. //Se dibuja la barra verde que se modifica con el tiempo
  1205. graGrafico.setColor(Color.GREEN);
  1206. graGrafico.fillRect(85, iHeight - 38,(1115 / iLimitTime) *
  1207. (iLimitTime - iElapsedTimeTimer),13);
  1208. }
  1209. }
  1210.  
  1211. /**
  1212. * drawMenu
  1213. *
  1214. * Metodo que dibuja el menu y los submenús.
  1215. *
  1216. * @param graGrafico es el <code>objeto grafico</code> usado para dibujar.
  1217. */
  1218. public void drawMenu(Graphics graGrafico) {
  1219. URL urlMenu;
  1220. Image imaMenu;
  1221. // Switch que se utiliza para ver qué pantalla desplegar
  1222. switch (iMenu) {
  1223. case 1: { // se despliega el MENU
  1224. // dibuja el fondo
  1225. urlMenu = this.getClass().getResource("Menus/menu3.png");
  1226. imaMenu = Toolkit.getDefaultToolkit().getImage(urlMenu);
  1227. graGrafico.drawImage(imaMenu, 0, 0, this);
  1228. // dibuja los botones
  1229. mbtPlay.paint(graGrafico, this);
  1230. mbtInstructions.paint(graGrafico, this);
  1231. mbtAbout.paint(graGrafico, this);
  1232. mbtOptions.paint(graGrafico, this);
  1233. mbtScores.paint(graGrafico, this);
  1234. mbtExit.paint(graGrafico, this);
  1235. break;
  1236. }
  1237. case 2: { // se dibujan las instrucciones
  1238. // dibuja el fondo
  1239. urlMenu = this.getClass().getResource("Menus/menu4.png");
  1240. imaMenu = Toolkit.getDefaultToolkit().getImage(urlMenu);
  1241. graGrafico.drawImage(imaMenu, 0, 0, this);
  1242. // dibuja el botón back y lo pone visible
  1243. mbtBack.paint(graGrafico, this);
  1244. break;
  1245. }
  1246. case 3: { // se dibujan las opciones
  1247. urlMenu = this.getClass().getResource("Menus/menu5.png");
  1248. imaMenu = Toolkit.getDefaultToolkit().getImage(urlMenu);
  1249. graGrafico.drawImage(imaMenu, 0, 0, this);
  1250. // dibuja el botón back y lo pone visible
  1251. mbtBack.paint(graGrafico, this);
  1252. break;
  1253. }
  1254. case 4: { // se dibuja el acerca
  1255. urlMenu = this.getClass().getResource("Menus/menu6.png");
  1256. imaMenu = Toolkit.getDefaultToolkit().getImage(urlMenu);
  1257. graGrafico.drawImage(imaMenu, 0, 0, this);
  1258. // dibuja el botón back y lo pone visible
  1259. mbtBack.paint(graGrafico, this);
  1260. break;
  1261. }
  1262. case 5: { // se dibujan los puntajes
  1263. urlMenu = this.getClass().getResource("Menus/menu7.png");
  1264. imaMenu = Toolkit.getDefaultToolkit().getImage(urlMenu);
  1265. graGrafico.drawImage(imaMenu, 0, 0, this);
  1266. // dibuja el botón back y lo pone visible
  1267. mbtBack.paint(graGrafico, this);
  1268. break;
  1269. }
  1270. }
  1271. }
  1272.  
  1273. /**
  1274. * keyTyped
  1275. *
  1276. * Metodo sobrescrito de la interface <code>KeyListener</code>.<P>
  1277. * En este metodo maneja el evento que se genera al presionar una
  1278. * tecla que no es de accion.
  1279. *
  1280. * @param keyEvent es el <code>KeyEvent</code> que se genera en al
  1281. * presionar.
  1282. *
  1283. */
  1284. public void keyTyped(KeyEvent keyEvent) {
  1285. // no hay codigo pero se debe escribir el metodo
  1286. }
  1287.  
  1288. /**
  1289. * keyPressed
  1290. *
  1291. * Metodo sobrescrito de la interface <code>KeyListener</code>.<P>
  1292. * En este metodo maneja el evento que se genera al dejar presionada
  1293. * alguna tecla.
  1294. * Se cambia la direccion al presionar una tecla
  1295. *
  1296. * @param keyEvent es el <code>KeyEvent</code> que se genera en al
  1297. * presionar.
  1298. *
  1299. */
  1300. public void keyPressed(KeyEvent keyEvent) {
  1301. // si presiono la flecha arriba
  1302. if (keyEvent.getKeyCode() == KeyEvent.VK_UP) {
  1303. iDirectionMauro = 1;
  1304. }
  1305. // si presiono la flecha abajo
  1306. else if (keyEvent.getKeyCode() == KeyEvent.VK_DOWN) {
  1307. iDirectionMauro = 2;
  1308. }
  1309. // si presiono la flecha izquierda
  1310. else if (keyEvent.getKeyCode() == KeyEvent.VK_LEFT) {
  1311. iDirectionMauro = 3;
  1312. }
  1313. // si presiono la flecha derecha
  1314. else if (keyEvent.getKeyCode() == KeyEvent.VK_RIGHT) {
  1315. iDirectionMauro = 4;
  1316. }
  1317. }
  1318.  
  1319. /**
  1320. * keyReleased
  1321. * Metodo sobrescrito de la interface <code>KeyListener</code>.<P>
  1322. * En este metodo maneja el evento que se genera al soltar la tecla.
  1323. *
  1324. * @param keyEvent es el <code>KeyEvent</code> que se genera en al soltar.
  1325. *
  1326. */
  1327. public void keyReleased(KeyEvent keyEvent) {
  1328. // si presiono la flecha arriba
  1329. if (keyEvent.getKeyCode() == KeyEvent.VK_UP) {
  1330. iDirectionMauro = 0;
  1331. }
  1332. // si presiono la flecha abajo
  1333. else if (keyEvent.getKeyCode() == KeyEvent.VK_DOWN) {
  1334. iDirectionMauro = 0;
  1335. }
  1336. // si presiono la flecha izquierda
  1337. else if (keyEvent.getKeyCode() == KeyEvent.VK_LEFT) {
  1338. iDirectionMauro = 0;
  1339. }
  1340. // si presiono la flecha derecha
  1341. else if (keyEvent.getKeyCode() == KeyEvent.VK_RIGHT) {
  1342. iDirectionMauro = 0;
  1343. }
  1344. }
  1345.  
  1346. /**
  1347. * mouseClicked
  1348. *
  1349. * Metodo sobrescrito de la clase <code>MouseListener</code>.<P>
  1350. * En este metodo maneja el evento que se genera al clickear el mouse.
  1351. *
  1352. * @param mseEvent es el <code>MouseEvent</code> que se genera en
  1353. * al presionar.
  1354. *
  1355. */
  1356. public void mouseClicked(MouseEvent mseEvent) {
  1357. // no hay codigo pero se debe escribir el metodo
  1358. }
  1359.  
  1360. /**
  1361. * mousePressed
  1362. *
  1363. * Metodo sobrescrito de la clase <code>MouseListener</code>.<P>
  1364. * En este metodo maneja el evento que se genera al presionar el mouse.
  1365. *
  1366. * @param mseEvent es el <code>MouseEvent</code> que se genera en
  1367. * al presionar.
  1368. *
  1369. */
  1370. public void mousePressed(MouseEvent mseEvent) {
  1371. // no hay codigo pero se debe escribir el metodo
  1372. }
  1373.  
  1374. /**
  1375. * mouseReleased
  1376. *
  1377. * Metodo sobrescrito de la clase <code>MouseListener</code>.<P>
  1378. * En este metodo maneja el evento que se genera al soltar el mouse.
  1379. *
  1380. * @param mseEvent es el <code>MoseEvent</code> que se genera en
  1381. * al presionar.
  1382. *
  1383. */
  1384. public void mouseReleased(MouseEvent mseEvent) {
  1385. // variables que guardan la posición del mouse
  1386. iMouseX = mseEvent.getX();
  1387. iMouseY = mseEvent.getY();
  1388.  
  1389. /* Checa si el mouse colisiona con algún botón y cambia la variable de
  1390. menú a la adecuada.
  1391. */
  1392. if (mbtBack.intersectMouse(iMouseX, iMouseY)) {
  1393. iMenu = 1;
  1394. }
  1395.  
  1396. else if (mbtPlay.intersectMouse(iMouseX, iMouseY)) {
  1397. iMenu = 1;
  1398. iLevel = 1;
  1399. //define el tiempo que se tiene en el nivel 1
  1400. lTimerInitial = System.currentTimeMillis()+5000;
  1401.  
  1402. //se toca cancion nivel 1
  1403. sndLevel1Song.play();
  1404.  
  1405. //el juego no se ha perdido
  1406. bGameOver = false;
  1407.  
  1408. }
  1409. else if (mbtInstructions.intersectMouse(iMouseX, iMouseY)) {
  1410. iMenu = 2;
  1411. }
  1412. else if (mbtOptions.intersectMouse(iMouseX, iMouseY)) {
  1413. iMenu = 3;
  1414. }
  1415. else if (mbtAbout.intersectMouse(iMouseX, iMouseY)) {
  1416. iMenu = 4;
  1417.  
  1418. }
  1419. else if (mbtScores.intersectMouse(iMouseX, iMouseY)) {
  1420. iMenu = 5;
  1421.  
  1422. }
  1423. else if (mbtGameOverMenu.intersectMouse(iMouseX, iMouseY)) {
  1424. iMenu = 1;
  1425. iLevel = 0;
  1426. }
  1427. else if (mbtExit.intersectMouse(iMouseX, iMouseY)) {
  1428. System.exit(0);
  1429. }
  1430. }
  1431.  
  1432. /**
  1433. * mouseEntered
  1434. *
  1435. * Metodo sobrescrito de la clase <code>MouseListener</code>.<P>
  1436. * En este metodo maneja el evento que se genera cuando el mouse entra en
  1437. * el applet.
  1438. *
  1439. * @param mseEvent es el <code>MoseEvent</code> que se genera en
  1440. * al presionar.
  1441. *
  1442. */
  1443. public void mouseEntered(MouseEvent mseEvent) {
  1444. // no hay codigo pero se debe escribir el metodo
  1445. }
  1446.  
  1447. /**
  1448. * mouseExited
  1449. *
  1450. * Metodo sobrescrito de la clase <code>MouseListener</code>.<P>
  1451. * En este metodo maneja el evento que se genera cuando el mouse sale en
  1452. * el applet.
  1453. *
  1454. * @param mseEvent es el <code>MoseEvent</code> que se genera en
  1455. * al presionar.
  1456. *
  1457. */
  1458. public void mouseExited(MouseEvent mseEvent) {
  1459. // no hay codigo pero se debe escribir el metodo
  1460. }
  1461. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement