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

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

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.04.2013, 09:36   #1
Ghost3
Ученик в c++
Форумчанин
 
Аватар для Ghost3
 
Регистрация: 28.02.2011
Сообщений: 162
По умолчанию Наипростейший 2D движек на c++

Здравствуйте!
Я не сильно опытный в c++, и поэтому хотелось бы потренировать мозги в создании простейшей игры (да и вообще мечта создать игру хоть какую-нибудь)
Можете привести исходный код простейшего движка, например, программа строит поле из ячеек-клеток из символов(или из файла-рисунка) и какой-нибудь управляемый игроком объект, двигающийся вверх-вниз-влево-направо по стрелкам. Совсем простой, без замудренностей всяких. Управляемый элемент и поле X на Y.
Если можете предложить движек из просторов интернета, то предлагайте с открытым кодом пожалуйста
Ps: Лично я когда гуглил, то находил довольно таки сложные движки, к которому и редакторы всякие прикручены и т.п.

Последний раз редактировалось Ghost3; 15.04.2013 в 09:39.
Ghost3 вне форума Ответить с цитированием
Старый 15.04.2013, 10:05   #2
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Если у Вас стоит цель создать игру то я думаю что самое оптимальное это взять какой нибудь существующий движок. Достаточно простой например Unity... Сам когда то баловался им.. В течении пары часов можно набросать игрулю побегать и успокоится.
А если цель с кодом помучатся... хм .. придется мучится .
У вас сколько опыта с С++.
У меня на заре своей деятельности была подобная задача ...
Было поле и шарик с анимацией ... можно было перемещатся по полю и при приближении на определенное расстояние к противникам (шарики другого цвета) они бежали в мою сторону.
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 15.04.2013, 10:21   #3
Ghost3
Ученик в c++
Форумчанин
 
Аватар для Ghost3
 
Регистрация: 28.02.2011
Сообщений: 162
По умолчанию

Хм, ответить на вопрос "У вас сколько опыта с С++" затруднительно. Одна из целей написания игры и состоит в поднятии опыта, так что я надеюсь если окажется что я малоопытен слишком, то мне не откажут в данном деле. Вот например програмка которую я писал сам, нет не тырил ничего, все сам и меня это очень радует :D http://www.programmersforum.ru/showthread.php?t=228262

Я бы хотел научится выводить поле игровое, хоть из символов (но из картинок будет намного лучше) на окно программы (а не в cmd). И научится создавать элемент, который двигался бы по клеткам поля по нажатию на клавиши клавиатуры.

Хочу начать с малого.
Ghost3 вне форума Ответить с цитированием
Старый 15.04.2013, 10:39   #4
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

А что не получается то?
Игровой объект это класс с как минимум параметрам X, Y.
В таймере отрисовываете:
Игровое поле.
Объект в точке Х,Y.

По кнопкам изменяете координаты .. вот вам и будет движение
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 15.04.2013, 10:48   #5
Ghost3
Ученик в c++
Форумчанин
 
Аватар для Ghost3
 
Регистрация: 28.02.2011
Сообщений: 162
По умолчанию

Для начала, как вывести на окно поле, допустим, 10 на 10, состоящее из одного и того же рисунка?

Что-то вроде такого?
Код:
For (i=1;i<=10;i++)
 for (j=1;j<=10;j++)
  {
   // тут некий код, который строит поле и выводит на экран
   }
Вот как осуществить построение поля из одного (.png) рисунка?
Как потом накладывать поверх рисунка ячейки рисунок управляемого объекта?

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

Последний раз редактировалось Ghost3; 15.04.2013 в 10:58.
Ghost3 вне форума Ответить с цитированием
Старый 15.04.2013, 11:53   #6
SAMOUCHKA
Форумчанин
 
Регистрация: 07.08.2011
Сообщений: 576
По умолчанию

http://wiki.linuxformat.ru/index.php...80%D0%BE%D0%B9тут посмотри вроде понятно написано
SAMOUCHKA вне форума Ответить с цитированием
Старый 15.04.2013, 12:08   #7
Ghost3
Ученик в c++
Форумчанин
 
Аватар для Ghost3
 
Регистрация: 28.02.2011
Сообщений: 162
По умолчанию

Во-во! Спасибо большое!

Одно только не понял
Цитата:
1.Открыть текстовый редактор и набрать код программы.
2.Запустить терминал, перейти в каталог с игрой и набрать make.
3.Оценить результат.
4.Завершить программу, нажав клавишу Escape.
5.Перейти к пункту 1.
Это какой терминал? Через что выполнять?

Последний раз редактировалось Ghost3; 15.04.2013 в 12:12.
Ghost3 вне форума Ответить с цитированием
Старый 15.04.2013, 12:14   #8
intmain
Играюсь с Python
Форумчанин
 
Аватар для intmain
 
Регистрация: 12.12.2012
Сообщений: 340
Лампочка

Цитата:
Вот как осуществить построение поля из одного (.png) рисунка?
Цитата:
подключить текстуру ( травы )

For (i=1;i<=10;i++)
for (j=1;j<=10;j++)
{
// тут некий код, который строит поле и выводит на экран

тут вызвать процедуру которая умеет нарисовать квадрат в позиции (х, у) шириной (w, h)
}
Цитата:
Как потом накладывать поверх рисунка ячейки рисунок управляемого объекта?
Масло, хлеб а с верху ты мажешь варенье. И тут так же.
Это дополнительный проход после прорисовки травы в нужной области новый квадрат с текстурой человечка.

Цитата:
Это какой терминал? Через что выполнять?
Ну не оплаты же :D Это люнятернминология, по виндовозному - консоль. Они так exe собирают, для особых ценителей мазохизма имхо.
Что ел то - в долг, что жил то - зря.
Для избранных. ))
Секретные разработки

Последний раз редактировалось intmain; 15.04.2013 в 12:17.
intmain вне форума Ответить с цитированием
Старый 15.04.2013, 12:30   #9
Ghost3
Ученик в c++
Форумчанин
 
Аватар для Ghost3
 
Регистрация: 28.02.2011
Сообщений: 162
По умолчанию

Ну я сначало так и подумал что через консоль, но совершенно непонятно как компилировать код через него. Написали "набрать make" и думайте что хотите

С трудом нашел файлы SDL.h, SDL_ttf.h и SDL_mixer.h, прикрепил к проекту - не хочет запускаться. Тупо как будто я и не прикреплял их.

С первого взгляда все просто, а начнешь делать, так автор умолчал о многом.
А мне важно не тупо что-то скопировать-вставить, а все до мелочей узнать и понять.

Последний раз редактировалось Ghost3; 15.04.2013 в 12:37.
Ghost3 вне форума Ответить с цитированием
Старый 16.04.2013, 09:05   #10
intmain
Играюсь с Python
Форумчанин
 
Аватар для intmain
 
Регистрация: 12.12.2012
Сообщений: 340
По умолчанию

Не надо пользоваться такими статьями, которые больше в ступор загонят, а не помогут.

подключи gl.h
создай окно
создай контекст
очисти окно красным цветом/ кислотно-зеленым
погугли как загрузить бпм
загрузи бмп
нарисуй квадрат
наложи текстуру ту что загрузил на него.
сделай функцию, которая будет рисовать квадрат в заданном месте с заданной текстурой
профит! У тебя уже есть наипростейший 2дэ движек!

под что код прятать, почему нет спойлеров?
Вот тебе пример (КАК ЗАГРУЗИТЬ BMP ТЕКСТУРУ) загрузки из моего недодвижка/

Код:
struct GameTexture 
{
	unsigned ID;
	int UsageType;
	unsigned W;
	unsigned H;
	unsigned BPP;
	int FileType;
	std::string FileName;
	

};

int LoadBmp(std::string &In_FileName, unsigned &Out_Bpp, unsigned &Out_Width, unsigned &Out_Height, char **Out_Pixels, unsigned &Out_PixelsSize );

bool GameTextureBmp :: CreateTextureFromFile ( std::string _FileName ) 
{
	char* Data = 0;
	unsigned DataSize = 0;
	FileName = _FileName;

	if (LoadBmp(_FileName, BPP, W, H, &Data, DataSize )) 
	{

		glGenTextures(1, &ID);
		glBindTexture(GL_TEXTURE_2D, ID);

#define GL_BGR 0x80E0
		glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, W, H, 0, GL_BGR, GL_UNSIGNED_BYTE, Data);

		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);

		return true;
	}

	if (Data != 0) free(Data);

	return false;
}

int LoadBmp(std::string &In_FileName, unsigned &Out_Bpp, unsigned &Out_Width, unsigned &Out_Height, char **Out_Pixels, unsigned &Out_PixelsSize ) 
{
	unsigned FileSize = 0;
	unsigned short BM = 0;
	int OffsetToPixels = 0;
	short Planes = 0;
	short Bpp = 0;
	
	std::ifstream File( In_FileName.c_str(),  std::ios::binary );
	if (!File.is_open()) return 0;

	File.seekg (0, std::ios::end);
	FileSize = File.tellg();
	File.seekg (0, std::ios::beg);
	
	File.read((char*)(&BM), sizeof (BM));
	
	if (BM != 19778) return 0;

	File.seekg (8, std::ios::cur);
	File.read((char*)(&OffsetToPixels), sizeof (OffsetToPixels));
	File.seekg (4, std::ios::cur);
	
	File.read((char*)(&Out_Width), sizeof (Out_Width));
	File.read((char*)(&Out_Height), sizeof (Out_Height));

	File.read((char*)(&Planes), sizeof (Planes));
	if (Planes != 1) return 0;
	
	File.read((char*)(&Bpp), sizeof (Bpp));
	if (Bpp != 24) return 0;
	Out_Bpp = Bpp;

	Out_PixelsSize = Out_Width * Out_Height * 3;

	File.seekg (OffsetToPixels, std::ios::beg);
	*Out_Pixels = (char*)malloc(Out_PixelsSize);
	
	File.read(*Out_Pixels, Out_PixelsSize);
	File.close();
	
	return 1;	
}
Что ел то - в долг, что жил то - зря.
Для избранных. ))
Секретные разработки

Последний раз редактировалось intmain; 16.04.2013 в 09:14.
intmain вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка при закрытии формы..динамический движек. Vervolf Общие вопросы Delphi 14 23.01.2011 13:49
простой 2D движек SL1CK Gamedev - cоздание игр: Unity, OpenGL, DirectX 6 15.01.2011 12:03
Какой движек выбрать для клан-сайта? Simply-Art WordPress и другие CMS 8 18.02.2009 12:34