1
0
mirror of https://github.com/maaslalani/gambit.git synced 2024-11-28 08:38:36 +02:00

refactor: position

This commit is contained in:
Maas Lalani 2021-11-27 15:25:58 -05:00
parent 82c54e7919
commit ec63525eb6
No known key found for this signature in database
GPG Key ID: F53774FA051C052A
3 changed files with 35 additions and 34 deletions

View File

@ -22,27 +22,27 @@ const (
)
type Board struct {
Pieces []*Piece
Grid [dimensions][dimensions]*Piece
flipped bool
}
func (b *Board) Move(from, to position) {
p := b.Grid[from[0]-1][from[1]-1]
func (b *Board) Move(from, to string) {
fromPos, toPos := ToPosition(from), ToPosition(to)
p := b.Grid[fromPos[0]-1][fromPos[1]-1]
if p == nil {
return
}
cp := b.Grid[to[0]-1][to[1]-1]
cp := b.Grid[toPos[0]-1][toPos[1]-1]
if cp != nil {
// TODO: Capture
}
b.Grid[from[0]-1][from[1]-1] = nil
b.Grid[to[0]-1][to[1]-1] = p
p.Position = to
b.Grid[fromPos[0]-1][fromPos[1]-1] = nil
b.Grid[toPos[0]-1][toPos[1]-1] = p
p.Position = toPos
}
func (b *Board) Draw() {
for _, piece := range b.Pieces {
func (b *Board) Init(pieces []*Piece) {
for _, piece := range pieces {
p := piece
b.Grid[piece.Position[0]-1][piece.Position[1]-1] = p
}

40
main.go
View File

@ -2,15 +2,14 @@ package main
import (
"log"
"strconv"
"strings"
tea "github.com/charmbracelet/bubbletea"
)
func main() {
m := model{}
m.Board.Pieces = append(m.Board.Pieces, WhitePieces()...)
m.Board.Pieces = append(m.Board.Pieces, BlackPieces()...)
m.Board.Init(append(WhitePieces(), BlackPieces()...))
p := tea.NewProgram(m, tea.WithMouseAllMotion())
if err := p.Start(); err != nil {
log.Fatal(err)
@ -19,48 +18,39 @@ func main() {
type model struct {
Board Board
Move struct {
From position
To position
}
From string
To string
}
func (m model) Init() tea.Cmd { return nil }
func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
m.Board.Draw()
switch msg := msg.(type) {
case tea.KeyMsg:
switch msg.String() {
case "ctrl+c", "q":
return m, tea.Quit
case "esc":
if m.Move.From[0] > 0 && m.Move.From[1] > 0 {
m.Board.Grid[m.Move.From[0]-1][m.Move.From[1]-1].Selected = false
}
m.Move.From, m.Move.To = position{}, position{}
m.From, m.To = "", ""
case "1", "2", "3", "4", "5", "6", "7", "8":
i, _ := strconv.Atoi(msg.String())
rank := msg.String()
// `From` and `To` moves will be complete, perform move
if m.Move.To[1] > 0 {
m.Move.To[0] = i
m.Board.Grid[m.Move.From[0]-1][m.Move.From[1]-1].Selected = false
m.Board.Move(m.Move.From, m.Move.To)
m.Move.From, m.Move.To = position{}, position{}
if len(m.To) >= 1 {
m.To += rank
m.Board.Move(m.From, m.To)
m.From, m.To = "", ""
} else {
m.Move.From[0] = i
m.Board.Grid[i-1][m.Move.From[1]-1].Selected = true
m.From += rank
}
return m, nil
case "a", "b", "c", "d", "e", "f", "g", "h",
"A", "B", "C", "D", "E", "F", "G", "H":
col := FileToColumn(msg.String())
file := strings.ToUpper(msg.String())
// If we already have the `From` rank set, set the `To` column
if m.Move.From[0] > 0 {
m.Move.To[1] = col
if len(m.From) == 2 {
m.To = file
} else {
m.Move.From[1] = col
m.From = file
}
return m, nil

View File

@ -2,6 +2,7 @@ package main
import (
"fmt"
"strconv"
)
type piece string
@ -36,6 +37,16 @@ var pieces = map[piece]string{
// e.g. [1, 4] (D1)
type position [2]int
func ToPosition(square string) position {
if len(square) != 2 {
return position{0, 0}
}
rank, _ := strconv.Atoi(string(square[1]))
file := FileToColumn(string(square[0]))
return position{rank, file}
}
func (p position) String() string {
return p.File() + p.Rank()
}