Forgot the diffs made with my jank diff thing.

master
Zed A. Shaw 1 day ago
parent d75dd78e3b
commit 17e7fef95c
  1. 19
      02_mazes_and_enemies/game.go.diff
  2. 9
      02_mazes_and_enemies/main.go.diff
  3. 34
      02_mazes_and_enemies/map.go.diff
  4. 12
      02_mazes_and_enemies/ui.go.diff
  5. 20
      03_pathing_enemies/data.go.diff
  6. 29
      03_pathing_enemies/debug.go.diff
  7. 8
      03_pathing_enemies/game.go.diff
  8. 9
      03_pathing_enemies/main.go.diff
  9. 19
      03_pathing_enemies/map.go.diff
  10. 13
      03_pathing_enemies/movement.go.diff
  11. 12
      03_pathing_enemies/ui.go.diff
  12. 9
      04_combat/data.go.diff
  13. 16
      04_combat/game.go.diff
  14. 17
      04_combat/go.mod.diff
  15. 35
      04_combat/main.go.diff
  16. 11
      04_combat/movement.go.diff
  17. 10
      crank_diff.sh
  18. 4
      gen_diffs.sh

@ -0,0 +1,19 @@
--- 01_the_screen/game.go 2025-10-06 10:40:36.384247800 -0400
+++ 02_mazes_and_enemies/game.go 2025-10-06 10:40:37.923662000 -0400
@@ -3,4 +3,5 @@
import (
"os"
+ "math/rand"
)
@@ -24,2 +25,10 @@
os.Exit(0)
}
+
+func (game *Game) PlaceEnemies(places []Position) {
+ for _, pos := range places {
+ if rand.Int() % 2 == 0 {
+ game.Enemies[pos] = &Enemy{10, pos, 4}
+ }
+ }
+}

@ -0,0 +1,9 @@
--- 01_the_screen/main.go 2025-10-06 00:33:27.349824400 -0400
+++ 02_mazes_and_enemies/main.go 2025-10-06 11:53:40.243831800 -0400
@@ -8,4 +8,6 @@
game.NewMap()
+ dead_ends := game.NewMaze()
+ game.PlaceEnemies(dead_ends)
game.Render()

@ -0,0 +1,34 @@
--- 01_the_screen/map.go 2025-10-06 23:32:48.943928000 -0400
+++ 02_mazes_and_enemies/map.go 2025-10-06 23:33:02.887088700 -0400
@@ -22,4 +22,5 @@
func (game *Game) Occupied(pos Position) bool {
+ _, is_enemy := game.Enemies[pos]
is_player := pos == game.Player.Pos
@@ -27,4 +28,5 @@
return !game.Inbounds(pos, 1) ||
game.Level[pos.Y][pos.X] == WALL ||
+ is_enemy ||
is_player
}
@@ -35,2 +37,19 @@
}
}
+
+func (game *Game) Neighbors(near Position) []Position {
+ result := make([]Position, 0, 4)
+ points := compass(near, 2)
+
+ for _, pos := range points {
+ if game.Inbounds(pos, 0) {
+ result = append(result, pos)
+ }
+ }
+
+ return result
+}
+
+func (game *Game) NewMap() {
+ game.FillMap(game.Level, '#')
+}

@ -0,0 +1,12 @@
--- 01_the_screen/ui.go 2025-10-06 10:55:34.357039400 -0400
+++ 02_mazes_and_enemies/ui.go 2025-10-06 11:18:20.691714300 -0400
@@ -69,4 +69,9 @@
game.DrawMap()
game.DrawEntity('@', game.Player.Pos, tcell.ColorYellow)
+
+ for pos, _ := range game.Enemies {
+ game.DrawEntity('G', pos, tcell.ColorRed)
+ }
+
game.DrawStatus()
game.Screen.Show()

@ -0,0 +1,20 @@
--- 02_mazes_and_enemies/data.go 2025-10-06 10:40:57.847195400 -0400
+++ 03_pathing_enemies/data.go 2025-10-06 02:44:43.658927000 -0400
@@ -11,9 +11,10 @@
RENDER = true
SHOW_RENDER = false
- SHOW_PATHS = false
+ SHOW_PATHS = true
HEARING_DISTANCE = 6
)
type Map [][]rune
+type Paths [][]int
type Position struct {
@@ -31,4 +32,5 @@
Screen tcell.Screen
Level Map
+ Paths Paths
Player Enemy
Status string

@ -0,0 +1,29 @@
--- 02_mazes_and_enemies/debug.go 2025-10-06 01:05:42.441647100 -0400
+++ 03_pathing_enemies/debug.go 2025-10-05 23:47:48.686143800 -0400
@@ -4,4 +4,6 @@
"log"
"os"
+ "fmt"
+ "github.com/gdamore/tcell/v2"
)
@@ -13,2 +15,19 @@
dbg = log.New(out, "", log.LstdFlags)
}
+
+func (game *Game) DrawPaths() {
+ for y, row := range game.Paths {
+ for x, path_num := range row {
+ if path_num == PATH_LIMIT { continue }
+
+ as_str := fmt.Sprintf("%x", path_num % 16)
+ style := tcell.StyleDefault.Foreground(tcell.ColorGray)
+
+ if path_num >= 0 && path_num <= 16 {
+ style = style.Reverse(true)
+ }
+
+ game.Screen.SetContent(x, y, rune(as_str[0]), nil, style)
+ }
+ }
+}

@ -0,0 +1,8 @@
--- 02_mazes_and_enemies/game.go 2025-10-06 10:40:37.923662000 -0400
+++ 03_pathing_enemies/game.go 2025-10-06 12:44:21.971080300 -0400
@@ -13,4 +13,5 @@
game.Enemies = make(map[Position]*Enemy)
game.Level = make(Map, height, height)
+ game.Paths = make(Paths, height, height)
game.Player = Enemy{20, Position{1,1}, 4}

@ -0,0 +1,9 @@
--- 02_mazes_and_enemies/main.go 2025-10-06 11:53:40.243831800 -0400
+++ 03_pathing_enemies/main.go 2025-10-06 11:53:48.238068700 -0400
@@ -13,4 +13,6 @@
for game.HandleEvents() {
+ game.CalculatePaths()
+ game.EnemyPathing()
game.Render()
}

@ -0,0 +1,19 @@
--- 02_mazes_and_enemies/map.go 2025-10-06 23:33:02.887088700 -0400
+++ 03_pathing_enemies/map.go 2025-10-06 10:44:52.350308600 -0400
@@ -14,4 +14,16 @@
}
+func (game *Game) CloneMap() Map {
+ // this is a shallow copy though
+ new_map := slices.Clone(game.Level)
+
+ for i, row := range new_map {
+ // this makes sure the row is an actual copy
+ new_map[i] = slices.Clone(row)
+ }
+
+ return new_map
+}
+
func (game *Game) Inbounds(pos Position, offset int) bool {
return pos.X >= offset &&

@ -0,0 +1,13 @@
--- 02_mazes_and_enemies/movement.go 2025-10-06 10:48:12.166620400 -0400
+++ 03_pathing_enemies/movement.go 2025-10-06 12:00:47.091211600 -0400
@@ -11,2 +11,10 @@
}
}
+
+func (game *Game) MoveEnemy(from Position, to Position) {
+ enemy, ok := game.Enemies[from]
+ if !ok { dbg.Fatal("no enemy at", from, "wtf") }
+
+ delete(game.Enemies, from)
+ game.Enemies[to] = enemy
+}

@ -0,0 +1,12 @@
--- 02_mazes_and_enemies/ui.go 2025-10-06 11:18:20.691714300 -0400
+++ 03_pathing_enemies/ui.go 2025-10-06 12:10:53.153215100 -0400
@@ -68,4 +68,9 @@
game.Screen.Clear()
game.DrawMap()
+
+ if SHOW_PATHS {
+ game.DrawPaths()
+ }
+
game.DrawEntity('@', game.Player.Pos, tcell.ColorYellow)

@ -0,0 +1,9 @@
--- 03_pathing_enemies/data.go 2025-10-06 02:44:43.658927000 -0400
+++ 04_combat/data.go 2025-10-05 23:24:48.595383100 -0400
@@ -11,5 +11,5 @@
RENDER = true
SHOW_RENDER = false
- SHOW_PATHS = true
+ SHOW_PATHS = false
HEARING_DISTANCE = 6
)

@ -0,0 +1,16 @@
--- 03_pathing_enemies/game.go 2025-10-06 12:44:21.971080300 -0400
+++ 04_combat/game.go 2025-10-06 10:56:30.634388900 -0400
@@ -34,2 +34,13 @@
}
}
+
+func (game *Game) Restart() {
+ game.SetStatus("YOU DIED! Try again.")
+ game.Player.HP = 20
+ game.Player.Pos = Position{1,1}
+ clear(game.Enemies)
+ game.FillPaths(game.Paths, PATH_LIMIT)
+ game.FillMap(game.Level, '#')
+
+ game.Render()
+}

@ -0,0 +1,17 @@
--- 03_pathing_enemies/go.mod 2025-09-29 00:25:59.856341100 -0400
+++ 04_combat/go.mod 2025-10-06 00:24:48.519375000 -0400
@@ -3,12 +3,10 @@
go 1.25.1
-require (
- github.com/gdamore/tcell/v2 v2.9.0
- github.com/mattn/go-runewidth v0.0.16
-)
+require github.com/gdamore/tcell/v2 v2.9.0
require (
github.com/gdamore/encoding v1.0.1 // indirect
github.com/lucasb-eyer/go-colorful v1.2.0 // indirect
+ github.com/mattn/go-runewidth v0.0.16 // indirect
github.com/rivo/uniseg v0.4.7 // indirect
golang.org/x/sys v0.35.0 // indirect

@ -0,0 +1,35 @@
--- 03_pathing_enemies/main.go 2025-10-06 11:53:48.238068700 -0400
+++ 04_combat/main.go 2025-10-06 11:53:46.781950000 -0400
@@ -7,15 +7,22 @@
game.InitScreen()
- game.NewMap()
- dead_ends := game.NewMaze()
- game.PlaceEnemies(dead_ends)
- game.Render()
-
- for game.HandleEvents() {
- game.CalculatePaths()
- game.EnemyPathing()
+ for {
+ game.NewMap()
+ dead_ends := game.NewMaze()
+ game.PlaceEnemies(dead_ends)
game.Render()
- }
- game.Exit()
+ for game.HandleEvents() && game.Player.HP > 0 {
+ game.EnemyDeath()
+ game.CalculatePaths()
+ game.EnemyPathing()
+ game.Render()
+ }
+
+ if game.Player.HP <= 0 {
+ game.Restart()
+ } else {
+ game.Exit()
+ }
+ }
}

@ -0,0 +1,11 @@
--- 03_pathing_enemies/movement.go 2025-10-06 12:00:47.091211600 -0400
+++ 04_combat/movement.go 2025-10-06 12:00:49.969794700 -0400
@@ -7,5 +7,7 @@
}
- if !game.Occupied(target) {
+ if game.Occupied(target) {
+ game.Attack(target)
+ } else {
game.Player.Pos = target
}

@ -0,0 +1,10 @@
#!/usr/bin/env bash
for p in `diff $1 $2 | grep "^diff" | cut -d " " -f 2-3 | sed "s/ /#/g"`
do
echo $(echo $p | sed "s/#/ /g")
read -r from to <<< "$(echo $p | sed 's/#/ /g')"
diff -u2 $from $to > $to.diff
done

@ -0,0 +1,4 @@
find . -name "*.diff" -exec rm {} \;
./crank_diff.sh 01_the_screen 02_mazes_and_enemies
./crank_diff.sh 02_mazes_and_enemies 03_pathing_enemies
./crank_diff.sh 03_pathing_enemies 04_combat
Loading…
Cancel
Save