Esempio n. 1
0
void Maze::AddExit(){
	for (position p = at_((m_size-1),1); p <= at_((m_size-1),(m_size-2)); p += m_size){
		if (data[p - 1] == SPACE){
			data[p] = SPACE;
			exit = p;
			return;
		}
	}
}
Esempio n. 2
0
void Maze::Generate(unsigned size){
	m_size = size;
	srand((unsigned)time(0));
	m_wall_list.clear();
	data.clear();
	//black out whole maze.
	for (unsigned i = 0; i < (m_size*m_size); ++i)
		data.push_back(BLACK_SPACE);

	

	//add first wall and space
	data[at_(1, (m_size - 1))] = SPACE;
	AddWall(at_(1, (m_size - 2)));

	while (m_wall_list.size() != 0){
		unsigned wall_index = (m_wall_list.size() == 1)? 0:rand() % (m_wall_list.size()-1);
		position wall_pos = m_wall_list[wall_index];
		position opp_side = get_opp_side(wall_pos);
		if (opp_side == 0){
			m_wall_list.erase(m_wall_list.begin() + wall_index);
			continue;
		}
		if (data[opp_side] == BLACK_SPACE && !In_wall_list(opp_side)){
			data[wall_pos] = SPACE;
			m_wall_list.erase(m_wall_list.begin() + wall_index);
			AddSpace(opp_side);
			if (data[opp_side] == SPACE){
				AddWall(opp_side + 1); AddWall(opp_side - 1);
				AddWall(opp_side + m_size); AddWall(opp_side - m_size);
			}
		}
		else m_wall_list.erase(m_wall_list.begin() + wall_index);
	}
	AddExit();
}
Esempio n. 3
0
 /*implicit*/ constexpr small_string(const char(&lit)[N])
 : buf_{
   at_(lit, 0), at_(lit, 1), at_(lit, 2), at_(lit, 3), at_(lit, 4),
   at_(lit, 5), at_(lit, 6), at_(lit, 7), at_(lit, 8), at_(lit, 9),
   at_(lit, 10), at_(lit, 11), at_(lit, 12), at_(lit, 13), at_(lit, 14),
   at_(lit, 15), at_(lit, 16), at_(lit, 17), at_(lit, 18), at_(lit, 19),
   at_(lit, 20), at_(lit, 21), at_(lit, 22), at_(lit, 23)
 }
 {
   static_assert(N <= info::max_length, "String literal too long for small_string.");
   static_assert(N > 0, "Non-null-terminated string literal.");
 }
Esempio n. 4
0
 Y at(size_t i, size_t j)
 {
     double y = i * h_zoom_inv;
     double x = j * w_zoom_inv;
     return at_(y, x);
 }
Esempio n. 5
0
constexpr auto &&at(const array<T, N> &elems,
                    std::initializer_list<size_t> list) {
  return at_(elems, begin(list));
}
Esempio n. 6
0
constexpr auto &&at_(const array<T, N> &elems, const size_t *index) {
  return at_(elems[*index], index + 1);
}