diff --git "a/docs/01_Env/ENV_01_\347\222\260\345\242\203\346\247\213\347\257\211\343\203\273\346\212\200\350\241\223\343\202\271\343\202\277\343\203\203\343\202\257.txt" "b/docs/01_Env/ENV_01_\347\222\260\345\242\203\346\247\213\347\257\211\343\203\273\346\212\200\350\241\223\343\202\271\343\202\277\343\203\203\343\202\257.txt" index 2521b83..7ae9cd1 100644 --- "a/docs/01_Env/ENV_01_\347\222\260\345\242\203\346\247\213\347\257\211\343\203\273\346\212\200\350\241\223\343\202\271\343\202\277\343\203\203\343\202\257.txt" +++ "b/docs/01_Env/ENV_01_\347\222\260\345\242\203\346\247\213\347\257\211\343\203\273\346\212\200\350\241\223\343\202\271\343\202\277\343\203\203\343\202\257.txt" @@ -56,7 +56,8 @@ │ └── server/ # 【権限】バックエンド (Node.js) │ ├── src/ │ │ ├── entities/ # サーバー側エンティティ (Player) - │ │ ├── managers/ # 管理クラス (GameManager) + │ │ ├── handlers/ # 処理ハンドラ (GameHandler, RoomHandler) + │ │ ├── managers/ # 管理クラス (GameManager, RoomManager) │ │ ├── network/ # WebSocket処理 (SocketManager) │ │ └── index.ts # エントリーポイント │ ├── tsconfig.json diff --git a/packages/shared/src/config/gameConfig.ts b/packages/shared/src/config/gameConfig.ts index 8193228..88cad71 100644 --- a/packages/shared/src/config/gameConfig.ts +++ b/packages/shared/src/config/gameConfig.ts @@ -3,9 +3,14 @@ SCREEN_WIDTH: 1280, SCREEN_HEIGHT: 720, - // マップサイズ設定 - MAP_WIDTH: 2000, - MAP_HEIGHT: 2000, + // グリッド(マス)設定を新設 + GRID_CELL_SIZE: 100, // 1マスのサイズ(px) + GRID_COLS: 20, // 横のマス数 + GRID_ROWS: 20, // 縦のマス数 + + // マップサイズはグリッド設定から自動計算させる(ハードコーディングを避ける) + get MAP_WIDTH() { return this.GRID_COLS * this.GRID_CELL_SIZE; }, + get MAP_HEIGHT() { return this.GRID_ROWS * this.GRID_CELL_SIZE; }, // ルーム収容人数設定 MAX_PLAYERS_PER_ROOM: 4, diff --git a/packages/shared/src/logic/gridMap.ts b/packages/shared/src/logic/gridMap.ts new file mode 100644 index 0000000..10dd3b5 --- /dev/null +++ b/packages/shared/src/logic/gridMap.ts @@ -0,0 +1,20 @@ +import { GAME_CONFIG } from "../config/gameConfig"; + +/** + * ピクセル座標からグリッドの1次元配列インデックスを取得する(中心点判定) + */ +export function getGridIndexFromPosition(x: number, y: number): number | null { + const { GRID_CELL_SIZE, GRID_COLS, GRID_ROWS } = GAME_CONFIG; + + // 座標がどのマス(列・行)に属するか計算 + const col = Math.floor(x / GRID_CELL_SIZE); + const row = Math.floor(y / GRID_CELL_SIZE); + + // マップ外の場合は null を返す + if (col < 0 || col >= GRID_COLS || row < 0 || row >= GRID_ROWS) { + return null; + } + + // 1次元配列のインデックスに変換 (row * 幅 + col) + return row * GRID_COLS + col; +} \ No newline at end of file