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

@ -2,9 +2,9 @@ require "./spec_helper"
require "./../src/game/map" require "./../src/game/map"
require "./../src/game/queue" require "./../src/game/queue"
describe Point do describe Game::Point do
p1 = Point.new(0, 0) p1 = Game::Point.new(0, 0)
p2 = Point.new(5, 5) p2 = Game::Point.new(5, 5)
it "can calc distance" do it "can calc distance" do
p1.distance(p2).should eq 10 p1.distance(p2).should eq 10
end end

View File

@ -16,32 +16,32 @@ end
define_dummy_classes(5) define_dummy_classes(5)
describe App::Queue do describe Game::Queue do
it "should pop nil on empty queue" do it "should pop nil on empty queue" do
queue = App::Queue.new queue = Game::Queue.new
item = queue.pop(50) item = queue.pop(50)
item.should be_nil item.should be_nil
end end
it "should pop command on one element queue" do it "should pop command on one element queue" do
queue = App::Queue.new queue = Game::Queue.new
queue.push(10, Test::DummyCommand1.new) queue.push(10, Test::DummyCommand1.new)
item = queue.pop(50) item = queue.pop(50)
item.nil?.should be_false item.nil?.should be_false
item.as(App::Queue::Item).ts.should eq 10 item.as(Game::Queue::Item).ts.should eq 10
item.as(App::Queue::Item).command.should be_a(Test::DummyCommand1) item.as(Game::Queue::Item).command.should be_a(Test::DummyCommand1)
end end
it "should pop commands in proper order" do it "should pop commands in proper order" do
queue = App::Queue.new queue = Game::Queue.new
queue.push(10, Test::DummyCommand1.new) queue.push(10, Test::DummyCommand1.new)
queue.push(50, Test::DummyCommand2.new) queue.push(50, Test::DummyCommand2.new)
queue.push(30, Test::DummyCommand3.new) queue.push(30, Test::DummyCommand3.new)
item1 = queue.pop(100) item1 = queue.pop(100)
item1.as(App::Queue::Item).command.should be_a(Test::DummyCommand1) item1.as(Game::Queue::Item).command.should be_a(Test::DummyCommand1)
item2 = queue.pop(100) item2 = queue.pop(100)
item2.as(App::Queue::Item).command.should be_a(Test::DummyCommand3) item2.as(Game::Queue::Item).command.should be_a(Test::DummyCommand3)
item3 = queue.pop(100) item3 = queue.pop(100)
item3.as(App::Queue::Item).command.should be_a(Test::DummyCommand2) item3.as(Game::Queue::Item).command.should be_a(Test::DummyCommand2)
end end
end end

View File

@ -4,18 +4,18 @@ require "../src/game/world"
describe "World" do describe "World" do
it "should build crystal harvester" do it "should build crystal harvester" do
world = Game::World.new world = Game::World.new
point = Point.new(2, 3) point = Game::Point.new(2, 3)
cmd = Game::BuildCrystalHarvesterCommand.new(point) cmd = Game::BuildCrystalHarvesterCommand.new(point)
world.push(cmd) world.push(cmd)
world.run(100) world.run(100)
world.map.get(point).has_role(TileRole::CrystalHarvester) world.map.get(point).has_role(Game::TileRole::CrystalHarvester)
end end
it "should fail when not enought resources" do it "should fail when not enought resources" do
world = Game::World.new world = Game::World.new
point = Point.new(2, 3) point = Game::Point.new(2, 3)
cmd = Game::BuildCrystalRestorerCommand.new(point) cmd = Game::BuildCrystalRestorerCommand.new(point)
expect_raises(NotEnoughtResources) do expect_raises(Game::NotEnoughtResources) do
world.push(cmd) world.push(cmd)
end end
end end

View File

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

View File

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

View File

@ -1,4 +1,5 @@
struct Point module Game
struct Point
property x : Int32 property x : Int32
property y : Int32 property y : Int32
@ -11,9 +12,9 @@ struct Point
def distance(other) : Int32 def distance(other) : Int32
return (other.x - @x).abs + (other.y - @y).abs return (other.x - @x).abs + (other.y - @y).abs
end end
end end
class Map class Map
SIZE = 4 SIZE = 4
def initialize def initialize
@ -78,4 +79,5 @@ class Map
private def key(p : Point) : String private def key(p : Point) : String
return sprintf "%d:%d", p.x, p.y return sprintf "%d:%d", p.x, p.y
end end
end
end end

View File

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

View File

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

View File

@ -1,13 +1,14 @@
enum TileRole module Game
enum TileRole
CrystalDeposits CrystalDeposits
CrystalHarvester CrystalHarvester
CrystalRestorer CrystalRestorer
Plateau Plateau
Terraformer Terraformer
Warehouse Warehouse
end end
abstract class Tile abstract class Tile
property cap : Int32 = 0 property cap : Int32 = 0
property cur : Int32 = 0 property cur : Int32 = 0
@ -36,9 +37,9 @@ abstract class Tile
charged = @cur + value charged = @cur + value
@cur = charged <= @cap ? charged : @cap @cur = charged <= @cap ? charged : @cap
end end
end end
class PlateauTile < Tile class PlateauTile < Tile
def letter : Char def letter : Char
'.' '.'
end end
@ -46,9 +47,9 @@ class PlateauTile < Tile
def has_role(role : TileRole) : Bool def has_role(role : TileRole) : Bool
role == TileRole::Plateau role == TileRole::Plateau
end end
end end
class MainBaseTile < Tile class MainBaseTile < Tile
def letter : Char def letter : Char
'H' 'H'
end end
@ -56,9 +57,9 @@ class MainBaseTile < Tile
def has_role(role : TileRole) : Bool def has_role(role : TileRole) : Bool
role == TileRole::Warehouse role == TileRole::Warehouse
end end
end end
class CrystalTile < Tile class CrystalTile < Tile
def initialize(@point : Point, cap : Int32) def initialize(@point : Point, cap : Int32)
@cap = cap @cap = cap
@cur = cap @cur = cap
@ -71,9 +72,9 @@ class CrystalTile < Tile
def has_role(role : TileRole) : Bool def has_role(role : TileRole) : Bool
role == TileRole::CrystalDeposits role == TileRole::CrystalDeposits
end end
end end
class CrystalHarvesterTile < Tile class CrystalHarvesterTile < Tile
def letter : Char def letter : Char
'm' 'm'
end end
@ -81,9 +82,9 @@ class CrystalHarvesterTile < Tile
def has_role(role : TileRole) : Bool def has_role(role : TileRole) : Bool
role == TileRole::CrystalHarvester role == TileRole::CrystalHarvester
end end
end end
class CrystalRestorerTile < Tile class CrystalRestorerTile < Tile
def letter : Char def letter : Char
'h' 'h'
end end
@ -91,9 +92,9 @@ class CrystalRestorerTile < Tile
def has_role(role : TileRole) : Bool def has_role(role : TileRole) : Bool
role == TileRole::CrystalRestorer role == TileRole::CrystalRestorer
end end
end end
class TerraformerTile < Tile class TerraformerTile < Tile
def letter : Char def letter : Char
'T' 'T'
end end
@ -101,4 +102,5 @@ class TerraformerTile < Tile
def has_role(role : TileRole) : Bool def has_role(role : TileRole) : Bool
role == TileRole::Terraformer role == TileRole::Terraformer
end end
end
end end

View File

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