Finish moving game components to Game namespace

This commit is contained in:
Anton Vakhrushev
2019-10-04 16:45:42 +03:00
parent ce9d9afd31
commit de5a36d6d6
10 changed files with 193 additions and 187 deletions

View File

@ -12,8 +12,8 @@ router = CLI::CommandRouter.new
router.add "st" do
printf "Stat:\n\tTime: %d\n\tCrystals: %d\n\tTarraform: %d\n",
world.ts,
world.resources[ResourceType::Crystal],
world.resources[ResourceType::Terraformation]
world.resources[Game::ResourceType::Crystal],
world.resources[Game::ResourceType::Terraformation]
end
router.add "m" do
@ -29,20 +29,20 @@ end
router.add "harv {x} {y}" do |p|
x = p["x"].to_i32
y = p["y"].to_i32
world.push(Game::BuildCrystalHarvesterCommand.new(Point.new(x, y)))
world.push(Game::BuildCrystalHarvesterCommand.new(Game::Point.new(x, y)))
printf "Build harvester at %d %d\n", x, y
end
router.add "rest {x} {y}" do |p|
x = p["x"].to_i32
y = p["y"].to_i32
world.push(Game::BuildCrystalRestorerCommand.new(Point.new(x, y)))
world.push(Game::BuildCrystalRestorerCommand.new(Game::Point.new(x, y)))
end
router.add "terr {x} {y}" do |p|
x = p["x"].to_i32
y = p["y"].to_i32
world.push(Game::BuildTerraformerCommand.new(Point.new(x, y)))
world.push(Game::BuildTerraformerCommand.new(Game::Point.new(x, y)))
end
def normalize_command(cmd)

View File

@ -1,2 +1,4 @@
class NotEnoughtResources < Exception
module Game
class NotEnoughtResources < Exception
end
end

View File

@ -1,81 +1,83 @@
struct Point
property x : Int32
property y : Int32
module Game
struct Point
property x : Int32
property y : Int32
def initialize(@x : Int32, @y : Int32)
end
getter x
getter y
def distance(other) : Int32
return (other.x - @x).abs + (other.y - @y).abs
end
end
class Map
SIZE = 4
def initialize
@data = {} of String => Tile
(0...SIZE).each do |x|
(0...SIZE).each do |y|
self.set(PlateauTile.new(Point.new(x, y)))
end
def initialize(@x : Int32, @y : Int32)
end
self.set(MainBaseTile.new(Point.new(0, 0)))
self.set(CrystalTile.new(Point.new(1, 1), 100))
self.set(CrystalTile.new(Point.new(3, 1), 200))
self.set(CrystalTile.new(Point.new(2, 2), 100))
end
def get(point : Point) : Tile
@data[key(point)]
end
getter x
getter y
def set(tile : Tile)
@data[key(tile.point)] = tile
end
def set(point : Point, tile : Tile)
@data[key(point)] = tile
end
def tiles
(0...SIZE).each do |x|
(0...SIZE).each do |y|
point = Point.new(x, y)
tile = self.get(point)
yield point, tile
end
def distance(other) : Int32
return (other.x - @x).abs + (other.y - @y).abs
end
end
def nearest_tile(point : Point, &block) : Tile | Nil
seek_tile = nil
min_dist = Int32::MAX
tiles do |tile_point, tile|
if (yield tile)
tile_dist = tile_point.distance(point)
if tile_dist < min_dist
min_dist = tile_dist
seek_tile = tile
class Map
SIZE = 4
def initialize
@data = {} of String => Tile
(0...SIZE).each do |x|
(0...SIZE).each do |y|
self.set(PlateauTile.new(Point.new(x, y)))
end
end
self.set(MainBaseTile.new(Point.new(0, 0)))
self.set(CrystalTile.new(Point.new(1, 1), 100))
self.set(CrystalTile.new(Point.new(3, 1), 200))
self.set(CrystalTile.new(Point.new(2, 2), 100))
end
def get(point : Point) : Tile
@data[key(point)]
end
def set(tile : Tile)
@data[key(tile.point)] = tile
end
def set(point : Point, tile : Tile)
@data[key(point)] = tile
end
def tiles
(0...SIZE).each do |x|
(0...SIZE).each do |y|
point = Point.new(x, y)
tile = self.get(point)
yield point, tile
end
end
end
seek_tile
end
def print
(0...SIZE).each do |x|
(0...SIZE).each do |y|
printf "%c", @data[key(Point.new(x, y))].letter
def nearest_tile(point : Point, &block) : Tile | Nil
seek_tile = nil
min_dist = Int32::MAX
tiles do |tile_point, tile|
if (yield tile)
tile_dist = tile_point.distance(point)
if tile_dist < min_dist
min_dist = tile_dist
seek_tile = tile
end
end
end
printf "\n"
seek_tile
end
def print
(0...SIZE).each do |x|
(0...SIZE).each do |y|
printf "%c", @data[key(Point.new(x, y))].letter
end
printf "\n"
end
end
private def key(p : Point) : String
return sprintf "%d:%d", p.x, p.y
end
end
private def key(p : Point) : String
return sprintf "%d:%d", p.x, p.y
end
end

View File

@ -1,4 +1,4 @@
class App::Queue
class Game::Queue
struct Item
def initialize(@ts : Int32, @command : Game::Command)
end

View File

@ -1,11 +1,11 @@
require "./exception"
enum ResourceType
enum Game::ResourceType
Crystal
Terraformation
end
class Resources
class Game::Resources
def initialize
@values = {} of ResourceType => Int32
ResourceType.each do |t|

View File

@ -1,104 +1,106 @@
enum TileRole
CrystalDeposits
CrystalHarvester
CrystalRestorer
Plateau
Terraformer
Warehouse
end
abstract class Tile
property cap : Int32 = 0
property cur : Int32 = 0
def initialize(@point : Point)
module Game
enum TileRole
CrystalDeposits
CrystalHarvester
CrystalRestorer
Plateau
Terraformer
Warehouse
end
getter point
getter cap
getter cur
abstract class Tile
property cap : Int32 = 0
property cur : Int32 = 0
abstract def letter : Char
abstract def has_role(role : TileRole) : Bool
def initialize(@point : Point)
end
def withdraw(value)
if value >= @cur
wd = @cur
@cur = 0
wd
else
@cur -= value
value
getter point
getter cap
getter cur
abstract def letter : Char
abstract def has_role(role : TileRole) : Bool
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
end
def charge(value)
charged = @cur + value
@cur = charged <= @cap ? charged : @cap
end
end
class PlateauTile < Tile
def letter : Char
'.'
end
def has_role(role : TileRole) : Bool
role == TileRole::Plateau
end
end
class MainBaseTile < Tile
def letter : Char
'H'
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
'f'
end
def has_role(role : TileRole) : Bool
role == TileRole::CrystalDeposits
end
end
class CrystalHarvesterTile < Tile
def letter : Char
'm'
end
def has_role(role : TileRole) : Bool
role == TileRole::CrystalHarvester
end
end
class CrystalRestorerTile < Tile
def letter : Char
'h'
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
class PlateauTile < Tile
def letter : Char
'.'
end
def has_role(role : TileRole) : Bool
role == TileRole::Plateau
end
end
class MainBaseTile < Tile
def letter : Char
'H'
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
'f'
end
def has_role(role : TileRole) : Bool
role == TileRole::CrystalDeposits
end
end
class CrystalHarvesterTile < Tile
def letter : Char
'm'
end
def has_role(role : TileRole) : Bool
role == TileRole::CrystalHarvester
end
end
class CrystalRestorerTile < Tile
def letter : Char
'h'
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
end

View File

@ -6,7 +6,7 @@ class Game::World
def initialize(@ts = 0)
@map = Map.new
@resources = Resources.new
@tasks = App::Queue.new
@tasks = Queue.new
end
getter ts