Wave's~ BlitzMax Tutorial for NG~ November, 2015 ~ Version 11
Beginners guide to BlitzMax 

Methods
A type can have more than Global, Const and Fields. It can have methods and functions. A method is usually an action of the Type, it could be FireShot() or Explode() or Turn() or Update(). The difference between a Type-Method and a Type-Function is that Methods use the Type itself and can therefore refer directly to a field which reduce code.
 
Type TWizard
  Field X, Y, Mana
  Method Teleport( X1, Y1 )
    X = X1
    Y = Y1

  End Method
End Type
 
The previous code is the same as the following:
Type TWizard
  Field X, Y, Mana
  Method Teleport( X, Y )
    Self.X = X
    Self.Y = Y
  End Method
End Type
 
We could also have used a function but then it would have looked like this:
Type TWizard
  Field X, Y, Mana
  Function Teleport( Wizard:TWizard, X, Y )
    Wizard.X = X
    Wizard.Y = Y

  End Function
End Type
 
The obvious gain of methods is that the type and its fields (the type that the method resides in) are available to the method. In functions we need to supply the type and to refer to the field of this type we need to use a handle, like Wizard.X instead of just X. To use a method we need an object. If we don't have any objects we can't reach the method. To call a method you use ObjectName.MethodName( Parameters,.. ), Example: MyWizard.Teleport( 50,50 )

I altered the previous Tank-example and added two methods, Draw() and Move():
Strict
Global Number_of_Tanks = 20
 
Type TankType 'Renamed from TTank to TankType
  Field X#,Y#
  Field Dir, Armor = 100
  Field Speed# = 0.2, Size = 25
  Global ModelName$ = "Delta 11"
 
  Method Draw()
    DrawRect( X, Y, Size, Size )
  End Method
  Method Move()
    X:+Speed*
Cos( Dir )
    Y:+Speed*
Sin( Dir )
  End Method
End Type
 
Graphics 800,600,0 'Windowmode this time
 
Global TankList:TList = CreateList()
 
For Local N = 1 To Number_of_Tanks
  Local NewTank:TankType
  NewTank = New TankType
  NewTank.Armor = Rand( 5 )*10 + 150
  NewTank.X = Rand( 5, 800 )
  NewTank.Y =
Rand( 5, 600 )
  NewTank.Dir = Rand( 0, 360 )
  TankList.AddLast( NewTank )
Next
 
While Not KeyDown(Key_Escape)
  Cls
 
  For Local Tank:TankType = EachIn TankList
    Tank.Draw()
    DrawText "Number of Tanks : "+TankList.Count(), 20, 20
    DrawText "Press ESC to exit", 20, 40 Tank.Move()
  Next
 
  Flip
Wend

There is a special method. The Method New() which is run each time you create an instance of that type.
 
To Index | Next Page page 10