1 / 1 / 0
Регистрация: 14.05.2017
Сообщений: 25
1

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

25.05.2017, 20:02. Показов 709. Ответов 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
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.05.2017, 20:02
Ответы с готовыми решениями:

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

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

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

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

6
7167 / 6142 / 2802
Регистрация: 14.04.2014
Сообщений: 26,462
25.05.2017, 21:15 2
Константы и прототипы - в h-файл, реализации - в cpp. Класс тоже разделить.
0
nd2
3431 / 2810 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
25.05.2017, 22:04 3
Объявление глобальных переменных (с extern и без инициализации) - в .h. Определение их, с инициализацией - в .cpp
0
1 / 1 / 0
Регистрация: 14.05.2017
Сообщений: 25
26.05.2017, 07:07  [ТС] 4
Это я понимаю, но как дело доходит до деления, то всё идёт не по плану.
Толи я где-то косячу, толи что
0
с++
1282 / 523 / 225
Регистрация: 15.07.2015
Сообщений: 2,562
26.05.2017, 07:18 5
//прочитайте
https://code-live.ru/post/sepa... ation-cpp/
0
nd2
3431 / 2810 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
26.05.2017, 15:25 6
Цитата Сообщение от ЕкатеринаЗ Посмотреть сообщение
Это я понимаю, но как дело доходит до деления, то всё идёт не по плану.
Толи я где-то косячу, толи что
Покажи, как делаешь.
0
669 / 215 / 88
Регистрация: 21.07.2016
Сообщений: 1,036
Записей в блоге: 2
26.05.2017, 16:33 7
а в чём проблема заплатить "исполнителю" чтобы он оформил программу так, как надо "заказчику" ?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.05.2017, 16:33
Помогаю со студенческими работами здесь

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

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

Разделение программы на несколько файлов
Всем доброго времени суток! Возникла проблема - я написал небольшую програмку в main. ...

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru