Skip to content

2026-05-07開發日誌

  • 日期:2026-05-07
  • 專案:Cá xấu Duckduck

今日總結

完成 power_puzzle 的格局最終定版、元件對齊、duckduck 通電邏輯修正,以及通關後場景切換的完整流程。


格線修正:8×9 → 9×9

原本 GRID_COLS = 8,改為 9,補足最後一欄,讓格線成為完美正方形。

同時修正水平置中:原本 _grid_offset.x = 0(靠左),改為:

gdscript
_grid_offset.x = (box.size.x - (tile_size * COLS + (COLS-1) * GAP)) * 0.5

加上 * 0.88 縮小整體格線,避免元件超出邊框。垂直向上偏移 -30.0 微調位置。


最終格局定版

格局為 9×9,以下是 level_map 各 type 分布:

-1 -1 -1 -1 -1 -1  3  0 -1   row 0
-1 -1 -1 -1 -1 -1  2  2 -1   row 1
-1 -1  0  3  2 -1  2  2 -1   row 2
 3  3 -1  1  3  1  3 -1 -1   row 3
 0  1  2  3 -1 -1  1  2  0   row 4
 2  2  4 -1 -1 -1  2  3 -1   row 5
 2  4  5  4 -1 -1  0  1 -1   row 6
 1  1  4 -1 -1 -1  1  1 -1   row 7
 0  2 -1 -1 -1 -1  3  2 -1   row 8
type說明
-1隨機填充(每次進場隨機 type 1 或 2,隨機旋轉,不計入解答)
0duckduck(固定)
1直管
2轉角
3T 型
4十字(固定全通)
5電源 power.png(固定全通,BFS 起點)

電源位置:START_CELL = Vector2i(6, 2)


duckduck 修正

上下顛倒問題

所有 type=0 格子都被套用了 (sol_rot + 2) % 4 = 2(180°)的打亂邏輯。
修正:type=0 固定 init_rot = 0,不打亂。

通電時換圖

新增 _duck_sprites dict 追蹤所有 duckduck sprite。
_update_flow() 結尾判斷:鄰居通電且開口朝向 duck → 顯示 duckducki.png,否則顯示 duckduck.png


通關條件改寫

舊邏輯:所有可旋轉管件的 rotation == sol_rot
新邏輯:所有 duckduck 全部亮起(被接通)= 通關

_update_flow() 末尾追蹤 all_ducks_lit,全部亮則呼叫 _on_solved()
移除舊的 _check_solution() 函式。


通關流程與場景銜接

_on_solved() 流程:

  1. 所有管件強制顯示通電貼圖
  2. SaveManager.set_prop("power_puzzle_solved", 1) 寫入存檔
  3. 等待 2 秒後返回 chapter1_event2.tscn

chapter1_event2.gd_ready() 加入判斷:

  • power_puzzle_solved == 1 → 換貼圖成 scene2.PNG、停止閃爍、隱藏謎題按鈕
  • 未通關 → 維持原本閃爍邏輯