54 lines
890 B
Go
54 lines
890 B
Go
package position
|
|||
|
|
|
||
|
|
import (
|
||
|
|
"math/rand"
|
||
|
|
|
||
|
|
"code.chimeric.al/dwrz/minotaur/pkg/maze/direction"
|
||
|
|
)
|
||
|
|
|
||
|
|
type Position struct {
|
||
|
|
X, Y int
|
||
|
|
}
|
||
|
|
|
||
|
|
func (p Position) Equal(v Position) bool {
|
||
|
|
return p.X == v.X && p.Y == v.Y
|
||
|
|
}
|
||
|
|
|
||
|
|
func (p Position) Down() Position {
|
||
|
|
return Position{X: p.X, Y: p.Y + 1}
|
||
|
|
}
|
||
|
|
|
||
|
|
func (p Position) Left() Position {
|
||
|
|
return Position{X: p.X - 1, Y: p.Y}
|
||
|
|
}
|
||
|
|
|
||
|
|
func (p Position) Right() Position {
|
||
|
|
return Position{X: p.X + 1, Y: p.Y}
|
||
|
|
}
|
||
|
|
|
||
|
|
func (p Position) Up() Position {
|
||
|
|
return Position{X: p.X, Y: p.Y - 1}
|
||
|
|
}
|
||
|
|
|
||
|
|
func (p Position) WithDirection(d direction.Direction) Position {
|
||
|
|
switch d {
|
||
|
|
case direction.Down:
|
||
|
|
return p.Down()
|
||
|
|
case direction.Left:
|
||
|
|
return p.Left()
|
||
|
|
case direction.Right:
|
||
|
|
return p.Right()
|
||
|
|
case direction.Up:
|
||
|
|
return p.Up()
|
||
|
|
default:
|
||
|
|
return p
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func Random(width, height int) Position {
|
||
|
|
return Position{
|
||
|
|
X: rand.Intn(width),
|
||
|
|
Y: rand.Intn(height),
|
||
|
|
}
|
||
|
|
}
|