View difference between Paste ID: gZQyqSCE and 36HVrP89
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