Commit Graph
18 Commits
Author SHA1 Message Date
tiennm99 39bbcd98bc test(database): unit tests for store and room operations
19 tests covering: unique ID assignment, PVP/PVE room creation, color
randomization, invalid difficulty rejection, join/leave/watch/unwatch,
empty-room cleanup, snapshot independence, ApplyMove turn advancement,
move history recording, win detection, Reset clearing, and IsOwner.
2026-04-11 13:31:04 +07:00
tiennm99 acf08669dd feat(database): new domain model for PVP/PVE/spectator with thread-safe store
- Split monolithic database.go/model.go/gomoku.go into focused files:
  player.go, room.go, store.go, errors.go, events.go, cleanup.go
- NewRoom embeds game.Board directly; carries blackPlayerId, whitePlayerId,
  currentTurn, moveHistory, spectators, owner, type, difficulty from caro domain
- Store singleton with sync.RWMutex: RegisterPlayer, CreatePvpRoom, CreatePveRoom,
  JoinNewRoom, LeaveNewRoom, WatchNewRoom, UnwatchNewRoom, BroadcastToNewRoom
- PVE rooms randomly assign human to Black or White; AI takes opposite side
- legacy.go shim keeps server/state/*.go and state/game/gomoku.go compiling
  without modification until phase-06 rewrites them
- consts/const.go: add RoomTypePvp/Pve, Status*, RoomStatus*, Difficulty* enums
2026-04-11 13:30:58 +07:00
tiennm99 a5acd69b87 feat(client): phaser+vite bootstrap with html shell, game config, and scene stubs
- index.html: dark shell with #game-container (Phaser canvas parent),
  #ui-overlay containing #menu-root, #game-hud-root, #toast-container
- vite.config.js: port 5173, strictPort, sourcemap build, no GitHub Pages base
- src/main.js: instantiates Phaser.Game from gameConfig
- src/config/game-config.js: 800x800 FIT canvas, parent=game-container, scene list
- src/config/protocol-constants.js: ClientEventCode enum aligned to response.proto
  oneofs; adds SPECTATOR_CANNOT_ACT, renames GAME_WATCH_SUCCESSFUL to
  WATCH_GAME_SUCCESS, drops CLIENT_KICK (no proto case)
- src/scenes/boot-scene.js|menu-scene.js|game-scene.js: minimal stubs for Phaser
  scene registry; phase-09 replaces them with real implementations
2026-04-11 12:48:07 +07:00
tiennm99 43b349e09e chore: remove .gitkeep placeholders now that phase-02 and phase-03 populated the directories 2026-04-11 12:42:58 +07:00
tiennm99 a5d1443327 feat(client): initial package.json and generated protobuf bindings
Adds Phaser+Vite+protobufjs package.json with proto:gen script, installs
dependencies, and commits generated protocol.js and protocol.d.ts so
builds work without requiring protoc or pbjs on every dev box.
Also adds node_modules/ to root .gitignore.
2026-04-11 12:41:06 +07:00
tiennm99 c40120d6db feat(server): add protoc-gen-go toolchain and generated proto code
Adds tools.go to pin protoc-gen-go, updates go.mod/go.sum with
google.golang.org/protobuf, generates request.pb.go and response.pb.go,
and adds a make proto target to server/Makefile for regen.
2026-04-11 12:40:53 +07:00
tiennm99 bb799da2c5 feat(proto): port caro protobuf schemas with com.miti99.gomoku.proto namespace
Copies request.proto and response.proto from caro, renames package to
com.miti99.gomoku.proto, drops Java options, adds go_package option,
and appends SpectatorCannotActResponse (field 21) to the Response oneof.
2026-04-11 12:40:45 +07:00
tiennm99 a8b7ab37e4 feat: add gomoku AI with easy/medium/hard difficulty and tests
Port GomokuAI.java to Go with three difficulty levels:
- Easy: uniform random (seeded RNG for determinism)
- Medium: immediate win/block heuristic from caro
- Hard: true minimax depth-3 with alpha-beta pruning

evaluatePosition uses caro threat-pattern weights (open-four=100000,
closed-four=10000, open-three=1000, etc.) as leaf evaluator.
candidateMoves limits branching to radius-2 Chebyshev neighbours.
Benchmark: ~71µs/move on 30-stone mid-game board (budget: <1s).
2026-04-11 12:30:59 +07:00
tiennm99 b20262b85a feat: add gomoku board and helper logic with tests
Port Board.java and GomokuHelper.java to idiomatic Go under server/game/.
Board is a value type ([15][15]Piece) enabling zero-allocation Clone().
Helper provides ValidMoves, FormatBoard, WinnerMessage as pure functions.
Covers all 4 win directions, draw, OOB, occupied-cell, and reset cases.
2026-04-11 12:30:50 +07:00
tiennm99 1ce619ba4c chore: add skeleton directories for future phases
common/proto/, server/game/, server/protocol/, client/src/{config,scenes,
services,objects,ui,generated} — all .gitkeep placeholders.
2026-04-11 12:07:25 +07:00
tiennm99 b089e64955 refactor: delete api/, core/, old client/, web/, server/bot/, server/network/tcp.go
Removed legacy Java API, Go shared core lib, Go CLI client, vanilla-JS web
client, QQ bot integration, and TCP listener. Server is now WS-only.
2026-04-11 12:07:18 +07:00
tiennm99 1b9eec5f7d refactor: rename Go module and copy core pkgs into server/pkg
- Module: github.com/ratel-online/server → github.com/tiennm99/gomoku/server
- Copied core/{log,util/async,util/json,util/strings,model,network,protocol,consts}
  into server/pkg/* (temporary shims until phase-05 replaces protocol/network)
- Rewrote all ratel-online import paths across server/**/*.go
- Trimmed main.go: single -p flag, WS-only on :1999, no TCP/bot/static
- Trimmed network/wss.go: endpoint /gomoku, no static file serving
- Updated Makefile: removed TCP/bot references, port 1999
2026-04-11 12:04:03 +07:00
tiennm99 5ccd4e7ce2 feat: add documentation, code comments, and update Docker config
Rewrite README with usage guide, deployment instructions, and protocol
docs. Update CLAUDE.md to reflect gomoku-only architecture. Add English
doc comments to all key server Go files, replacing Chinese comments.

Create docs/system-architecture.md (state machine, protocol, database
schema) and docs/deployment-guide.md (local dev, Docker, production
nginx, resource requirements).

Update Dockerfile to Go 1.22 with repo-root build context to include
web client. Update docker-compose to match.
2026-04-09 23:35:46 +07:00
tiennm99 cdcc3e0623 refactor: remove legacy card game code, keep only gomoku
Remove 3,612 lines of card game implementations (Dou Dizhu, Texas
Hold'em, Mahjong, Uno, Liar's Bar, Run Fast), their database models,
rule engine, skill system, and render package.

Simplify Room struct by removing card-game-specific fields, clean up
consts to only gomoku game type, and remove unused dependencies
(mahjong, uno, cast, color).
2026-04-09 23:23:58 +07:00
tiennm99 2635151ce2 feat: add gomoku game type and web client with canvas board engine
Add server-side gomoku (five-in-a-row) as game type 9 with 15x15 board,
2-player rooms, move validation, win detection in 4 directions, and
draw detection. Includes channel-based turn sync with mutex-protected
board access.

Add vanilla JS web client served as static files from the Go server:
WebSocket connection with base64 packet encoding, state machine
navigation, Canvas-based board renderer with gradient stones, hover
ghost, last-move highlight, and game-over overlay.
2026-04-09 22:25:24 +07:00
tiennm99 0464d8a36f feat: add CLAUDE.md with project architecture and build instructions 2026-04-09 17:25:18 +07:00
tiennm99 6e3670aec8 feat: add ratel-online server, core, client, and api sources
Import source files from ratel-online organization repos into monorepo
structure for gomoku game development. Update README with project
structure and credits for original authors.
2026-04-09 17:09:41 +07:00
Tien Nguyen MinhandGitHub ee7edaf727 Initial commit 2025-06-22 22:59:08 +07:00