Single Tech Games

Tutorial de Monkey Coder, haciendo el juego Pong O Parte 2

Para los que no leyeron el post anterior, estoy haciendo un juego para HTML5 pero que fácilmente podría ser compilado para Flash, PC o MAC, y con un poco mas de trabajo, Android, Windows Phone o IOS, la primera parte aquí.
Estuve revisando mi antiguo post y me di cuenta que no hubo mucho amor en el, fue más un: corran este código y les va a funcionar, aunque estaba bastante bien explicado igual creo que debí hacer un poco mas de esfuerzo, pero es que ahora estoy intentando terminar el juego que comencé y no tengo mucho tiempo, pero la verdad esto del marketing te absorbe el tiempo en demasía, bueno la pregunta sería: y tanto trabajo en marketing al final ¿Como te esta yendo?, primero lo malo:
Facebook-> Ciertamente no me he esforzado mucho en este tema y eso se puede reflejar en los unicos 3 “Me Gusta”, es un poco triste pero es la verdad, la unica campaña que hize fue un par de post aqui en el blog, después nada
Twitter-> Despues del disparo inicial ahora tengo 183 seguidores, no esta mal, aunque hay que considerar que muchos no hablan español, pero son un buen canal para pasar la voz sobre mi juego.
Blog-> Este creo que ha sido mi mayor trabajo y por ende mi mayor satisfacción, solo dejare que los numero hablen por mi:

estadisticas blog semanaestadisticas mes blog
Como verán, he subido de forma constante durante el año hasta un 394% Genial! luego les pasare algunos tips sobre como lo logre, en que falle y que me dio los mejores resultados, mi meta ahora es conseguir más gente todavía, ¿lo lograré? Con mucho esfuerzo y trabajo, ahora si lo bueno, la siguiente parte del tutorial de PONG O con detección de colisiones.
Parte 1, Colisiones entre la paleta del Jugador y la bola
Dejamos el juego antes chocando con las paredes pero nadie podía responder bueno es hora de que nosotros podamos responder, para esto creamos un método que detecte las colisiones, su base serán las coordenadas, es decir cuando la bola “invada” las coordenadas de la paleta, el método retornara True:

'Metodo para ver si la paleta del jugador colisiono con la bola
 Method CheckPaddleCollP:Bool()
   If bolaX > 625.0 Then 'Si la bola esta en una posicion X mayor a 625 (posicion de la paleta)
      'Si las coordenadas de Y de la bola esta entre la coordenadas de Y de la paleta
   	  If ((bolaY >= paletaY-25.0) And (bolaY <= paletaY+25.0)) Then
         Return True
      Endif
   Endif
   Return False
 End

Parte 2, Colisiones entre las paletas del Enemigo y la bola
Si recordaran del código anterior, tenemos 2 enemigos, no uno, entonces tenemos que crear una función que no solo devuelva si choco o no choco la bola con la paleta enemiga, también tiene que devolver con cual paleta choco, entonces el código iría así:

'Metodo para ver si la paleta del enemigo colisiono con la bola
 Method CheckPaddleCollE:Int()
  For Local i:Int = 0 To 1
		 'Si coordenada X la bola esta entre las coordenadas X de la paleta del enemigo
         If (bolaX > (enemigoX[i]-5)) And (bolaX < (enemigoX[i]+5)) Then
		    'Si coordenada Y la bola esta entre las coordenadas Y de la paleta del enemigo
		    If ((bolaY >= enemigoY[i]-25.0) And (bolaY <= enemigoY[i]+25.0)) Then
			   'Retornamos la posicion del array de la paleta enemiga
		       Return i
		    Endif
		 Endif
      Next
	  'Si no choco con nadie entonces devolvemos -1
      Return -1
   End

Parte 3, colocamos las funciones en el método UpdateGame
Es hora de probar nuestras nuevas funciones, para esto simplemente las llamamos y en caso sean True o tengan una numero mayor a -1 harán que el comportamiento de la bola cambie, se mueva en la otra dirección, todo esto dentro de la función UpdateGame:

  'Si hubo colision entre la paleta del jugador y la bola, y si la velocidad de la bola es mayor a 0
  '(bolaVelX > 0 = la direccion es de izquierda a derecha)
  If (CheckPaddleCollP() = True And bolaVelX > 0) Then
  	 bolaVelX *= -1 'Cambiamos la trayectoria del balon
	 'Si a la coordenada Y de la bola le restamos la coordenada Y de la paleta y es positivo
	 'Si la bola choco con la parte superior de la paleta y debe ir hacia arriba
  	 If ((bolaY - paletaY) > 7) Then bolaVelY = 1.5
	 'Al reves, la bola choco con la parte inferior de la paleta y debe ir hacia abajo
         If ((bolaY - paletaY) < -7) Then bolaVelY = -1.5
	 'Si choco la centro, entonces ira de frente
         If ((bolaY - paletaY) <= 7) And ((bolaY - paletaY) >= -7) Then bolaVelY = 0
      Endif
  'Recogemos la variable que contiene el numero de paleta enemiga que colisiono con la bola
  Local i:Int = CheckPaddleCollE()
 	  'Si hubo colision entre la paleta del enemigo y la bola, y si la velocidad de la bola es menor a 0
  '(bolaVelX < 0 = la direccion es de derecha a izquierda)
  If (i >=0 And bolaVelX < 0) Then
  	 bolaVelX *= -1 'Cambiamos la trayectoria del balon
	 'Si la bola choco con la parte superior de la paleta y debe ir hacia arriba
     If ((bolaY - enemigoY[i]) > 7) Then bolaVelY = 1.5
	 'Al reves, la bola choco con la parte inferior de la paleta y debe ir hacia
         If ((bolaY - enemigoY[i]) < -7) Then bolaVelY = -1.5
	 'Si choco la centro, entonces ira de frente
         If ((bolaY - enemigoY[i]) <= 7) And ((bolaY - enemigoY[i])>= -7)  Then bolaVelY = 0
      Endif

Parte 3, ahora los estados del juego
Todo juego tiene diferentes estados, los principales son estado de juego, pausa y terminado, para lograr este cometido en nuestro juego PONG O utilizaremos las 2 variables inicializadas en el primer tutorial, que son modoMensaje y modoJuego, si por ejemplo modoMensaje es cero entonces la maquina debería mostrar un mensaje, si en caso fuera 1 no lo debería hacer, en el modoJuego definimos hasta 3 variables, 0 es porque el juego va a iniciar, si es 1 es porque el juego esta funcionando y si es 2 es porque el juego acabo, y además crearemos 2 funciones que las actualicen:

'Metodo para iniciar el juego
 Method StartGame:Int()
	'Si el modoMensaje es 0 entonces mostramos el mensaje
 	If modoMensaje = 0 Then
        modoMensaje = 1	'Cambiamos el modo mensaje a no mostrar
        Print ("Presione P para iniciar")	'Imprimimos
     Endif
	'Si presiono la tecla P
     If KeyHit(KEY_P) Then
        modoMensaje = 0	'Cambiamos el modo mensaje a 0
        modoJuego = 1      'Modo = Modo Jugando
     Endif
     Return True
  End
'Metodo para Terminar el juego
 Method GameOver:Int()
'Si el modoMensaje es 0 entonces mostramos el mensaje
  If modoMensaje = 0 Then
	  modoMensaje = 1
      Print ("G A M E   O V E R")
		'Si el enemigo tiene puntos mayores o iguales a 10
       If puntosEnemigo >= 10 Then
          Print ("No llores! la computadora gano, quizas a la siguiente.")
       Else
          Print ("Felicitaciones, Ganaste! Debe ser tu dia de suerte.")
       Endif
       Print ("Presiona P para reiniciar el juego")
    Endif
	'Si presiono la tecla P
    If KeyHit(KEY_P) Then
		'Reiniciamos todos los datos
       puntosEnemigo = 0
       puntosJugador = 0
       Print (puntosEnemigo + ":" + puntosJugador)
       paletaY = 240.0
       bolaX = 320.0
       bolaY = 240.0
       bolaVelX = 3.5
       bolaVelY = 1.5
       enemigoY[0] = 240.0
       enemigoY[1] = 240.0
       modoMensaje = 0
		'Colocamos al modo juego como jugando
       modoJuego = 1
    Endif
    Return True
 End

Parte 4, solo nos queda reemplazar el método OnUpdate
Bueno ya solo nos queda eso y es bastante simple, solo utilizamos un Case:

 Method OnUpdate:Int()
	'Recogemos la variable modoJuego
     Select modoJuego
		'Si es cero
        Case 0
           StartGame()
		'Si es uno
        Case 1
           UpdateGame()
		'Si es dos
        Case 2
           GameOver()
     End
     Return True
  End

Ok eso fue todo para este tutorial, si no entendiste bien esto del tema de juegos, quizás te sea mejor ir por mis posts antiguos sobre desarrollo de juegos.
Comente en la primera parte del tutorial sobre PlayN y HaxeNME, la verdad es que me quede sin espacio ni tiempo, pero les dejare unos links que me parecieron interesantes, la única opinión que tengo después haber leído algunos posts en foros y blogs es que haxeNME es un poco difícil pero muy veloz y PLayN esta en pañales (vi un tutorial de la instalación y no parece fácil)  Lo más probable es que haga un pequeño tutorial acá también sobre PlayN en algún momento, pero no por ahora, me parece mucho más facil monkey, quizás como contra tenga que tienes que pagarlo, pero como plus es que tienes donde quejarte si tienes problemas, a diferencia de los anteriores que son de código libre.
http://blog.allanbishop.com/category/tutorial/
http://playn-2011.appspot.com/slides/index.html#1
Lo cierto es que ahora cualquier lenguaje puede ser multiplataforma, si eres desarrollador ActionScript y no tienes dinero para comprar la suite adobe puedes utilizar http://flashdevelop.org/ que te deja compilar para Android o IOS, osea que ahora hay mas herramientas para hacernos las cosas mucho más faciles, tiempos aquellos donde todo iba de cero, es por eso que la competencia ahora es brutal
Bueno les dejo el código de todo el juego en la siguiente pagina de este post, los veo pronto!
Suerte!

Páginas: 1 2

0 0 votes
Article Rating
Subscribe
Notify of
guest
4 Comments
Newest
Oldest Most Voted
Inline Feedbacks
View all comments
jfelixstudio

Hola Donde esta el codigo?

[…] Bueno primero y antes que cualquier cosa les digo que voy a utilizar el MonkeyCoder, específicamente el código resultante de este y este post. […]

[…] pidieron que hiciera un review del libro que les comente aquí, y del cual hice un tutorial aquí y aquí, bueno la verdad es que esta semana no tengo nada que postear ya que me la pase aprendiendo a […]