Snake daily: first food depends on the previous run, so the board differs per player
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 2/5
- Thời gian dự kiến
- Dưới một giờ
- Mức phù hợp với người mới
- 84/100
- Loại issue
- Lỗi
- Độ rõ ràng
- Đặc tả rõ ràng
- Mức độ hoạt động
- Sôi nổi
- Công nghệ
- typescript
- Lĩnh vực
- game-dev
Hướng nghiên cứu
Bắt đầu tại games/snake/scenes/GameScene.ts: init() (khoảng dòng 105-123) đặt lại trạng thái theo từng lượt chơi nhưng không đặt lại this.food, còn create() (dòng 141) gọi randomFreeCell() (dòng 462-468) và hàm này vẫn thấy thức ăn của lượt trước. Khai báo food là private food: Cell | undefined và xóa nó trong init(). Sau đó kiểm tra freeCells trong games/snake/logic.ts và lựa chọn có seed trong shared/rng.ts có hoạt động đúng như issue mô tả hay không. Hoàn thành khi ô thức ăn hằng ngày đầu tiên khớp nhau sau khi tải mới, sau PLAY AGAIN và sau RESTART, chế độ bình thường không thay đổi và npm test chạy thành công.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Summary
In Neon Snake's daily challenge, where the first food appears depends on the last food of the previous run played on the same page. The board is supposed to be the same for everyone who steers the same way, but it isn't.
Where
games/snake/scenes/GameScene.ts:105-123(init, never resetsfood)games/snake/scenes/GameScene.ts:141(create,this.food = this.randomFreeCell())games/snake/scenes/GameScene.ts:462-468(randomFreeCell)
Details
Phaser reuses the scene instance, and init() resets bonus, score, eaten and the rest, but not this.food. On the second and later runs on a page, create() calls randomFreeCell() while this.food still holds the previous run's last food cell:
private randomFreeCell(): Cell {
const taken = this.players.flatMap((p) => p.segments);
if (this.food) taken.push(this.food);
if (this.bonus) taken.push(this.bonus.cell);
const free = freeCells(taken);
return this.cellRng ? this.cellRng.pick(free) : Phaser.Utils.Array.GetRandom(free);
}
freeCells() lists cells in row-major order, so excluding one extra cell shifts every index after it. The seeded cellRng.pick(free) then lands on a different cell, and every later pick follows from that different board.
Impact
Daily scores are not comparable. A player who played a normal run, a previous daily run, or pressed RESTART before the daily gets a different food sequence from a player who opened the daily fresh. Replaying the daily on the same page is not the same board either.
Steps to reproduce
- Open
games/snake/?mode=daily, start DAILY, and note the first food cell. Then die. - Choose PLAY AGAIN.
- The first food cell is often different (whenever the previous run's last food sat before the picked index).
Suggested fix
Clear this.food in init() (declare it as private food: Cell | undefined), so the first randomFreeCell() of every run sees only the snake.
Acceptance criteria
- The first daily food cell is the same on a fresh page load and after PLAY AGAIN, RESTART or a normal run.
- Normal mode behaviour is unchanged.
Getting started
- Relevant files:
games/snake/scenes/GameScene.ts,games/snake/logic.ts(freeCells),shared/rng.ts(dailyRng) - How to run tests:
npm test - Related: #78 (Snake daily mode)
Filed by repo-audit/full-audit at de2b25b. Severity: medium. Effort: S. audit-key: bug|games/snake/scenes/GameScene.ts|randomFreeCell
- Ngôn ngữ chính
- TypeScript
- Star
- 3
- Fork
- 3
- Merge trung bình
- 8 giờ 13 phút
- Pull request đã merge (30 ngày)
- 2
Chuẩn bị môi trường
Dự án này không cung cấp dev container, Dockerfile hay hướng dẫn đóng góp, nên bạn cần tự thiết lập môi trường: hãy bắt đầu từ README và xem hướng dẫn đóng góp lần đầu của chúng tôi để biết các bước chung.
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của TMHSDigital/GH-Arcade
-
ci good first issue severity: low
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
TMHSDigital/GH-Arcade#111 ·
-
bug good first issue severity: low
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 88/100
TMHSDigital/GH-Arcade#105 ·
-
bug good first issue severity: low
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
TMHSDigital/GH-Arcade#104 ·
-
Add a game speed assist settingĐang mởaccessibility enhancement severity: low
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 40/100
TMHSDigital/GH-Arcade#114 ·
-
enhancement severity: low
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 35/100
TMHSDigital/GH-Arcade#113 ·
Tất cả issue của TMHSDigital/GH-Arcade
Issue tương tự
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 82/100
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
steelbrain/node-ssh#487 ·
-
cli: `execCargoMetadata` decodes stdout per chunk, corrupting non-ASCII paths across pipe boundariesĐang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
Maintainer thường phản hồi trong vòng 1 ngày
-
community first-timers-only good first issue hacktoberfest help wanted low hanging fruit up-for-grabs
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 62/100
lingdojo/kana-dojo#34127 · 1 bình luận · 5 reaction ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 68/100
osmlab/name-suggestion-index#13104 ·
Maintainer thường phản hồi trong vòng 1 ngày