2 ポイント 投稿者 GN⁺ 2024-01-28 | 1件のコメント | WhatsAppで共有
  • Pong Warsは、昼と夜、善と悪の対決をPongのように視覚化したウェブデモ
  • 画面には day 288 | night 288 のように day/night の値 が表示され、現在の状態をすぐに確認できる
  • 実装は JavaScript と一部の HTML/CSS で構成され、1つの index.html に収められている
  • コードは再利用可能で、ユーザーが自分だけのバージョンを作れると案内している
  • ページには Koen van Gilst による制作表記と GitHub ソース へのリンクがある

Pongで表現した昼と夜の対決

  • Pong Warsは、「day」と「night」の対決を視覚的に見せるウェブページ
  • 現在の状態は day 288 | night 288 形式で表示される

単一ファイル実装と再利用

  • 実装は JavaScript と HTML/CSS を使用し、1つの index.html ファイルに含まれている
  • コードは再利用でき、ユーザーが自分だけのバージョンを作れる
  • ページには Koen van Gilst による制作表記と GitHub ソースへのリンクがある

1件のコメント

 
GN⁺ 2024-01-28
Hacker News のコメント
  • コードでは、このツイートをアイデアの出典としてリンクしている: https://twitter.com/nicolasdnl/status/1749715070928433161 [nitter: https://nitter.net/nicolasdnl/status/1749715070928433161]
    引用文の内容は「終わりなき戦い #genuary23 #genuary #genuary2024。元々のアイデアではなく、以前見たことがあるが、どこで見たのか見つけられない」というもの
    ここでは戦いが終わらないと言っているが、これを数学的に証明する方法があるのか気になる

    • さらにさかのぼると、アイデアの一部は私のものかもしれない: https://hachyderm.io/deck/@bazzargh/111829275276749971
      もともとは https://twitter.com/CasualEffects/status/1390290306206216196 を見ていて、作者は pico8 のオリジナルから来たものだと言っていた。それ以前のバージョンには Pong のパドルもあったが、私が BASIC デメイクを作るとき、bbcmicrobot に実行させるためのコードをツイート内に収められなかったので、パドルを削除した
      私のバージョンはやや遅くて粗かったが、@rheolism だったと思う人が点を打つ代わりにユーザー定義文字を使って、ずっと速く滑らかなバージョンを投稿し、その後 Processing でデメイクを作り直したものも見た。こういうものは独自の生命力を持つようになる
      Twitter アカウントはずいぶん前に削除したが、アーカイブから見つけ出した
    • 各ボールは少なくとも 1x1 の領域を占めるので、相手のボールが 100% を占めることはできない
    • 領域が小さいほど、そのボールは相手より単位時間あたり多く跳ね返り、領域を広げる機会も増える
      だから、片方のボールが極端に閉じ込められた状況は、それほど長く続きにくい
    • 左のボールがタイルを1つだけ持ち、右のボールが残りすべてを持っている状態で何が起きるかを見ることができる:
      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))
    • かなり安定した平衡がありそうだ
      所有する領域が減るほど、併合速度が上がるためだ
  • こういう類いのものに強く惹かれるのだが、分類して分析するためのジャンル用語があるのかも分からず、「こういう類い」と呼ぶしかない
    ゲームアルゴリズムに着想を得ているがゲームではなく、Conway の “Game of Life” も名前の付け方としては誤りと言える。動きはするが、一般的なアニメーションのようにスクリプトされたものでもない
    現実世界では David C. Roy のような人が自分の作品をキネティック・スカルプチャーと呼んでいる
    アルゴリズム動画?ゲームシミュレーター?自律オートマトン?

    • こういうものに**ゼロプレイヤーゲーム(zero-player game)**という用語が使われているのを見たことがある
      短い Wikipedia 記事もある: https://en.wikipedia.org/wiki/Zero-player_game
    • “executive toy” に近い観点で、おもちゃという用語が気に入っている
    • カオス系と見なせるのではないだろうか?完全に決定論的だが初期条件に非常に敏感なシステム、という意味で
      追記: コードを少し見ると、跳ね返りのダイナミクスに少しランダム性が入っている。なので、疑似乱数生成器のシードを初期条件の一部と見なさない限り、「完全に決定論的」とは言いにくい
    • シミュレーション」なら、おおむね包括できそうだ
    • 私の中の用語ではシミュレーションと呼んでいる
      時間やルールなどがあり、重要な要素は結果を事前に知ることができないこと
      その最後の要素が、こうしたプログラムを書いて実行することを面白くしている
  • 12歳の息子が Scratch で今作った:
    https://scratch.mit.edu/projects/957461584/

  • 本当に素晴らしい
    現在は、ボールが所有する領域が小さくなるほど同じ速度で衝突が増えるが、速度を所有しているマスの数やその平方根に比例させると面白そうだ

    • カードゲームの「War」のように、そのような形で自己調整されているように思う
      どちらも最終的には勝てないだろうと思う
  • いくつものレベルで本当に美しい
    美的にはただ座って眺めているだけで楽しく、哲学的には続いていく闘争のデジタルな比喩として興味深い
    最後に、そして最も興味深いことに、とても単純で古いアイデアを2つ組み合わせて新しいものを作っている。これをうまくやるのは極めてまれだ
    称賛を送る。本当に大きな称賛を

    • ゲームがシミュレートしている内容と視覚的に示している姿の両方で、ある程度陰陽をモデル化しているようにも見える
  • 3色だと面白くなりそうだ
    残りの2つが1つを隅に追い込むと、狭い空間のためにブロックを素早く奪い返し、敗北寸前からすぐに復活できる

  • 元作者の Mastodon 投稿もある: https://hachyderm.io/@vnglst/111828811496422610

  • 学習用に C++ と Qt Scene Graph で実装してみた
    興味のある人がいるかもしれないので共有する: https://invent.kde.org/carlschwan/warpong/-/blob/master/src/...

  • 似た例: https://contranoid.com/

  • 別の Pong の変種もある。ただしデスクトップ専用: https://www.obfusco.com/pn0gjs/index.html