Un Sokoban pour la NumWorks
Posted: 28 Jun 2020, 21:12
Présentation
Une partie des informations suivantes sont extraites de la page Wikipédia Sokoban. Si vous souhaitez creuser le sujet, n'hésitez pas à la consulter.
Le Sokoban est un jeu de puzzle inventé au Japon en 1982. Le principe est simple : vous êtes un gardien d'entrepôt et vous devez amener les caisses aux bons emplacement. Pour cela, vous pouvez uniquement pousser les caisses, et une seule à la fois.
L'objectif du jeu est de résoudre les niveaux en un nombre minimum de déplacements. Par ailleurs, il existe des milliers de niveaux, pour la majorité créés par la communauté. En fonction de la taille et de la complexité de la grille, ainsi que de l'exigence de l'utilisateur pour réduire son nombre de coups, tous les niveaux de difficultés sont imaginables. Ces éléments donnent une grande durabilité au jeu.
En raison de son apparition rapide dans le monde du jeu vidéo, de sa simplicité apparente et de son intérêt toujours renouvelé, le jeu a connu un grand succès et a été développé sous de nombreuses versions et plateformes. A mon tour de le porter sur la calculatrice NumWorks !
Avantages et inconvénients
Le jeu est particulièrement adapté à un portage sur NumWorks :
- Sa simplicité graphique lui évite de se confronter à la faiblesse du module graphique
kandinsky
. - Contrairement à des jeux en temps réel (tetris, snake), le jeu n'attend que les actions de l'utilisateur, ce qui facilite le traitement (tant algorithmiquement que matériellement).
- Le jeu développe les compétences logiquo-mathématiques, donc légitime pour un jeu sur calculatrice.
Le portage n'est pas non plus sans contraintes :
- Impossibilité d'enregistrer des informations, notamment les records.
- Stockage très limité, ne permettant qu'un nombre limité de niveaux téléchargés en même temps.
- Interface visuelle très restreinte.
Objectifs et cahier des charges
- Très simple d'utilisation, pour démocratiser le jeu et ne pas le restreindre aux curieux qui l'auront téléchargé.
- Séparation claire du moteur de jeu et du contenu (niveaux), pour pouvoir changer le contenu facilement.
- Utilisation d'un format officiel de stockage de niveaux, permettant ainsi d'utiliser ceux créés par la communauté.
- Utilisation de la version compressée du format officiel de stockage de niveaux, pour des raisons évidentes de stockage.
- Pas d'optimisations entraînant une détérioration du code trop importante.
Fonctionnalités
- Affichage de l'aide lors du lancement (règles, touches, signification des couleurs).
- Interface de jeu minimale, pour laisser de la place au niveau.
- Commandes accessibles à tout moment.
- Ajustement de l'affichage à la taille de la grille.
- Annulation des mouvements précédents (jusqu'à 20 mouvements, pour ne pas prendre trop de place).
Commandes
- Flèches pour se déplacer.
-
CLEAR
pour annuler un mouvement. -
Ans
pour voir l'aide (réinitialise la progression dans le niveau). -
EXE
pour réinitialiser la progression dans un niveau. -
+
et-
pour changer de niveau.
Changer les niveaux
Les niveaux sont stockés dans la liste
LEVELS
. Pour en changer, il suffit donc de les remplacer par ceux de votre choix.Les niveaux par défaut sont les 15 premiers niveaux officiels. L'ensemble des niveaux officiels (50 originels et 41 rajoutés a posteriori) sont disponibles sous le format directement exploitables dans ce fichier : Niveaux officiels. Ce fichier contiendra également des niveaux non officiels que j'ai trouvé intéressants.
Des milliers de niveaux supplémentaires sont également disponible ici. Après avoir téléchargé les fichiers, vous pouvez extraire les niveaux dans le format exploitable pour la NumWorks de la façon suivante :
- Télécharger le script d'extraction et le placer dans le même dossier que les fichiers
.slc
; - Exécuter le script ;
- Utiliser les outils.
Exemple d'utilisation pour l'extraction des 3 premiers niveaux du fichier
Original.slc
:- Code: Select all
>>> listing(extract('Original.slc')[:3])
4-5#10-|4-#3-#10-|4-#$--#10-|--3#--$##9-|--#--$-$-#9-|3#-#-##-#3-6#|#3-#-##-5#--..#|#-$--$10-..#|5#-3#-#@##--..#|4-#5-9#|4-7#8-
12#--|#..--#5-3#|#..--#-$--$--#|#..--#$4#--#|#..4-@-##--#|#..--#-#--$-##|6#-##$-$-#|--#-$--$-$-$-#|--#4-#5-#|--12#
8-8#-|8-#5-@#-|8-#-$#$-##-|8-#-$--$#--|8-##$-$-#--|9#-$-#-3#|#4.--##-$--$--#|##3.4-$--$3-#|#4.--10#|8#9-
Utilité des différentes fonctions :
-
extract(file_path)
: extraie les niveaux du fichier.slc
, retourne la liste des niveaux. -
generate(level)
: affiche, sous aspect décompressé, le niveau communiqué (sous format compressé). -
affichage(LEVELS)
: affiche, sous aspect décompressé, les niveaux (sous format compressé) de la listeLEVELS
communiquée. -
listing(LEVELS, beautify = False)
: affiche, sous format compressé, les niveaux (sous format compressé) de la listeLEVELS
communiquée. Permet également d'automatiser la mise en forme préparatoire pour le copier-coller dans une liste (avecbeautify = True
).
Conclusion
Le jeu est disponible au téléchargement dans le Workshop NumWorks. Si vous souhaitez modifier le jeu, j'ai gardé des versions de développement (pas encore nettoyées et publiées, demandez moi).
J'ai pris beaucoup de plaisir à développer le jeu ! Vos retours sont bienvenus.
A l'instar des niveaux, les couleurs des différents éléments et de l'arrière plan sont facilement modifiables. N'hésitez pas à partager vos propositions graphiques, je ne suis pas encore convaincu par l'actuelle.