137 lines
2.2 KiB
Crystal
137 lines
2.2 KiB
Crystal
module Game
|
|
enum TileRole
|
|
ConstructionSite
|
|
CrystalDeposits
|
|
CrystalHarvester
|
|
CrystalRestorer
|
|
Plateau
|
|
Terraformer
|
|
Warehouse
|
|
Building
|
|
end
|
|
|
|
abstract class Tile
|
|
property cap : Int32 = 0
|
|
property cur : Int32 = 0
|
|
|
|
def initialize(@point : Point)
|
|
end
|
|
|
|
getter point
|
|
getter cap
|
|
getter cur
|
|
|
|
abstract def has_role(role : TileRole) : Bool
|
|
|
|
def letter : Char
|
|
' '
|
|
end
|
|
|
|
def withdraw(value)
|
|
if value >= @cur
|
|
wd = @cur
|
|
@cur = 0
|
|
wd
|
|
else
|
|
@cur -= value
|
|
value
|
|
end
|
|
end
|
|
|
|
def charge(value)
|
|
charged = @cur + value
|
|
@cur = charged <= @cap ? charged : @cap
|
|
end
|
|
|
|
def can_build?
|
|
has_role(TileRole::Plateau)
|
|
end
|
|
end
|
|
|
|
class PlateauTile < Tile
|
|
def letter : Char
|
|
' '
|
|
end
|
|
|
|
def has_role(role : TileRole) : Bool
|
|
role == TileRole::Plateau
|
|
end
|
|
end
|
|
|
|
class ConstructionSiteTile < Tile
|
|
def letter : Char
|
|
'_'
|
|
end
|
|
|
|
def has_role(role : TileRole) : Bool
|
|
role == TileRole::ConstructionSite
|
|
end
|
|
end
|
|
|
|
class MainBaseTile < Tile
|
|
def letter : Char
|
|
'W'
|
|
end
|
|
|
|
def has_role(role : TileRole) : Bool
|
|
role == TileRole::Warehouse
|
|
end
|
|
end
|
|
|
|
class CrystalTile < Tile
|
|
def initialize(@point : Point, cap : Int32)
|
|
@cap = cap
|
|
@cur = cap
|
|
end
|
|
|
|
def letter : Char
|
|
'v'
|
|
end
|
|
|
|
def has_role(role : TileRole) : Bool
|
|
role == TileRole::CrystalDeposits
|
|
end
|
|
end
|
|
|
|
class CrystalHarvesterTile < Tile
|
|
def letter : Char
|
|
'H'
|
|
end
|
|
|
|
def has_role(role : TileRole) : Bool
|
|
role == TileRole::CrystalHarvester
|
|
end
|
|
end
|
|
|
|
class CrystalRestorerTile < Tile
|
|
def letter : Char
|
|
'R'
|
|
end
|
|
|
|
def has_role(role : TileRole) : Bool
|
|
role == TileRole::CrystalRestorer
|
|
end
|
|
end
|
|
|
|
class TerraformerTile < Tile
|
|
def letter : Char
|
|
'T'
|
|
end
|
|
|
|
def has_role(role : TileRole) : Bool
|
|
role == TileRole::Terraformer
|
|
end
|
|
end
|
|
|
|
class BuildingTile < Tile
|
|
def initialize(@point : Point, @building : Building)
|
|
end
|
|
|
|
def has_role(role : TileRole) : Bool
|
|
role == TileRole::Building
|
|
end
|
|
|
|
getter building
|
|
end
|
|
end
|