From 6fa9a7cf8ee7419bf1d680701fdbf418aa1cc25b Mon Sep 17 00:00:00 2001 From: Anton Vakhrushev Date: Thu, 10 Oct 2019 16:38:18 +0300 Subject: [PATCH] Add map generator --- spec/world_spec.cr | 6 ++++-- src/expansion.cr | 3 ++- src/game/map.cr | 18 +++++++++++------- src/game/world.cr | 3 +-- 4 files changed, 18 insertions(+), 12 deletions(-) diff --git a/spec/world_spec.cr b/spec/world_spec.cr index d41f049..74bc0a1 100644 --- a/spec/world_spec.cr +++ b/spec/world_spec.cr @@ -3,7 +3,8 @@ require "../src/game/world" describe "World" do it "should build crystal harvester" do - world = Game::World.new + map = Game::Generator.make 5, 5 + world = Game::World.new map point = Game::Point.new 2, 3 cmd = Game::BuildCrystalHarvesterCommand.new(point) world.push(cmd) @@ -12,7 +13,8 @@ describe "World" do end it "should fail when not enought resources" do - world = Game::World.new + map = Game::Generator.make 5, 5 + world = Game::World.new map point = Game::Point.new 2, 3 cmd = Game::BuildCrystalRestorerCommand.new(point) expect_raises(Game::NotEnoughtResources) do diff --git a/src/expansion.cr b/src/expansion.cr index bfc0c10..1743b33 100644 --- a/src/expansion.cr +++ b/src/expansion.cr @@ -2,8 +2,9 @@ require "colorize" require "./game/**" require "./cli/**" +map = Game::Generator.make 5, 10 ts = Time.local.to_unix -world = Game::World.new(ts) +world = Game::World.new map, ts router = CLI::CommandRouter.new diff --git a/src/game/map.cr b/src/game/map.cr index eea052a..9f2ea04 100644 --- a/src/game/map.cr +++ b/src/game/map.cr @@ -20,19 +20,15 @@ module Game property data : DataArray - def initialize(@rows : Int32, @cols : Int32) + def initialize(@rows : Int32, @cols : Int32, tile_type = PlateauTile) @data = DataArray.new @rows @rows.times do |row_index| tile_row = TileRow.new @cols @cols.times do |col_index| - tile_row << PlateauTile.new(Point.new(row_index, col_index)) + tile_row << tile_type.new(Point.new(row_index, col_index)) end @data << tile_row end - self.set(MainBaseTile.new(Point.new(0, 0))) - self.set(CrystalTile.new(Point.new(1, 2), 100)) - self.set(CrystalTile.new(Point.new(4, 2), 200)) - self.set(CrystalTile.new(Point.new(3, 3), 100)) end getter rows @@ -80,6 +76,14 @@ module Game end end - class MapGenerator + class Generator + def self.make(rows, cols) : Map + map = Map.new(rows, cols) + map.set(MainBaseTile.new(Point.new(0, 0))) + map.set(CrystalTile.new(Point.new(1, 2), 100)) + map.set(CrystalTile.new(Point.new(4, 2), 200)) + map.set(CrystalTile.new(Point.new(3, 3), 100)) + map + end end end diff --git a/src/game/world.cr b/src/game/world.cr index 9c51882..266ccab 100644 --- a/src/game/world.cr +++ b/src/game/world.cr @@ -3,9 +3,8 @@ require "./resources" class Game::World property ts : Int64 - def initialize(@ts = 0_i64) + def initialize(@map : Map, @ts = 0_i64) @start_ts = @ts - @map = Map.new 5, 5 @resources = Resources.new @queue = Queue.new @finished = false