Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.64/64: Рейтинг темы: голосов - 64, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 27.10.2018
Сообщений: 3

Кубик Рубика на С++ и OpenGL

28.10.2018, 00:12. Показов 14812. Ответов 29

Студворк — интернет-сервис помощи студентам
Здравствуйте, я начал изучать С++ и мне дали задание сделать кубик рубика на С++ и OpenGL, до этого был front-end программистом, базу знаю. При изучении понял что такое ООП и тд, основные понятия. В инете нашел отличную(но сложную) реализацию и частично разобрался в ней, написал свой код, хочу узнать на правильном ли я пути, екземпляри классов сделал что бы была хоть какаета картинка, но понимаю что так не лзя)

В реализации видел масив 3х3х3 я понимаю что это и есть сам кубик но как применить массив в коде и зачем он, не понимаю, какую роль он играет и тд. В чем нужно мне разобраться?

И в целом подскажите что мне нужно почитать для того что бы абы как но реализовать эту задачу

Foto:



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
#include <cstdio>
#include <windows.h>
#include <glut.h>   //Подключение библиотеки glut.h
void disp();
void Draw();
float width = 1000.0, height = 800.0, deg = 0.0, degy = 0.0;
 
void Keyboard(unsigned char key, int x, int y)
{
    switch (key)
    {
    case 'a': deg--;
        break;
    case 'd': deg++;
        break;
    case 's': degy++;
        break;
    case 'w': degy--;
        break;
    case '1':
    {
        cubik1.rotate();
    }
        break;
    }
}
void Timer(int){
    glutTimerFunc(20, Timer, 0);
    glutPostRedisplay();
}
 
class SmallCube
{
public:
    void rotate()
    {
        glPushMatrix();
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        glRotatef(45, 0, 1, 0);
        glPopMatrix();
        glutSwapBuffers();
    }
    void Draw(int x, int y, int z)
    {
        /*
        glColor3f(0.0, 1.0, 0.0);           green
        glColor3f(1.0, 1.0, 0.0);           yellow
        glColor3f(0.0, 0.0, 1.0);           blue
        glColor3f(1.0, 0.0, 0.0);           red
        glColor3f(1.0, 1.0, 1.0);           white
        glColor3f(1.0, 0.0, 1.0);           magenta
        */
 
        // відмальовуємо основний каркас
        glPushMatrix();
        glRotatef(deg, 0, 1, 0);
        glRotatef(degy, 1, 0, 0);
        glTranslated(x, y, z);
        glBegin(GL_QUADS);
        //back
        glColor3f(1.0, 0.0, 1.0);
        glVertex3f(-50, 50, -50);
        glVertex3f(50, 50, -50);
        glVertex3f(50, -50, -50);
        glVertex3f(-50, -50, -50);
    
        glColor3f(1.0, 1.0, 0.0);
        glVertex3f(-50, 50, -50);
        glVertex3f(50, 50, -50);
        glVertex3f(50, 50, 50);
        glVertex3f(-50, 50, 50);
        //front
        glColor3f(0.0, 1.0, 0.0);
        glVertex3f(-50, 50, 50);
        glVertex3f(50, 50, 50);
        glVertex3f(50, -50, 50);
        glVertex3f(-50, -50, 50);
 
        glColor3f(1.0, 0.0, 0.0);
        glVertex3f(-50, -50, -50);
        glVertex3f(50, -50, -50);
        glVertex3f(50, -50, 50);
        glVertex3f(-50, -50, 50);
 
        glColor3f(1.0, 1.0, 1.0);
        glVertex3f(-50, 50, -50);
        glVertex3f(-50, -50, -50);
        glVertex3f(-50, -50, 50);
        glVertex3f(-50, 50, 50);
 
        glColor3f(0.0, 0.0, 1.0);
        glVertex3f(50, 50, -50);
        glVertex3f(50, 50, 50);
        glVertex3f(50, -50, 50);
        glVertex3f(50, -50, -50);
 
        glEnd();
        //відмальовуємо кубики
        
        glPopMatrix();
        
    }
    
};
 
SmallCube cubik1;
SmallCube cubik2;
SmallCube cubik3;
SmallCube cubik4;
SmallCube cubik5;
SmallCube cubik6;
SmallCube cubik7;
SmallCube cubik8;
SmallCube cubik9;
class Cubik
{
public:
    void drawAllCubiks()
    {
        cubik1.Draw(0, 0, 0);
        cubik2.Draw(-105, 0, 0);
        cubik3.Draw(105, 0, 0);
        cubik4.Draw(0, 105, 0);
        cubik5.Draw(105, 105, 0);
        cubik6.Draw(-105, 105, 0);
        cubik7.Draw(0, -105, 0);
        cubik8.Draw(105, -105, 0);
        cubik9.Draw(-105, -105, 0);
    }
};
 
Cubik cub;
 
void disp()
{
    glPushMatrix();
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    cub.drawAllCubiks();
    glPopMatrix();
    glutSwapBuffers();
}
 
 
 
//Войти в главный цикл
int main(int argc, char **argv)
{
    //Ініціалізація 
    glutInit(&argc,argv);
    glutInitWindowPosition(100, 100);
    glutInitWindowSize(width, height);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);
    glutCreateWindow("MyFirstGlutProgram");
    glClearColor(0.0, 0.0, 0.0, 1.0);
    glEnable(GL_DEPTH_TEST);
    glLoadIdentity();
    glOrtho(-width / 2, width / 2, -height / 2, height / 2, -400, 400);
    //Реєстрація
    glutDisplayFunc(disp);
 
    glutTimerFunc(20, Timer, 0);
    glutKeyboardFunc(Keyboard);
    glutMainLoop();
    return 0;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.10.2018, 00:12
Ответы с готовыми решениями:

Кубик Рубика
Здравствуйте подскажите пожалуйста , хочу попробовать сделать кубика Рубика , пока стоит задача -&gt; определить куда хочет повернуть грань...

кубик рубика
Нужна помощь. Никак не могу найти алгоритма. Мне нужно заштрихованный кубик передвинуть на 3 ряд без нарушения 1 и 2 ряда. Подскажите...

Кубик Рубика
Задача такая,из любой позиции собрать кубик Рубика за минимальное число ходов(вывести алгоритм сборки),используя поиск в...

29
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
29.10.2018, 15:20
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Даже под Android гугл что-то выдает.
Вот прям та самая глут, не какая-то переработанная?) Что-то сомневаюсь)
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Эта информация откуда? Последний стабильный релиз 1 марта 2018, зеркало на github'е показывает изменения пару дней назад.
Это SDL2 тут окей, поддерживается)
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Ну и последнее обновление SFML было пару дней назад
Не знаю с чего вы решили что они устарели. Да и чем их заменить в таком случае?
Тут я не о том что SFML не поддерживается, наоброт, но почему-то использует версию OpenGL-1.1 (сейчас вроде 4.6 или 4.8 актуальна, лень гуглить)
и OpenGL ES даже НЕ 2й версии, хотя давно уже есть 3я
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Собственно, поэтому glut, SDL и SFML до сих пор популярны
Но их никто не использует, для крупных проектов, давайте на этом закончим дискуссию) Против глута ничего не имею, просто считаю он устарел, если учить, то учить как надо, если конечно это ваша цель, это ИМХО, никого не заставляю верить мне
0
 Аватар для COKPOWEHEU
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,101
29.10.2018, 15:55
Цитата Сообщение от Azazel-San Посмотреть сообщение
Вот прям та самая глут, не какая-то переработанная?) Что-то сомневаюсь)
Скорее всего что-то из free-glut'ов. Но какая разница если API сохранился.
Цитата Сообщение от Azazel-San Посмотреть сообщение
Тут я не о том что SFML не поддерживается, наоброт, но почему-то использует версию OpenGL-1.1
Напрямую с ним дела не имел, но разве там нельзя напрямую вызывать функции OpenGL нужной версии? В SDL-то можно точно.
Цитата Сообщение от Azazel-San Посмотреть сообщение
Против глута ничего не имею, просто считаю он устарел, если учить, то учить как надо
В школе тоже сначала дают упрощенную, хотя и заведомо неверную информацию. Про то, что электроны это маленькие шарики, вращающиеся вокруг монолитного ядра, хотя бы. Просто первый пример, который пришел в голову, но то же самое можно сказать про остальные предметы.
На начальном этапе важнее сразу показать результат, чтобы заинтересовать жертву. А уже потом, когда предложенных рамок перестанет хватать, подсказывать с каких сторон есть двери в волшебный мир современных библиотек. Или люки в полу, через которые видно лифтовую шахту со всеми механизмами. Важно только сразу предупредить что вот эта библиотека всего лишь оболочка, при желании ее можно расковырять и изменить.
Цитата Сообщение от Azazel-San Посмотреть сообщение
Но их никто не использует, для крупных проектов, давайте на этом закончим дискуссию)
У меня статистики нет. Но пусть будет по-вашему, что тогда используют в крупных проектах? Самописные библиотеки, готовые движки, системные API без лишних оберток?
0
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
29.10.2018, 16:08
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Но какая разница если API сохранился.
Но все же, это уже не совсем тот глут
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
но разве там нельзя напрямую вызывать функции OpenGL нужной версии?
Можно, но есть ограничения, стабильно на всех устройства можно вроде только 2.1 поставить максимум
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
На начальном этапе важнее сразу показать результат, чтобы заинтересовать жертву.
Я думал к этому приходят осознанно) Уже поковырявшись во всяких SFML, SDL и тд) Это явно не игрушка для детей, да и в универе такое врядли проходят, ну т.е. к этому уже наверное нужно серьезнее ставится, да и обычно уже немного кодить на чем-то умеют и гуглить) Ну это все вкусовщина, как я выше сказал, ИМХО.
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Самописные библиотеки, готовые движки, системные API без лишних оберток?
Есть универсальная связка glad/GLFW второе может быть заменено на что-то другое что создает окна, например winapi, или что-то еще обычно так и делают, а glad делают свой, выкидывая ненужное)
Я просто на проекте работаю, хоть и джун, но тут OpenGL во всю, десктоп(винда/мак) + мобилки, заказчик IBM, проект крупный, и примерно тут все как я выше описал +- и своя обертка ООП по типу как SFML но куда мощнее сейчас 3д функционал пилится)
0
 Аватар для COKPOWEHEU
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,101
29.10.2018, 16:29
Цитата Сообщение от Azazel-San Посмотреть сообщение
Но все же, это уже не совсем тот глут
Сомневаюсь, что опенсорсная реализация существенно отличается от оригинала как в плане функционала, так и простоты работы. Мы же рассматриваем с практической точки зрения - "стоит ли это использовать и если да то с какой целью"
Цитата Сообщение от Azazel-San Посмотреть сообщение
Я думал к этому приходят осознанно)
"К этому " это к чему? Если к графике, то, боюсь, вы ошибаетесь. Это одна из самых интересных и зрелищных областей программирования. Разбираться с этим определенно интереснее и проще (на начальном этапе, разумеется), чем, скажем, с разработкой компиляторов, математическими программами или чем-то подобным. Впрочем, это из личного опыта: занимался на DirectX + Delphi класса с 9 наверное, интернета и гугла толком не было... зато не надоедал на форумах тупыми вопросами, тоже плюс.
Цитата Сообщение от Azazel-San Посмотреть сообщение
Есть универсальная связка glad/GLFW
Про glad раньше не слышал. Можно вкратце что это и для чего применяется?
glfw насколько я помню, занимает ту же нишу, что glut, SDL, SFML.
Цитата Сообщение от Azazel-San Посмотреть сообщение
Я просто на проекте работаю, хоть и джун, но тут OpenGL во всю
Тогда скромный совет: не переоценивайте используемые инструменты. То что используется у вас, может использоваться не обязательно по технологическим причинам - возможно исторические, возможно лицензионные, возможно маркетинговые. Я не утверждаю, что ваши эти причины обязательно имеют место быть или что ваши инструменты плохи. Но и называть любые альтернативы устаревшими и неиспользуемыми тоже не стоит.
0
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
29.10.2018, 17:57
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Мы же рассматриваем с практической точки зрения - "стоит ли это использовать и если да то с какой целью"
Ладно, окей)
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
занимался на DirectX + Delphi класса с 9 наверное
Не думаю что все такие)
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Про glad раньше не слышал. Можно вкратце что это и для чего применяется?
Ну, это реализация спецификации OpenGL если можно так высловится. Близкий аналог GLEW.
Применяется для собственно вызовов API OpenGL, по типу glGenBuffers и тд.
т.е. если писать самому, то так:
C++
1
2
3
4
5
6
7
// define the function's prototype
typedef void (*GL_GENBUFFERS) (GLsizei, GLuint*);
// find the function and assign it to a function pointer
GL_GENBUFFERS glGenBuffers  = (GL_GENBUFFERS)wglGetProcAddress("glGenBuffers");
// function can now be called as normal
unsigned int buffer;
glGenBuffers(1, &buffer);
а glad, это автоматизирует, собирая весь спек OpenGL'a
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
glfw насколько я помню, занимает ту же нишу, что glut, SDL, SFML.
Я бы сказал ближе к SDL чем ко всему остальному, и такая более ловлевельная что-ли / не ООПешная.
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Но и называть любые альтернативы устаревшими и неиспользуемыми тоже не стоит.
Постойте каждый имеет право на собственное мнение, я же писал ИМХО, не заставляю верить мне. Я же выводы сделал не только из своего опыта, но и из общения с разработчиками уже съевшими на этом собаку. Для которых это уже не далеко первый проект.
0
 Аватар для COKPOWEHEU
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,101
30.10.2018, 10:38
Цитата Сообщение от Azazel-San Посмотреть сообщение
Не думаю что все такие)
Я сравниваю с другими областями программирования. Графика самая красивая визуально, ей можно кому-то похвастаться. Теоретически, сайтострение выглядит красиво и несложно (на начальном уровне, повторяю!), но толком не пробовал. Сложные алгоритмы, базы данных и прочее сторонний человек не оценит.
Цитата Сообщение от Azazel-San Посмотреть сообщение
Ну, это реализация спецификации OpenGL если можно так высловится. Близкий аналог GLEW.
Понятно, спасибо.
Цитата Сообщение от Azazel-San Посмотреть сообщение
Я бы сказал ближе к SDL чем ко всему остальному, и такая более ловлевельная что-ли / не ООПешная.
Ну, SDL тоже формально не ООПшная. Хотя больше похожа на реализацию ООП средствами Си. А объединил я эти библиотеки в данном случае по принципу "создание минималистичного окна, пригодного для OpenGL" и все. Насколько я понял, для ТСа ничего большего и не требуется (хотя он все равно, похоже, испугался и убежал)
Цитата Сообщение от Azazel-San Посмотреть сообщение
Постойте каждый имеет право на собственное мнение, я же писал ИМХО, не заставляю верить мне.
Я не отрицаю ваш опыт и мнение, только рекомендую аккуратнее выбирать формулировки. Например, что glut не кроссплатформенный, что SDL и SFML устарели, что они нигде не используются. Все это как минимум неточные утверждения, как максимум - неверные.
0
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
30.10.2018, 11:26
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Например, что glut не кроссплатформенный
Ладно-ладно, уж больно интересно стало, будет время посмотрю, что там с ним сейчас
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
что SDL и SFML устарели
Вы меня не верно наверное поняли, но да ладно, и даже если и так, это не повод их не использовать вообще.. на Си же пишут хоть и он "устарел", как все кудахчут и ничего.. но их и есть за что поругать, не без греха уж..
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
хотя он все равно, похоже, испугался и убежал
ахах, за него что-то вообще забыли))
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
что они нигде не используются
Как будто вырвано из контекста, в крупных бизнес приложениях, нет, да и они заточены немного под другое, тот же SFML только 2д, а если надо 3д, мм? Давайте не будет все смешивать в одну кучу, если где-то их функционал полезен, то почему бы не взять, но если надо что-то большее, то придется колесить.
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Все это как минимум неточные утверждения, как максимум - неверные.
Да хватит вам уже, каждый имеет право на свое мнение.
0
 Аватар для COKPOWEHEU
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,101
30.10.2018, 12:13
Цитата Сообщение от Azazel-San Посмотреть сообщение
на Си же пишут хоть и он "устарел", как все кудахчут
Вот тех кто "кудахчет" слушать точно не надо
Пока что достойной альтернативы Си в его области не видно. Вроде как Rust пытаются протолкнуть, но пока не особо получается. Остальные не обеспечивают должного контроля и производительности. "Устарел" это скорее когда никем не используется, поскольку есть более подходящая альтернатива.
Цитата Сообщение от Azazel-San Посмотреть сообщение
тот же SFML только 2д
Так они и не используются как мощные графические библиотеки. Они скорее обертка вокруг функций операционной системы - примитивная графика, работа с файлами, звуком, сетью, клавомышкой, буфером обмена. Кто-то умеет больше, кто-то меньше. Но вот на отображении трехмерной графики ни одна из этих библиотек не специализируется. Зачем, если уже реализован интерфейс к OpenGL.
0
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
30.10.2018, 12:25
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Зачем, если уже реализован интерфейс к OpenGL.
Ну вот, а так нет ничего против них не имею, был против глута, но сейчас пересмотрю еще свое мнение, спасибо за ответы
0
 Аватар для COKPOWEHEU
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,101
30.10.2018, 13:32
А что с glut'ом не так? Он действительно годится только для создания и примитивного управления окном. Работы с буфером обмена или сетью, как в SDL, там нет, собственных таймеров тоже. В целом, я бы сказал, что для демок он сойдет, для начала обучения тоже: создание окна там действительно простейшее. Но вот для чего-то серьезнее - едва ли.
Еще мне там не нравится механизм callback'ов: он крутится в собственном цикле, изредка дергая мои функции, в отличие от других библиотек, которые сами встраиваются в мой цикл.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.10.2018, 13:32

Кубик-Рубика
добрый вечер, форумчане) мне необходимо написать программу кубика-рубика. руководитель посоветовала использовать opengl, так вот у меня,...

Кубик Рубика
Здравствуйте)помогите пожалуйста если не трудно)) Изобразить на экране ЭВМ следующий рисунок

Кубик рубика в Паскале
Изобразить в графическом модуле паскаля Кубик рубика, с разноцветными квадратиками

Игра 'Кубик Рубика'
Ребят мне очень нужна ваша помощь. Помогите создать игру кубик рубик. Но без 3D модели. Никак не могу догадаться как же это сделать.

Как сделать кубик рубика?
Как сделать в 3дс максе понятно, а дальше нет.


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

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
Новые блоги и статьи
BitTorrent (версия 7.11 English) и Меню Настройки
russiannick 15.11.2026
Пункты, отвечающие за отключение обновлений в BitTorrent версии 7. 11 (английской) Options Preferences General Language
Транслитерация текста с кириллицы на латиницу (вариант №4)
Maks 15.11.2026
Что-то я перемудрил с предыдущими версиями, в этот раз сделал всё проще, обратившись к функции "СтрокаЛатиницей" из типового общего модуля "СтроковыеФункцииКлиент". В данной функции нет апострофов,. . .
BitTorrent (версия 4.3.9) и Меню Настройки
russiannick 15.11.2026
В меню Настройки можно отключить автоматическое обновление программы. Карта этого меню приложена ниже. Нужный пункт выделен красным. Сервис Настройки Поведение
Транслитерация текста с кириллицы на латиницу (вариант №3)
Maks 15.11.2026
Обновленная версия предыдущей обработки. Изменения коснулись букв: Ъ, Ы, Ь, Э, отображения которых зависят от положения реквизита "Транслитерация имён". Изменено отображение буквы Й. Добавлена. . .
Транслитерация текста с кириллицы на латиницу (вариант №2)
Maks 13.11.2026
Обновленная версия ранее созданной обработки. Добавлено: - Проверка исходного текста на кириллицу, через обращение к стандартной функции "ТолькоКириллицаВСтроке" из общего модуля. . .
Часы с термометром и праздничным календарем
yariko 12.11.2026
Сегодня мы рассмотрим как можно сделать отличные многофункциональные часы. Итак, поставим конкретную задачу: разработать часы с календарем, двумя термодатчиками, выводом поздравительных сообщений. . .
Транслитерация текста с кириллицы на латиницу (вариант №1)
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru