Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Обертка для рандома, чтобы он хранил сид
- class SeededRandom
- {
- private int seed;
- private Random rand;
- //Конструктор раз: рандомит сид, сохраняет его(досутп через GetSeed()), и устанвливает объект Random
- public SeededRandom()
- {
- Random seedR = new Random();
- seed = seedR.Next();
- rand = new Random(seed);
- }
- //Конструктор два: сохраняет сид устанавливает Random по сиду
- public SeededRandom(int seed)
- {
- this.seed = seed;
- rand = new Random(seed);
- }
- //Свойтво getter
- public int GetSeed()
- { return seed; }
- }
- class Map
- {
- //ширина высота карты
- public int map_w, map_h;
- //массив ячеек карты
- public Tile[,] map;
- //рандомизатор
- public SeededRandom rand;
- //конструктор раз, делает карту по новому сиду
- public Map(int map_w, int map_h)
- {
- this.map_w = map_w;
- this.map_h = map_h;
- map = new Tile[map_h, map_w];
- rand = new SeededRandom();
- }
- // конструктор два, вызывает первый конструтор, но после его работы меняет переменную rand на новую, с сидом
- public Map(int map_w, int map_h, int seed) : this(map_w, map_h)
- {
- rand = new SeededRandom(seed);
- }
- //Свойтво getter
- public int GetSeed()
- { return rand.GetSeed(); }
- }
- class BasicRandomMap : Map
- {
- //конструктор раз, наследуется из базы
- public BasicRandomMap(int map_w, int map_h) : base(map_w, map_h) { }
- //конструктор два, наследуется из базы
- public BasicRandomMap(int map_w, int map_h, int seed) : base(map_w, map_h, seed) { }
- }
- class Program
- {
- static void Main(string[] args)
- {
- //для теста делаем несколько карт и получаем их сиды
- //ожидаем увидеть двойки с одинковыми сидами map1-map2, map3-map4, map5-map6
- Map map1 = new Map(10, 10);
- Map map2 = new Map(20, 20, map1.GetSeed());
- BasicRandomMap map3 = new BasicRandomMap(10, 10);
- BasicRandomMap map4 = new BasicRandomMap(20, 20, map3.GetSeed());
- Map map5 = new Map(10, 10);
- Map map6 = new Map(20, 20, map5.GetSeed());
- Console.WriteLine(map1.GetSeed());
- Console.WriteLine(map2.GetSeed());
- Console.WriteLine(map3.GetSeed());
- Console.WriteLine(map4.GetSeed());
- Console.WriteLine(map5.GetSeed());
- Console.WriteLine(map6.GetSeed());
- }
- }
- //а получаем вот это, я хз почему, у нас в каждом вызове конструктора
- //всегда создаётся новый объект SeededRandom и внутри него тоже новый
- ################
- Result:
- ################
- 1424215421
- 1424215421
- 1424215421
- 1424215421
- 1424215421
- 1424215421
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement