parent
b90ab54466
commit
bb6ed81d91
4 changed files with 83 additions and 11 deletions
|
@ -1,3 +1,6 @@
|
|||
1.3.1:
|
||||
- Display doubling cube
|
||||
|
||||
1.3.0:
|
||||
- Remember password
|
||||
|
||||
|
|
BIN
game/asset/image/cubes.png
Normal file
BIN
game/asset/image/cubes.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 23 KiB |
|
@ -59,6 +59,9 @@ type board struct {
|
|||
overlapSize float64
|
||||
|
||||
lastPlayerNumber int8
|
||||
lastPoints int8
|
||||
lastDoubleValue int8
|
||||
lastDoublePlayer int8
|
||||
lastVariant int8
|
||||
|
||||
gameState *bgammon.GameState
|
||||
|
@ -1393,6 +1396,22 @@ func (b *board) updateBackgroundImage() {
|
|||
}
|
||||
b.backgroundImage.DrawImage(ebiten.NewImageFromImage(b.baseImage), nil)
|
||||
|
||||
// Doubling cube.
|
||||
if b.gameState.Points > 1 {
|
||||
var cubeY float64
|
||||
switch b.gameState.DoublePlayer {
|
||||
case 1:
|
||||
cubeY = float64(b.h) - b.verticalBorderSize - b.overlapSize*5 - 2 - float64(etk.Scale(mediumFontSize)) - 2 - cubesImageSize
|
||||
case 2:
|
||||
cubeY = b.verticalBorderSize + b.overlapSize*5 + 2 + float64(etk.Scale(mediumFontSize)) + 2
|
||||
default:
|
||||
cubeY = float64(b.h)/2 - cubesImageSize/2
|
||||
}
|
||||
op := &ebiten.DrawImageOptions{}
|
||||
op.GeoM.Translate(float64(b.w)-b.spaceWidth/2-float64(cubesImageSize)/2-1, cubeY)
|
||||
b.backgroundImage.DrawImage(cubeImage(b.gameState.DoubleValue), op)
|
||||
}
|
||||
|
||||
// Draw space numbers.
|
||||
fontMutex.Lock()
|
||||
defer fontMutex.Unlock()
|
||||
|
@ -2263,9 +2282,14 @@ func (b *board) processState() {
|
|||
if b.lastPlayerNumber != b.gameState.PlayerNumber || b.lastVariant != b.gameState.Variant {
|
||||
b.setSpaceRects()
|
||||
b.updateBackgroundImage()
|
||||
} else if b.lastPoints != b.gameState.Points || b.lastDoublePlayer != b.gameState.DoublePlayer || b.lastDoubleValue != b.gameState.DoubleValue {
|
||||
b.updateBackgroundImage()
|
||||
}
|
||||
b.lastPlayerNumber = b.gameState.PlayerNumber
|
||||
b.lastVariant = b.gameState.Variant
|
||||
b.lastPoints = b.gameState.Points
|
||||
b.lastDoublePlayer = b.gameState.DoublePlayer
|
||||
b.lastDoubleValue = b.gameState.DoubleValue
|
||||
|
||||
if b.flipBoard || b.gameState.PlayerNumber == 2 {
|
||||
if b.opponentLabel.activeColor != colorBlack {
|
||||
|
|
67
game/game.go
67
game/game.go
|
@ -68,6 +68,14 @@ var (
|
|||
imgDice5 *ebiten.Image
|
||||
imgDice6 *ebiten.Image
|
||||
|
||||
imgCubes *ebiten.Image
|
||||
imgCubes2 *ebiten.Image
|
||||
imgCubes4 *ebiten.Image
|
||||
imgCubes8 *ebiten.Image
|
||||
imgCubes16 *ebiten.Image
|
||||
imgCubes32 *ebiten.Image
|
||||
imgCubes64 *ebiten.Image
|
||||
|
||||
extraSmallFont font.Face
|
||||
smallFont font.Face
|
||||
mediumFont font.Face
|
||||
|
@ -178,7 +186,11 @@ func lg(s string) {
|
|||
scheduleFrame()
|
||||
}
|
||||
|
||||
var loadedCheckerWidth = -1
|
||||
var (
|
||||
loadedCheckerWidth = -1
|
||||
diceImageSize = 0.0
|
||||
cubesImageSize = 0.0
|
||||
)
|
||||
|
||||
func loadImageAssets(width int) {
|
||||
if width == loadedCheckerWidth {
|
||||
|
@ -189,7 +201,7 @@ func loadImageAssets(width int) {
|
|||
imgCheckerTop = loadAsset("asset/image/checker_top.png", width)
|
||||
imgCheckerSide = loadAsset("asset/image/checker_side.png", width)
|
||||
|
||||
resizeDice := func(img image.Image) *ebiten.Image {
|
||||
resizeDice := func(img image.Image, scale float64) *ebiten.Image {
|
||||
if game == nil {
|
||||
panic("nil game")
|
||||
}
|
||||
|
@ -206,17 +218,29 @@ func loadImageAssets(width int) {
|
|||
if diceSize > maxSize {
|
||||
diceSize = maxSize
|
||||
}
|
||||
return ebiten.NewImageFromImage(resize.Resize(uint(diceSize), 0, img, resize.Lanczos3))
|
||||
if scale == 1 {
|
||||
diceImageSize = float64(diceSize)
|
||||
} else {
|
||||
cubesImageSize = float64(diceSize) * scale
|
||||
}
|
||||
return ebiten.NewImageFromImage(resize.Resize(uint(float64(diceSize)*scale), 0, img, resize.Lanczos3))
|
||||
}
|
||||
|
||||
const size = 184
|
||||
imgDice = ebiten.NewImageFromImage(loadImage("asset/image/dice.png"))
|
||||
imgDice1 = resizeDice(imgDice.SubImage(image.Rect(0, 0, size*1, size*1)))
|
||||
imgDice2 = resizeDice(imgDice.SubImage(image.Rect(size*1, 0, size*2, size*1)))
|
||||
imgDice3 = resizeDice(imgDice.SubImage(image.Rect(size*2, 0, size*3, size*1)))
|
||||
imgDice4 = resizeDice(imgDice.SubImage(image.Rect(0, size*1, size*1, size*2)))
|
||||
imgDice5 = resizeDice(imgDice.SubImage(image.Rect(size*1, size*1, size*2, size*2)))
|
||||
imgDice6 = resizeDice(imgDice.SubImage(image.Rect(size*2, size*1, size*3, size*2)))
|
||||
imgDice1 = resizeDice(imgDice.SubImage(image.Rect(0, 0, size*1, size*1)), 1)
|
||||
imgDice2 = resizeDice(imgDice.SubImage(image.Rect(size*1, 0, size*2, size*1)), 1)
|
||||
imgDice3 = resizeDice(imgDice.SubImage(image.Rect(size*2, 0, size*3, size*1)), 1)
|
||||
imgDice4 = resizeDice(imgDice.SubImage(image.Rect(0, size*1, size*1, size*2)), 1)
|
||||
imgDice5 = resizeDice(imgDice.SubImage(image.Rect(size*1, size*1, size*2, size*2)), 1)
|
||||
imgDice6 = resizeDice(imgDice.SubImage(image.Rect(size*2, size*1, size*3, size*2)), 1)
|
||||
imgCubes = ebiten.NewImageFromImage(loadImage("asset/image/cubes.png"))
|
||||
imgCubes2 = resizeDice(imgCubes.SubImage(image.Rect(0, 0, size*1, size*1)), 0.6)
|
||||
imgCubes4 = resizeDice(imgCubes.SubImage(image.Rect(size*1, 0, size*2, size*1)), 0.6)
|
||||
imgCubes8 = resizeDice(imgCubes.SubImage(image.Rect(size*2, 0, size*3, size*1)), 0.6)
|
||||
imgCubes16 = resizeDice(imgCubes.SubImage(image.Rect(0, size*1, size*1, size*2)), 0.6)
|
||||
imgCubes32 = resizeDice(imgCubes.SubImage(image.Rect(size*1, size*1, size*2, size*2)), 0.6)
|
||||
imgCubes64 = resizeDice(imgCubes.SubImage(image.Rect(size*2, size*1, size*3, size*2)), 0.6)
|
||||
}
|
||||
|
||||
func loadAudioAssets() {
|
||||
|
@ -419,6 +443,23 @@ func diceImage(roll int8) *ebiten.Image {
|
|||
}
|
||||
}
|
||||
|
||||
func cubeImage(value int8) *ebiten.Image {
|
||||
switch value {
|
||||
case 2:
|
||||
return imgCubes2
|
||||
case 4:
|
||||
return imgCubes4
|
||||
case 8:
|
||||
return imgCubes8
|
||||
case 16:
|
||||
return imgCubes16
|
||||
case 32:
|
||||
return imgCubes32
|
||||
default:
|
||||
return imgCubes64
|
||||
}
|
||||
}
|
||||
|
||||
func setViewBoard(view bool) {
|
||||
var refreshLobby bool
|
||||
if !view && viewBoard != view {
|
||||
|
@ -1427,6 +1468,9 @@ func (g *Game) handleEvent(e interface{}) {
|
|||
g.Board.availableStale = false
|
||||
g.Board.playerMoves = nil
|
||||
g.Board.opponentMoves = nil
|
||||
if g.needLayoutBoard {
|
||||
g.layoutBoard()
|
||||
}
|
||||
g.Board.processState()
|
||||
g.Board.Unlock()
|
||||
setViewBoard(true)
|
||||
|
@ -2591,8 +2635,9 @@ func (g *Game) Update() error {
|
|||
|
||||
if g.lobby.showCreateGame {
|
||||
pointsText := g.lobby.createGamePoints.Text()
|
||||
if pointsText != "" {
|
||||
g.lobby.createGamePoints.SetText(strings.Join(anyNumbers.FindAllString(pointsText, -1), ""))
|
||||
strippedText := strings.Join(anyNumbers.FindAllString(pointsText, -1), "")
|
||||
if pointsText != strippedText {
|
||||
g.lobby.createGamePoints.SetText(strippedText)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue