Niveles.as

  1. /*
  2.   Niveles.as — Conjunto de niveles a superar en el juego — ProInf.net 2010
  3.  
  4.   Gestión de todos los niveles del juego
  5. */
  6. package
  7. {
  8. import flash.display.*;
  9. import flash.events.*;
  10.  
  11. import flash.text.TextField;
  12.  
  13. public class Niveles extends MovieClip
  14. {
  15. // CONSTANTES ---------------------------------
  16.  
  17. private const NUM_NIVELES:int = 15;
  18.  
  19. // PROPIEDADES --------------------------------
  20.  
  21. private var actual:int; // Nivel actual
  22. private var niveles:Array; // Lista de cada uno de los niveles
  23. private var activado:Boolean; // Indica si el resumen del nivel está visible
  24.  
  25. // CONFIGURACION ------------------------------
  26.  
  27. private var datos = [ // total, lanzamientos, escala, limites, curvatura, velocidad
  28. /* 01 */ {tot:5, lanz:1, esc:4, lim:true, curv:1, vel:.5},
  29. /* 02 */ {tot:10, lanz:1, esc:3, lim:true, curv:1, vel:1},
  30. /* 03 */ {tot:20, lanz:2, esc:2, lim:true, curv:1, vel:1},
  31. /* 04 */ {tot:30, lanz:1, esc:2, lim:true, curv:2, vel:1},
  32. /* 05 */ {tot:40, lanz:5, esc:1, lim:false, curv:1, vel:1},
  33. /* 06 */ {tot:50, lanz:3, esc:1, lim:true, curv:4, vel:1},
  34. /* 07 */ {tot:50, lanz:9, esc:1, lim:false, curv:1, vel:1},
  35. /* 08 */ {tot:100, lanz:9, esc:.5, lim:true, curv:0, vel:.5},
  36. /* 09 */ {tot:50, lanz:9, esc:.5, lim:true, curv:1, vel:1},
  37. /* 10 */ {tot:50, lanz:5, esc:1, lim:false, curv:5, vel:1},
  38. /* 11 */ {tot:60, lanz:1, esc:1, lim:true, curv:0, vel:2},
  39. /* 12 */ {tot:60, lanz:9, esc:1, lim:false, curv:1, vel:1},
  40. /* 13 */ {tot:80, lanz:2, esc:1, lim:true, curv:1, vel:1},
  41. /* 14 */ {tot:100, lanz:1, esc:.9, lim:true, curv:1, vel:1},
  42. /* 15 */ {tot:130, lanz:1, esc:.8, lim:true, curv:1, vel:1}
  43. ];
  44.  
  45. public function configurar_juego (juego:Juego):void {
  46. with (datos[actual - 1]) {
  47. juego.total = tot;
  48. juego.lanzamientos = lanz;
  49. }
  50. }
  51. public function configurar_pompas (juego:Juego):void {
  52. with (datos[actual - 1]) {
  53. for each (var pompa:Pompa in juego.pompas) {
  54. pompa.escala = esc;
  55. pompa.config.limites = lim;
  56. pompa.config.curvatura = curv;
  57. pompa.config.velocidad = vel;
  58. }
  59. }
  60. }
  61.  
  62. function datos_como_texto():String {
  63. with (datos[actual -1]) {
  64. return "CONFIGURACIÓN:"+
  65. "\n total: "+tot+
  66. "\n lanzamientos: "+lanz+
  67. "\n escala: "+esc+
  68. "\n límites:"+lim+
  69. "\n curvatura: "+curv+
  70. "\n velocidad: "+vel;
  71. }
  72. }
  73.  
  74. // INTERFAZ -----------------------------------
  75.  
  76. public function marcar():void { // Nivel actual completado
  77. nivel(actual).marcar(true);
  78. }
  79.  
  80. public function set puntos (valor:int):void { // Puntos en el nivel actual
  81. nivel(actual).partida = valor;
  82. if (valor > nivel(actual).puntos) nivel(actual).puntos = valor;
  83. }
  84. public function get puntos ():int {
  85. return nivel(actual).puntos;
  86. }
  87.  
  88. public function total () { // Suma de puntos de todos los niveles
  89. var suma:int = 0;
  90. for each (var nivel:Nivel in niveles) suma += nivel.puntos;
  91. return suma;
  92. }
  93.  
  94. public function activar (valor:Boolean):void { // Mostrar/ocultar resumen del nivel
  95. activado = valor;
  96. texto.visible = valor;
  97. seleccionar(actual);
  98. }
  99.  
  100. public function siguiente_nivel():void {
  101. seleccionar(actual%NUM_NIVELES+1);
  102. }
  103.  
  104. // CONSTRUCTOR --------------------------------
  105.  
  106. public function Niveles() {
  107.  
  108. activado = true;
  109. niveles = new Array(NUM_NIVELES);
  110.  
  111. for (var i=1; i<=NUM_NIVELES; ++i) {
  112. var boton:Nivel = nivel(i);
  113. niveles.push(boton);
  114. boton.addEventListener(MouseEvent.CLICK, pulsar_boton);
  115. }
  116. texto.boton_nuevo.addEventListener(MouseEvent.CLICK, function () {
  117. (parent as Juego).nuevo();
  118. });
  119. texto.boton_siguiente.addEventListener(MouseEvent.CLICK, function () {
  120. siguiente_nivel();
  121. (parent as Juego).nuevo();
  122. });
  123.  
  124. actual = 1;
  125. seleccionar(1);
  126. }
  127.  
  128. // EVENTOS ------------------------------------
  129.  
  130. private function pulsar_boton (evento:MouseEvent):void {
  131. if (activado) {
  132. var peticion:int = evento.currentTarget.name.substr(5); // Elementos: "boton1", "boton2", ...
  133. seleccionar(peticion);
  134. }
  135. }
  136.  
  137. // PRIVADO ------------------------------------
  138.  
  139. private function seleccionar(indice:int):void { // Cambiar el nivel actual
  140. nivel(actual).seleccionar(false);
  141. nivel(indice).seleccionar(true);
  142. actual = indice;
  143. texto.gotoAndStop(indice);
  144.  
  145. texto.digitos_partida.valor = nivel(actual).partida;
  146. texto.digitos_puntos.valor = nivel(actual).puntos;
  147. texto.digitos_total.valor = total();
  148.  
  149. texto.salida.text = datos_como_texto();
  150. }
  151.  
  152. private function nivel(indice:int):Nivel { // Referencia a un clip de nivel
  153. return this["boton"+indice] as Nivel;
  154. }
  155.  
  156. } // class Niveles
  157.  
  158. } // package

Proinf.net