Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
Zak_Zelman
0 / 0 / 0
Регистрация: 01.05.2015
Сообщений: 9
1

Создание 2D-игры для C++ "Волк-яйцелов"

31.05.2015, 19:00. Просмотров 2604. Ответов 12
Метки нет (Все метки)

Насколько сложно на самом деле создать игру на C++. Скоро курсовая.... Тема курсовой "Волк-яйцелов". Возможно ли в короткие сроки на слабом уровне сделать эту игру? Дайте советы и помогите, чем можете.. Огромное спасибо.
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.05.2015, 19:00
Ответы с готовыми решениями:

Найти причины и способы исправления ошибок в коде (игра "Яйцелов")
Завтра дедлайн, а у меня яйца не падают ! не подскажете, в чем проблема ? #...

Для каждой строки найти слова, которые не имеют ни одного из букв: "l", "k", "r", "s" i "j"
Задано символьные строки. Строка состоит из нескольких слов (наборов символов),...

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно"
В зависимости от времени года "весна", "лето", "осень", "зима" определить...

Создание простой игры, каким образом распределить "обязанности"
В общем идея такая, на данный момент есть более-менее работающий прототип...

Создание программы наподобие игры "кто хочет стать миллионером"
А возможно ли создать программу которая например выдает вопрос из 100 рандомно...

12
_Valera_
490 / 372 / 136
Регистрация: 27.01.2015
Сообщений: 1,588
31.05.2015, 19:09 2
http://www.sfml-dev.org/
Это для графики.

Игру сделать не сложно, а вот время затраченное на нее зависит от знания с++ и графических библиотек.

Цитата Сообщение от Zak_Zelman Посмотреть сообщение
Тема курсовой "Волк-яйцелов".
Эту сделать легко и быстро.
0
Zak_Zelman
0 / 0 / 0
Регистрация: 01.05.2015
Сообщений: 9
31.05.2015, 19:16  [ТС] 3
Познания почти никакие.... А если быть честным с собой, то они отсутствуют. Но вот хочется, все равно что-то начать делать. Если вам не трудно, напишите с чего начать и вообще, т.н. порядок действий. Я в этом полный 0, а работу предоставить необходимо уже в скором времени.
0
rikimaru2013
C++ Game Dev
2473 / 1141 / 349
Регистрация: 30.11.2013
Сообщений: 3,709
31.05.2015, 19:23 4
Как написать книгу на английском без знания английского? Вам в рифму ответить?)
0
_Valera_
490 / 372 / 136
Регистрация: 27.01.2015
Сообщений: 1,588
31.05.2015, 19:25 5
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
Как написать книгу на английском без знания английского?
Верно!

Цитата Сообщение от Zak_Zelman Посмотреть сообщение
а работу предоставить необходимо уже в скором времени.
Ну в Вашем случае похоже копипаст.
0
dzrkot
zzzZZZ...
523 / 354 / 94
Регистрация: 11.09.2013
Сообщений: 2,039
31.05.2015, 19:53 6
Цитата Сообщение от Zak_Zelman Посмотреть сообщение
Познания почти никакие.... А если быть честным с собой, то они отсутствуют. Но вот хочется, все равно что-то начать делать. Если вам не трудно, напишите с чего начать и вообще, т.н. порядок действий. Я в этом полный 0, а работу предоставить необходимо уже в скором времени.
Купить С.Прата "Язык программирования С++" , читать и делать примеры - желательно всё свободное время(если уж вы хотите сами её сделать). Скажем где-то на наследовании можно остановиться и начать делать курсовую.
0
Fulcrum_013
1477 / 1117 / 129
Регистрация: 14.12.2014
Сообщений: 9,463
Завершенные тесты: 3
31.05.2015, 19:58 7
Цитата Сообщение от Zak_Zelman Посмотреть сообщение
Насколько сложно на самом деле создать игру на C++
При наличии библиотеки способной подгружать BMP и блитить их одна в другую с прозрачностью фона - мелочи. Если под винду то такая либа есть в любой среде разработки, так же как и под большинство остальных ОС. Основная сложность в самих спрайтах (покадровых картинках движений волка и всего остального).
0
ZeroHero
3 / 3 / 1
Регистрация: 24.05.2015
Сообщений: 67
31.05.2015, 22:47 8
Если время ОЧЕНЬ поджимает, единственный выход скачать готовые исходники и ХОТЯ БЫ разобраться в них.
0
Electronix
1 / 1 / 0
Регистрация: 20.10.2009
Сообщений: 40
Завершенные тесты: 1
01.06.2015, 08:39 9
https://www.youtube.com/channel/UCUsxzYMb0p8ynFP0NlRHqBA За неделю научишься xD

Добавлено через 1 минуту
А сколько у тебя времени осталось?
0
marat_miaki
163 / 149 / 89
Регистрация: 08.04.2013
Сообщений: 615
01.06.2015, 10:59 10
http://gameshaker.ucoz.ru/publ/razno...fml/49-1-0-206 И кучу ссылок по SFML
0
idm
119 / 33 / 19
Регистрация: 19.03.2015
Сообщений: 90
01.06.2015, 18:24 11
Лучший ответ Сообщение было отмечено gru74ik как решение

Решение

Zak_Zelman,
В общем, в графических редакторах работать не умею, максимум кота в paint'е могу нарисовать(правда, кроме paint ничего и нет на тачках). Если нужна анимация покрасивее то это уже не ко мне, а что касается кода вот:
C++
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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
#include <SFML/Graphics.hpp> // Подключение графики SFML
#include <time.h> // Время для rand
#include <sstream> // Поток для отображения очков
using namespace sf; // sf пространство для удобства
unsigned int EggRand(unsigned int &EggDir) // Принимаем адрес переменной сценария
    {
        EggDir = rand()%4; // Присваиваем рандом от 0 до 3
        return EggDir; // Возвращаем значение
    }
int main()
{
//-------------------Привязка ко времени -------------------------
    Clock clock; // Переменная времени
//----------------------Создание окна ----------------------------
    RenderWindow window(VideoMode(800, 600), "***Game For Zak Zelman***"); 
//----------------------Создание персонажа -----------------------
    Image stay2; // Создаем объект изображения
    stay2.loadFromFile("stay2.png"); // Подгружаем картинку
    stay2.createMaskFromColor(Color(255,255,255)); // Используем загрузку через Image только ради маски(убираем белый фон программно)
 
    Texture stay2t; // Создаем текстуру для персонажа
    stay2t.loadFromImage(stay2); // Подгружаем картинку в текстуру
 
    Sprite stay2s; // Создаем спрайт для персонажа
    stay2s.setTexture(stay2t); // Текстуру заливаем в спрайт
    stay2s.setTextureRect(IntRect(0,0,315,281)); // Вырезаем кадр из спрайта
    stay2s.setPosition(242.5,300); // Координаты куда рисуем
//----------------------Контроль состояния -----------------------
    int direction(0); // Будет принимать от 0 до 3 в зависимости от состояния
//------------------------Создание фона --------------------------
    Texture Background; // Создаем текстуру для фона
    Background.loadFromFile("Background2.png"); // Заливаем картинку сразу в текстуру
 
    Sprite Back; // Создаем спрайт для фона
    Back.setTexture(Background); // Заливаем текстуру в спрайт
//-------------------------Создание яйца -------------------------
    Image eggI; // Создаем объект изображения
    eggI.loadFromFile("Egg.png"); // Подгружаем картинку
    eggI.createMaskFromColor(Color(255,255,255)); // Используем загрузку через Image только ради маски(убираем белый фон программно)
 
    Texture eggT; // Создаем текстуру для яйца
    eggT.loadFromImage(eggI); // Подгружаем картинку в текстуру
 
    Sprite egg; // Создаем спрайт для яйца
    egg.setTexture(eggT); // Текстуру заливаем в спрайт
    egg.setTextureRect(IntRect(0,0,46,62)); // Вырезаем кадр из спрайта
    egg.setPosition(100,100); // Координаты куда рисуем
    egg.setOrigin(23,31); // Отсчет координа из центра для вращения
    double speed(0.1); // Скорость вращения яйца
//-------------------------Движение яйца -------------------------
        // Рассмотрим четыре сценария появления и движения яйца
    srand(time(NULL)); // Генерация псевдослучайных чисел
    unsigned int EggDir; // Переменная сценария (принимает значение от 0 до 3)
    EggDir = EggRand(EggDir); // Выбирается позиция яйца рандомно через функцию EggRand
    bool force = true; // Состояние яйца
    int tmp(0); // Храним итерацию для setPosition
    int count(0); // Считаем очки
    int lose(3); // Считаем жизни
//---------------------Вывод очков и жизни -----------------------
    Font font; // Создаем шрифт
    font.loadFromFile("CyrilicOld.ttf"); // Подгружаем наш шрифт
    Text CountText("", font, 20); // Создаем текст с путой строкой
    CountText.setColor(Color::Blue);// Задаем цвет
    CountText.setPosition(10,10);//задаем позицию текста, центр камеры
 
    Text life("", font, 20); // Создаем текст с путой строкой
    life.setColor(Color::Black);// Задаем цвет
    life.setPosition(700,10);//задаем позицию текста, центр камеры
//--------------------Основной цикл программы --------------------
    while (window.isOpen()) // Пока окно открыто
    {
        float time = clock.getElapsedTime().asMicroseconds(); // Ласт тайм в микросекундах
        clock.restart(); // Перезагружаем тайм
        time = time/800;
        Event event;
        while (window.pollEvent(event)) // Обработка события "закрытие окна"
        {
            if ((event.type == Event::Closed)||(Keyboard::isKeyPressed(Keyboard::Q)))
                window.close(); //  Закрываем окно если нажат крестик или Q
        }
//--Подблок в основном цикле программы - "Обработка объектов egg" --
        // В нашей игре яйца будут появляться последовательно,что разрешает отказаться от динамической памяти
        egg.rotate(speed*time); // Постоянно вращаем яйцо со скорость speed
        if(lose==0){window.close();} // Если жизни закончились выходим из игры
        if(force) // Если яйцо еще не разбилось или не было поймано
        {
            if(EggDir==0) // Яйцо катится слева сверху
            {
                    if(!tmp)egg.setPosition(0,153); // Если первая итерация то перемещаем яйцо в нужную позицию
                    egg.move(0.15*time,0); // Двигаем яйцо
                    tmp++; // Итерация уже не первая
                    if(egg.getPosition() .x >= 230) // Если палка по которой катиться яйцо закончилась
                        {
                        egg.move(0,0.15*time); // Двигаем яйцо вниз
                        if(egg.getPosition() .x >= 275)egg.move(-0.15*time,0); // Если выровнялись то балансируем наклонное движение
                        //Если яйцо в диапазоне корзины и волк стоит правильно яйцо поймали,яйцо переместили(false),итерацию обнулили,очки зачли
                        if((egg.getPosition() .y > 300)&&(direction==1)&&(egg.getPosition() .y < 320)){force = false;tmp=0;count++;} 
                        // Если яйцо упало,яйцо переместили,итерацию обнулили,жизнь вычли
                        if(egg.getPosition() .y >= 500){force = false;tmp=0;lose--;}
                        }
            }
            if(EggDir==1) // Яйцо катится справа сверху
            {
                    if(!tmp)egg.setPosition(800,153); // Если первая итерация то перемещаем яйцо в нужную позицию
                    egg.move(-0.15*time,0); // Двигаем яйцо
                    tmp++; // Итерация уже не первая
                    if(egg.getPosition() .x <= 530) // Если палка по которой катиться яйцо закончилась
                        { 
                        egg.move(0,0.15*time);  // Двигаем яйцо вниз
                        if(egg.getPosition() .x <= 520)egg.move(0.15*time,0); // Если выровнялись то балансируем наклонное движение
                        //Если яйцо в диапазоне корзины и волк стоит правильно яйцо поймали,яйцо переместили(false),итерацию обнулили,очки зачли
                        if(((egg.getPosition() .y > 300)&&(direction==0))&&(egg.getPosition() .y < 320)){force = false;tmp=0;count++;}
                        // Если яйцо упало,яйцо переместили,итерацию обнулили,жизнь вычли
                        if(egg.getPosition() .y >= 500){force = false;tmp=0;lose--;}
                        }
            }
            if(EggDir==2) // Яйцо катится слева снизу
            {
                    if(!tmp)egg.setPosition(0,353); // Если первая итерация то перемещаем яйцо в нужную позицию
                    egg.move(0.15*time,0); // Двигаем яйцо
                    tmp++; // Итерация уже не первая
                    if(egg.getPosition() .x >= 230) // Если палка по которой катиться яйцо закончилась
                        {
                        egg.move(0,0.15*time); // Двигаем яйцо вниз
                        if(egg.getPosition() .x >= 275)egg.move(-0.15*time,0); // Если выровнялись то балансируем наклонное движение
                        //Если яйцо в диапазоне корзины и волк стоит правильно яйцо поймали,яйцо переместили(false),итерацию обнулили,очки зачли
                        if((egg.getPosition() .y > 400)&&(direction==3)&&(egg.getPosition() .y < 420)){force = false;tmp=0;count++;}
                        // Если яйцо упало,яйцо переместили,итерацию обнулили,жизнь вычли
                        if(egg.getPosition() .y >= 500){force = false;tmp=0;lose--;}
                        }
            }
            if(EggDir==3) // Яйцо катится справа снизу
            {
                    if(!tmp)egg.setPosition(800,353); // Если первая итерация то перемещаем яйцо в нужную позицию
                    egg.move(-0.15*time,0); // Двигаем яйцо
                    tmp++; // Итерация уже не первая
                    if(egg.getPosition() .x <= 530) // Если палка по которой катиться яйцо закончилась
                        {
                        egg.move(0,0.15*time); // Двигаем яйцо вниз
                        if(egg.getPosition() .x <= 520)egg.move(0.15*time,0); // Если выровнялись то балансируем наклонное движение
                        //Если яйцо в диапазоне корзины и волк стоит правильно яйцо поймали,яйцо переместили(false),итерацию обнулили,очки зачли
                        if(((egg.getPosition() .y > 400)&&(direction==2))&&(egg.getPosition() .y < 420)){force = false;tmp=0;count++;}
                        // Если яйцо упало,яйцо переместили,итерацию обнулили,жизнь вычли
                        if(egg.getPosition() .y >= 500){force = false;tmp=0;lose--;}
                        }
            }
        }
        else // Если force=false, значит яйцо или поймано или разбилось, делаем снова true и перемещаем на новое направление
        {
            EggDir = EggRand(EggDir);// Вызываем функцию генерации случайного события для появления яйца
            force = true; // Яйцо "живое"
        }
//--------Подблок в основном цикле программы - "Управление" -------
        if (Keyboard::isKeyPressed(Keyboard::Right)) // Если жмем направо
        {
            if(direction==1){stay2s.setTextureRect(IntRect(0,0,315,281));direction=0;} // Если стояли и смотрели налево, меняем флаг состояния
            if(direction==3){stay2s.setTextureRect(IntRect(338,0,360,281));direction=2;} // Если сидели и смотрели налево, меняем флаг состояния
        }
        if (Keyboard::isKeyPressed(Keyboard::Left)) // Если жмем налево
        {
            if(direction==0){stay2s.setTextureRect(IntRect(0+315,0,-315,281));direction=1;} // Если стояли и смотрели направо, меняем флаг состояния
            if(direction==2){stay2s.setTextureRect(IntRect(338+360,0,-360,281));direction=3;} // Если сидели и смотрели направо, меняем флаг состояния
        }
        if (Keyboard::isKeyPressed(Keyboard::Up)) // Если жмем вверх
        {
            if(direction==2){stay2s.setTextureRect(IntRect(0,0,315,281));direction=0;} // Если сидели и смотрели направо, меняем флаг состояния
            if(direction==3){stay2s.setTextureRect(IntRect(0+315,0,-315,281));direction=1;} // Если сидели и смотрели налево, меняем флаг состояния
        }
        if (Keyboard::isKeyPressed(Keyboard::Down)) // Если жмем вниз
        {
            if(direction==0){stay2s.setTextureRect(IntRect(338,0,360,281));direction=2;} // Если стояли и смотрели направо, меняем флаг состояния 
            if(direction==1){stay2s.setTextureRect(IntRect(338+360,0,-360,281));direction=3;} // Если стояли и смотрели налево, меняем флаг состояния
        }
//--------Подблок в основном цикле программы - "Обновление" -------
        window.clear(); // Очищаем экран
        window.draw(Back); // Рисуем фон
        window.draw(stay2s); // Рисуем персонажа
        window.draw(egg); // Рисуем яйцо
//--------------------------Выводим текст--------------------------
        // Яйца
        std::ostringstream CountEgg;
        CountEgg << count; // В поток кидаем количество пойманых яиц
        CountText.setString("Собрано яиц: "+ CountEgg.str());// В потоке инт преобразуем в строку
        window.draw(CountText);// Рисуем текст
        // Жизни
        std::ostringstream CountLife;
        CountLife << lose; // В поток кидаем количество жизни
        life.setString("Жизни: "+ CountLife.str());// В потоке инт преобразуем в строку
        window.draw(life);// Рисуем текст
 
        window.display(); // Выводим на экран
    }
    return 0;
}
Не использовал ООП, динамическую память, функция и то одна, так что с понимание проблем быть не может. Материала по SFML сейчас достаточно много, освоите при желании, скрины и source прикрепляю.
Кликните здесь для просмотра всего текста

Если возникнет "Такс, мне дали рабочий код, как же скомпилировать эту фигню..." то:
Среда: Microsoft Visual Studio Ultimate 2012 (11.0) у меня лично x86 (винда х64 не смущает) стянул на {ссылка вырезана}
SFML для этой студии: тут
Подключать: так
Весь source положить в папку с проектом где main.cpp как на скрине №3
Во втором архиве полностью весь debug проект и двухсекундный ролик если найдутся любопытные и ленивые(хотя все это полная , так что качать не стоит).
3
Миниатюры
Создание 2D-игры для C++ "Волк-яйцелов"   Создание 2D-игры для C++ "Волк-яйцелов"   Создание 2D-игры для C++ "Волк-яйцелов"  

Вложения
Тип файла: rar source.rar (882.4 Кб, 74 просмотров)
Тип файла: rar Full Debug Project+Video.rar (9.05 Мб, 95 просмотров)
idm
119 / 33 / 19
Регистрация: 19.03.2015
Сообщений: 90
03.06.2015, 12:54 12
Цитата Сообщение от Zak_Zelman Посмотреть сообщение
работу предоставить необходимо уже в скором времени
Zak_Zelman, Последняя активность: 31.05.2015 22:19
Сказали бы что не срочно, я бы и не торопился.
1
Zak_Zelman
0 / 0 / 0
Регистрация: 01.05.2015
Сообщений: 9
15.02.2016, 08:52  [ТС] 13
Большое спасибо, что сделали это. Мне очень пригодится в дальнейшем.
0
15.02.2016, 08:52
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.02.2016, 08:52

создание игры "Точки"
я только начел программировать. может кто-то уже делал?? Выложите код, чтобы...

Наследуемым классом для комплексного числа объявить класс "радиус-вектор", имеющий данные "длина" и "угол"
кто то напишите пожалуйста, вот программа: наследуемым классом для комплексного...

Через ООП: Дать для числа наименование: "рубль", "рубля", "рублей";
Помогите пожалуйста с задачей. Могу сделать ее просто, но надо через ООП и у...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru