Finish moving game components to Game namespace
This commit is contained in:
parent
ce9d9afd31
commit
de5a36d6d6
@ -2,9 +2,9 @@ require "./spec_helper"
|
||||
require "./../src/game/map"
|
||||
require "./../src/game/queue"
|
||||
|
||||
describe Point do
|
||||
p1 = Point.new(0, 0)
|
||||
p2 = Point.new(5, 5)
|
||||
describe Game::Point do
|
||||
p1 = Game::Point.new(0, 0)
|
||||
p2 = Game::Point.new(5, 5)
|
||||
it "can calc distance" do
|
||||
p1.distance(p2).should eq 10
|
||||
end
|
||||
|
@ -16,32 +16,32 @@ end
|
||||
|
||||
define_dummy_classes(5)
|
||||
|
||||
describe App::Queue do
|
||||
describe Game::Queue do
|
||||
it "should pop nil on empty queue" do
|
||||
queue = App::Queue.new
|
||||
queue = Game::Queue.new
|
||||
item = queue.pop(50)
|
||||
item.should be_nil
|
||||
end
|
||||
|
||||
it "should pop command on one element queue" do
|
||||
queue = App::Queue.new
|
||||
queue = Game::Queue.new
|
||||
queue.push(10, Test::DummyCommand1.new)
|
||||
item = queue.pop(50)
|
||||
item.nil?.should be_false
|
||||
item.as(App::Queue::Item).ts.should eq 10
|
||||
item.as(App::Queue::Item).command.should be_a(Test::DummyCommand1)
|
||||
item.as(Game::Queue::Item).ts.should eq 10
|
||||
item.as(Game::Queue::Item).command.should be_a(Test::DummyCommand1)
|
||||
end
|
||||
|
||||
it "should pop commands in proper order" do
|
||||
queue = App::Queue.new
|
||||
queue = Game::Queue.new
|
||||
queue.push(10, Test::DummyCommand1.new)
|
||||
queue.push(50, Test::DummyCommand2.new)
|
||||
queue.push(30, Test::DummyCommand3.new)
|
||||
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.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.as(App::Queue::Item).command.should be_a(Test::DummyCommand2)
|
||||
item3.as(Game::Queue::Item).command.should be_a(Test::DummyCommand2)
|
||||
end
|
||||
end
|
||||
|
@ -4,18 +4,18 @@ require "../src/game/world"
|
||||
describe "World" do
|
||||
it "should build crystal harvester" do
|
||||
world = Game::World.new
|
||||
point = Point.new(2, 3)
|
||||
point = Game::Point.new(2, 3)
|
||||
cmd = Game::BuildCrystalHarvesterCommand.new(point)
|
||||
world.push(cmd)
|
||||
world.run(100)
|
||||
world.map.get(point).has_role(TileRole::CrystalHarvester)
|
||||
world.map.get(point).has_role(Game::TileRole::CrystalHarvester)
|
||||
end
|
||||
|
||||
it "should fail when not enought resources" do
|
||||
world = Game::World.new
|
||||
point = Point.new(2, 3)
|
||||
point = Game::Point.new(2, 3)
|
||||
cmd = Game::BuildCrystalRestorerCommand.new(point)
|
||||
expect_raises(NotEnoughtResources) do
|
||||
expect_raises(Game::NotEnoughtResources) do
|
||||
world.push(cmd)
|
||||
end
|
||||
end
|
||||
|
@ -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)
|
||||
|
@ -1,2 +1,4 @@
|
||||
class NotEnoughtResources < Exception
|
||||
module Game
|
||||
class NotEnoughtResources < Exception
|
||||
end
|
||||
end
|
||||
|
@ -1,4 +1,5 @@
|
||||
struct Point
|
||||
module Game
|
||||
struct Point
|
||||
property x : Int32
|
||||
property y : Int32
|
||||
|
||||
@ -11,9 +12,9 @@ struct Point
|
||||
def distance(other) : Int32
|
||||
return (other.x - @x).abs + (other.y - @y).abs
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
class Map
|
||||
class Map
|
||||
SIZE = 4
|
||||
|
||||
def initialize
|
||||
@ -78,4 +79,5 @@ class Map
|
||||
private def key(p : Point) : String
|
||||
return sprintf "%d:%d", p.x, p.y
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -1,4 +1,4 @@
|
||||
class App::Queue
|
||||
class Game::Queue
|
||||
struct Item
|
||||
def initialize(@ts : Int32, @command : Game::Command)
|
||||
end
|
||||
|
@ -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|
|
||||
|
@ -1,13 +1,14 @@
|
||||
enum TileRole
|
||||
module Game
|
||||
enum TileRole
|
||||
CrystalDeposits
|
||||
CrystalHarvester
|
||||
CrystalRestorer
|
||||
Plateau
|
||||
Terraformer
|
||||
Warehouse
|
||||
end
|
||||
end
|
||||
|
||||
abstract class Tile
|
||||
abstract class Tile
|
||||
property cap : Int32 = 0
|
||||
property cur : Int32 = 0
|
||||
|
||||
@ -36,9 +37,9 @@ abstract class Tile
|
||||
charged = @cur + value
|
||||
@cur = charged <= @cap ? charged : @cap
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
class PlateauTile < Tile
|
||||
class PlateauTile < Tile
|
||||
def letter : Char
|
||||
'.'
|
||||
end
|
||||
@ -46,9 +47,9 @@ class PlateauTile < Tile
|
||||
def has_role(role : TileRole) : Bool
|
||||
role == TileRole::Plateau
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
class MainBaseTile < Tile
|
||||
class MainBaseTile < Tile
|
||||
def letter : Char
|
||||
'H'
|
||||
end
|
||||
@ -56,9 +57,9 @@ class MainBaseTile < Tile
|
||||
def has_role(role : TileRole) : Bool
|
||||
role == TileRole::Warehouse
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
class CrystalTile < Tile
|
||||
class CrystalTile < Tile
|
||||
def initialize(@point : Point, cap : Int32)
|
||||
@cap = cap
|
||||
@cur = cap
|
||||
@ -71,9 +72,9 @@ class CrystalTile < Tile
|
||||
def has_role(role : TileRole) : Bool
|
||||
role == TileRole::CrystalDeposits
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
class CrystalHarvesterTile < Tile
|
||||
class CrystalHarvesterTile < Tile
|
||||
def letter : Char
|
||||
'm'
|
||||
end
|
||||
@ -81,9 +82,9 @@ class CrystalHarvesterTile < Tile
|
||||
def has_role(role : TileRole) : Bool
|
||||
role == TileRole::CrystalHarvester
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
class CrystalRestorerTile < Tile
|
||||
class CrystalRestorerTile < Tile
|
||||
def letter : Char
|
||||
'h'
|
||||
end
|
||||
@ -91,9 +92,9 @@ class CrystalRestorerTile < Tile
|
||||
def has_role(role : TileRole) : Bool
|
||||
role == TileRole::CrystalRestorer
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
class TerraformerTile < Tile
|
||||
class TerraformerTile < Tile
|
||||
def letter : Char
|
||||
'T'
|
||||
end
|
||||
@ -101,4 +102,5 @@ class TerraformerTile < Tile
|
||||
def has_role(role : TileRole) : Bool
|
||||
role == TileRole::Terraformer
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user