Linguaggio ludico didattico
KPL ( Kid’s Programming Language) di Jonah Stagner, Jon Schwartz e Walt Morrison è stato rilasciato nell’agosto 2005, la versione successiva nell’ottobre 2006 è stata chiamataPhrogram.
KPL è nato per insegnare ai ragazzi la
programmazione, quindi vi predomina l’aspetto grafico, ludico e
l’orientamento allo sviluppo di giochi. E’ un linguaggio fortemente
tipizzato con sintassi simile al Basic. Integra un evoluto editor con controllo
immediato della sintassi. Dato lo scopo del linguaggio, esiste una ricca
dotazione di istruzioni per la grafica, sprites compresi; l’interazione con
l’utilizzatore è tuttavia limitata alla tastiera; come pure l’input output
è limitato a tastiera e video.
Phrogram versione 2.2 è una evoluzione di KPL,
accoglie il paradigma ad oggetti, accetta matrici a più dimensioni ed
ha una più ampia gestione della multimedialità (joystick, mouse, suoni) e
dell’I/O, peraltro limitato a files di testo.
I tipi di dato sono numeri interi e reali, booleani e stringhe; le strutture complesse le collections (matrici, liste, stack e code), records (structure) e oggetti (class).
Oltre al classico FOR variabile = inizio TO fine con eventuale STEP passo, esiste un semplice LOOP volte e WHILE condizione ... END WHILE.
Sono presenti metodi e funzioni, il method Main è obbligatorio ed indica l’inizio del programma.
Fra gli oggetti (class) predefiniti: Console, DateTime, Drawing, Mouse, Sprites. La Console ha metodi e proprietà che permettono di formattare l’output: font, dimensioni, stili, allineamento, ecc., ma è altra cosa dall’area screen su cui agiscono gli sprites ed i numerosi metodi grafici.
L’intercettazione degli eventi è semplice, come si può vedere dall’esempio sottostante, in cui un ciclo è interrotto dalla pressione di un tasto, ed al suo interno si intercetta la pressione del tasto del mouse e si rilevano le coordinate.
Program UFO
Method Main()
Define
MySprite As Sprite
MySprite.Load( "ufo.gif" )
MySprite.Show()
While
GetKey() = ""
If
LeftPressed Then
MySprite.MoveTo( MouseX, MouseY )
End If
End While
console.Bold = True
console.TextAlignment = "center"
console.WriteLine("See you later alligator")
showConsole()
End Method End Program |
L’oggetto Colors ha 140 nomi di colori, cui corrispondono 140 costanti (non RGB), anche il metodo GetColor, i cui parametri sono le componenti RGB, tenta di restituire uno dei 140 valori.
Le Collections hanno una gran varietà di metodi, sia generali, sia caratteristici del tipo di Collections. Nella classe Math, oltre agli usuali metodi, è presente l’interpolazione lineare e la conversione gradi - radianti e viceversa.
Non esiste ad oggi una classe di widgets per dotare Phrogram di interfaccia grafica, ma è aperto ai plugin; di base è dotato di una class WeatherBug per accedere, tramite Zip Code, ai parametri climatici di una zona.
L’esempio
che segue è stato generato, a parte le istruzioni per la grafica, tramite REFAL
(vedi par. 1.86
REFAL
) sulla base di un sorgente OMNITAB (vedi par. 1.64
OMNITAB
).
Program Omnitab
Method Main()
SetScreenSize(1000, 1000 )
Define Indx
As Integer
Define
NumPoints As Integer
Define
fIndx As Float
Define Sh As float[46,101]
SetWindowTitle("Condor Informatique - OMNITAB Emulator")
PrintLine("TAYLOR SERIES OF LN(1-X) WHERE |X| < 1") // NOSUMMARY // PREPARE X VALUES FROM -0.9 TO 0.9
fIndx = -0.9
NumPoints = 0
While
fIndx < 0.9
NumPoints = NumPoints+1
Sh[NumPoints,1] = fIndx
fIndx = fIndx + 0.05
End While // COMPLETE FIRST 6 POWERS OF X
For Indx
= 1 To
NumPoints
Sh[Indx,2] = Math.Power(Sh[Indx,1]
, 2.0)
Next
For Indx
= 1 To
NumPoints
Sh[Indx,3] = Math.Power(Sh[Indx,1]
, 3.0)
Next
For Indx
= 1 To
NumPoints
Sh[Indx,4] = Math.Power(Sh[Indx,1]
, 4.0)
Next
For Indx
= 1 To
NumPoints
Sh[Indx,5] = Math.Power(Sh[Indx,1]
, 5.0)
Next
For Indx
= 1 To
NumPoints
Sh[Indx,6] = Math.Power(Sh[Indx,1]
, 6.0)
Next // COMPLETE FIRST 6 ADDENDA OF TAYLOR SERIES
For Indx
= 1 To
NumPoints
Sh[Indx,2] = -0.5 * Sh[Indx,2]
Next
For Indx
= 1 To
NumPoints
Sh[Indx,3] = 0.3333333 * Sh[Indx,3]
Next
For Indx
= 1 To
NumPoints
Sh[Indx,4] = -0.25 * Sh[Indx,4]
Next
For Indx
= 1 To
NumPoints
Sh[Indx,5] = 0.2 * Sh[Indx,5]
Next
For Indx
= 1 To
NumPoints
Sh[Indx,6] = -0.1666667 * Sh[Indx,6]
Next // CALCULATE Y = LN(1-X)
For Indx
= 1 To
NumPoints
Sh[Indx,10] = Sh[Indx,6]+Sh[Indx,5]+Sh[Indx,4]+Sh[Indx,3]+Sh[Indx,2]+Sh[Indx,1]+0
Next
Shell.SetAlgebraCoordinates()
Define
Coeff As Decimal
= 200
Define
RedPencil As Pen
Define
GreenPencil As Pen
RedPencil.LineWidth = 1
RedPencil.Color = red
GreenPencil.Color = green
RedPencil.MoveTo(0,500)
RedPencil.DrawTo(0,-500)
RedPencil.MoveTo(500,0)
RedPencil.DrawTo(-500,0)
GreenPencil.MoveTo(Coeff*(Sh[1,1]+1),Coeff*Sh[1,10])
For Indx
= 2 To
NumPoints
GreenPencil.DrawTo(Coeff*(Sh[Indx,1]+1),Coeff*Sh[Indx,10])
Next
End Method End Program |