Session end : 11h59m59s | Hide picture Sexe : OFF | Donations 2024 : 865.48 € |
C'est intéressant le 10 lignes car ca oblige à faire du code et des données plus compactes après entre la première version à 5 niveaux et la dernière à 13 niveaux (il restait encore un peu de place) ca m'a permis de tester pas mal de choses finalement...
Sinon pour les DATA se sont les niveaux encodés en "base128/180" (en utilisant 128/180 caractères à partir de 36 pour ne pas avoir de caractère " cela permet d'avoir des niveaux avec 50-70 caractères (3 caractères par ligne + 1 caractère pour la position initiale + 2 caractères par blocs à pousser (source / destination)
Les bits des 3 caractères par ligne permettent de définir les murs et les espaces libre du niveau :
### |0000011 1000000 0000000
## ## |0000110 1100000 0000000
# # |0000100 0100000 0000000
#$ # |0000100 0100000 0000000
### $## |0011100 0110000 0000000
# $ $ # |0010000 0010000 0000000
### # ## ########## |1110101 1011111 1111100
# # ## ## ## ..# |1000101 1011011 0000100
# $ $ ..# |1000000 0000000 0000100
##### ### #@## ..# |1111101 1101011 0000100
# ######### |0000100 0001111 1111100
####### |0000111 1111000 0000000
Pour les positions (blocs, destinations, départ), je stocke x*18+y (avec x compris entre 0 et 17 et y compris entre 0 et 9 car les premières/dernières lignes/colonnes ne sont pas utilisables)
Du coup la formule pour calculer la taille de la chaîne de caractères pour stocker un niveau est 37+(nombre de blocs à pousser*2)
Mais il y'aurait pas mal de chose à raconter surtout que j'ai continué à optimiser après la fin du concours.
L'optimisation la plus importante a été de remplacer MODE, BORDER, INK, SYMBOL, CLS par des codes de contrôles ce qui permet de tout initialiser avec un simple PRINT.
Pour que cela soit efficace, cela oblige à stocker des caractères de 0 à 255 et il faut ruser pour stocker le(s) caractère(s) CHR$(0) avec des variables (z$,t$,f$ qui contiennent un, deux et quatre CHR$(0))...
Le système de stockage avait déjà été utilisé pour stocker les niveaux de manière compacte
L'inconvénient c'est que l'on ne peut pas copier/coller facilement le listing d'où l'utilisation d'une version de travail qui remplit les chaînes de caractères...
Dernièrement je me suis rendu compte que je pouvais simplifier mes tests pour la gameplay ce qui ma permis après réorganisation du code (les Line Too Long un peu prise de tête parfois) de caser 2 niveaux de plus...
Voici d'ailleurs la dernière version compatible 464 du listing de travail : Il fonctionne aussi sur 6128 même si je préfère supprimer le POKE &B28B,79 et remplacer CALL &BD19 par FRAME pour celui-ci.
En fait le CPC 464 (contrairement au 6128) ne calcule pas correctement la longueur réelle de la chaîne d'un PRINT lorsque l'on utilise des caractères de contrôle et par conséquent force un retour à la ligne beaucoup trop tôt. Je ne 'ai pas trouvé comment désactiver le retour à la ligne mais en faisant croire au CPC qu'il a plus que 40 colonnes dans sa fenêtre (là j'ai mis 80 mais j'aurais pu mettre un peu moins) il affiche correctement...