M0: skelett, byggkedja och dokumentation för JP Subway Pussel

- Go 1.27 + Ebitengine v2.10, intern upplösning 320x180 med heltalsskalning
- internal/res (resursuppslag), internal/rng (seedad slump), internal/level
  (banformat, validering, BFS-lösbarhet) med tester; internal/archtest
  kontrollerar att bara presentationslagret beror på Ebitengine
- tools/build: debug -> build/debug/, release -> build/release/<os>-<arch>/
  med resources/ bredvid binären; Windows korsbyggs utan C-verktyg
- VS Code tasks (build/test/release) och launch (dlv)
- Första banan 001-flygplatsen, sv/en-texter, skyltordbok, placeholder-sprite
- doc/: spelbeskrivning (renskriven), mål och tester, roadmap med teknikval
  (M0–M12), plan.md; README med bygg- och beroendeinformation

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
2026-10-23 18:52:10 +02:00
commit c1f9546af6
32 changed files with 2165 additions and 0 deletions

3
.vscode/extensions.json vendored Normal file
View File

@@ -0,0 +1,3 @@
{
"recommendations": ["golang.go"]
}

43
.vscode/launch.json vendored Normal file
View File

@@ -0,0 +1,43 @@
{
// F5 = "Debug (dlv)". Kräver VS Code-tillägget golang.go, som installerar
// delve (dlv) åt dig första gången (eller: go install github.com/go-delve/delve/cmd/dlv@latest).
"version": "0.2.0",
"configurations": [
{
"name": "Debug (dlv)",
"type": "go",
"request": "launch",
"mode": "debug",
"program": "${workspaceFolder}/cmd/jp-subway-pussel",
"cwd": "${workspaceFolder}",
"args": ["-level", "001-flygplatsen"],
"env": {}
},
{
"name": "Debug: build/debug-binären",
"type": "go",
"request": "launch",
"mode": "exec",
"preLaunchTask": "build",
"program": "${workspaceFolder}/build/debug/jp-subway-pussel",
"windows": { "program": "${workspaceFolder}/build/debug/jp-subway-pussel.exe" },
"cwd": "${workspaceFolder}/build/debug"
},
{
"name": "Kör release (linux-amd64)",
"type": "go",
"request": "launch",
"mode": "exec",
"preLaunchTask": "build: release (linux-amd64)",
"program": "${workspaceFolder}/build/release/linux-amd64/jp-subway-pussel",
"cwd": "${workspaceFolder}/build/release/linux-amd64"
},
{
"name": "Debug: tester i aktuell fil",
"type": "go",
"request": "launch",
"mode": "test",
"program": "${fileDirname}"
}
]
}

7
.vscode/settings.json vendored Normal file
View File

@@ -0,0 +1,7 @@
{
"go.testFlags": ["-count=1"],
"go.lintOnSave": "package",
"go.vetOnSave": "package",
"files.exclude": { "build/": true },
"[go]": { "editor.formatOnSave": true }
}

81
.vscode/tasks.json vendored Normal file
View File

@@ -0,0 +1,81 @@
{
// Byggtasks. Allt går via `go run ./tools/build` så att samma kommandon
// fungerar på Linux och Windows utan make/bash.
// Ctrl+Shift+B = "build" (debug). Terminal > Run Task… för övriga.
"version": "2.0.0",
"tasks": [
{
"label": "build",
"detail": "Debug-bygge → build/debug/ (standard, Ctrl+Shift+B)",
"type": "process",
"command": "go",
"args": ["run", "./tools/build", "-mode", "debug"],
"group": { "kind": "build", "isDefault": true },
"problemMatcher": ["$go"],
"presentation": { "reveal": "silent", "clear": true }
},
{
"label": "build: release (linux-amd64)",
"detail": "Release-bygge → build/release/linux-amd64/",
"type": "process",
"command": "go",
"args": ["run", "./tools/build", "-mode", "release", "-os", "linux", "-arch", "amd64"],
"group": "build",
"problemMatcher": ["$go"],
"presentation": { "clear": true }
},
{
"label": "build: release (windows-amd64)",
"detail": "Release-bygge (korsbygge, ren Go) → build/release/windows-amd64/",
"type": "process",
"command": "go",
"args": ["run", "./tools/build", "-mode", "release", "-os", "windows", "-arch", "amd64"],
"group": "build",
"problemMatcher": ["$go"],
"presentation": { "clear": true }
},
{
"label": "build: release (alla plattformar)",
"detail": "Linux + Windows release-byggen",
"dependsOn": ["build: release (linux-amd64)", "build: release (windows-amd64)"],
"dependsOrder": "sequence",
"group": "build",
"problemMatcher": []
},
{
"label": "run: debug",
"detail": "Bygg debug och starta spelet (utan debugger)",
"type": "process",
"command": "go",
"args": ["run", "./tools/build", "-mode", "debug", "-run"],
"problemMatcher": ["$go"],
"presentation": { "clear": true }
},
{
"label": "test",
"detail": "go test ./...",
"type": "process",
"command": "go",
"args": ["test", "./..."],
"group": { "kind": "test", "isDefault": true },
"problemMatcher": ["$go"],
"presentation": { "clear": true }
},
{
"label": "test: verbose med race-detektor",
"type": "process",
"command": "go",
"args": ["test", "-race", "-v", "./..."],
"group": "test",
"problemMatcher": ["$go"],
"presentation": { "clear": true }
},
{
"label": "vet",
"type": "process",
"command": "go",
"args": ["vet", "./..."],
"problemMatcher": ["$go"]
}
]
}