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

Aberta
#31 0 comentários 0 reações 0 responsáveis Ver no GitHub

Ninguém assumiu esta issue ainda.

Avaliação

Dificuldade
5/5
Tempo estimado
Mais de uma semana
Facilidade para iniciantes
35/100
Tipo de issue
Refatoração
Clareza
Claramente especificada
Status de atividade
Ativa
Stack de tecnologia
javascript
Domínio
backend, game-dev

Direção de pesquisa

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.

Escrita pelo modelo de indexação a partir do texto da issue.

Descrição

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

Linguagem predominante
JavaScript
Estrelas
4
Forks
2
Métricas de merge de PRs
Nenhum PR com merge em 30d

Preparar o ambiente

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de TMHSDigital/Static_Chess

Todas as issues de TMHSDigital/Static_Chess

Issues semelhantes

Mais issues de JavaScript

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.