// cfg2000fr_syracuse_v1.js
// Tout ce qui suit un double slash sont des commentaires, jusqu'à la fin de la ligne.
/*
Les blocs de lignes commençant par 'slash étoile' et terminant par 'étoile slash' sont des commentaires
Ceci est un fichier de configuration, qui permet de définir :
° la toolbox = l'ensemble des blocs disponibles
° la startblocs = les blocs présents au départ
° la définition des cases
° la définition des cartes présentes
° les fenêtres visibles et cachées
° la position des fenêtres
° la taille des fenêtres
° divers autres paramètres.
Ce fichier de configuration est un programme écrit en javascript.
Ceci rend la configuration très souple et puissante.
Il n'est pas nécessaire de tout comprendre pour prendre un fichier de configuration existant,
faire quelques modification et obtenir ainsi un nouveau fichier de fonfiguration.
Voir le fichier : bglibrary_frame_card.js pour des paramètres. En particulier :
° gloCanvas, qui est de type : OneCanvas()
° glaoFrames, qui est un tableau d'éléments de type : OneFrame()
° Le nombre de cases (cadres, Frames) va de 0 à glnFramesMax
La case n° 0 est en dehors de la fenêtre. Elle sert à faire disparaître ou apparaître des cartes.
° glaoTexts, qui est un tableau d'éléments de type : OneTextMemory()
Ses indices vont de 0 à 9 (MAX_TEXT_MEMORY-1).
Il sert à afficher du texte dans le jeu de cartes.
*/
//-------------------------------------------------
/*
Exemple de configuration de base.
° Une ToolBox avec tous les blocs disponibles, les blocs de programme disponibles.
° Un exemple de StartBlocks, les blocs présents au départ.
° Aucune carte n'est présente, les cartes ne sont pas manipulables.
° Présente le proglème de Syracuse
° Définition de paramètres.
° Définition des fenêtres visibles et cachées, de leurs tailles et positions.
*/
// ########################################################################################
function confToolBoxInit() {
//==========================
// Définition de la toolbox utilisée.
// La moindre erreur fait que la nouvelle toolbox est ignorée.
// Tous les blocs possibles sont disponibles ici.
// Pour un autre fichier de configuration, on peut tout copier,
// puis effacer les blocs non désirés.
// La toolbox sera constituée de différentes blocs.
var strToolbox =
'\n'
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n 10'
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n 1'
+'\n '
+'\n '
+'\n '
+'\n '
+'\n 10'
+'\n '
+'\n '
+'\n '
+'\n '
+'\n 1'
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n 123'
+'\n '
+'\n '
+'\n '
+'\n '
+'\n 1'
+'\n '
+'\n '
+'\n '
+'\n '
+'\n 1'
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n 9'
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n 45'
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n 0'
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n 3.1'
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n 64'
+'\n '
+'\n '
+'\n '
+'\n '
+'\n 10'
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n 50'
+'\n '
+'\n '
+'\n '
+'\n '
+'\n 1'
+'\n '
+'\n '
+'\n '
+'\n '
+'\n 100'
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n 1'
+'\n '
+'\n '
+'\n '
+'\n '
+'\n 100'
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n 1'
+'\n '
+'\n '
+'\n '
+'\n '
+'\n 1'
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n abc'
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n {textVariable}'
+'\n '
+'\n '
+'\n '
+'\n '
+'\n abc'
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n {textVariable}'
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n {textVariable}'
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n abc'
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n abc'
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n abc'
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n 1.5'
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n 1.5'
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n 123'
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n 5'
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n {listVariable}'
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n {lCOMMENTistVariable}'
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n {listVariable}'
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n {listVariable}'
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n ,'
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n'
+'\n';
// Change le contenu de la toolbox, pour donner la possibilité d'avoir une fonction.
gloB.demoWorkspace.updateToolbox(strToolbox);
} // confToolBoxInit
function confStartBlocksInit() {
//==============================
// Définition des blocs présents au départ
// C'est long mais simple à faire.
// On :
// ° place les blocs désirés dans ex2000.html
// ° Fichiers enregistrer sous ...
// ° demande de voir le fichier dans un éditeur de texte.
// ° fait un copier-coller du texte.
// ° ajoute des +'\n' en début de chaque ligne (sauf la première)
// ° ajoute des ' en fin de ligne.
//return; // Ne fait rien, pour des tests.
gloB.demoWorkspace.clear(); // Enlève tous les blocs, c.f. : https://developers.google.com/blockly/reference/js/Blockly.WorkspaceSvg#cleanUp
var strText =
''
+'\n '
+'\n x'
+'\n '
+'\n '
+'\n '
+'\n '
+'\n Problème de Syracus.'
+'\n '
+'\n '
+'\n '
+'\n '
+'\n x'
+'\n '
+'\n '
+'\n 7'
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n WHILE'
+'\n '
+'\n '
+'\n GT'
+'\n '
+'\n '
+'\n x'
+'\n '
+'\n '
+'\n '
+'\n '
+'\n 1'
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n EVEN'
+'\n '
+'\n '
+'\n x'
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n x'
+'\n '
+'\n '
+'\n DIVIDE'
+'\n '
+'\n '
+'\n x'
+'\n '
+'\n '
+'\n '
+'\n '
+'\n 2'
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n x'
+'\n '
+'\n '
+'\n ADD'
+'\n '
+'\n '
+'\n MULTIPLY'
+'\n '
+'\n '
+'\n x'
+'\n '
+'\n '
+'\n '
+'\n '
+'\n 3'
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n 1'
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n 0.5'
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n La valeur vaut : '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n x'
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n '
+'\n'
+'\n';
var xml = Blockly.Xml.textToDom(strText);
Blockly.Xml.domToWorkspace(xml, gloB.demoWorkspace);
} // confStartBlocksInit
function confParamInit() {
//========================
// Définition de certains paramètres
// Si on enlève les commentaires.
// Change le fond de la fenêtre d'affichage ou de code Javascript ou Python ou Lua ou d'affichage des variables
//document.getElementById('idDisplayTextArea').style.backgroundColor = 'rgb(200, 255, 255)';
//document.getElementById('idCodeJavascriptTextArea').style.backgroundColor = 'rgb(200, 255, 255)';
//document.getElementById('idCodePythonTextArea').style.backgroundColor = 'rgb(200, 255, 255)';
//document.getElementById('idCodeLuaTextArea').style.backgroundColor = 'rgb(200, 255, 255)';
//document.getElementById('idVariableSpyTextArea').style.backgroundColor = 'rgb(200, 255, 255)';
// Ne pas changer ici. document.getElementById('idFrameCardsCanvas').style.backgroundColor = 'rgb(200, 255, 255)'; // c.f. gloCanvas.backgroundColor
// Exemple de changement de position et dimension de fenêtres
// function window_config(idWin, nVisible, nPosX, nPosY, nWidth, nHeight) définit dans : ex2000.js
// idWin est une référence à la fenêtre à modifier.
// nVisible == 1 pour être visible ; == 0 pour être caché ; autre => ne change pas la visibilité
// Positions et dimensions en pixels. -9999 => reste inchangé.
// dimension <= 0 => reste inchangé
window_config('idDisplay', 1, -9999, -9999, 0, 0); // Fenêtre d'affichage
window_config('idCodeBlockly', -1, -9999, -9999, 0, 0); // Fenêtre Blockly, tout reste inchangé
window_config('idCodeJavascript', -1, -9999, -9999, 0, 0); // Fenêtre Javascript, tout, reste inchangé
window_config('idCodePython', -1, -9999, -9999, 0, 0); // Fenêtre Python
window_config('idCodeLua', 1, -9999, -9999, 0, 0); // Fenêtre Lua, fenêtre cachée, reste inchangé
window_config('idVariableSpy', 1, -9999, -9999, 0, 0); // Fenêtre des valeurs de variables cachée,
window_config('idFrameCards', 0, 760, 80, 400, 600); // Fenêtre du jeu de cartes, cachée
} // confParamInit
function confFramesInit() {
//=========================
// Initialisation des cadres
// Ne fait rien.
} // confFramesInit
function confCardsInit() {
//========================
// Ne place aucune carte
} // confCardsInit
function confMessageBegin() {
//===========================
// Permet d'afficher un message au départ,
// que l'on peut revoir en cliquant sur le point d'interrogation
// Si on en veut aucun, on peut laisser cette fonction vide,
// ou ne pas l'appeler ci-dessous.
// insert un espace
//
insert un retour à la ligne
// .. pour mettre du texte en gras
// toutes les balises HTML sont acceptée, y compris les styles CSS.
// Consultez le code source du fichier "ex2000.html" pour d'autres "id"
// permettant de faire d'autres modifications depuis ici.
// Change le contenu de la fenêtre "A'de..."
document.getElementById('HTML_MAIN_TITLE2').innerHTML =
" Exemple : Le proglème de Syracuse.
"
+ "
" //
est une balise pour sauter une ligne. Toutes la synthaxe HTML est disponible.
+ " On part d'un nombre entier positif.
"
+ " ° S'il est pair, on le remplace par sa moitié.
"
+ " ° S'il est impair, on le remplace par 1 + son triple.
"
+ " On recommence, jusqu'à obtenir le nombre 1.
"
+ "
"
+ " Questions :
"
+ " ° Le programme s'arrêtera-t-il une fois ?
"
+ " ° Quelle nombre maximale obtiendra-t-on ?
"
+ " ° Combien d'étapes seront nécessaires ?
"
+ "
"
;
// Changement du titre du message
document.getElementById('HTML_MESSAGE').innerHTML =
" Message à propos de cette configuration. "
;
// Change le contenu de la fenêtre "À propos..."
document.getElementById('HTML_ABOUT2').innerHTML =
" Configuration créée par Bernard Gisin
"
+ " le 4 janvier 2020."
+ "
"
;
// Changement du titre de la boîte de dialogue "À propos de..."
document.getElementById('HTML_ABOUT1').innerHTML =
" À propos de cette configuration. "
;
DialogHelp(true);
} // confMessageBegin
// Exécution des fonctions d'initialisations.
ConfigInitClear(); // Pour préparer une nouvelle configuration
confToolBoxInit();
confStartBlocksInit();
confParamInit();
confFramesInit();
confCardsInit();
// Pour placer les cartes correctement dans les cadres.
myFrameCardsResize(null);
// Boîte de dialogue initiale, expliquant ce qu'il faut faire.
// Elle revient si on clique sur le point d'interrogation.
confMessageBegin();