simply and bugged arkanoid

Monkey Forums/Monkey Code/simply and bugged arkanoid

Matiaz(Posted 2014) [#1]
ehi guys i made a simply and bugged arkanoid portet on my old blitzmax try.
I use for test desktop output because im trying free version of monkey-x.
Dont insult me if its bugged, its just a test of some functions. Maybe usefull for someone!

here the code!

' Basic Monkey game structure:
Import mojo

Class Color
	Field red:Byte
	Field green:Byte
	Field blue:Byte
End

Class Paddle
   Field x:Float
   Field y:Float
   Field SizeX:Float
   Field SizeY:Float
End

Class Ball
   Field x:Float
   Field y:Float
   Field DirX:Float
   Field DirY:Float
   Field Size:Int
End

Function AllocateArray:Int[][]( i:Int, j:Int)
	Local arr:Int[][] = New Int[i][]
	For Local ind = 0 Until i
		arr[ind] = New Int[j]
	Next
	Return arr
End

Class Game Extends App
	
	Field PADDLEX:Int = 20
	Field PADDLEY:Int = 10
	Field BlockXOrigin:Int = 25
	Field BlockYOrigin:Int = 10
	Field Speed:Float = 0.5
	Field colonne:Int = 5
	Field righe:Int = 10
	
	Field Seed : Int
	
	Field pallina:Ball
	Field giocatore:Paddle
	Field score:Int
	Field level:Int
	Field total:Int
	'Field Grid:Int[colonne][righe]
	Field Grid:Int[][]

	Method OnCreate:Int ()
	'Seed = Millisecs()
	ResetLevel()
	SetUpdateRate 60
	Return 0
	End

	Method OnUpdate:Int()
	' Check the cursor keys (arrows) and adjust the x and y
	' positions according to which keys are being held:
	If KeyDown (KEY_LEFT) Then giocatore.x = giocatore.x-10
	if KeyDown (KEY_RIGHT) Then giocatore.x = giocatore.x+10
	If KeyDown (KEY_ESCAPE) Then EndApp()
	Aggiorna()
	PallinaControPaddle()
	ControlloPallinaMattoni
	Return 0
	End

	Method OnRender:Int ()
	' Cls clears the screen:
	Cls 0, 0, 0
	' DrawRect draws a rectangle at our x and y co-ordinates, which
	' were calculated in the OnUpdate method. The rectangle will
	' be 8 pixels wide and 8 pixels high:
	'DrawRect 10, 10, 8, 8
	Disegna()
	Return 0
	End
		
	' RESET LEVEL
	Method ResetLevel()
	total = 0
	score = 0
	level = 1
	
	pallina = New Ball
	giocatore = New Paddle
	
	Grid = AllocateArray(righe, colonne)
	For Local x = 0 To righe-1
	   For Local y = 0 To colonne-1
	  	 Grid[x][y] = 1
	   Next
	Next
			
	' Inizializzo il giocatore (in verita' inizializzo il paddle,posizione e grandezza)
	giocatore.SizeX = 75
	giocatore.SizeY = 15
	giocatore.x = (DeviceWidth()- giocatore.SizeX)/2
	giocatore.y = DeviceHeight()-50
	
	' Inizializzo la pallina
	pallina.x = DeviceWidth()/2
	pallina.y = DeviceHeight() - 200
	pallina.DirX = Rnd(1, 5) ' velocita' x
	pallina.DirY = -5 ' velocita' y
	pallina.Size = 10 ' grandezza della pallina
	
	End ' ResetLevel
		
	Method Disegna()	
		DrawRect(giocatore.x, giocatore.y, giocatore.SizeX, giocatore.SizeY)
		DrawOval(pallina.x, pallina.y, pallina.Size, pallina.Size)
		DisegnaMattoni()
		HUD()
		'DrawText ("Height " + DeviceHeight() , 10 ,10 )
		'DrawText ("Width " + DeviceWidth() , 10 ,20 )
	End
	
	Method HUD()
	If (score =5) Then
    	    	   level=level+1
	        	   pallina.DirX = pallina.DirX+ (level/5)
    	       	   score=0
        		   Endif
    DrawLine 0,455,640,455        		   
	SetColor 200,100,100         
	DrawText("Level: " + level,1,460)
	DrawText("Total: " + total,100,460)
	SetColor 255,255,255
	End	
	
	Method DisegnaMattoni()
		For Local x=0 To righe-1
	      For Local y=0 To colonne-1
    	     If (Grid[x][y]=1) Then
                     SetColor 255,0,0
                     DrawRect((x*60+BlockXOrigin),(y*30+BlockYOrigin),50,18)
                     End If
		      Next
		Next
	SetColor 255,255,255
	End
	
	Method PallinaControPaddle()
		If (pallina.x>=giocatore.x) And pallina.x<=(giocatore.x+giocatore.SizeX) And (pallina.y+pallina.Size)>= giocatore.y And pallina.y+pallina.Size<=giocatore.y+giocatore.SizeY Then
                     pallina.DirY=0-pallina.DirY
                     Endif
	End
		
	Method Aggiorna()
 	   If ((pallina.x>=640-pallina.Size Or (pallina.x<=0))) Then   
                                 pallina.DirX=0-pallina.DirX
                                 Endif   

	   If (pallina.y<=0) Then
                      pallina.DirY=0-pallina.DirY 
                   Endif         
   	   If ((giocatore.x>=640-giocatore.SizeX)) Then   
                                  giocatore.x = 640-giocatore.SizeX
                                  End If            
	   If ((giocatore.x<=0)) Then   
                    giocatore.x = 0
                     End If         
	   If (pallina.y>= (DeviceHeight()-pallina.Size-giocatore.SizeY )-15) Then
                              EndApp()
 
                              Endif
                        
		pallina.x= pallina.x + pallina.DirX
		pallina.y= pallina.y + pallina.DirY
	End 
	
	
	method ControlloPallinaMattoni()
		Local mattoni=0
		For Local x=0 To righe-1
		      For Local y=0 To colonne-1
		         If(Grid[x][y])=1 Then
                        mattoni=mattoni+1
        	            If Collisione(pallina,(x*60+BlockXOrigin),(y*30+BlockYOrigin),50,18) Then
                        				Grid[x][y]=0
                        				pallina.DirY=0-pallina.DirY 
                       					score=score+1
			                            total=total+1
                        End If
		         End If
      		 Next
	  Next	

	End 
	
	Method Collisione:Bool(pallina:Ball , x , y , SizeX, SizeY)
    	Local left1, left2
	    Local right1, right2
	    Local top1, top2
	    Local bottom1, bottom2

    	left1 = pallina.x
	    left2 = x
	    right1 = pallina.x + pallina.Size
	    right2 = x + SizeX
	    top1 = pallina.y
	    top2 = y
	    bottom1 = pallina.y + pallina.Size
	    bottom2 = y + SizeY

    	If (bottom1 < top2) Return False
	    If (top1 > bottom2) Return False

	    If (right1 < left2) Return False
    	If (left1 > right2) Return False

	    Return True
	End 

	Method HaiPerso()
		Cls
		DrawText "Mi dispiace hai perso!!!",300,250
		DrawText "Il tuo punteggio e' stato: " + total , 300, 270
		EndApp()
	End 
	
End ' class Game

Function Main ()
	New Game
End