Cette machine pourtant française n'a pas eu le succès qu'elle méritait, bien plus fun qu'un thomson MO6 tout en étant aussi compléte, sa bibliotheque de soft à été un vrai frein, et le choix du forth en rom, plutot que le basic n'a pas aider... d'autant plus que le forth était disponible sur les plateforme thomson qui étaient le concurent le plus direct.
le langage forth est bien plus puissant et efficace que le basic, puisqu'il est évolutif 1 programme = 1 langage donc chaque programme est 100% spécifique.
et un petit bout de code pour donner l'exemple (une petite fusée qui monte et explose en vol 3 sprites donc (fuse/black/fin))
Notez l'élégance du sprite de la fusée (fuse) representé par des 1/2&3
Code : Tout sélectionner
4 base !
0000 0000
0000 0000
0000 0000
0000 0000
0000 0000
0000 0000
0000 0000
0000 0000
decimal 2 8 image black
4 base !
0001 1000
0001 1000
0011 1100
0021 1200
0022 2200
2222 2222
0001 1000
0003 3000
decimal 2 8 image fuse
4 base !
3000 0003
0003 0000
0000 0030
0303 0300
0003 3000
0000 0000
0000 0003
0300 3000
decimal 2 8 image fin
0 variable Y
/fin des mise en mémoire directes et debut du code
: efface-ecran
standard
page
;
: dessine-sprite
120 y @ 0 fuse
2 delay
120 y @ 0 black
;
: monte2-3lignes
y @ 3 + dup ! / monte de 3 lignes (y=y+3)
;
: explosion
120 225 0 fin
2 delay
120 225 0 black
;
: comptarebour
4 begin dup . 1- 10 delay 5 spaces dup 0 = until /compte à rebour
;
/le main code enfin peut commencer :
: decolage
0 y ! / ne pas oublier de forcer y a zero pour partir du bas.
comptarebour
cr
." D E C O L A G E !"
2 314 sound
1 delay
hush
efface-ecran
begin
dessine-sprite
monte2-3lignes
225 > until
2 216 sound
explosion / HUSTON ? NOUS AVONS UN PROBLEME
1 delay
hush
efface-ecran
special
;
decolage
un autre exemple : le tamagochi :
Code : Tout sélectionner
: agej+ ( compteur d'age en jours )
agej @ 365 = if
agea @ 1+ agea ! ( prendre 1 an )
0 agej !
then
agej @ 1+ agej !
;
[...............] etc [.......]
: faim+ faim @ 1+ faim ! ;
: mange
25 0 do
faim-
loop
4 0 do
fatigue+ ( ca fatigue la digestion )
loop
." Mange "
;
: affiche-stats
stat @ 1+ stat !
stat @ 10 > if
( n'afficher les stats que tous les 10 jours )
( pour faciliter la lisibilite )
cr ." STATS : "
affiche-age
cr ." Faim : " faim @ . ." Fatigue : " fatigue @ .
0 stat !
then
;
: mort?
faim @ 150 > if
1 mort !
cr cr ." M O R T ! de faim " cr
then
fatigue @ 150 > if
1 mort !
cr cr ." M O R T ! de fatigue " cr
then
agea @ 87 > if
( donner une limite pour eviter que le facteur aleatoire )
( ne puisse donner un resultat stupide )
( comme 5000 ans par exmeple )
1 mort !
cr cr ." M O R T ! de vieillesse " cr
then
;
: simu
reset ( vider la pile et les variables )
begin
mort @ 0 = if
sedeplace
agej+ ( 1 boucle = 1 jour )
2 0 do faim+ loop
2 0 do fatigue+ loop
agej @ 10 > if
2 0 do fatigue+ loop
2 0 do faim+ loop
then
agea @ 10 > if
( affaiblissement de la condition physique )
( selon l'age )
5 0 do fatigue+ loop
4 0 do faim+ loop
2 0 do sedeplace loop
then
agea @ 30 > if
15 0 do fatigue+ loop
6 0 do faim+ loop
sedeplace
then
faim @ 20 > if
sedeplace
mange
then
fatigue @ 50 > if
sedeplace
serepose
then
affiche-stats
mort?
( est on mort et si oui de quoi )
then
mort @ 0 > until
20 stat ! affiche-stats ( age atteint et autres stats )
reset ( vider la pile )
;
Code : Tout sélectionner
Age : 10 an(s) et 365 jour(s).
Faim : 4 Fatigue : 48 Se deplace Se deplace Se deplace Se deplace Mange Se deplace Se repose Se deplace Se deplace Se deplace Se deplace Mange Se deplace Se repose Se deplace Se deplace Se [......]
Se deplace Se deplace Mange Se deplace Se repose Se deplace Se deplace Se deplace Se deplace Mange Se deplace Se repose
STATS :
Age : 11 an(s) et 11 jour(s).
Faim : 107 Fatigue : 41 Se deplace Se deplace Se deplace Se deplace Mange Se deplace Se repose Se deplace Se deplace Se deplace Se deplace Mange Se deplace Se repose Se deplace Se deplace Se deplace Se deplace Mange Se deplace Se repose Se deplace Se deplace Se deplace Se deplace Mange Se deplace Se repose
M O R T ! de faim
STATS :
Age : 11 an(s) et 15 jour(s).
Faim : 155 Fatigue : 33 ok
un exemple avec un forth moderne :
Code : Tout sélectionner
#! /usr/bin/gforth
variable numero_ligne
variable hauteur_pyramide
variable nombre_de_blancs
: valorise_hauteur_pyramide 20 hauteur_pyramide ! ;
: valorise_numero_ligne_a_0 0 numero_ligne ! ;
: incremente_numero_ligne numero_ligne @ 1+ numero_ligne ! ;
: valorise_nombre_de_blancs hauteur_pyramide @ 1- nombre_de_blancs ! ;
: decremente_nombre_de_blancs nombre_de_blancs @ 1- nombre_de_blancs ! ;
: efface_ecran page ;
: passe_a_la_ligne_suivante cr ;
: dessine_les_blancs nombre_de_blancs @ 0 do ." " loop ;
: calcul_nombre_d_etoiles_et_dessine_les_etoiles numero_ligne @ 2 * 1+ 0 do ." *" loop ;
: compare_nombre_de_linges_faites_avec_hauteur_pyramide numero_ligne @ hauteur_pyramide @ 2 - ;
: init
efface_ecran
valorise_hauteur_pyramide
valorise_numero_ligne_a_0
valorise_nombre_de_blancs
passe_a_la_ligne_suivante
;
: pyramide
init
BEGIN
dessine_les_blancs
calcul_nombre_d_etoiles_et_dessine_les_etoiles
incremente_numero_ligne
decremente_nombre_de_blancs
passe_a_la_ligne_suivante
compare_nombre_de_linges_faites_avec_hauteur_pyramide > UNTIL
passe_a_la_ligne_suivante ;
pyramide bye