mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	* Added Monkey2 (extension .monkey2) example This compiles with the most up to date Monkey2 release (V1.1.06). * Sorting example in Monkey2 * Add files via upload * Gui example using the MojoX module
		
			
				
	
	
		
			186 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			186 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
 | 
						|
Namespace example
 | 
						|
 | 
						|
#rem
 | 
						|
multi
 | 
						|
line
 | 
						|
comment
 | 
						|
#end
 | 
						|
 | 
						|
#rem
 | 
						|
nested
 | 
						|
#rem
 | 
						|
multi
 | 
						|
line
 | 
						|
#end
 | 
						|
comment
 | 
						|
#end
 | 
						|
 | 
						|
'Importing a module pre-compile in the modules folder
 | 
						|
#Import "<mojo>"
 | 
						|
 | 
						|
'Setting search paths for namespaces
 | 
						|
Using mojo..
 | 
						|
Using std..
 | 
						|
 | 
						|
Const ONECONST:Int = 1
 | 
						|
Const TWOCONST := 2
 | 
						|
Const THREECONST := 3, FOURCONST:Int = 4
 | 
						|
 | 
						|
Global someVariable:Int = 4
 | 
						|
 | 
						|
Function Main()
 | 
						|
	'creating arrays
 | 
						|
	Local scores:Int[]= New Int[](10,20,30)
 | 
						|
	Local text:String[]= New String[]( "Hello","There","World" )
 | 
						|
	
 | 
						|
	' string type
 | 
						|
	Local string1:String = "Hello world"
 | 
						|
	Local string2:= "Hello world"
 | 
						|
	
 | 
						|
	' escape characers in strings
 | 
						|
	Local string4 := "~qHello World~q"
 | 
						|
	Local string5 := "~tIndented~n"
 | 
						|
	Local string6 := "tilde is wavey... ~~"
 | 
						|
	Print string4
 | 
						|
	Print string5
 | 
						|
	Print string6
 | 
						|
	
 | 
						|
	' string pseudofunctions
 | 
						|
	Print "       Hello World  ~n".Trim()    ' prints "Hello World" whithout whitespace
 | 
						|
	Print "Hello World".ToUpper()               ' prints "HELLO WORLD"
 | 
						|
 | 
						|
	' preprocessor keywords
 | 
						|
	#If __TARGET__ = "android"
 | 
						|
	'DoStuff()
 | 
						|
	#ElseIf __TARGET__ = "ios"
 | 
						|
	'DoOtherStuff()
 | 
						|
	#End
 | 
						|
	
 | 
						|
	' operators
 | 
						|
	Local a := 32
 | 
						|
	Local b := 32 ~ 0
 | 
						|
	b ~= 16
 | 
						|
	b |= 16
 | 
						|
	b &= 16
 | 
						|
	Local c := a | b
 | 
						|
	Print c
 | 
						|
	
 | 
						|
	'Creates a new Window class and starts the main App loop, using the Mojo module
 | 
						|
	New AppInstance
 | 
						|
	New GameWindow
 | 
						|
	App.Run()
 | 
						|
End
 | 
						|
 | 
						|
 | 
						|
'------------------------------------------ Class Examples ------------------------------------------
 | 
						|
 | 
						|
 | 
						|
'You can extend the Window class to customize its behavior
 | 
						|
Class GameWindow Extends Window
 | 
						|
	
 | 
						|
	Private
 | 
						|
	Field _spiral :Float[]
 | 
						|
	Field _circle :Float[]
 | 
						|
	
 | 
						|
	Public
 | 
						|
	Method New()
 | 
						|
		Super.New( "Test", 800, 600, WindowFlags.Resizable )
 | 
						|
	End
 | 
						|
	
 | 
						|
	'Properties can be used to create "read-only" values
 | 
						|
	Property Spiral:Float[]()
 | 
						|
		Return _spiral
 | 
						|
	End
 | 
						|
	
 | 
						|
	'Or to control what happens to a value when assigned
 | 
						|
	Property Circle:Float[]()
 | 
						|
		Return _circle
 | 
						|
	Setter( values:Float[] )
 | 
						|
		If( values.Length > 2 ) And	( values.Length Mod 2 = 0 )
 | 
						|
			_circle = values
 | 
						|
		Else
 | 
						|
			Print( "Circle values need to be an even number larger than 1" )	
 | 
						|
		End
 | 
						|
	End
 | 
						|
 | 
						|
	'Methods require a class instance. The keyword Self is optional when accessing fields and properties
 | 
						|
	'The method Window.OnRender is virtual, and can be overriden
 | 
						|
	'Width and Height are Propreties inherited from the Window class
 | 
						|
	Method OnRender( canvas:Canvas ) Override
 | 
						|
		RequestRender()
 | 
						|
		canvas.Clear( Color.DarkGrey )
 | 
						|
		canvas.Translate( Width/2.0, Height/2.0 )
 | 
						|
		canvas.Rotate( -Millisecs()/200.0 )
 | 
						|
		canvas.Color = New Color( 1, 0.8, 0.2 )
 | 
						|
		DrawLines( canvas, Spiral )
 | 
						|
		DrawLines( canvas, Circle, True )
 | 
						|
	End
 | 
						|
	
 | 
						|
	'This method is called whenever the window layout changes, like when resizing
 | 
						|
	Method OnLayout() Override
 | 
						|
		_spiral = CreateSpiral( 0, 0, Height/1.5, Height/1.5, 100 )
 | 
						|
		Circle = CreateCircle( 0, 0, Height/1.5, Height/1.5, 100 )	
 | 
						|
	End
 | 
						|
	
 | 
						|
	'Functions can be called without a GameWindow instance, like "Static Functions" in other languages.
 | 
						|
	Function DrawLines( canvas:Canvas, lines:Float[], closedShape:Bool = False )
 | 
						|
		For Local n := 0 Until lines.Length Step 2
 | 
						|
			Local l := lines.Length - 3
 | 
						|
			Local x0 := lines[n]
 | 
						|
			Local y0 := lines[n+1]
 | 
						|
			Local x1 := n<l? lines[n+2] Else (closedShape? lines[0] Else x0 )    'Conditional assignment, uses the "?" symbol to test a condition
 | 
						|
			Local y1 := n<l? lines[n+3] Else (closedShape? lines[1] Else y0 )
 | 
						|
			canvas.DrawLine( x0, y0, x1, y1 )
 | 
						|
		Next
 | 
						|
	End
 | 
						|
	
 | 
						|
	Function CreateSpiral:Float[]( x:Double, y:Double, width:Double, height:Double, sides:Int = 32, turns:Float = 3.0 )
 | 
						|
		Local stack := New Stack<Float>
 | 
						|
		Local radStep := (Pi*2.0)/Float(sides)
 | 
						|
		Local xMult := 0.0
 | 
						|
		Local yMult := 0.0
 | 
						|
		Local radiusX:Float = width/2.0
 | 
						|
		Local radiusY:Float = height/2.0
 | 
						|
		Local stepX:Float = radiusX / sides
 | 
						|
		Local stepY:Float = radiusY / sides
 | 
						|
		For Local a := 0.0 To Pi*2 Step radStep
 | 
						|
			stack.Push( ( ( Sin( a*turns ) * radiusX )* xMult ) + x ) 
 | 
						|
			stack.Push( ( ( Cos( a*turns ) * radiusY )* yMult ) + y )
 | 
						|
			xMult += stepX/radiusX
 | 
						|
			yMult += stepY/radiusY
 | 
						|
		Next
 | 
						|
		Return stack.ToArray()
 | 
						|
	End
 | 
						|
	
 | 
						|
	Function CreateCircle:Float[]( x:Double, y:Double, width:Double, height:Double, sides:Int = 32 )
 | 
						|
		Local stack := New Stack<Float>
 | 
						|
		Local radStep := (Pi*2.0)/Float(sides)
 | 
						|
		Local radiusX:Float = width/2.0
 | 
						|
		Local radiusY:Float = height/2.0
 | 
						|
		For Local a := 0.0 To Pi*2 Step radStep
 | 
						|
			stack.Push( ( Sin( a ) * radiusX ) + x )
 | 
						|
			stack.Push( ( Cos( a ) * radiusY ) + y )
 | 
						|
		Next
 | 
						|
		Return stack.ToArray()
 | 
						|
	End
 | 
						|
 | 
						|
End
 | 
						|
 | 
						|
'--------- extending with generics -----------------------------------------------------------------------------
 | 
						|
 | 
						|
Class MyList Extends List<Double>
 | 
						|
End
 | 
						|
 | 
						|
'--------- interfaces ------------------------------------------------------------------------------------------
 | 
						|
 | 
						|
Interface Computer
 | 
						|
  Method Boot ()
 | 
						|
  Method Process ()
 | 
						|
  Method Display ()
 | 
						|
End
 | 
						|
'
 | 
						|
Class PC Implements Computer
 | 
						|
End
 | 
						|
 |