Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
1 / 1 / 0
Регистрация: 14.05.2017
Сообщений: 25

Разбиение программы на несколько файлов

25.05.2017, 20:02. Показов 992. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ребят, помогите пожалуйста код разбить на несколько файлов. Чтобы в основном остался только main.
Не соображаю как разделить

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
#include "stdafx.h"  
#include <iostream>
#include <GL/glut.h> 
#include <time.h> 
#include <random> 
// подключаем все необходимые библиотеки.
 
int N = 30, M = 20; // т.к. змейка будем ездить по квадратикам, создадим их, для нашего окна в идеале будет 30x20 квадратов 
int scale = 25; // размер квадрата. Когда OpenGL будет расчерчивать поле для игры, расстояние между гранями квадрата будет 25 пикселей 
 
int w = scale*N; // ширина поля   
int h = scale*M; // его высота 
 
int dir, num = 4; // 4 направления и начальный размер змеи. 
struct { int x; int y; } s[100]; // структура змеи, X и Y координаты, массив с длинной. 
 
class fruct // класс фруктов, тех самых, которые будет есть наша змея 
{
public:
    int x, y; //координаты фруктов, что и где будет находится 
 
    void New() // паблик с новыми фруктами. Он будет вызываться в начале игры и в тот момент, когда змея съест один из фруктов 
    {
        x = rand() % N; // вычисление X координаты через рандом 
        y = rand() % M; // вычисление Y координаты через рандом 
    }
 
    void DrawFruct() // паблик, отрисовывающий фрукты 
    {
        glColor3f(0.0, 1.0, 1.0); // цвет фруктов. в openGL он задается от 0 до 1
        glRectf(x*scale, y*scale, (x + 1)*scale, (y + 1)*scale); // "Закрашиваем" квадрат выбранным цветом, таким образом в нем "появляется" фрукт 
    }
} m[5]; // масив с фруктами, таким образом, у нас появится одновременно 5 фруктов в разных местах, а не один 
 
void Draw() // функция, которая отрисовывает линии 
{
    glColor3f(1.0, 0.0, 0.0); // цвет наших линий, в данном слуае - красный 
    glBegin(GL_LINES); // начинаем рисовать и указываем, что это линии 
    for (int i = 0; i < w; i += scale) // отрисовываем линии в ширину 
    {
        glVertex2f(i, 0); glVertex2f(i, h); // рисуем прямую 
    }
    for (int j = 0; j < h; j += scale) //отрисовываем линии в высоту 
    {
        glVertex2f(0, j); glVertex2f(w, j); // рисуем ту же самую прямую, но в другом направлении 
    }
 
    glEnd(); // конец отрисовки 
}
 
void tick() // функция в которой будет все обновляться (двигаться змея и т.д.) 
{
    for (int i = num; i > 0; --i) // движение змеи
    {
        s[i].x = s[i - 1].x; // задаем Х координату i блока координатой i - 1 
        s[i].y = s[i - 1].y; // то же самое делаем и с Y координатой 
    }
    // далее у нас система направлений. 
    if (dir == 0) s[0].y += 1; // если направление равно 0, то первый фрагмент массива перемещается на один по Y 
    if (dir == 1) s[0].x -= 1; // если направление равно 1, то первый фрагмент массива перемещается на минус один по X 
    if (dir == 2) s[0].x += 1; // аналогиная система 
    if (dir == 3) s[0].y -= 1; // аналогичная система 
 
    for (int i = 0; i < 10; i++) //цикл, в котором наша змея будет расти 
    {
        if ((s[0].x == m[i].x) && (s[0].y == m[i].y)) // Если голова нашей змеи находится в одном блоке с фруктом, то... 
        {
            num++; //...увеличиваем размер нашей змеи на 1 
            m[i].New(); // ... запускаем функцию отрисовки нового фрукта. 
        }
    }
    // Следующее нужно, что бы змея не выходила за рамка поля. Действует это просто : если змея выходит за рамки поля, то задаем 
    if (s[0].x > N) dir = 1; // Ей обратное направление. Например, если она выйдет за экран по высоте, то задаем ей направление, при котором она ползет 
    if (s[0].y > M) dir = 3; // вниз 
    if (s[0].x < 0) dir = 2;
    if (s[0].y < 0) dir = 0;
 
    for (int i = 1; i < num; i++) // с помощью этого цикла мы "обрежем" змею, если она заползет сама на себя 
        if (s[0].x == s[i].x && s[0].y == s[i].y) // проверка координат частей змеи, если X и Y координата головной части равно координате любого 
            num = i; // другого блока змеи, то задаем ей длину, при которой "откушенная" часть отпадает. 
}
 
void Snake() // выводим змейку на экран 
{
    glColor3f(0.1, 1.0, 0.0); //цвет змеи 
    for (int i = 0; i < num; i++) // цикл отрисовки. 
    {
        glRectf(s[i].x*scale, s[i].y*scale, (s[i].x + 0.9)*scale, (s[i].y + 0.9)*scale); //Рисуем квадраты, те самые "блоки" змеи 
    }
}
 
void Key(int key, int a, int b) // функция нажатия клавиш 
{
    switch (key) // используем оператор switch 
    {
    case 101: dir = 0; break; // при нажатии клавиш, задаем направление змеи(вверх, вниз, влево, вправо) 
    case 102: dir = 2; break;
    case 100: dir = 1; break;
    case 103: dir = 3; break;
    }
}
 
void Display() //функция общей отрисовки 
{
    glClear(GL_COLOR_BUFFER_BIT); // очищаем окно перед началом отрисовки 
 
    Draw(); // вызов функции Draw, отвечающей за отрисовку фруктов 
    Snake(); // вызов функции Snake, отвечающей за отрисовку змейки 
 
    for (int i = 0; i < 5; i++) // заполнение карты фруктами 
        m[i].DrawFruct();
 
    glFlush(); // выводим на экран все вышеописанное 
    glutSwapBuffers();
}
 
void timer(int = 0) // Таймер игры(промежуток времени, в котором будет производится все процессы) 
{
    Display(); // Вызов функций   
    tick();
    glutTimerFunc(100, timer, 0); // новый вызов таймера( 100 - промежуток времени(в милисекундах), через который он будет вызыватся, timer - вызываемый паблик) 
}
 
int main(int argc, char **argv) // Главная функция 
{
    std::cout << "Loading...";
    srand(time(0));
    for (int i = 0; i<10; i++) // начальная, самая первая отрисовка фруктов 
        m[i].New();
 
    s[0].x = 10; // начальное положение змейки по X 
    s[0].y = 10; // и Y координате 
    // следующие функции абсолютно идиентичных почти во всех программах на OpenGL, так то запоминать их не обязательно, кроме ... 
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
    glutInitWindowSize(w, h); //  этой, она создаем окно (w - ширина, h - высота) 
    glutCreateWindow("Game"); // этой, она задает название окна 
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluOrtho2D(0, 640, 0, 480);
    glutDisplayFunc(Display); // и этой, она вызывает начальную функцию, в нашем случае это главная функция отрисовки - Display 
    glutSpecialFunc(Key);
    glutTimerFunc(50, timer, 0); // Ну и в начале программы задаем рекурсивный таймер. 
    glutMainLoop();
 
    return 0;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.05.2017, 20:02
Ответы с готовыми решениями:

Разбиение текста для записи в несколько файлов
Здравствуйте уважаемые форумчане. Я еще только начинаю изучать С++. Надеюсь на вашу помощь. В программе мне нужно реализовать...

Разбиение программы на несколько файлов
main.c: #include &quot;vector_int.h&quot; #include &lt;stdio.h&gt; int main() { IntVector vector; InitializeIntVector(&amp;vector); int...

Разбиение DataContract на несколько файлов
Доброго времени суток. Вопрос может быть не совсем про вебсервисы, но на прямую вырос из него. В общем, прошу прощения за много букв, но...

6
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
25.05.2017, 21:15
Константы и прототипы - в h-файл, реализации - в cpp. Класс тоже разделить.
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
25.05.2017, 22:04
Объявление глобальных переменных (с extern и без инициализации) - в .h. Определение их, с инициализацией - в .cpp
0
1 / 1 / 0
Регистрация: 14.05.2017
Сообщений: 25
26.05.2017, 07:07  [ТС]
Это я понимаю, но как дело доходит до деления, то всё идёт не по плану.
Толи я где-то косячу, толи что
0
с++
1282 / 523 / 225
Регистрация: 15.07.2015
Сообщений: 2,562
26.05.2017, 07:18
//прочитайте
https://code-live.ru/post/sepa... ation-cpp/
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
26.05.2017, 15:25
Цитата Сообщение от ЕкатеринаЗ Посмотреть сообщение
Это я понимаю, но как дело доходит до деления, то всё идёт не по плану.
Толи я где-то косячу, толи что
Покажи, как делаешь.
0
 Аватар для dailydose
671 / 217 / 88
Регистрация: 21.07.2016
Сообщений: 1,036
Записей в блоге: 2
26.05.2017, 16:33
а в чём проблема заплатить "исполнителю" чтобы он оформил программу так, как надо "заказчику" ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.05.2017, 16:33
Помогаю со студенческими работами здесь

Разбиение любых файлов на несколько частей
Есть ли, какая-нибудь функция с которой можно разбивать любые файлы по битам? Например, картинка размеров в 1 мегабайт, мне нужно ещё...

Разделение программы на несколько файлов
Здравствуйте, вот какой возник вопрос, я хотел написанную мною программу в одном файле, разделить на несколько файлов Header.h Sourсе.cpp...

Разделение программы на несколько файлов
Друзья, всем привет! Не получается установить взаимосвязь между двумя и более файл функциями. Пишу программу, она стала очень объемной, для...

Разделение программы на несколько файлов
Всем доброго времени суток! Возникла проблема - я написал небольшую програмку в main. #include &lt;stdio.h&gt; #include...

Как связать несколько файлов одной программы
есть 3 файла MainFile.cpp #include &lt;iostream&gt; #include &lt;windows.h&gt; #include &lt;fstream&gt; #include &quot;BankAccounts.h&quot; using...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 09.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru