elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Mejorar código de juego de naves.
0 Usuarios y 9 Visitantes están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Mejorar código de juego de naves.  (Leído 33 veces)
Tachikomaia


Desconectado Desconectado

Mensajes: 1.754


Hackentifiko!


Ver Perfil
Mejorar código de juego de naves.
« en: Hoy a las 09:50 »

Imagen para dar mejor contexto:


Tiene más errores de los que veo, según una IA.

Por ejemplo:

- Al destruir a un enemigo, puede que se destruya otro debido a un error. Desde que puse esto al final
LdeProfundidadesDisponibles.push(LdeProfundidadesDisponibles.length+1);

- El mecanismo de agregar enemigos parece estar funcionando mal, es como que el máximo siempre es 10, pero debería aumentar. Creo que se requiere la línea esa que mencioné, pero no sirvió parece.

- En el loop de mover enemigos, puede que se apliquen acciones a enemigos inexistentes. Habría que asignarles nombres mejor, pero la idea de usar los números finales (de la lista de profundidades disponibles) me la había dado una IA.

- Una IA insiste en que mi método de chequear colisiones puede mejorarse, en el sentido de que se puede hacer break antes o algo así. Le dije que si un disparo toca un área de un enemigo eso no significa que deba ser eliminado aún, pues otra área podría estar tocando al jugador, hay que revisar todas las áreas. Dice que entonces revise 1ero las áreas del jugador. Le digo que hago todo en un mismo loop, sino tendría que usar 2 (revisar si área 1 toca al jugador, si área 2, 3, luego otro loop: Revisar si área 1 toca al disparo, si área 2...), pero sigue insistiendo no sé qué, es tanto entrevero que ni mirar quiero.

Código
  1. fscommand ("fullscreen", "true");
  2. // //////////////////////////////////////////////
  3. // //////////////////  mAvatar  //////////////////
  4. // //////////////////////////////////////////////
  5. // Disparos suyos en pantalla:
  6. AvatarShots = 0;
  7. attachMovie("sGalaxianShip", "mAvatar", 0);
  8. mAvatar._x = 160;
  9. mAvatar._y = 230;
  10. // Para que las áreas de contacto no se vean:
  11. Area = 0;
  12. do {
  13. Area++;
  14. mAvatar["Area"+Area]._visible = false;
  15. } while (Area<8);
  16. delete Area;
  17. AvatarSpeed = 0.75;
  18. function ControlAvatar () {
  19. if (Key.isDown(37)) {
  20. // Izquierda:
  21. mAvatar._x = Math.max(13, mAvatar._x-AvatarSpeed);
  22. } else if (Key.isDown(39)) {
  23. // Derecha:
  24. mAvatar._x = Math.min(307, mAvatar._x+AvatarSpeed);
  25. }
  26. if (Key.isDown(83) && AvatarShots == 0) {
  27. // S, shot:
  28. AvatarShots = 1;
  29. attachMovie("sGalaxianShot", "mAvatarShot", 1000);
  30. mAvatarShot._x = mAvatar._x;
  31. mAvatarShot._y = mAvatar._y-10;
  32. mAvatar.gotoAndStop(2);
  33. }
  34. }
  35. // /////////////////////////////////////////////
  36. // //////////////////  Shots  //////////////////
  37. // /////////////////////////////////////////////
  38. function MoveShots () {
  39. if (AvatarShots>0) {
  40. mAvatarShot._y = mAvatarShot._y-2;
  41. if (mAvatarShot._y<-2) {
  42. AvatarShots = 0;
  43. mAvatarShot.removeMovieClip();
  44. mAvatar.gotoAndStop(1);
  45. }
  46. }
  47. }
  48. // //////////////////////////////////////////////
  49. // /////////////////  Enemigos  /////////////////
  50. // //////////////////////////////////////////////
  51. // Cuando llega a 100 puede que se inserte un enemigo:
  52. EnemigosTurn = 0;
  53. // Determina qué tan rápido aumenta EnemigosTurn y...
  54. // la máxima cantidad de enemigos:
  55. EnemigosRate = 10;
  56. MinEnemigoSpeed = 0.1;
  57. // MaxEnemigoSpeed = 0.2;
  58. EnemigosBestEffect = 0;
  59. EnemigosMinEffect = 0;
  60. // EnemigosMaxEffect = 0;
  61. EnemigosIA = 0;
  62. // Para saber qué depth asignar cuando se debe insertar un enemigo:
  63. LdeProfundidadesDisponibles = [];
  64. do {
  65. LdeProfundidadesDisponibles.push(LdeProfundidadesDisponibles.length+1);
  66. } while (LdeProfundidadesDisponibles.length<EnemigosRate);
  67. function AddEnemigos () {
  68. EnemigosTurn = EnemigosTurn+EnemigosRate;
  69. while (LdeProfundidadesDisponibles.length>0 && EnemigosTurn>=100) {
  70. EnemigosTurn = EnemigosTurn-100;
  71. // Se le asigna la última profundidad disponible porque...
  72. // asignar la 1era implica mover hacia ella a las posteriores:
  73. LastProfundidadDisponible = LdeProfundidadesDisponibles[LdeProfundidadesDisponibles.length-1];
  74. Name = "mEnemigo"+LastProfundidadDisponible;
  75. attachMovie("sDKBarril", Name, LastProfundidadDisponible);
  76. // Referencia más directa:
  77. Name = _root[Name];
  78. Name._x = Math.random()*320;
  79. // Para zigzaguear:
  80. Name.MinX = Name._x-Math.random()*EnemigosRate;
  81. Name.MaxX = Name._x+Math.random()*EnemigosRate;
  82. Name._y = -50;
  83. // ojo esto depende del tipo de enemigo
  84. Name.Area1._visible = false;
  85. Name.Area2._visible = false;
  86. Name.Area3._visible = false;
  87. Name.SpeedX = Math.random()*MinEnemigoSpeed*(random(2)*2-1);
  88. Name.SpeedY = Math.random()*MinEnemigoSpeed+MinEnemigoSpeed;
  89. // Borra el último elemento de la lista:
  90. LdeProfundidadesDisponibles.pop();
  91. }
  92. }
  93. function MoveEnemigos () {
  94. EnemigoaMover = 0;
  95. while (EnemigoaMover<EnemigosRate) {
  96. EnemigoaMover++;
  97. Name = _root["mEnemigo"+EnemigoaMover];
  98. Name._x = Name._x+Name.SpeedX;
  99. if (Name._x<-50 or Name._x>370) {
  100. removeMovieClip ("mEnemigo"+EnemigoaMover);
  101. LdeProfundidadesDisponibles.push(EnemigoaMover);
  102. } else {
  103. if (Name._x<Name.MinX) {
  104. Name._x = Name.MinX;
  105. Name.SpeedX = Name.SpeedX*-1;
  106. } else if (Name._x>Name.MaxX) {
  107. Name._x = Name.MaxX;
  108. Name.SpeedX = Name.SpeedX*-1;
  109. }
  110. Name._y = Name._y+Name.SpeedY;
  111. if (Name._y>290) {
  112. removeMovieClip ("mEnemigo"+EnemigoaMover);
  113. LdeProfundidadesDisponibles.push(EnemigoaMover);
  114. } else {
  115. // Se verá si un área enemiga toca algo relevante:
  116. TocaDisparo = "No";
  117. NroDeAreaEnemiga = 1;
  118. do {
  119. AreaaChequear = Name["Area"+NroDeAreaEnemiga];
  120. // Al avatar (a alguna de sus áreas):
  121. NroDeAreaDeAvatar = 1;
  122. do {
  123. if (mAvatar["Area"+NroDeAreaDeAvatar].hitTest(AreaaChequear) == true) {
  124. trace ("NroDeAreaEnemiga "+NroDeAreaEnemiga+" tocó "+NroDeAreaDeAvatar);
  125. // Game over:
  126. NroDeAreaDeAvatar = 9;
  127. NroDeAreaEnemiga = 4;
  128. gotoAndStop (3);
  129. }
  130. NroDeAreaDeAvatar++;
  131. } while (NroDeAreaDeAvatar<9);
  132. // Al disparo del avatar:
  133. if (mAvatarShot.hitTest(AreaaChequear) == true) {
  134. trace ("NroDeAreaEnemiga "+NroDeAreaEnemiga+" tocó "+mAvatarShot);
  135. TocaDisparo = "Sí";
  136. }
  137. NroDeAreaEnemiga++;
  138. } while (NroDeAreaEnemiga<4);
  139. if (TocaDisparo == "Sí") {
  140. removeMovieClip ("mEnemigo"+EnemigoaMover);
  141. LdeProfundidadesDisponibles.push(EnemigoaMover);
  142. EnemigosRate++;
  143. MinEnemigoSpeed = MinEnemigoSpeed+0.01;
  144. LdeProfundidadesDisponibles.push(LdeProfundidadesDisponibles.length+1);
  145. }
  146. }
  147. }
  148. }
  149. }


« Última modificación: Hoy a las 09:57 por Tachikomaia » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
JUEGO NAVES MULTIJUGADOR
Juegos y Consolas
Zakt 1 3,139 Último mensaje 3 Diciembre 2006, 16:10 pm
por Division-x
Mi juego de naves en Java « 1 2 »
Java
Pakiyopgd 17 19,683 Último mensaje 26 Enero 2010, 22:52 pm
por Pakiyopgd
Pequeño juego de naves:
Programación C/C++
Error 404: 2 9,853 Último mensaje 11 Diciembre 2014, 20:20 pm
por Error 404:
Juego de naves VBScript + HTA.
Scripting
John1Connor 2 3,770 Último mensaje 23 Junio 2015, 08:55 am
por тαптяα
Juego naves error código
Programación C/C++
Luffy97 3 4,502 Último mensaje 15 Marzo 2016, 10:18 am
por Luffy97
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines