Single Tech Games

monkey single tech games

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

Dentro del mundo de desarrollo de videojuegos existe una nueva onda de lenguajes y/o herramientas que te permiten codificar una sola aplicación y correrla donde quieras, la oferta es grande, me imagino que la demanda así lo es también, tenemos desde comerciales hasta de código libre, yo actualmente desarrollo con LibGDX que te permite exportar tu juego en Java, Android y HTML5 (Aunque este todavía esta en sus fases iniciales) pero podemos encontrar otros como  Unity, ShiVa, etc. para una lista más grande pueden ver una lista hecha en wikipedia, es una lista de engines, también tenemos herramientas que te permiten codificar en un lenguaje conocido y exportar tu código a otro lenguaje, caso Mono, PLayN, etc. O lenguajes completamente nuevos que te permiten hacer lo mismo, caso Haxe, Monkey, etc.
Hoy hablare de Monkey y como hacer el juego Pong O en este lenguaje, este lenguaje, a diferencia de otros, es hecho exclusivamente para videojuegos en 2D, creado por Mark Sibly, es una prolongación, por decirlo de alguna manera, de BlitzMax, un lenguaje de programación hecho para crear videojuego en Windows o Mac, que a su vez es una mejora del primer lenguaje BlitzBasic que data desde el 2000, llama la atención que entre los desarrolladores de videojuegos indie, Blitz es bastante popular y ahora tenemos a Monkey, tiene un año de nacido pero tiene una comunidad interesante de desarrolladores, es obviamente un intento de mantener a sus leales desarrolladores de BlitzMax en la onda de los nuevos aparatos tecnológicos. Bueno sea como sea es una opción bastante interesante, es comercial, pero te deja crear videojuegos en HTML5 no comerciales completamente gratis, si pagas por monkey puedes compilar para Android, IOS, Flash, Windows Phone, Play Station, Windows y MAC,  pueden descargar el IDE aquí. Solo lo instalan y ya estas listo para comenzar, primero veamos la interfaz:

Parte 1: El IDE de Monkey
monkey Pantalla Inicial
La imagen fue bastante entendible, ya tenemos una idea de que significa cada botón principal del IDE
Parte 2: el Hola Mundo:

'Hola mundo (estos son los comentarios)
'La función main es la que comienza toda aplicación
Function Main()
'Muestra en pantalla
Print ("Hola Mundo")
'Toda función termina con un End
End

Eso fue bastante simple, solo copian el código al IDE y le dan Clic al botón “Build and Run”, automáticamente les aparecerá una pequeña pantalla donde deben elegir a que plataforma compilar, en este caso por ser la versión gratuita solo podemos elegir HTML5, se generara otra pantalla pequeña de tipo consola, lo que pasa es que esta cargando un servidor web pequeño, y después veran como su navegador predeterminado abre una pagina web similar a esta:
monkey hola mundo
Parte 3: Conceptos básicos del lenguaje:
Ahora les voy a dar un poco de código bien explicado para que comprendan los principios básicos del lenguaje, y con esos mismos principios haré el juego de Pong O:

'Asi importamos una librería
Import ejemplo
'Asi extendemos una clase
Class ejemplo Extends ClaseMaestra
''''''''''''''''''''''Variables''''''''''''''''''''''''''''''''
Field Entero:Int = 0    'Asi generamos una variable de tipo Integer
Field Variable:Float = 0.0   'Asi generamos una variable de tipo Float
Field Lista:Float[] = [0.0, 0.0] 'Asi generamos un array de tipo Float
''''''''''''''''''''''Metodos''''''''''''''''''''''''''''''''''
'Asi creamos una método
Method Metodo:Int()
'Siempre tienes que retornar algo
Return True
End
'Asi llamamos al método generado
Metodo()
'Este método sirve para dibujar rectángulos/Cuadrados usando 2 puntos como coordenadas
'DrawRect(X Inicial,Y Inicial,Ancho,Alto)
DrawRect(0,0,1,1)
'método para saber si una tecla fue presionada, devuelve true o false
KeyDown()
'método para limpiar la pantalla
Cls
''''''''''''''''''''''Sentencias'''''''''''''''''''''''''''''''
'Sentencia For que dice que i vale 1, va a ir hasta 10, de 2 en 2
For Local i:= 1 To 10 Step 2
Next
'Sentencia if
If Verdad Then      'Verdad es una condición
Endif

Parte 4: El juego PONG O
Bueno utilizando esos mismos principios dejare el código de la primera parte del juego completamente comentado línea por línea, solo faltaría la detección de colisiones, eso lo publicare en un siguiente post y comentare un poco de Haxe NME y PlayN, dos herramientas que me parecieron interesantes, si quieren aprender más sobre monkey pueden comprar el libro de la persona que desarrollo este código, aquí.

Strict
#rem
  Script:    Pongo.Monkey
  Descripcion:  Script de ejemplo del capitulo #2 de el libro "Monkey Game Development Beginners guide" de PacktPub
  Autor:     Michael Hartlef
  Traduccion:     Single Tech Games
  El Script original lo pueden encontrar en http://www.packtpub.com/article/2d-game-development-monkey
#end
'Vamos a usar el framework de mojo
Import mojo
'La clase App nos permite generar un aplicativo
Class pongo Extends App
'La posicion X e Y de la paleta
  Field paletaX:Float = 630.0   'Posicion X del lado derecho de la pantalla
  Field paletaY:Float = 240.0   'Posicion Y de la mitad de la pantalla
'La posicion X e Y de la bola
  Field bolaX:Float = 320.0   'Posicion X de la mitad de la pantalla
  Field bolaY:Float = 240.0   'Posicion Y de la mitad de la pantalla
  Field bolaVelX:Float = 3.5   'Velocidad X de la bola
  Field bolaVelY:Float = 1.5   'Velocidad Y de la bola
'La posicion X e Y para ambos enemigos, y la velocidad
  Field enemigoX:Float[] = [5.0, 55.0]   'Posicion X de ambas paletas
  Field enemigoY:Float[] = [240.0, 240.0]   'Posicion Y de ambas paletas
  Field enemigoVelY:Float[] = [-10.0, 5.0]   'Velocidad Y de ambas paletas
'En estas variables guardaremos el puntaje del juego, el modo en el que se encuentra el juego y la ayuda
  Field puntosJugador:Int = 0   'Puntos Jugador
  Field puntosEnemigo:Int = 0   'Puntos Enemigo
  Field modoJuego:Int = 0   'modoJuego 0=Inicio Juego, 1=Juego, 2=Juego Terminado
  Field modoMensaje:Int = 0   '0=mensaje puede ser mostrado
'Este metodo se ejecuta cuando llamamos por primera vez a la aplicación, sirve para cargar valores iniciales
 Method OnCreate:Int()
	'Codigo de inicio va aqui
  SetUpdateRate(60)
  Return True
 End
 Method DrawPlayField:Int()
    'dibujamos un rectangulo en la parte de arriba
    DrawRect(0,0,640,5)
    'uno en la parte de abajo
    DrawRect(0,475,640,5)
     'hacemos una linea media, 13 partes, cada una de 10 pixeles de longitud
    For Local i:= 5 To 465 Step 20
      DrawRect(318,i,4,10)
    Next
    Return True
  End
  Method ControlPlayer:Int()
      If KeyDown(KEY_UP) Then      'revisamos si la tecla "flecha arriba" ha sido presionada
         paletaY -= 5.0      'Restamos 5 pixeles de la posicion Y
         If paletaY < 25.0 Then paletaY = 25.0   'Si la paleta llega a la parte superior de la pantalla
      Endif
      If KeyDown(KEY_DOWN) Then   'revisamos si la tecla "flecha abajo" ha sido presionada
         paletaY += 5.0      'Sumamos 5 pixeles de la posicion Y
         If paletaY > 455.0 Then paletaY = 455.0   'Si la paleta llega a la parte inferior de la pantalla
      Endif
	  Return True
   End
   Method UpdateGame:Int()
      ControlPlayer()   'Controla la subida y bajada del jugador
	  ControlEnemies()  'Controla la subida y bajada de los enemigos
	  UpdateBall()      'Actualiza la posicion de la bola
      Return True
   End
   Method ControlEnemies:Int()
      For Local i:Int = 0 To 1		'Recorremos las listas que controlan al enemigo
         enemigoY[i] += enemigoVelY[i]   'Actualiza la posicion Y de las paletas
         If enemigoY[i] < 25.0 Then   'Si la paleta llega a la parte superior de la pantalla
            enemigoY[i] = 25.0
            enemigoVelY[i] *= -1      'La velocidad Y pasa a ser negativa
         Endif
         If enemigoY[i] > 455.0 Then   'Si la paleta llega a la parte inferior de la pantalla
            enemigoY[i] = 455.0
            enemigoVelY[i] *= -1      'La velocidad Y pasa a ser positiva
         Endif
      Next
      Return True
   End
   Method UpdateBall:Int()
      bolaX += bolaVelX		'Avanzamos en la posicion X de la bola
      bolaY += bolaVelY		'Avanzamos en la posicion Y de la bola
      If bolaY < 10.0 Then	'Si la bola llega a la parte superior de la pantalla
         bolaY = 10.0      	'Que se regrese a la posicion 10
         bolaVelY *= -1     'La velocidad Y pasa a ser negativa
      Endif
      If bolaY > 470.0 Then	'Si la bola llega a la parte inferior de la pantalla
         bolaY = 470.0      'Que se regrese a la posicion 470.0
         bolaVelY *= -1     'La velocidad Y pasa a ser positiva
      Endif
      If bolaX < 5.0 Then	'Si la bola llega a la parte izquierda de la pantalla
         bolaX = 5.0
         bolaVelX *= -1     'La velocidad X pasa a ser positiva
         puntosJugador += 1   	'Agregamos 1 a los puntos del jugador
         If puntosJugador >= 10 Then modoJuego = 2 	'Si el jugador llega a 10 puntos acabo el juego
         Print (puntosEnemigo + ":" + puntosJugador)	 	'Imprimimos en consola los puntos
      Endif
      If bolaX > 635.0 Then 'Si la bola llega a la parte derecha de la pantalla
         bolaX = 635.0
         bolaVelX *= -1     'La velocidad X pasa a ser negativa
         puntosEnemigo += 1   	'Agregamos 1 a los puntos del enemigo
         If puntosEnemigo >= 10 Then modoJuego = 2	'Si el enemigo llega a 10 puntos acabo el juego
         Print (puntosEnemigo + ":" + puntosJugador)	 	'Imprimimos en consola los puntos
      Endif
	  Return True
   End
'Aca se modifica el comportamiento del juego, lee las entradas de teclado, mouse, movimiento de jugadores, colisiones, etc.
 Method OnUpdate:Int()
	'Codigo de Juego va aqui
	UpdateGame()
  Return True
 End
'Aca es donde todo se dibuja en pantalla, escenarios, fondo, sprites, etc
 Method OnRender:Int()
	'Codigo de dibujado va aqui
	  Cls      'limpiamos la pantalla en cada frame
      DrawPlayField()   'llamamos al metodo DrawPlayField
      DrawRect(paletaX, paletaY-30, 5, 60)   'Dibujamos la paleta del jugador
      DrawRect(enemigoX[0], enemigoY[0]-30, 5, 60)   'Dibujamos la primera paleta del enemigo
      DrawRect(enemigoX[1], enemigoY[1]-30, 5, 60)   'Dibujamos la segunda paleta del enemigo
      DrawCircle(bolaX, bolaY, 5)   'Dibujamos una bola con un radio de 5
      Return True
  Return True
 End
End
'Funcion Principal que hará funcionar todo el codigo atras escrito
Function Main:Int()
 New pongo
 Return True
End

monkey PongLa segunda parte del tutorial y todo el codigo fuente lo pueden encontrar aqui.

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

[…] que hice un pequeño tutorial sobre cómo hacer un juego en MonkeyCoder y se exportaba a HTML5, bueno pues utilizaremos el mismo código fuente que se […]

[…] cosa les digo que voy a utilizar el MonkeyCoder, específicamente el código resultante de este y este […]

[…] me 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 […]