From 7a00469634662c7da21b2c643c2575fffa3f41d6 Mon Sep 17 00:00:00 2001 From: Steve Date: Fri, 16 Jul 2021 15:35:29 -0400 Subject: [PATCH] command loop active, fix some obvious bugs --- board.go | 6 +++++- card.go | 18 ++++++++---------- game.go | 11 +++++++++-- main.go | 43 ++++++++++++++++++++++++++----------------- 4 files changed, 48 insertions(+), 30 deletions(-) diff --git a/board.go b/board.go index 92aa8c7..f681d73 100644 --- a/board.go +++ b/board.go @@ -39,6 +39,10 @@ func (b *Board) Move(id, src, dest int) bool { if !brd[dest].Empty() { return false } + if brd[src].Acted() { + return false + } + brd[dest].Act() brd[dest] = brd[src] brd[src] = NewCard(-1) if id == 1 { @@ -94,7 +98,7 @@ func (b *Board) Attack(id int, atk, def int) int { if aBrd[atk].Empty() || !aBrd[atk].CanAttack(atk, def) { return -1 } - aBrd[atk].Acted() + aBrd[atk].Act() if dBrd[def].Empty() { //health damage if id == 1 { diff --git a/card.go b/card.go index 874bf76..ecef9b6 100644 --- a/card.go +++ b/card.go @@ -8,7 +8,8 @@ type Card interface { Endstep(g *Game) *Game Enters(g *Game) *Game Value() CardValue - Acted() + Act() + Acted() bool Empty() bool String() string CanAttack(int, int) bool @@ -38,7 +39,11 @@ func (g *GenericCard) Value() CardValue { return g.Val } -func (g *GenericCard) Acted() { +func (g *GenericCard) Acted() bool { + return g.Sick +} + +func (g *GenericCard) Act() { g.Sick = true } @@ -87,7 +92,7 @@ func NewCard(v int) Card { return &EmptyCard{ &GenericCard{ Val: EmptyValue, - Sick: false, + Sick: true, }, } case 1: @@ -139,13 +144,6 @@ type AceCard struct { *GenericCard } -func (a *AceCard) CanAttack(x, y int) bool { - if x == y { - return true - } - return false -} - type FourCard struct { *GenericCard } diff --git a/game.go b/game.go index 05bcba1..582e9a7 100644 --- a/game.go +++ b/game.go @@ -50,7 +50,7 @@ func NewGame() *Game { } func (g *Game) String() string { - return fmt.Sprintf("Sen(%v): %v\n\n%v\n\nSco(%v): %v\n%v %v\n%v\n", g.SentinalPlayer.Life, g.SentinalPlayer.Hand, g.GameBoard, g.ScourgePlayer.Life, g.ScourgePlayer.Hand, g.Status, g.CanDraw, g.CardBuffer) + return fmt.Sprintf("Sen(%v): %v\n\n%v\n\nSco(%v): %v\nStatus:%v Draw:%v Turn:%v\n%v\n", g.SentinalPlayer.Life, g.SentinalPlayer.Hand, g.GameBoard, g.ScourgePlayer.Life, g.ScourgePlayer.Hand, g.Status, g.CanDraw, g.CurrentTurn, g.CardBuffer) } func (g *Game) PlayerStateAct(id int, cmd string) *Game { @@ -93,6 +93,7 @@ func (g *Game) PlayerStateAct(id int, cmd string) *Game { g.SentinalDeck.Cards = g.SentinalDeck.Cards[0 : len(g.SentinalDeck.Cards)-5] g.ScourgePlayer.Hand = g.ScourgeDeck.Cards[len(g.ScourgeDeck.Cards)-5 : len(g.ScourgeDeck.Cards)] g.SentinalDeck.Cards = g.ScourgeDeck.Cards[0 : len(g.ScourgeDeck.Cards)-5] + return g case "s": //start turn @@ -137,6 +138,7 @@ func (g *Game) PlayerStateAct(id int, cmd string) *Game { } return g } + fmt.Println("invalid state command") return nil } @@ -163,7 +165,7 @@ func (g *Game) PlayerAct(id int, cmd string) []Card { switch cmd_s[0] { case "s": //scry: return scry options off top of deck - if !g.CanDraw { + if !g.CanDraw || len(g.CardBuffer) > 0 { return nil } g.CardBuffer = currD.Scry(curr.Life) @@ -219,13 +221,16 @@ func (g *Game) PlayerAct(id int, cmd string) []Card { } else if res == 0 { return g.GameBoard.GetRow(g.CurrentTurn) } else { + fmt.Println("can't attack") return []Card{} } case "p": //play: return player boad or [] if invalid if len(cmd_s) != 3 { + fmt.Println("not enough arguments") return nil } + fmt.Println("playing") x_i, _ := strconv.Atoi(cmd_s[1]) y_i, _ := strconv.Atoi(cmd_s[2]) card := curr.Hand[x_i] @@ -238,9 +243,11 @@ func (g *Game) PlayerAct(id int, cmd string) []Card { curr.Hand = append(curr.Hand[:x_i], curr.Hand[x_i+1:]...) return g.GameBoard.GetRow(g.CurrentTurn) } else { + fmt.Println("couldn't play") return []Card{} } default: + fmt.Println("Invalid act command") return nil } return nil diff --git a/main.go b/main.go index c3d60f2..fe08f5c 100644 --- a/main.go +++ b/main.go @@ -1,25 +1,34 @@ package main -import "fmt" +import ( + "bufio" + "fmt" + "os" + "strings" +) func main() { + reader := bufio.NewReader(os.Stdin) g := NewGame() - g.PlayerStateAct(1, "b") - g.PlayerStateAct(1, "s") - tmp := g.PlayerStateAct(1, "d") - fmt.Println("begin") - fmt.Println(tmp) - fmt.Println("scry") - scry := g.PlayerAct(1, "s") - fmt.Println(scry) - fmt.Println("draw") - g.PlayerAct(1, "d 1") - h2 := g.PlayerStateAct(1, "d") - fmt.Println(h2) - fmt.Println("play") - g.PlayerAct(1, "p 1 3") - b2 := g.PlayerStateAct(1, "d") - fmt.Println(b2) + for { + var t, cmd string + var i int + fmt.Print("> ") + _, err := fmt.Scanf("%s %d", &t, &i) + if t == "x" { + return + } + cmd_raw, _ := reader.ReadString('\n') + cmd = strings.TrimSpace(cmd_raw) + if t == "s" { + fmt.Println(g.PlayerStateAct(i, cmd)) + } else if t == "a" { + fmt.Println(g.PlayerAct(i, cmd)) + } else { + fmt.Println("error parsing") + fmt.Println(err) + } + } }