Juego.as

  1. /*
  2.   Juego.as — Clip principal de Bomba Pum! — ProInf.net 2010
  3.  
  4.   Gestión del juego
  5. */
  6. package
  7. {
  8. import flash.display.*;
  9. import flash.events.*;
  10. import flash.geom.*;
  11.  
  12. import flash.text.TextField;
  13.  
  14. public class Juego extends MovieClip
  15. {
  16. // CONSTANTES ---------------------------------
  17.  
  18. // Se deja un margen de 5px
  19. public static const ANCHO:int = 790;
  20. public static const ALTO:int = 490;
  21.  
  22. // CONFIGURACIÓN ------------------------------
  23.  
  24. public var total:int; // Nº de pompas inicial
  25. public var lanzamientos:int; // Nº de clics por partida
  26.  
  27. public var pompas:Array = new Array();
  28.  
  29. // ESTADO -------------------------------------
  30.  
  31. private var cantidad:int; // Nº de pompas actual
  32. private var explotando:Boolean; // Si hay pompas en estado "on"
  33. private var jugando:Boolean; // Indica si el juego está en marcha
  34.  
  35. // INTERFAZ -----------------------------------
  36.  
  37. public function depurar (mensaje:String):void {
  38. depuracion.visible = true;
  39. depuracion.text = mensaje + "\n" + depuracion.text;
  40. }
  41.  
  42. // INICIO -------------------------------------
  43.  
  44. public function Juego() {
  45.  
  46. boton_nuevo.addEventListener(MouseEvent.CLICK, function() { nuevo(); });
  47.  
  48. raton.startDrag(true, new Rectangle(5, 5, ANCHO, ALTO));
  49. raton.visible = false;
  50.  
  51. jugando = false;
  52.  
  53. this.addEventListener(Event.ENTER_FRAME, animacion);
  54.  
  55. //stage.displayState = StageDisplayState.FULL_SCREEN;
  56.  
  57. depuracion.visible = false;
  58.  
  59. var url_swf:String = loaderInfo.url;
  60. Recursos.iniciar(url_swf);
  61. }
  62.  
  63. // EVENTOS ------------------------------------
  64.  
  65.  
  66. public function nuevo ():void {
  67. borrar();
  68. niveles.activar(false);
  69.  
  70. // Iniciar
  71. total = 50;
  72. lanzamientos = 9;
  73. niveles.configurar_juego(this);
  74.  
  75. // Pompas
  76. for (var i=0; i<total; ++i) {
  77. agregar(new Pompa());
  78. }
  79. niveles.configurar_pompas(this);
  80.  
  81. // Estado
  82. cantidad = total;
  83. explotando = false;
  84. jugando = true;
  85.  
  86. // Dígitos
  87. digitos_cantidad.valor = cantidad;
  88. digitos_lanzamientos.valor = lanzamientos;
  89. puntuar();
  90.  
  91. // Ratón
  92. raton.visible = true;
  93. raton.addEventListener(MouseEvent.CLICK, lanzar);
  94. }
  95.  
  96. private function lanzar (evento:MouseEvent):void {
  97.  
  98. if (lanzamientos > 0) {
  99. var pompa:Pompa = agregar(new Pompa());
  100. pompa.seleccionar();
  101. pompa.punto = new Point(espacio.mouseX, espacio.mouseY);
  102. pompa.estado = "on";
  103. digitos_lanzamientos.valor = --lanzamientos;
  104. }
  105. }
  106.  
  107. private function animacion (evento:Event):void {
  108. //var supervivientes:Array = new Array();
  109. explotando = false;
  110. for each (var pompa:Pompa in pompas) {
  111.  
  112. if (pompa.estado == "off") {
  113. pompa.animar();
  114. if (hay_colision(pompa)) {
  115. digitos_cantidad.valor = --cantidad;
  116. pompa.estado = "on";
  117. }
  118. }
  119. if (pompa.estado == "on") {
  120. explotando = true;
  121. }
  122. if (pompa.estado != "end") {
  123. //supervivientes.push(pompa);
  124. }
  125. }
  126. //pompas = supervivientes;
  127.  
  128. if (!cantidad || !lanzamientos) {
  129. raton.visible = false;
  130. if (jugando && !explotando) {
  131. finalizacion();
  132. }
  133. }
  134. puntuar();
  135. }
  136.  
  137.  
  138. // METODOS ------------------------------------
  139.  
  140. private function finalizacion():void {
  141. jugando = false;
  142. niveles.marcar();
  143. niveles.puntos = puntuar();
  144. niveles.activar(true);
  145. }
  146.  
  147. private function hay_colision(referencia:Pompa):Boolean {
  148. //for (var i:int=indice+1; i<pompas.length; ++i) { var pompa:Pompa = pompas[i];
  149. for each (var pompa:Pompa in pompas) {
  150.  
  151. if (pompa.estado == "on") {
  152. if (referencia.intersecta(pompa)) {
  153. return true;
  154. }
  155. }
  156. }
  157. return false;
  158. }
  159.  
  160. private function agregar(pompa:Pompa):Pompa {
  161. espacio.addChild(pompa);
  162. pompas.push(pompa);
  163. return pompa;
  164. }
  165.  
  166.  
  167. private function borrar ():void {
  168. for each (var pompa:Pompa in pompas) {
  169. espacio.removeChild(pompa);
  170. }
  171. pompas = new Array();
  172. }
  173.  
  174. private function puntuar():int {
  175. var puntos:int;
  176.  
  177. if (lanzamientos == 0) puntos = total - cantidad;
  178. else puntos = lanzamientos * total;
  179.  
  180. digitos_puntos.valor = puntos;
  181. return puntos;
  182. }
  183.  
  184. } // class Juego
  185.  
  186. } // package

Proinf.net