Render player and opponent hands

This commit is contained in:
Trevor Slocum 2020-08-15 13:25:20 -07:00
parent f8cb61b963
commit f432cba495
4 changed files with 56 additions and 22 deletions

View File

@ -56,6 +56,7 @@ func (c *cardStackWidget) Draw(screen tcell.Screen) {
if i > 0 && cardWidget.selected && !c.Cards[i-1].selected {
screen.SetContent(stackX+(i*cardBufferX), stackY+cardOffsetY+1, tcell.RuneRTee, nil, tcell.StyleDefault)
screen.SetContent(stackX+(i*cardBufferX)+(cardBufferX)+2, (stackY+cardOffsetY+cardHeight)-1, tcell.RuneTTee, nil, tcell.StyleDefault)
}
if i > 0 && (i > 1 && !cardWidget.selected && c.Cards[i-1].selected && !c.Cards[i-2].selected) {
@ -86,7 +87,7 @@ func (c *cardStackWidget) MouseHandler() func(action cview.MouseAction, event *t
for i := range c.Cards {
card := c.Cards[(len(c.Cards)-1)-i]
if card.InRect(event.Position()) {
if c.MaxSelection > 0 && !card.selected {
if c.MaxSelection != 0 && !card.selected {
selected := 0
for i := range c.Cards {
if c.Cards[i].selected {

View File

@ -27,7 +27,7 @@ func (c *cardWidget) Draw(screen tcell.Screen) {
color := tcell.ColorDefault
if c.Card.Suit == joker.SuitHearts || c.Card.Suit == joker.SuitDiamonds {
color = tcell.ColorRed
color = tcell.NewHexColor(0xFF3232)
}
x, y, w, h := c.GetInnerRect()

View File

@ -26,7 +26,7 @@ type GameState struct {
Hand1 joker.Cards `json:"hand1"`
Hand2 joker.Cards `json:"hand2"`
Crib PlayerCards `json:"crib"`
Crib joker.Cards `json:"crib"`
Score1 int `json:"score1"`
Score2 int `json:"score2"`

71
main.go
View File

@ -10,17 +10,19 @@ import (
"bytes"
"github.com/gorilla/websocket"
"gitlab.com/tslocum/crib/pkg/render"
"gitlab.com/tslocum/cview"
"gitlab.com/tslocum/joker"
)
var (
app *cview.Application
mainBuf *cview.TextView
statusBuf *cview.TextView
mainStack *cardStackWidget
exit = make(chan bool)
app *cview.Application
mainBuf *cview.TextView
statusBuf *cview.TextView
mainHandStack *cardStackWidget
mainCribStack *cardStackWidget
oppHandStack *cardStackWidget
oppCribStack *cardStackWidget
exit = make(chan bool)
)
func connect(address string) {
@ -59,13 +61,40 @@ func connect(address string) {
}
if gameState.Player > 0 {
hand := gameState.Hand1
playerHand := gameState.Hand1
oppHand := gameState.Hand2
if gameState.Player == 2 {
hand = gameState.Hand2
playerHand = gameState.Hand2
oppHand = gameState.Hand1
}
mainBuf.Clear()
mainBuf.Write(combineBuffers(render.Cards(hand, 9, 9, 4), render.Cards(hand, 9, 9, 4), []byte(" ")))
playerCrib := gameState.Crib
var oppCrib joker.Cards
if gameState.Dealer != gameState.Player {
playerCrib = joker.Cards{}
oppCrib = gameState.Crib
}
mainHandStack.Cards = make([]*cardWidget, len(playerHand))
mainCribStack.Cards = make([]*cardWidget, len(playerCrib))
oppHandStack.Cards = make([]*cardWidget, len(oppHand))
oppCribStack.Cards = make([]*cardWidget, len(oppCrib))
for i := 0; i < len(playerHand); i++ {
mainHandStack.Cards[i] = NewCardWidget(playerHand[i])
}
for i := 0; i < len(playerCrib); i++ {
mainCribStack.Cards[i] = NewCardWidget(playerCrib[i])
}
for i := 0; i < len(oppHand); i++ {
oppHandStack.Cards[i] = NewCardWidget(oppHand[i])
}
for i := 0; i < len(oppCrib); i++ {
oppCribStack.Cards[i] = NewCardWidget(oppCrib[i])
}
}
statusBuf.Write([]byte(fmt.Sprintf("decode: %+v\n", gameState)))
@ -123,14 +152,15 @@ func main() {
app = cview.NewApplication().EnableMouse(true)
mainStack = NewCardStackWidget()
mainHandStack = NewCardStackWidget()
mainCribStack = NewCardStackWidget()
oppHandStack = NewCardStackWidget()
oppCribStack = NewCardStackWidget()
mainStack.MaxSelection = 2
for _, card := range joker.StandardCards {
cardWidget := NewCardWidget(card)
mainStack.Cards = append(mainStack.Cards, cardWidget)
}
mainHandStack.MaxSelection = 2
mainCribStack.MaxSelection = -1
oppHandStack.MaxSelection = -1
oppCribStack.MaxSelection = -1
g := cview.NewGrid()
@ -140,8 +170,11 @@ func main() {
statusBuf = cview.NewTextView().SetWrap(true).SetWordWrap(true)
//g.AddItem(mainBuf, 0, 0, 1, 1, 0, 0, false)
g.AddItem(mainStack, 0, 0, 1, 1, 0, 0, false)
g.AddItem(statusBuf, 1, 0, 1, 1, 0, 0, false)
g.AddItem(mainHandStack, 0, 0, 1, 1, 0, 0, false)
g.AddItem(mainCribStack, 0, 1, 1, 1, 0, 0, false)
g.AddItem(oppHandStack, 1, 0, 1, 1, 0, 0, false)
g.AddItem(oppCribStack, 1, 1, 1, 1, 0, 0, false)
g.AddItem(statusBuf, 2, 0, 1, 2, 0, 0, false)
app.SetRoot(g, true)