Extract a DOM-free rules core from makeMove and move generation

Đang mở
#31 0 bình luận 0 reaction 0 người được giao Xem trên GitHub

Chưa có ai nhận issue này.

Đánh giá

Độ khó
5/5
Thời gian dự kiến
Hơn một tuần
Mức phù hợp với người mới
35/100
Loại issue
Tái cấu trúc
Độ rõ ràng
Đặc tả rõ ràng
Mức độ hoạt động
Sôi nổi
Công nghệ
javascript
Lĩnh vực
backend, game-dev

Hướng nghiên cứu

Read js/game.js at makeMove (143-276) and move generation (334-461), then check how js/ai.js uses _getAllLegalMoves (132-139). Start by adding the listed undo, SAN, and perft tests; run them with npm test. Done means moves apply to a board copy without DOM access, special-move edits share one implementation, and the stated perft counts pass.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

severity: medium tech-debt

Summary

makeMove is about 130 lines mixing rule execution, the undo snapshot, notation, game-end detection, rendering, sound and persistence, all against module-level state. Move generation and check detection read the same globals. Special-move rules therefore exist in three places that must change together.

Where

  • js/game.js:143-276 (makeMove)
  • js/game.js:334-461 (generateLegalMovesForPiece, including a hand-copied simulation of en passant and castling at :414-444)
  • js/game.js:5-20 (module state and DOM lookups at load)
  • js/ai.js:132-139 (_getAllLegalMoves returns [])

Impact

js/game.js is the most-changed source file. The ordering dependencies inside makeMove produced #24, and the generator and canCastle disagreeing produced #22. Two roadmap features are blocked by this shape: a promotion choice needs the move to pause for a dialog, and an AI search needs to apply moves to a board copy without touching the DOM, sound or storage.

Suggested fix

Tests first: undo round trips, SAN for capture, check, mate, castle and en passant, and perft counts from the start position (20, 400, 8902 at depths 1 to 3).

  1. Extract a pure applyMove(state, from, to, promotion) that returns the new board, king positions, en passant target and move record. makeMove calls it and keeps the UI work.
  2. Extract the UI tail (render, status, history, sound, save) into its own function.
  3. Pass promotion as a parameter, defaulting to queen.
  4. Change generateLegalMovesForPiece and canCastle to take a state object, defaulting to the globals so callers keep working.
  5. Replace the hand-rolled simulation at :414-444 with applyMove.

Each step leaves the app working.

Acceptance criteria

  • Legal moves can be generated and a move applied on a board copy with no DOM
  • Special-move board edits live in one place
  • Perft counts pass

Getting started

  • Relevant files: js/game.js, js/ai.js
  • How to run tests: npm install, then npm test and npm run lint
  • Related docs: docs/ARCHITECTURE.md, .github/CONTRIBUTING.md

Filed by repo-audit/full-audit at 8a2c86c. Severity: medium. Effort: L. audit-key: tech-debt|js/game.js|makeMove

Ngôn ngữ chính
JavaScript
Star
4
Fork
2
Chỉ số merge pull request
Không có pull request nào được merge trong 30 ngày

Chuẩn bị môi trường

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. 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.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của TMHSDigital/Static_Chess

Tất cả issue của TMHSDigital/Static_Chess

Issue tương tự

Thêm issue về JavaScript

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.