A l'occasion d'Halloween 2020 NumWorks te sortait NuuM, un jeu Python en 3D utilisant la technique du raycasting (lancé de rayons).
Bien que la typographie du titre empruntait à la licence DOOM lancée en 1993, en réalité rien à voir. Ici pas de plateformes ni d'étages, le monde simulé est intégralement plat. Il s'agit en fait d'un labyrinthe 2D affiché en relief, on devrait plutôt parler de 2.5D ou de pseudo-3D.
Pour donner une référence vidéoludique en restant chez l'éditeur id Software, le jeu est ici plutôt comparable au titre précédent, Wolfenstein 3D de 1992.
Le script n'en reste pas moins très ambitieux avec plus de 10 Ko de code, aux limites actuelles de la calculatrice, ne compte pas pouvoir y faire des ajouts.
NumWorks te met donc au défi de traverser 4 labyrinthes successifs de 17×17 cases chacun. Tu dois à chaque fois trouver la clé afin de pouvoir accéder au labyrinthe suivant. 5 citrouilles purement décoratives seront également disposées dans chaque labyrinthe, cette fois-ci de façon aléatoire.
Bien que la typographie du titre empruntait à la licence DOOM lancée en 1993, en réalité rien à voir. Ici pas de plateformes ni d'étages, le monde simulé est intégralement plat. Il s'agit en fait d'un labyrinthe 2D affiché en relief, on devrait plutôt parler de 2.5D ou de pseudo-3D.
Pour donner une référence vidéoludique en restant chez l'éditeur id Software, le jeu est ici plutôt comparable au titre précédent, Wolfenstein 3D de 1992.
Le script n'en reste pas moins très ambitieux avec plus de 10 Ko de code, aux limites actuelles de la calculatrice, ne compte pas pouvoir y faire des ajouts.
NumWorks te met donc au défi de traverser 4 labyrinthes successifs de 17×17 cases chacun. Tu dois à chaque fois trouver la clé afin de pouvoir accéder au labyrinthe suivant. 5 citrouilles purement décoratives seront également disposées dans chaque labyrinthe, cette fois-ci de façon aléatoire.
Alors, as-tu réussi à gagner depuis maintenant près de 4 mois ?
C'est vrai qu'être dans un labyrinthe, ce n'est pas pareil qu'en être au-dessus.
Si ce n'est toujours pas le cas, on te propose aujourd'hui de hacker le jeu.
C'est vrai qu'être dans un labyrinthe, ce n'est pas pareil qu'en être au-dessus.
Si ce n'est toujours pas le cas, on te propose aujourd'hui de hacker le jeu.
On trouve rapidement dans le code la définition des 4 labyrinthes :
Le codage utilisé n'est certes pas précisé.
Mais aucun problème, car NumWorks a déjà codé une fonction
Elle peut retourner différentes constantes définies dans le script :
- Code: Select all
MAZE_SIZE = 17
MAZES = [
994639892451692017993627844655427188346119489096700102527510313302320457573868616417279,
994639136329297165277925056994599494901591635504316814914476715640179960969549973159935,
994638899191857351225063837897269868434453723710226411561032419934171038551468501237759,
994638903127657620198142832056217335350998827328484167051085993695318850524015157706751,
]
Le codage utilisé n'est certes pas précisé.
Mais aucun problème, car NumWorks a déjà codé une fonction
wall(mapId, x, y)
nous permettant de tester la case de coordonnées (x, y) du labyrinthe numéro mapId.Elle peut retourner différentes constantes définies dans le script :
- WALL_EMPTY (si c'est une case libre par laquelle on peut donc passer)
- WALL_FANCY
- WALL_SPECIAL_A
- WALL_SPECIAL_B
- WALL_SPECIAL_C
color(wallId)
.Et bien voilà donc suffisamment d'informations pour hacker le script de NumWorks. Remplaçons simplement le code de la fonction drawSurfacesAndSprites() par une simple double boucle d'affichage de grille 2D :
Rajoutons également de quoi afficher les sprites ainsi que la position du joueur, et voilà, la carte secrète intégrale du 1er labyrinthe de NumWorks se révèle enfin à nous !
Tu peux donc dès maintenant t'y référer pour ne plus te perdre dans le labyrinthe 3D.
Et tant que nous y sommes remplaçons également la fonction handleKeys(), comme ça si tu préfères tu pourras également jouer en 2D et découvrir encore plus rapidement les labyrinthes suivants !
- Code: Select all
def drawSurfacesAndSprites(xp, yp, mapId):
fill_rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, color(CEILING))
for y in range(MAZE_SIZE):
for x in range(MAZE_SIZE):
w = wall(mapId, x, y)
if w != WALL_EMPTY:
fill_rect(T_SIZE*x, T_SIZE*y, T_SIZE,T_SIZE,color(w))
fill_rect(int(xp) * T_SIZE, int(yp) * T_SIZE, T_SIZE, T_SIZE, color(WALL_EMPTY))
for sprite in SPRITES:
sprite[1][0](int(sprite[0][0])*T_SIZE,int(sprite[0][1])*T_SIZE)
Rajoutons également de quoi afficher les sprites ainsi que la position du joueur, et voilà, la carte secrète intégrale du 1er labyrinthe de NumWorks se révèle enfin à nous !
Tu peux donc dès maintenant t'y référer pour ne plus te perdre dans le labyrinthe 3D.
Et tant que nous y sommes remplaçons également la fonction handleKeys(), comme ça si tu préfères tu pourras également jouer en 2D et découvrir encore plus rapidement les labyrinthes suivants !
Code source + installation : (pour NumWorks)
Téléchargement :
- NuuM 2D (pour TI-Nspire CX II)