Advertisement
Guest User

Untitled

a guest
Jul 5th, 2019
205
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // Обертка для рандома, чтобы он хранил сид
  2. class SeededRandom
  3.     {
  4.         private int seed;
  5.         private Random rand;
  6.  
  7.  
  8.         //Конструктор раз: рандомит сид, сохраняет его(досутп через GetSeed()), и устанвливает объект Random
  9.         public SeededRandom()
  10.         {
  11.             Random seedR = new Random();
  12.             seed = seedR.Next();
  13.             rand = new Random(seed);
  14.         }
  15.  
  16.         //Конструктор два: сохраняет сид устанавливает Random по сиду
  17.         public SeededRandom(int seed)
  18.         {
  19.             this.seed = seed;
  20.             rand = new Random(seed);
  21.         }
  22.        
  23.         //Свойтво getter
  24.         public int GetSeed()
  25.             { return seed; }
  26.     }
  27.  
  28. class Map
  29.     {
  30.         //ширина высота карты
  31.         public int map_w, map_h;
  32.         //массив ячеек карты
  33.         public Tile[,] map;
  34.         //рандомизатор
  35.         public SeededRandom rand;
  36.  
  37.         //конструктор раз, делает карту по новому сиду
  38.         public Map(int map_w, int map_h)
  39.         {
  40.             this.map_w = map_w;
  41.             this.map_h = map_h;
  42.             map = new Tile[map_h, map_w];
  43.             rand = new SeededRandom();
  44.         }
  45.         // конструктор два, вызывает первый конструтор, но после его работы меняет переменную rand на новую, с сидом
  46.         public Map(int map_w, int map_h, int seed) : this(map_w, map_h)
  47.         {
  48.             rand = new SeededRandom(seed);
  49.         }
  50.         //Свойтво getter
  51.         public int GetSeed()
  52.             { return rand.GetSeed(); }
  53.     }
  54.  
  55. class BasicRandomMap : Map
  56.     {
  57.         //конструктор раз, наследуется из базы
  58.         public BasicRandomMap(int map_w, int map_h) : base(map_w, map_h) { }
  59.         //конструктор два, наследуется из базы
  60.         public BasicRandomMap(int map_w, int map_h, int seed) : base(map_w, map_h, seed) { }
  61.     }
  62.  
  63.  
  64. class Program
  65.     {
  66.         static void Main(string[] args)
  67.         {
  68.             //для теста делаем несколько карт и получаем их сиды
  69.             //ожидаем увидеть двойки с одинковыми сидами map1-map2, map3-map4, map5-map6
  70.             Map map1 = new Map(10, 10);
  71.             Map map2 = new Map(20, 20, map1.GetSeed());
  72.             BasicRandomMap map3 = new BasicRandomMap(10, 10);
  73.             BasicRandomMap map4 = new BasicRandomMap(20, 20, map3.GetSeed());
  74.             Map map5 = new Map(10, 10);
  75.             Map map6 = new Map(20, 20, map5.GetSeed());
  76.             Console.WriteLine(map1.GetSeed());
  77.             Console.WriteLine(map2.GetSeed());
  78.             Console.WriteLine(map3.GetSeed());
  79.             Console.WriteLine(map4.GetSeed());
  80.             Console.WriteLine(map5.GetSeed());
  81.             Console.WriteLine(map6.GetSeed());
  82.         }
  83.     }
  84.  
  85. //а получаем вот это, я хз почему, у нас в каждом вызове конструктора
  86. //всегда создаётся новый объект SeededRandom и внутри него тоже новый
  87. ################
  88. Result:
  89. ################
  90. 1424215421
  91. 1424215421
  92. 1424215421
  93. 1424215421
  94. 1424215421
  95. 1424215421
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement