見出し画像

幾何学をコードに変える。数学的な六角形タイルの描画ロジックをAIに生成させるコツ

【連載】GCP×AI:0円で創る近未来IT覇権ゲーム『ネオ・ジパング』開発記

前回の記事では、なぜ私たちが重い3Dエンジンを捨て、ブラウザ標準の「HTML5 Canvas」を選んだのか、その戦略的な理由をお話ししました。

今回は、いよいよ実践です。サイバー空間の最小単位であり、ボードゲームの華でもある「六角形(ヘックス)タイル」を、数学的な計算だけで描き出します。

六角形を数学的な計算で描くコツ

「自分は数学が苦手だから無理だ」と思う必要はありません。そのためのAI(Gemini)です。ただし、AIに100点満点のコードを書かせるには、少しだけ「伝え方のコツ」が必要です。


なぜ「六角形(ヘックス)」なのか?

四角形のマス目ではなく、なぜわざわざ計算が面倒な六角形を使うのか。それは、六角形が「隣接するすべてのマスとの距離が一定」という、戦略ゲームにおいて完璧な性質を持っているからです。

この「美しくも合理的な形」を、画像ファイル(PNGやSVG)を使わずに、コードによる計算だけで描くこと。これこそが、リソースを極限まで削ぎ落とす「サバイバルDX」の真髄です。

AIに「数学的な指示」を出す3つのコツ

Geminiに「六角形を描いて」とだけ伝えると、時として扱いづらいコードが返ってきます。美しいマップを作るために、以下の3つの要素をプロンプトに盛り込んでみましょう。

1. 座標系を指定する(頂点か、辺か)

六角形には「尖った方が上のタイプ(Pointy-topped)」と「平らな方が上のタイプ(Flat-topped)」の2種類があります。 ネオ・ジパングでは、回路基板のような横の繋がりを強調するため、「尖った方が上のタイプ」を指定します。

2. 「中心点」と「半径」という共通言語を使う

AIには「中心点(cx, cy)と半径(size)を引数に取り、数学的に計算して描画する純粋な関数を作って」と指示します。 これにより、後からマップの大きさを変えたり、ズームさせたりすることが非常に簡単になります。

3. 三角関数(sin/cos)を明示する

AIに「三角関数を使って、60度ずつ回転させながら6つの頂点を計算して」と一言添えるだけで、無駄な外部ライブラリに頼らない、軽量で高速な描画ロジックが生成されます。

【実践】Geminiが紡ぎ出した「黄金のロジック」

実際にこれらのコツを踏まえてプロンプトを投げた結果、リードエンジニアAIが提案したコードがこちらです。

JavaScript

// 六角形の頂点を計算し、パスを描く魔法の数式
const drawHex = (cx, cy, size) => {
  ctx.beginPath();
  for (let i = 0; i < 6; i++) {
    // 360度を6分割(60度ずつ)し、頂点を計算
    const angle_deg = 60 * i - 30; // 30度ずらして「尖った上」を表現
    const angle_rad = Math.PI / 180 * angle_deg;
    
    const x = cx + size * Math.cos(angle_rad);
    const y = cy + size * Math.sin(angle_rad);
    
    if (i === 0) ctx.moveTo(x, y);
    else ctx.lineTo(x, y);
  }
  ctx.closePath();
  ctx.stroke();
};

わずか10行足らず。この短いコードが、ブラウザ上で無限のサイバー空間を生み出す種火となります。

数学は「最強の圧縮技術」である

画像を使えば数キロバイト消費するタイルも、この数式なら数バイトで済みます。 低スペックPCや細い回線環境であっても、この「数学という名の圧縮技術」を使えば、メガテック企業のトラフィックにも耐えうる強靭なUIが構築できるのです。

次なる戦局へ

「筆」と「描き方」は揃いました。 次回は、この一つ一つのタイルに「役割」を与えていきます。 「2-3: 『データセンター』や『暗号資産』。タイルに命を吹き込むアセット配置の自動化」。 ランダム生成アルゴリズムを使って、世界に一つだけのサイバーマップを構築する旅へと進みます。


いいなと思ったら応援しよう!

伊藤正章|サバイバルDXクリエイター:荒野のPip-Boy設計局 忍の知恵と技術への「お布施(チップ)」を賜りたく存じます。頂いた財は、持続可能な社会、子供たち、自然、そしてあなたへの還元(有益な発信・開発)に全額投資いたします。画面下のボタンより、影の立役者たる拙者への御調達をお願い申す。一期一会の御縁に、深き感謝を。