De Scratch Wiki en français

Révision datée du 12 avril 2021 à 16:44 par Theo 1er (discussion | contributions) (Création)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)


Faire un code de sauvegarde (tutoriel)


Faire une sauvegarde, c'est un peu enregistrer l'état d'un projet à un moment donné de son utilisation par un scratcheur pour permettre à celui-ci d'arrêter puis de reprendre plus tard au même point plutôt que de devoir tout recommencer.

Principe

Lorsqu'un scratcheur utilise un projet, il modifie plusieurs valeurs. Ce sont principalement les variables mais cela peut être aussi des listes, la position d'un sprite, le numéro d'un costume, etc... Si rien n'est sauvegardé lors de l'arrêt du projet, lorsque celui-ci redémarre toutes ces valeurs reprennent leurs valeurs par défaut défini par le créateur du projet. Faire un code de sauvegarde, c'est convertir les valeurs modifiées en une suite de caractères que le projet pourra ensuite demander pour revenir à l'état qu'il avait lorsqu'il a été arrêté.

Comment faire un système de sauvegarde

Premiers pas

Commençons par quelque chose de très simple. Allez dans votre page mes projets et créez un nouveau projet. Vous verrez comme d'habitude le Scratch Cat au centre de l'écran. Entrez ces scripts :

quand le drapeau vert pressé
basculer sur le costume (costume1 v)

quand ce sprite est cliqué
basculer sur le costume (costume2 v)
dire ([numéro v] du costume)

Maintenant lancez le projet et cliquez sur le Scratch Cat. Félicitations ! Vous venez de faire votre premier code de sauvegarde : «2». Vous ne me croyez pas ? Arrêtez le projet et relancez le autant de fois que vous voulez, le Scratch Cat retourne sur le costume1. Mais modifiez maintenant le script de cette façon :

quand le drapeau vert pressé
basculer sur le costume (costume1 v)
demander [Code ?] et attendre
basculer sur le costume (réponse)

quand ce sprite est cliqué
basculer sur le costume (costume2 v)
dire ([numéro v] du costume)

Relancez le projet et entrez le code «2». Le Scratch Cat retourne alors sur le costume2 qu'il avait lorsqu'il vous a donné le code. Alors oui c'est rudimentaire mais ça vous montre le principe. Vous venez de dire au projet de retourner à l'état qu'il avait lorsque vous l'avez arrêté.

Approfondir

Voyons maintenant lorsqu'il y a plusieurs paramètres à sauvegarder. Effacez le script précédent en mettez celui-ci à la place :

quand le drapeau vert pressé
basculer sur le costume (nombre aléatoire entre (1) et (2))
mettre la taille à (nombre aléatoire entre (50) et (150))% de la taille initiale
s'orienter à (nombre aléatoire entre (0) et (360))
aller à (position aléatoire v)

Lancez le projet plusieurs fois. Vous allez voir le Scratch Cat aller à plusieurs endroits, grandir, rapetisser, changer de costume et tourner. La probabilité de faire deux fois la même chose est très, très faible (encore moins que gagner au loto). Nous avons 4, ou plutôt 5, valeurs à sauvegarder (puisque la position aléatoire se définit par une abscisse x et une ordonnée y). Pour cela créez une variable «compteur» ainsi que deux listes «sauvegarde» et «code».

(compteur)(sauvegarde ::list)(code ::list)

Il faut également choisir un élément déclencheur à la sauvegarde, par exemple quand la touche «s» (pour sauvegarde) est pressée.

quand la touche [s v] est pressée

Et surtout : il faut choisir un caractère qui n'a aucune chance de se trouver dans les valeurs sauvegardées. Ici par exemple le pont-virgule (;). Mais si le point-virgule peut être présent dans l'une des valeurs (comme un texte par exemple) il faut choisir autre chose. Si vraiment vous n'avez aucune possibilité, gardez le point-virgule mais vous serez obligé de chiffrer le code (voir chapitre «Chiffrer le code», paragraphe «convertir chaque caractère du code en nombre»). Ce caractère va servir à séparer les éléments du code.

Voyons maintenant le script de sauvegarde :

quand la touche [s v] est pressée // élément déclencheur de la sauvegarde
supprimer tous les éléments de [sauvegarde v] //on supprime les éléments d'une éventuelle sauvegarde précédente
supprimer tous les éléments de [code v] 
ajouter ((numéro v) du costume) à (sauvegarde v) //on place les valeurs à sauvegarder dans la liste sauvegarde
ajouter (taille) à (sauvegarde v)
ajouter (direction) à (sauvegarde v)
ajouter (abscisse x) à (sauvegarde v)
ajouter (ordonnée y) à (sauvegarde v)
ajouter [Votre code est :] à (code v) //on commence à écrire le code dans la liste code
ajouter [] à (code v)
mettre (compteur) à (1)
répéter (longueur de [sauvegarde v]) fois //on prend une par une les valeurs de la liste sauvegarde
remplacer l'élément (2) de la liste [code v] par (regrouper (élément (2) de [code v]) et (regrouper (élément (compteur) de (sauvegarde v)) et [;])) //on ajoute chaque valeur dans le code en les séparant par le point-virgule.
ajouter (1) à (compteur)
fin
montrer la liste (code v) //on affiche la liste code dont la première ligne est «Votre code est :» et la deuxième ligne est le code proprement dit composé des valeurs sauvegardées séparées par le point-virgule.

Voilà, sur la deuxième ligne de la liste code vous devriez voir quelque chose comme «2;98;-85;-188;-148;». C'est votre code. Vous pouvez cliquer dessus et le copier pour le coller ensuite où vous voulez. Voyons maintenant comment l'utiliser. Il faut choisir un nouvel élément déclencheur. Les anglophones utilisent souvent la touche «l» (pour load), nous utiliserons donc la touche «c» (pour charger). Bien évidemment, si vous voulez que ça se passe dès le lancement du projet vous pouvez utiliser quand le drapeau vert pressé.

Voici le script :

quand la touche [c v] est pressée // élément déclencheur de demande du code
demander [Code ?] et attendre //demande du code
supprimer tous les éléments de [sauvegarde v] //on supprime les éléments d'une éventuelle sauvegarde précédente
ajouter [] à (sauvegarde v) //on commence à placer la première valeur du code dans la liste sauvegarde
mettre (compteur) à (1)
répéter (longueur de (réponse)) fois //on prend un par un les caractères du code jusqu'au prochain point-virgule
si <(lettre (compteur) de (réponse)) = [;]> alors //si on arrive au point-virgule
ajouter [] à (sauvegarde v) //on passe à la valeur suivante
sinon
remplacer l'élément (longueur de [sauvegarde v]) de la liste [sauvegarde v] par (regrouper (élément (longueur de [sauvegarde v]) de [sauvegarde v]) et (lettre (compteur) de (réponse))) //sinon on ajoute chaque caractère du code dans le dernier élément de la liste sauvegarde.
fin
ajouter (1) à (compteur)
fin
basculer sur le costume (élément (1) de [sauvegarde v]) //on remet le Scratch Cat à la position sauvegardée
mettre la taille à (élément (2) de [sauvegarde v])% de la taille initiale
s'orienter à (élément (3) de [sauvegarde v])
aller à x:(élément (4) de [sauvegarde v]) y:(élément (5) de [sauvegarde v])

Après avoir copier le code de sauvegarde, relancez le projet en cliquant sur le drapeau vert pour faire bouger le Scratch Cat, puis appuyez sur la touche «c» et entrez le code. Le Scratch Cat revient à la position sauvegardée.

Chiffrer le code

Dans certains cas vous pouvez avoir envie de chiffrer le code. Par exemple dans un jeu, pour éviter que l'utilisateur augmente son nombre de vies ou son score. Dites vous bien que dans Scratch aucun chiffrement ne pourra éviter que certains ne trichent. En effet, en ouvrant votre projet pour en voir à l'intérieur les scripts, ils comprendront comment vous avez chiffrer le code et donc comment le déchiffrer. Et si vous essayez de rendre vos scripts trop compliqués à lire, il reste de toute façon la possibilité de remixer votre projet puis de modifier la valeur des variables avant de générer un nouveau code. Voici quelques méthodes qui ont été proposées :

Multiplier les nombres par un nombre quelconque

Ceci ne fonctionne qu'avec les nombres. Par exemple si votre variable vaut 150 vous faites pendant la sauvegarde

ajouter ((variable) * (2468)) à (sauvegarde v)

Et bien sur après le déchiffrement du code vous faites

mettre [variable v] à ((variable) / (2468))

Convertir chaque caractère du code en nombre

cette technique se base sur celle du chiffrement des variables cloud qui n'acceptent que les chiffres. Vous trouverez un tutoriel à cette adresse : Variables cloud : convertir chaque lettre en nombre. Avec cette technique le code «2;98;-85;-188;-148;» devient «02660908667008056670010808667001040866».

Algorithmes de cryptographie

N'importe quel algorithme de cryptographie depuis les anciens chiffrements par substitution (César, Vigenère, etc...) jusqu'aux plus modernes peuvent être utilisés. N'étant pas spécifiques à Scratch, ils ne seront pas développés dans ce tutoriel. Vous trouverez de nombreux projets traitant de ces sujets. N'oubliez pas que certains sont complexes à mettre en œuvre et qu'ils vont beaucoup alourdir votre script pour un résultat assez aléatoire.


Cet article fait partie de la catégorie des tutos
Tous les articles de cette catégorie :
Les cookies nous aident à fournir nos services. En utilisant nos services, vous acceptez notre utilisation des cookies.