Single Tech Games

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

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
Import mojo
Class pongo Extends App
  Field paletaX:Float = 630.0
  Field paletaY:Float = 240.0
  Field bolaX:Float = 320.0
  Field bolaY:Float = 240.0
  Field bolaVelX:Float = 3.5
  Field bolaVelY:Float = 1.5
  Field enemigoX:Float[] = [5.0, 55.0]
  Field enemigoY:Float[] = [240.0, 240.0]
  Field enemigoVelY:Float[] = [-10.0, 5.0]
  Field puntosJugador:Int = 0
  Field puntosEnemigo:Int = 0
  Field modoJuego:Int = 0
  Field modoMensaje:Int = 0
 Method OnCreate:Int()
  SetUpdateRate(60)
  Return True
 End
 Method DrawPlayField:Int()
    DrawRect(0,0,640,5)
    DrawRect(0,475,640,5)
    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
         paletaY -= 5.0
         If paletaY < 25.0 Then paletaY = 25.0
      Endif
      If KeyDown(KEY_DOWN) Then
         paletaY += 5.0
         If paletaY > 455.0 Then paletaY = 455.0
      Endif
	  Return True
   End
   Method UpdateGame:Int()
      ControlPlayer()
	  ControlEnemies()
	  UpdateBall()
	  If (CheckPaddleCollP() = True And bolaVelX > 0) Then
	  	 bolaVelX *= -1
		 If ((bolaY - paletaY) > 7) Then bolaVelY = 1.5
         If ((bolaY - paletaY) < -7) Then bolaVelY = -1.5
         If ((bolaY - paletaY) <= 7) And ((bolaY - paletaY) >= -7) Then bolaVelY = 0
      Endif
	  Local i:Int = CheckPaddleCollE()
	  If (i >=0 And bolaVelX < 0) Then
	  	 bolaVelX *= -1
	     If ((bolaY - enemigoY[i]) > 7) Then bolaVelY = 1.5
         If ((bolaY - enemigoY[i]) < -7) Then bolaVelY = -1.5
		 If ((bolaY - enemigoY[i]) <= 7) And ((bolaY - enemigoY[i])>= -7)  Then bolaVelY = 0
      Endif
      Return True
   End
   Method ControlEnemies:Int()
      For Local i:Int = 0 To 1
         enemigoY[i] += enemigoVelY[i]
         If enemigoY[i] < 25.0 Then
            enemigoY[i] = 25.0
            enemigoVelY[i] *= -1
         Endif
         If enemigoY[i] > 455.0 Then
            enemigoY[i] = 455.0
            enemigoVelY[i] *= -1
         Endif
      Next
      Return True
   End
   Method UpdateBall:Int()
      bolaX += bolaVelX
      bolaY += bolaVelY
      If bolaY < 10.0 Then
         bolaY = 10.0
         bolaVelY *= -1
      Endif
      If bolaY > 470.0 Then
         bolaY = 470.0
         bolaVelY *= -1
      Endif
      If bolaX < 5.0 Then
         bolaX = 5.0
         bolaVelX *= -1
         puntosJugador += 1
         If puntosJugador >= 10 Then modoJuego = 2
         Print (puntosEnemigo + ":" + puntosJugador)
      Endif
      If bolaX > 635.0 Then
         bolaX = 635.0
         bolaVelX *= -1
         puntosEnemigo += 1
         If puntosEnemigo >= 10 Then modoJuego = 2
         Print (puntosEnemigo + ":" + puntosJugador)
      Endif
	  Return True
   End
 Method OnRender:Int()
	  Cls
      DrawPlayField()
      DrawRect(paletaX, paletaY-30, 5, 60)
      DrawRect(enemigoX[0], enemigoY[0]-30, 5, 60)
      DrawRect(enemigoX[1], enemigoY[1]-30, 5, 60)
      DrawCircle(bolaX, bolaY, 5)
      Return True
  Return True
 End
 Method CheckPaddleCollP:Bool()
   If bolaX > 625.0 Then
   	  If ((bolaY >= paletaY-25.0) And (bolaY <= paletaY+25.0)) Then
         Return True
      Endif
   Endif
   Return False
 End
 Method CheckPaddleCollE:Int()
  For Local i:Int = 0 To 1
         If (bolaX > (enemigoX[i]-5)) And (bolaX < (enemigoX[i]+5)) Then
		    If ((bolaY >= enemigoY[i]-25.0) And (bolaY <= enemigoY[i]+25.0)) Then
		       Return i
		    Endif
		 Endif
      Next
      Return -1
   End
 Method StartGame:Int()
 	If modoMensaje = 0 Then
        modoMensaje = 1
        Print ("Presione P para iniciar")
     Endif
     If KeyHit(KEY_P) Then
        modoMensaje = 0
        modoJuego = 1
     Endif
     Return True
  End
 Method GameOver:Int()
  If modoMensaje = 0 Then
	  modoMensaje = 1
      Print ("G A M E   O V E R")
       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
    If KeyHit(KEY_P) Then
       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
       modoJuego = 1
    Endif
    Return True
 End
 Method OnUpdate:Int()
     Select modoJuego
        Case 0
           StartGame()
        Case 1
           UpdateGame()
        Case 2
           GameOver()
     End
     Return True
  End
End
Function Main:Int()
 New pongo
 Return True
End

pong o juego final

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