1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
use GameBoard; use Players; extern crate rand; use self::rand::Rng; use IS_DEBUG; impl GameBoard { pub fn random_placement(self, player_to_place: Players) -> Option<Self> { loop { let random_tile = rand::thread_rng().gen_range(1, 10); if IS_DEBUG { println!("Trying {}", random_tile); }; if self.row_one[0].no_player() && (random_tile == 1) { return Option::Some(Self { row_one: [ self.row_one[0].place_player(player_to_place), self.row_one[1], self.row_one[2], ], ..self }); } if self.row_one[1].no_player() && (random_tile == 2) { return Option::Some(Self { row_one: [ self.row_one[0], self.row_one[1].place_player(player_to_place), self.row_one[2], ], ..self }); } if self.row_one[2].no_player() && (random_tile == 3) { return Option::Some(Self { row_one: [ self.row_one[0], self.row_one[1], self.row_one[2].place_player(player_to_place), ], ..self }); } if self.row_two[0].no_player() && (random_tile == 4) { return Option::Some(Self { row_two: [ self.row_two[0].place_player(player_to_place), self.row_two[1], self.row_two[2], ], ..self }); } if self.row_two[1].no_player() && (random_tile == 5) { return Option::Some(Self { row_two: [ self.row_two[0], self.row_two[1].place_player(player_to_place), self.row_two[2], ], ..self }); } if self.row_two[2].no_player() && (random_tile == 6) { return Option::Some(Self { row_two: [ self.row_two[0], self.row_two[1], self.row_two[2].place_player(player_to_place), ], ..self }); } if self.row_three[0].no_player() && (random_tile == 7) { return Option::Some(Self { row_three: [ self.row_three[0].place_player(player_to_place), self.row_three[1], self.row_three[2], ], ..self }); } if self.row_three[1].no_player() && (random_tile == 8) { return Option::Some(Self { row_three: [ self.row_three[0], self.row_three[1].place_player(player_to_place), self.row_three[2], ], ..self }); } if self.row_three[2].no_player() && (random_tile == 9) { return Option::Some(Self { row_three: [ self.row_three[0], self.row_three[1], self.row_three[2].place_player(player_to_place), ], ..self }); } if self.is_board_full() { return Option::None; } } } }