SHOW:
|
|
- or go back to the newest paste.
| 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 | - | |
| 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 |