Результаты поиска
| |
Saitei | Дата: Понедельник, 03 Ноября 2014, 11:30 | Сообщение # 481 | Тема: Ищу движок для 2.5D онлайн игры с исп. С\С++ |
старожил
Сейчас нет на сайте
| -l33t-h4xx-, изометрию же?
|
|
| |
Saitei | Дата: Воскресенье, 02 Ноября 2014, 13:40 | Сообщение # 482 | Тема: "Пишу свой игровой движок" - обсуждение |
старожил
Сейчас нет на сайте
| Цитата CaptanVova (  ) А продолжение будет? неа
|
|
| |
Saitei | Дата: Воскресенье, 02 Ноября 2014, 13:35 | Сообщение # 483 | Тема: Раскрашивание в фотошопе. |
старожил
Сейчас нет на сайте
| Цитата _ToBe_ (  ) Картинка№1 Картинка№2 Классно получились. Особенно вторая :3
|
|
| |
Saitei | Дата: Воскресенье, 02 Ноября 2014, 13:31 | Сообщение # 484 | Тема: Космические рейнджеры 3 |
старожил
Сейчас нет на сайте
| Ordan, AndrewVersus, честно говоря, разработчики КР меня сильно вдохновляют)
|
|
| |
Saitei | Дата: Суббота, 01 Ноября 2014, 21:22 | Сообщение # 485 | Тема: Помогите найти изображения |
старожил
Сейчас нет на сайте
| Цитата Angry (  ) Ну наверное я попробовал это в первую очередь мы не экстрасенсы.
|
|
| |
Saitei | Дата: Пятница, 31 Октября 2014, 18:12 | Сообщение # 486 | Тема: Космические рейнджеры 3 |
старожил
Сейчас нет на сайте
| AndrewVersus, та не, первая часть КР делалась практически без бюджета двумя людьми
|
|
| |
Saitei | Дата: Воскресенье, 26 Октября 2014, 18:18 | Сообщение # 487 | Тема: Привет всем |
старожил
Сейчас нет на сайте
| Цитата griga555 (  ) Помогите создать игру про симпсонов типа гта не такую лажевую как The Simpsons - Hit & Run или Game . Хочется что бы в игре все было как в гта только это были любимые Симпсоны я уверен очем много кто хотел бы в нее поиграть , а ждать когда какие ни будь компании ее создадут это на мой взгляд пустая трата времени , на мой взгляд вся надежда именно на фанатов данного сериала !!! Потому что именно фанаты способна все прочувствовать как надо а не как издатель велит . Если бы я понимал в программирование я бы может что и смог сделать а так я в нем ноль пока учусь и пенсия придет ))) Могу помочь с написанием сюжета или рисованием объектов , так как иногда рисую . Думаю если найдутся люди то каждый сможет вложить частичку в проект и мы сделаем его ! О да, идея супер!1! Мы же там прибыль разделим 50 на 50, да????? Ну, йа в деле.. Вообще круто! Эта пять!
|
|
| |
Saitei | Дата: Суббота, 25 Октября 2014, 22:13 | Сообщение # 488 | Тема: Ищу идею для игры |
старожил
Сейчас нет на сайте
| kotofey, то, что я хочу сделать игру чисто своими силами
|
|
| |
Saitei | Дата: Суббота, 25 Октября 2014, 21:19 | Сообщение # 489 | Тема: Модуль игры на PascalABC.NET |
старожил
Сейчас нет на сайте
| Цитата KRONMAG (  ) fon( и т.п. убрать. Плохой стиль это... А ещё нужно придумать архитектуру игры... Всё в одном модуле хранить как-то...
|
|
| |
Saitei | Дата: Суббота, 25 Октября 2014, 20:41 | Сообщение # 490 | Тема: [Урок]Игра "Жизнь" |
старожил
Сейчас нет на сайте
| Сегодня я покажу как написать игру "Жизнь". Сразу хочу обратить внимание на то, что я не буду использовать ООП. Так же по совету опытных программистов я решил, что не стоит игру нагружать потоками, синглтонами и прочей ерундой. Если будет большое желание - я сделаю отдельный урок по разработке маленького параллельного игрового движка.
Игра "Жизнь" Суть игры элементарна! Есть массив клеток. Каждая клетка может находиться в состоянии "1" или "0". Если возле пустой клетки находится три живых клетки - зарождается жизнь. Если же у живой клетки есть 2-3 соседа, то она продолжает жить (в противном случае погибает либо от одиночества, либо от "тесноты"). Вот и всё.
Код Игру можно было легко сделать и в консоли, но мне показалось, что получится "круче" если будет графика. Я использовал SFML, дабы не зацикливать ваше внимание на нюансах OpenGL/DirectX. Всё, что нас сейчас интересует, - это игра. Перед тем, как взглянуть на мой код, попробуйте самостоятельно написать такую игру. Если у вас получится, то можете гордиться собой.
На этапе настройки SFML я не буду останавливаться, ведь всё написано здесь. Итак. Имеем следующее:
Код #include <SFML/Graphics.hpp> #include <time.h> #define WINDOW_WIDTH 640 #define WINDOW_HEIGHT 480 #define WINDOW_TITLE "Life Game" #define CELL_SIZE 5 #define MAP_WIDTH WINDOW_WIDTH/CELL_SIZE #define MAP_HEIGHT WINDOW_HEIGHT/CELL_SIZE #define FPS 22
int main() { srand(time(NULL)); //Для рандома sf::RenderWindow window(sf::VideoMode(WINDOW_WIDTH, WINDOW_HEIGHT), WINDOW_TITLE); //Создаём окно window.setFramerateLimit(FPS); while (window.isOpen()) { sf::Event event; while (window.pollEvent(event)) { if (event.type == sf::Event::Closed) window.close(); } window.clear(); ... window.display(); } return 0; }
По условию игры есть массив клеток, где каждая клетка может становится либо "0", либо "1". Ничего не напоминает? Да-да! Это тоже самое, что true или false. Следовательно у нас есть массив булевых значений: Код bool Generation[MAP_WIDTH][MAP_HEIGHT]; Но нам одного массива недостаточно, потому что мы каким-то образом должны "запоминать" это поколение клеток, чтобы его нормально обновлять: Код bool OldGeneration[MAP_WIDTH][MAP_HEIGHT]; Что-то в этом есть... Не так ли? Но наши поколения пусты! Что же нам делать? Верно! Нам нужно его создать. Следовательно создадим функцию Generate: Код void Generate() { for(int y = 0; y < MAP_HEIGHT; y++) { for(int x = 0; x < MAP_WIDTH; x++) { if(rand()%10 == 1) { Generation[x][y] = OldGeneration[x][y] = true; } else { Generation[x][y] = OldGeneration[x][y] = false; } } } } Может быть кто-то из вас испугался циклов for... Но ничего здесь страшного нет! Мы всего лишь "пообщаемся" с каждой ячейкой массива =) Что касаемо rand()%10 - здесь мы генерируем число в диапазоне от 0 до 9. Следовательно rand()%N вернет число в диапазоне от 0 до (N-1). Если сгенерирована единица, то мы ставим в ячейку клетку. В противном случае в ячейке никого нет. В OldGeneration мы зафиксировали поколение, чтобы нормально обновлять Generation. Теперь нужно написать функцию обновления поколения: Код void Update() { UpdateOldGeneration(); for(int y = 0; y < MAP_HEIGHT; y++) { for(int x = 0; x < MAP_WIDTH; x++) { char cellsCount = GetCellsCount(x,y); if(OldGeneration[x][y] == false) { if(cellsCount == 3) { Generation[x][y] = true; } } else { if((cellsCount < 2)||(cellsCount > 3)) { Generation[x][y] = false; } } } } } Описание функций UpdateOldGeneration и GetCellsCount(x,y) я приведу ниже. Могу лишь сказать, что UpdateOldGeneration копирует Generation в OldGeneration, а GetCellsCount возвращает количество живых клеток возле OldGeneration[x][y] (с проверками на выход из массива). В функции Update мы всего лишь закодировали правила игры: Цитата Если возле пустой клетки находится три живых клетки - зарождается жизнь. Если же у живой клетки есть 2-3 соседа она продолжает жить (в противном случае погибает либо от одиночества, либо от "тесноты"). Вот описание UpdateOldGeneration: Цитата void UpdateOldGeneration() { for(int y = 0; y < MAP_HEIGHT; y++) { for(int x = 0; x < MAP_WIDTH; x++) { OldGeneration[x][y] = Generation[x][y]; } } } А вот и GetCellsCount: Код char GetCellsCount(char x, char y) { return GetCell(x-1,y)+GetCell(x-1,y-1)+GetCell(x,y-1)+GetCell(x+1,y-1)+ GetCell(x+1,y)+GetCell(x+1,y+1)+GetCell(x,y+1)+GetCell(x-1,y+1); } "Ну вот! Опять какая-то функция!" - скажите вы. Но не беспокойтесь, мы скоро закончим : ) GetCell всего лишь возвращает значение определенной клетки, если её координаты находятся в диапазоне массива: Код char GetCell(char x, char y) { if((x < 0)||(x > MAP_WIDTH - 1)||(y < 0)||(y > MAP_HEIGHT - 1)) { return 0; } return (char)OldGeneration[x][y]; }
Что ж! Логика написана. Теперь попытайтесь всё вывести на консоль. А вот мой код с выводом и прочей чепухой: Код #include <SFML/Graphics.hpp> #include <time.h> #define WINDOW_WIDTH 640 #define WINDOW_HEIGHT 480 #define WINDOW_TITLE "Life Game" #define CELL_SIZE 5 #define MAP_WIDTH WINDOW_WIDTH/CELL_SIZE #define MAP_HEIGHT WINDOW_HEIGHT/CELL_SIZE #define FPS 22
bool Generation[MAP_WIDTH][MAP_HEIGHT]; bool OldGeneration[MAP_WIDTH][MAP_HEIGHT];
void Generate() { for(int y = 0; y < MAP_HEIGHT; y++) { for(int x = 0; x < MAP_WIDTH; x++) { if(rand()%10 == 1) { Generation[x][y] = OldGeneration[x][y] = true; } else { Generation[x][y] = OldGeneration[x][y] = false; } } } }
void UpdateOldGeneration() { for(int y = 0; y < MAP_HEIGHT; y++) { for(int x = 0; x < MAP_WIDTH; x++) { OldGeneration[x][y] = Generation[x][y]; } } }
char GetCell(char x, char y) { if((x < 0)||(x > MAP_WIDTH - 1)||(y < 0)||(y > MAP_HEIGHT - 1)) { return 0; } return (char)OldGeneration[x][y]; }
char GetCellsCount(char x, char y) { return GetCell(x-1,y)+GetCell(x-1,y-1)+GetCell(x,y-1)+GetCell(x+1,y-1)+ GetCell(x+1,y)+GetCell(x+1,y+1)+GetCell(x,y+1)+GetCell(x-1,y+1); }
void Update() { UpdateOldGeneration(); for(int y = 0; y < MAP_HEIGHT; y++) { for(int x = 0; x < MAP_WIDTH; x++) { char cellsCount = GetCellsCount(x,y); if(OldGeneration[x][y] == false) { if(cellsCount == 3) { Generation[x][y] = true; } } else { if((cellsCount < 2)||(cellsCount > 3)) { Generation[x][y] = false; } } } } }
void Draw(sf::RenderWindow* window, sf::RectangleShape* rectangle) { for(int y = 0; y < MAP_HEIGHT; y++) { for(int x = 0; x < MAP_WIDTH; x++) { if(Generation[x][y]) { rectangle->setPosition(x*CELL_SIZE, y*CELL_SIZE); window->draw(*rectangle); } } } }
int main() { srand(time(NULL)); sf::RenderWindow window(sf::VideoMode(WINDOW_WIDTH, WINDOW_HEIGHT), WINDOW_TITLE); window.setFramerateLimit(FPS); sf::RectangleShape rectangle; rectangle.setFillColor(sf::Color(250,50,50)); rectangle.setSize(sf::Vector2f(CELL_SIZE,CELL_SIZE)); Generate(); while (window.isOpen()) { sf::Event event; while (window.pollEvent(event)) { if (event.type == sf::Event::Closed) window.close(); } if(sf::Keyboard::isKeyPressed(sf::Keyboard::R)) { Generate(); } Update(); window.clear(); Draw(&window,&rectangle); window.display(); } return 0; }
That's all.
Вот скриншот:  Добавлено (25.10.2014, 20:41) --------------------------------------------- *facepalm* что-то мне стыдно стало за этот код...
Сообщение отредактировал Saitei - Пятница, 15 Августа 2014, 18:17 |
|
| |
Saitei | Дата: Суббота, 25 Октября 2014, 20:27 | Сообщение # 491 | Тема: Ищу идею для игры |
старожил
Сейчас нет на сайте
| Всем здрям. Я программист С++, таланта в рисовании нет. С художниками, как известно, беда большая и, видимо, я не умею работать в команде. Посему ищу идею для двухмерной RTS, где не нужна графика в принципе (т.е. игру можно написать даже используя обыкновенные примитивы вроде треугольник\квадрат\круг и т.п.). Ставку хочу сделать на динамичный геймплей и идею. Есть идеи?
Сообщение отредактировал Saitei - Суббота, 25 Октября 2014, 20:27 |
|
| |
Saitei | Дата: Понедельник, 13 Октября 2014, 17:44 | Сообщение # 492 | Тема: Школьные будни хикки |
старожил
Сейчас нет на сайте
| Цитата nikanator (  ) 3. Программист(ы). Новелла хочет чтобы ее делали на Renpy, т.к. last2424 не проявляет особой активности На чистом С++ нельзя?
|
|
| |
Saitei | Дата: Суббота, 11 Октября 2014, 19:20 | Сообщение # 493 | Тема: Помогите развить архитектурное решение игрового движка |
старожил
Сейчас нет на сайте
| Archido, БД - это лишь один вариант. Вся соль в том, что центр всех систем - это данные
|
|
| |
Saitei | Дата: Понедельник, 06 Октября 2014, 23:46 | Сообщение # 494 | Тема: Паскаль мертв? |
старожил
Сейчас нет на сайте
| Меня сейчас паскалем насилуют... Язык-то хороший, но с С++ резко на паскаль... Ужасные ощущения, правда
|
|
| |
Saitei | Дата: Понедельник, 06 Октября 2014, 12:42 | Сообщение # 495 | Тема: Помогите развить архитектурное решение игрового движка |
старожил
Сейчас нет на сайте
| Цитата HPlusDiese (  ) Это просто модульная структура. Так обычно всегда делают - абстрактный интерфейс каждой подсистемы, независимый от реализации. Можете на примере показать модульную структуру?
|
|
| |
Saitei | Дата: Понедельник, 06 Октября 2014, 12:22 | Сообщение # 496 | Тема: Задачи по Borland C++ |
старожил
Сейчас нет на сайте
| Ramilyanamana, эм... Тебе дали готовую функцию. Просто вставь её описание и реализацию и тупо юзай
|
|
| |
Saitei | Дата: Понедельник, 06 Октября 2014, 11:22 | Сообщение # 497 | Тема: Помогите развить архитектурное решение игрового движка |
старожил
Сейчас нет на сайте
| Ordan, встраиваемая СУБД: sqlite.
|
|
| |
Saitei | Дата: Воскресенье, 05 Октября 2014, 22:39 | Сообщение # 498 | Тема: [2D] HeliFight Online |
старожил
Сейчас нет на сайте
| NovaSurfer, что такое верт?
|
|
| |
Saitei | Дата: Воскресенье, 05 Октября 2014, 19:47 | Сообщение # 499 | Тема: Помогите развить архитектурное решение игрового движка |
старожил
Сейчас нет на сайте
| Vinchensoo, в зависимости от того, что вы называете разделяемой памятью : ) OpenGOO, можно ужать в 1 запрос) Ну а вообще зависит от игры, так-то
|
|
| |
Saitei | Дата: Воскресенье, 05 Октября 2014, 17:50 | Сообщение # 500 | Тема: Помогите развить архитектурное решение игрового движка |
старожил
Сейчас нет на сайте
| Цитата vanvanich (  ) Но платишь скоростью взаимодействия . Думаете, скорости не хватит?
|
|
| |
|