diff --git a/board.go b/board.go index 3ff5aa8..1b2cadc 100644 --- a/board.go +++ b/board.go @@ -1,4 +1,4 @@ -package main +package freego import "errors" diff --git a/board_test.go b/board_test.go index befd397..bfcfefc 100644 --- a/board_test.go +++ b/board_test.go @@ -1,4 +1,4 @@ -package main +package freego import "testing" diff --git a/colour_enumer.go b/colour_enumer.go index 6c581a8..3dd73fc 100644 --- a/colour_enumer.go +++ b/colour_enumer.go @@ -1,7 +1,7 @@ // Code generated by "enumer -type=Colour"; DO NOT EDIT. // -package main +package freego import ( "fmt" diff --git a/command.go b/command.go index 029d574..bbd08ae 100644 --- a/command.go +++ b/command.go @@ -1,4 +1,4 @@ -package main +package freego import ( "errors" diff --git a/command_test.go b/command_test.go index 9d24583..a4236c2 100644 --- a/command_test.go +++ b/command_test.go @@ -1,4 +1,4 @@ -package main +package freego import ( "fmt" diff --git a/game.go b/game.go index c759031..b0b4d3f 100644 --- a/game.go +++ b/game.go @@ -1,4 +1,4 @@ -package main +package freego import ( "errors" @@ -31,24 +31,24 @@ const ( //Game represents general game state type Game struct { - board *Board + Board *Board state GameState } //NewGame creates a new game and sets the state to lobby func NewGame() *Game { return &Game{ - board: NewBoard(8), + Board: NewBoard(8), state: gameLobby, } } func (g *Game) String() string { var board string - for i := 0; i < g.board.size; i++ { + for i := 0; i < g.Board.size; i++ { board = board + "|" - for j := 0; j < g.board.size; j++ { - board = board + g.board.board[i][j].String() + for j := 0; j < g.Board.size; j++ { + board = board + g.Board.board[i][j].String() } board = board + "|\n" } @@ -61,20 +61,20 @@ func (g *Game) Parse(p Player, cmd *RawCommand) (*ParsedCommand, error) { if g.state != gameTurnRed && g.state != gameTurnBlue { return nil, errors.New("game has not started") } - if !g.board.validatePoint(cmd.srcX, cmd.srcY) || !g.board.validatePoint(cmd.dstX, cmd.dstY) { + if !g.Board.validatePoint(cmd.srcX, cmd.srcY) || !g.Board.validatePoint(cmd.dstX, cmd.dstY) { return nil, errors.New("invalid location in command") } if (p.Colour() == Red && g.state != gameTurnRed) || (p.Colour() == Blue && g.state != gameTurnBlue) { return nil, errors.New("not your turn") } - start, err := g.board.GetPiece(cmd.srcX, cmd.srcY) + start, err := g.Board.GetPiece(cmd.srcX, cmd.srcY) if err != nil { return nil, err } if cmd.act != "-" && cmd.act != "x" { return nil, errors.New("invalid command action") } - end, err := g.board.GetPiece(cmd.dstX, cmd.dstY) + end, err := g.Board.GetPiece(cmd.dstX, cmd.dstY) if err != nil { return nil, err } @@ -124,13 +124,13 @@ func (g *Game) SetupPiece(x, y int, p *Piece) (bool, error) { if p == nil { return false, errors.New("Tried to setup a nil piece") } - if !g.board.validatePoint(x, y) { + if !g.Board.validatePoint(x, y) { return false, errors.New("Invalid location") } - if p.Owner != g.board.GetColor(x, y) { - return false, fmt.Errorf("Can't setup piece on enemy board: %v != %v", p.Owner, g.board.GetColor(x, y)) + if p.Owner != g.Board.GetColor(x, y) { + return false, fmt.Errorf("Can't setup piece on enemy board: %v != %v", p.Owner, g.Board.GetColor(x, y)) } - return g.board.Place(x, y, p) + return g.Board.Place(x, y, p) } //Start start the game @@ -143,11 +143,11 @@ func (g *Game) Start() bool { } func (g *Game) move(x, y, s, t int) (bool, error) { - startPiece, err := g.board.GetPiece(x, y) + startPiece, err := g.Board.GetPiece(x, y) if err != nil { return false, err } - endPiece, err := g.board.GetPiece(s, t) + endPiece, err := g.Board.GetPiece(s, t) if err != nil { return false, err } @@ -158,12 +158,12 @@ func (g *Game) move(x, y, s, t int) (bool, error) { return false, nil } //attempt to remove starting piece first - err = g.board.Remove(x, y) + err = g.Board.Remove(x, y) if err != nil { return false, err } // then place piece in new location - res, err := g.board.Place(s, t, startPiece) + res, err := g.Board.Place(s, t, startPiece) if err != nil { return false, err } @@ -171,11 +171,11 @@ func (g *Game) move(x, y, s, t int) (bool, error) { } func (g *Game) strike(x, y, s, t int) (bool, error) { - startPiece, err := g.board.GetPiece(x, y) + startPiece, err := g.Board.GetPiece(x, y) if err != nil { return false, err } - endPiece, err := g.board.GetPiece(s, t) + endPiece, err := g.Board.GetPiece(s, t) if err != nil { return false, err } @@ -203,30 +203,30 @@ func (g *Game) strike(x, y, s, t int) (bool, error) { switch r { case -1: //startPiece lost - err = g.board.Remove(x, y) + err = g.Board.Remove(x, y) if err != nil { return true, err } case 0: //tie - err = g.board.Remove(x, y) - err2 := g.board.Remove(s, t) + err = g.Board.Remove(x, y) + err2 := g.Board.Remove(s, t) if err != nil || err2 != nil { return true, fmt.Errorf("Errors: %v %v", err, err2) } case 1: //endPiece lost - err := g.board.Remove(s, t) + err := g.Board.Remove(s, t) if err != nil { return true, err } //scouts replace the piece that was destroyed if startPiece.Rank == Scout { - err = g.board.Remove(x, y) + err = g.Board.Remove(x, y) if err != nil { return true, err } - res, err := g.board.Place(s, t, startPiece) + res, err := g.Board.Place(s, t, startPiece) if err != nil { return true, err } diff --git a/game_test.go b/game_test.go index b0dac0f..3c77bf0 100644 --- a/game_test.go +++ b/game_test.go @@ -1,4 +1,4 @@ -package main +package freego import ( "errors" @@ -8,7 +8,7 @@ import ( func dummyMiniGame() (*Game, error) { g := &Game{ - board: NewBoard(4), + Board: NewBoard(4), state: gameSetup, } //Setup terrain @@ -19,7 +19,7 @@ func dummyMiniGame() (*Game, error) { {2, 2, 1}, } for _, tt := range terrain { - res, err := g.board.AddTerrain(tt.x, tt.y, tt.t) + res, err := g.Board.AddTerrain(tt.x, tt.y, tt.t) if err != nil { return nil, err } diff --git a/input.go b/input.go deleted file mode 100644 index a089449..0000000 --- a/input.go +++ /dev/null @@ -1,206 +0,0 @@ -package main - -import ( - "github.com/hajimehoshi/ebiten/v2" - "github.com/hajimehoshi/ebiten/v2/inpututil" -) - -// Dir represents a direction. -type Dir int - -// represents the valid directions -const ( - DirUp Dir = iota - DirRight - DirDown - DirLeft -) - -type mouseState int - -const ( - mouseStateNone mouseState = iota - mouseStatePressing - mouseStateSettled -) - -type touchState int - -const ( - touchStateNone touchState = iota - touchStatePressing - touchStateSettled - touchStateInvalid -) - -// String returns a string representing the direction. -func (d Dir) String() string { - switch d { - case DirUp: - return "Up" - case DirRight: - return "Right" - case DirDown: - return "Down" - case DirLeft: - return "Left" - } - panic("not reach") -} - -// Vector returns a [-1, 1] value for each axis. -func (d Dir) Vector() (x, y int) { - switch d { - case DirUp: - return 0, -1 - case DirRight: - return 1, 0 - case DirDown: - return 0, 1 - case DirLeft: - return -1, 0 - } - panic("not reach") -} - -// Input represents the current key states. -type Input struct { - mouseState mouseState - mouseInitPosX int - mouseInitPosY int - mouseDir Dir - - touches []ebiten.TouchID - touchState touchState - touchID ebiten.TouchID - touchInitPosX int - touchInitPosY int - touchLastPosX int - touchLastPosY int - touchDir Dir -} - -// NewInput generates a new Input object. -func NewInput() *Input { - return &Input{} -} - -func abs(x int) int { - if x < 0 { - return -x - } - return x -} - -func vecToDir(dx, dy int) (Dir, bool) { - if abs(dx) < 4 && abs(dy) < 4 { - return 0, false - } - if abs(dx) < abs(dy) { - if dy < 0 { - return DirUp, true - } - return DirDown, true - } - if dx < 0 { - return DirLeft, true - } - return DirRight, true -} - -// Update updates the current input states. -func (i *Input) Update() { - switch i.mouseState { - case mouseStateNone: - if ebiten.IsMouseButtonPressed(ebiten.MouseButtonLeft) { - x, y := ebiten.CursorPosition() - i.mouseInitPosX = x - i.mouseInitPosY = y - i.mouseState = mouseStatePressing - } - case mouseStatePressing: - if !ebiten.IsMouseButtonPressed(ebiten.MouseButtonLeft) { - x, y := ebiten.CursorPosition() - dx := x - i.mouseInitPosX - dy := y - i.mouseInitPosY - d, ok := vecToDir(dx, dy) - if !ok { - i.mouseState = mouseStateNone - break - } - i.mouseDir = d - i.mouseState = mouseStateSettled - } - case mouseStateSettled: - i.mouseState = mouseStateNone - } - - i.touches = ebiten.AppendTouchIDs(i.touches[:0]) - switch i.touchState { - case touchStateNone: - if len(i.touches) == 1 { - i.touchID = i.touches[0] - x, y := ebiten.TouchPosition(i.touches[0]) - i.touchInitPosX = x - i.touchInitPosY = y - i.touchLastPosX = x - i.touchLastPosX = y - i.touchState = touchStatePressing - } - case touchStatePressing: - if len(i.touches) >= 2 { - break - } - if len(i.touches) == 1 { - if i.touches[0] != i.touchID { - i.touchState = touchStateInvalid - } else { - x, y := ebiten.TouchPosition(i.touches[0]) - i.touchLastPosX = x - i.touchLastPosY = y - } - break - } - if len(i.touches) == 0 { - dx := i.touchLastPosX - i.touchInitPosX - dy := i.touchLastPosY - i.touchInitPosY - d, ok := vecToDir(dx, dy) - if !ok { - i.touchState = touchStateNone - break - } - i.touchDir = d - i.touchState = touchStateSettled - } - case touchStateSettled: - i.touchState = touchStateNone - case touchStateInvalid: - if len(i.touches) == 0 { - i.touchState = touchStateNone - } - } -} - -// Dir returns a currently pressed direction. -// Dir returns false if no direction key is pressed. -func (i *Input) Dir() (Dir, bool) { - if inpututil.IsKeyJustPressed(ebiten.KeyArrowUp) { - return DirUp, true - } - if inpututil.IsKeyJustPressed(ebiten.KeyArrowLeft) { - return DirLeft, true - } - if inpututil.IsKeyJustPressed(ebiten.KeyArrowRight) { - return DirRight, true - } - if inpututil.IsKeyJustPressed(ebiten.KeyArrowDown) { - return DirDown, true - } - if i.mouseState == mouseStateSettled { - return i.mouseDir, true - } - if i.touchState == touchStateSettled { - return i.touchDir, true - } - return 0, false -} diff --git a/main.go b/main.go index adb8483..b15623a 100644 --- a/main.go +++ b/main.go @@ -1,4 +1,4 @@ -package main +package freego import ( "errors" @@ -8,7 +8,7 @@ import ( //DummyGame Creates a dummygame func DummyGame() (*Game, error) { g := &Game{ - board: NewBoard(4), + Board: NewBoard(4), state: gameSetup, } //Setup terrain @@ -19,7 +19,7 @@ func DummyGame() (*Game, error) { {2, 2, 1}, } for _, tt := range terrain { - res, err := g.board.AddTerrain(tt.x, tt.y, tt.t) + res, err := g.Board.AddTerrain(tt.x, tt.y, tt.t) if err != nil { return nil, err } @@ -81,7 +81,7 @@ func addpiece(game *Game, rank int, c Colour, x int, y int) { } func addriver(game *Game, x int, y int) { - res, err := game.board.AddTerrain(x, y, 1) + res, err := game.Board.AddTerrain(x, y, 1) if err != nil { panic(err) } @@ -91,12 +91,12 @@ func addriver(game *Game, x int, y int) { } func printboardcolours(g *Game) { - for i := range g.board.board { - for j := range g.board.board[i] { + for i := range g.Board.board { + for j := range g.Board.board[i] { c := "X" - if g.board.board[i][j].colour == Red { + if g.Board.board[i][j].colour == Red { c = "R" - } else if g.board.board[i][j].colour == Blue { + } else if g.Board.board[i][j].colour == Blue { c = "B" } fmt.Printf("%v", c) diff --git a/piece.go b/piece.go index 51d7b7b..80f8a65 100644 --- a/piece.go +++ b/piece.go @@ -1,4 +1,4 @@ -package main +package freego //Rank represents the rank of a piece //go:generate enumer -type=Rank diff --git a/player.go b/player.go index 85988bf..fe587f6 100644 --- a/player.go +++ b/player.go @@ -1,4 +1,4 @@ -package main +package freego //Player represents a player of the game type Player interface { diff --git a/rank_enumer.go b/rank_enumer.go index 58a326b..da53b83 100644 --- a/rank_enumer.go +++ b/rank_enumer.go @@ -1,7 +1,7 @@ // Code generated by "enumer -type=Rank"; DO NOT EDIT. // -package main +package freego import ( "fmt" diff --git a/tile.go b/tile.go index d2642a4..b12a9a1 100644 --- a/tile.go +++ b/tile.go @@ -1,4 +1,4 @@ -package main +package freego import ( "errors"