Présentation HN : Pong Wars
(pong-wars.koenvangilst.nl)- Pong Wars est une démo web qui visualise comme dans Pong l’affrontement entre le jour et la nuit, le bien et le mal
- L’écran affiche des valeurs day/night comme
day 288 | night 288, ce qui permet de voir immédiatement l’état actuel - L’implémentation repose sur JavaScript et un peu de HTML/CSS, le tout contenu dans un seul fichier
index.html - Le code est présenté comme réutilisable, et les utilisateurs peuvent créer leur propre version
- La page mentionne une réalisation de Koen van Gilst et contient un lien vers le code source GitHub
L’affrontement entre le jour et la nuit façon Pong
- Pong Wars est une page web qui montre visuellement l’affrontement entre « day » et « night »
- L’état actuel est affiché au format
day 288 | night 288
Implémentation dans un fichier unique et réutilisation
- L’implémentation utilise JavaScript ainsi que HTML/CSS, et tient dans un seul fichier
index.html - Le code peut être réutilisé, et les utilisateurs peuvent créer leur propre version
- La page mentionne une réalisation de Koen van Gilst et contient un lien vers le code source GitHub
1 commentaires
Commentaires Hacker News
Le code indique ce tweet comme source de l’idée : https://twitter.com/nicolasdnl/status/1749715070928433161 [nitter : https://nitter.net/nicolasdnl/status/1749715070928433161]
La citation dit en substance : « combat sans fin #genuary23 #genuary #genuary2024. Ce n’est pas une idée originale ; je l’ai déjà vue, mais je n’arrive pas à retrouver où »
Ici, on dit que le combat est sans fin, et je me demande s’il existe un moyen de le prouver mathématiquement
À l’origine, j’avais vu https://twitter.com/CasualEffects/status/1390290306206216196, et l’auteur disait que cela venait d’un original en pico8. Ces versions antérieures avaient aussi des raquettes de Pong, mais quand j’ai fait mon demake en BASIC, je ne pouvais pas mettre le code dans un tweet pour que bbcmicrobot l’exécute, donc j’ai retiré les raquettes
Ma version était un peu lente et bancale, puis quelqu’un — je crois que c’était @rheolism — a publié une version beaucoup plus rapide et fluide en utilisant des caractères personnalisés au lieu de dessiner des points, et j’ai ensuite vu un demake recréé en Processing. Ce genre de choses finit par prendre sa propre vie
J’ai supprimé mon compte Twitter il y a longtemps, mais j’ai retrouvé ça dans les archives
Donc une situation où une balle se retrouve extrêmement enfermée a peu de chances de durer très longtemps
x1 = y1 = y3 = squareSize, x2 = canvas.width - squareSize
squares = Array.from({ length: numSquaresX }, (, i) =>
Array.from({ length: numSquaresY }, (, j) =>
i === 0 && j === 0 ? TEAM1 : TEAM2))
Car plus le territoire possédé diminue, plus la vitesse de fusion augmente
Je suis très fasciné par ce genre de choses, mais je ne sais même pas s’il existe un terme de genre pour les classer et les analyser, donc je suis obligé de dire « ce genre de choses »
C’est inspiré d’algorithmes de jeu, mais ce n’est pas un jeu ; et le « Game of Life » de Conway porte lui aussi un nom assez trompeur. Ça bouge, mais ce n’est pas scripté comme une animation classique
Dans le monde réel, des gens comme David C. Roy appellent leurs œuvres des sculptures cinétiques
Vidéo algorithmique ? Simulateur de jeu ? Automate autonome ?
Il existe aussi un court article Wikipédia : https://en.wikipedia.org/wiki/Zero-player_game
Modification : en regardant un peu le code, il y a une part d’aléatoire dans la dynamique des rebonds. Il est donc difficile de dire « entièrement déterministe », sauf à considérer la graine du générateur pseudo-aléatoire comme une partie des conditions initiales
Il y a du temps, des règles, etc., et l’élément important est que le résultat ne peut pas être connu à l’avance
C’est ce dernier aspect qui rend l’écriture et l’exécution de ce genre de programmes intéressantes
Mon fils de 12 ans vient de le refaire avec Scratch :
https://scratch.mit.edu/projects/957461584/
Vraiment génial
Actuellement, plus la zone possédée par une balle diminue, plus elle provoque de collisions à la même vitesse ; ce serait intéressant de rendre la vitesse proportionnelle au nombre de cases possédées, ou à sa racine carrée
Je pense qu’aucun camp ne finira par gagner
Une vraie beauté à plusieurs niveaux
Esthétiquement, on peut simplement s’asseoir et regarder ; philosophiquement, c’est intéressant comme métaphore numérique d’une lutte permanente
Enfin, et c’est le plus intéressant, cela mélange deux vieilles idées très simples pour créer quelque chose de nouveau. Réussir cela est extrêmement rare
Bravo, vraiment beaucoup
Avec 3 couleurs, ce serait intéressant
Si les deux autres en coincent une dans un coin, l’espace réduit lui permettrait de reprendre rapidement des blocs et de revenir très vite d’une situation proche de la défaite
J’ai aussi ajouté un curseur de vitesse pour les moins patients
https://explorers.toxicode.fr/?remoteWorkspace=pong-war
Il y a aussi le post Mastodon de l’auteur original : https://hachyderm.io/@vnglst/111828811496422610
Je l’ai implémenté en C++ et Qt Scene Graph pour apprendre
Je partage au cas où ça intéresserait quelqu’un : https://invent.kde.org/carlschwan/warpong/-/blob/master/src/...
Exemple similaire : https://contranoid.com/
Il existe aussi une autre variante de Pong, mais elle est réservée au desktop : https://www.obfusco.com/pn0gjs/index.html