Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.02.2012, 17:50   #1
Kamilius
Пользователь
 
Регистрация: 28.02.2012
Сообщений: 23
По умолчанию Рандомные лабиринты в одноименной игре.

Вчера написал игру "лабиринт"(C++, visual studio 2008, консольное приложение win32) с привязкой к клавиатуре и прочими шалостями. Но проблема в том, что у меня всегда только одна и та же локация, нарисованная мною посредством 1, 0 (преграда, пустота), 2 (игрок), 3 (финиш).

Пробовал создать изолированный квадрат (1 по контуру), и заполнить его рандомно 1 и 0, но сами понимаете, что такой способ далек от идеала, поскольку далеко не всегда есть путь от входа к выходу + не знаю как вставить в такой рандом начальную координату и конечную.

Каким образом можно задавать правила заполнения 2д массива 1 и 0?..
Например дабы не было изолированных комнат, или чтоб в массиве при его заполнении 2 и 3 были использованы лишь раз и то по контуру? Словом сделать заполнения массива рандомным и в то же время ведомым определенными правилами?..

Последний раз редактировалось Kamilius; 29.02.2012 в 18:07. Причина: уточнял как и в чем писал
Kamilius вне форума Ответить с цитированием
Старый 01.03.2012, 00:02   #2
Kamilius
Пользователь
 
Регистрация: 28.02.2012
Сообщений: 23
По умолчанию

В данный момент рисует массив, изолированный по контуру. По левой стороне рандомно появляется начальная координата, справа - конечная.
Но опять-таки в преобладающем большинстве случаев лабиринт не проходим...

Код:
#include <iostream>
#include <time.h>
using namespace std;

void main()
{
	srand(time(NULL));
	const int p=20;  // размер массива
	int mas[p][p];    // сам 2d массив
	for (int i=0;i<p;i++)   //алгоритм заполнения 2d массива
	{
		for (int j=0;j<p;j++)
		{
			if ((i==0||i==p-1)&&j<p-1)  // если верхняя либо нижняя горизонтальная черта поля - заполняем единичками
				mas[i][j]=1;
			else if (j==0||j==p-1)    // если правая либо левая черта поля - также заполняем единичками
				mas[i][j]=1;
			else 
			{
				mas[i][j]=rand()%2;   // заполняем все оставшееся пространство в рандомном порядке 1 и 0
			}
			
		}
	}

	int start_pos=rand()%(p-1)+1, finish_pos=rand()%(p-1)+1;         
	mas[start_pos][0]=2;                    //Случайным образом выбираем координату на левой черте для точки входа в лабиринт
	mas[finish_pos][p-1]=3;                // Случайным образом выбираем координату на правой черте для точки выхода из лабиринта

	for (int i=0;i<p;i++)                       //Рисуем лабиринт
	{
		for (int j=0;j<p;j++)
		{
			if (mas[i][j]==1)           //Все единички прорисовываем как знак  вопроса
				cout << "?";
			else if (mas[i][j]==2)    //Двойки как "P" - Player
				cout << "P";
			else if (mas[i][j]==3)    //Тройки как "F" - Finish
				cout << "F";
			else 
				cout << " ";      //Ноли как пустое пространство
		}		
		cout << endl;
	}
}

Последний раз редактировалось Kamilius; 01.03.2012 в 00:09. Причина: комментарии
Kamilius вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
задача про лабиринты с использованием StringGrind в Delphi Hitory Помощь студентам 6 16.11.2011 20:23
подредактировать античит к игре игре Nhl 09 (античит написан на дельфи) Viper18 Фриланс 3 03.08.2011 17:37
Музыка в игре Андрей 93 Софт 2 16.12.2010 06:45
Рандомные звуки при наборе текста Shouldercannon Общие вопросы Delphi 8 07.01.2010 22:37
Рандомные помехи в результате запроса MySQL Ivan_32 SQL, базы данных 0 17.07.2009 05:52