@@ -38,32 +38,59 @@ fn grid_from_ascii(ascii: &str) -> Grid {
38
38
grid
39
39
}
40
40
41
+ fn randomly_fill_grid ( grid : & mut Grid , probability : & [ Cell ] , seed : u32 ) -> ( ) {
42
+ // Pseudorandom number generator from the "Xorshift RNGs" paper by George Marsaglia.
43
+ // https://github.com/rust-lang/rust/blob/1.55.0/library/core/src/slice/sort.rs#L559-L573
44
+ fn random_numbers ( seed : u32 ) -> impl Iterator < Item = u32 > {
45
+ let mut random = seed;
46
+ std:: iter:: repeat_with ( move || {
47
+ random ^= random << 13 ;
48
+ random ^= random >> 17 ;
49
+ random ^= random << 5 ;
50
+ random
51
+ } )
52
+ }
53
+
54
+ let mut rng = random_numbers ( seed) ;
55
+
56
+ for x in 0 ..( grid. width as i8 ) {
57
+ for y in 0 ..( grid. height as i8 ) {
58
+ let random = rng. next ( ) . unwrap ( ) ;
59
+ let cell = probability[ random as usize % probability. len ( ) ] ;
60
+ grid. set_cell ( & Point { x, y } , cell) ;
61
+ }
62
+ }
63
+ }
64
+
41
65
pub enum SampleGrid {
42
66
Empty ,
43
67
OneDot ,
44
68
Realistic ,
45
69
Labyrinthe ,
70
+ RandomPack ,
46
71
}
47
72
pub fn get_grid_sample ( g : SampleGrid ) -> Grid {
48
- grid_from_ascii ( match g {
49
- SampleGrid :: Empty => {
73
+ match g {
74
+ SampleGrid :: Empty => grid_from_ascii (
50
75
& r#"
51
76
_
52
77
_
53
78
_
54
79
_
55
- "#
56
- }
57
- SampleGrid :: OneDot => {
80
+ "# ,
81
+ ) ,
82
+
83
+ SampleGrid :: OneDot => grid_from_ascii (
58
84
& r#"
59
85
_
60
86
_
61
87
. _
62
88
_
63
89
_
64
- "#
65
- }
66
- SampleGrid :: Realistic => {
90
+ "# ,
91
+ ) ,
92
+
93
+ SampleGrid :: Realistic => grid_from_ascii (
67
94
& r#"
68
95
231 412 12213 13 213 421 121131 32123112 332 _
69
96
412 12 4 331213 12214431 412 413 42133123 23 21
@@ -72,9 +99,10 @@ pub fn get_grid_sample(g: SampleGrid) -> Grid {
72
99
34122 3 2144 31 31234 212 2121 211 12 3 123 3123 12
73
100
442 12122122 12331123 33443 3311121 111 223 333_
74
101
31413 31231 2 213321 123 32123 3332 12312 3 33 2 3
75
- "#
76
- }
77
- SampleGrid :: Labyrinthe => {
102
+ "# ,
103
+ ) ,
104
+
105
+ SampleGrid :: Labyrinthe => grid_from_ascii (
78
106
& r#"
79
107
################################################## #
80
108
# #
@@ -83,7 +111,17 @@ pub fn get_grid_sample(g: SampleGrid) -> Grid {
83
111
################################################## #
84
112
#. #
85
113
####################################################
86
- "#
114
+ "# ,
115
+ ) ,
116
+
117
+ SampleGrid :: RandomPack => {
118
+ let mut grid = Grid :: create_empty ( 52 , 7 ) ;
119
+ randomly_fill_grid (
120
+ & mut grid,
121
+ & [ Cell :: Empty , Cell :: Empty , Cell :: Color1 , Cell :: Color4 ] ,
122
+ 92u32 ,
123
+ ) ;
124
+ grid
87
125
}
88
- } )
126
+ }
89
127
}
0 commit comments