Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.72/76: Рейтинг темы: голосов - 76, средняя оценка - 4.72
208 / 95 / 15
Регистрация: 27.07.2018
Сообщений: 323

Что изучать для совершенствования знаний по C++

08.11.2018, 09:25. Показов 21489. Ответов 361

Студворк — интернет-сервис помощи студентам
Изучил уже до ООП, вопрос что делать дальше? Могу ли я уже писать программы, с чего начинать?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.11.2018, 09:25
Ответы с готовыми решениями:

Что изучать после получения базовых знаний по c#
В каком направлении дальше двигаться? Или попытаться устроиться стажером для начала? А там дальше скажут в каком направлении двигаться...

Какой язык и технологию изучать после получения средних знаний
Здравствуйте! Я сейчас в 9 классе, буду поступать в техникум...Хорошие знания C#.NET, LINQ, ADO.NET, скоро буду начинать учить ASP.NET, и...

Ссылки для изучения и совершенствования
Ha всякий случай, несколько ссылок, больше на Rutracker. He знаю других трекеров c поиском в этих категориях. Темы c наибольшим спросом...

361
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
17.11.2018, 15:48
Студворк — интернет-сервис помощи студентам
CyberGame, это просто опечатка.
0
208 / 95 / 15
Регистрация: 27.07.2018
Сообщений: 323
17.11.2018, 15:54  [ТС]
C++ (Qt)
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
#include <GL/freeglut.h>
 
#include <iostream>
#include <string>
using namespace std;
 
int lives = 3;
int score = 0;
 
void update(int time)
{
    cout << "update" << endl;
    glutTimerFunc(500, update, 0);
}
 
void drawText(float x, float y, string text)
{
    glRasterPos2f(x, y);
    glutBitmapString(GLUT_BITMAP_8_BY_13, (const unsigned char*)text.c_str());
}
 
void draw()
{
    drawText(-0.9f, 0.9f, "Score: " + to_string(score));
    drawText(0.4f, 0.9f, "Lives: " + to_string(lives));
 
    glColor3f(0.0f, 1.0f, 0.0f);
 
    glBegin(GL_QUADS);
    glVertex2f(0.0f, 0.0f); // Эту вершину не нужно менять, пусть она в точке (0, 0)
    glVertex2f(0.f, 0.4f);
    glVertex2f(0.4f, 0.4f);
    glVertex2f(0.4f, 0.0f);
    glEnd();
 
    glutSwapBuffers();
}
 
int main(int argc, char** argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
    glutInitWindowSize(256, 256); // 256x256 пикселей
    glutCreateWindow("Snake");
    glutDisplayFunc(draw);
    glutTimerFunc(500, update, 0);
    glutMainLoop();
    return 0;
}

Всё работает, так же есть вопрос по -
C++ (Qt)
1
glutTimerFunc(500, update, 0);
- так понимаю первый параметр, переодичность с милисекундах, второй название функции в которой будет выводиться, а третий?
0
17.11.2018, 16:12

Не по теме:

8Observer8, ИМХО, глупая затея. Судя по вопросам ТС, у него нет элементарных базовых знаний по программированию.

Цитата Сообщение от CyberGame Посмотреть сообщение
Изучил уже до ООП
Громко сказано. Нужна самостоятельная практическая работа, чтобы как-то разбираться хотя бы в синтаксисе.

0
208 / 95 / 15
Регистрация: 27.07.2018
Сообщений: 323
17.11.2018, 16:30  [ТС]
n1b1ru, *Не по теме*, боже зачем утверждать, если не знаешь? Изучал c++ года два назад, бросил потому что остановился на одной точке. Сейчас уже почти всё вспомнил.
Задачки в интернете решал, ничего вроде не дало.
0
17.11.2018, 18:23

Не по теме:


Цитата Сообщение от CyberGame Посмотреть сообщение
боже зачем утверждать, если не знаешь?
Я констатировал факт по твоим вопросам в теме, только и всего.
Цитата Сообщение от CyberGame Посмотреть сообщение
Изучал c++ года два назад, бросил потому что остановился на одной точке.
А если 8Observer8, на один из твоих вопросов не ответит так же поступишь?

0
9991 / 2963 / 497
Регистрация: 05.10.2013
Сообщений: 8,135
Записей в блоге: 243
17.11.2018, 19:45
Цитата Сообщение от CyberGame Посмотреть сообщение
так понимаю первый параметр, переодичность с милисекундах, второй название функции в которой будет выводиться, а третий?
Когда вы видите непонятную команду, то сначала копируйте её в Google со словом Docs: glutTimerFunc docs

Через гуглось нашлось такое: https://www.opengl.org/resourc... ode64.html
C++
1
The value parameter to the timer callback will be the value of the value parameter to glutTimerFunc.
Если перевести с помощь: https://translate.google.com/
Получается:
Параметр value для обратного вызова таймера будет значением параметра значения glutTimerFunc.
Вообще непонятно, что написано, поэтому переходим по другим ссылкам, например: https://linux.die.net/man/3/gluttimerfunc
Здесь написано:
C++
1
glutTimerFunc(unsigned int msec, void( *callback )( int data ), int data);
Parameters
msec Milliseconds till invocation.
callback Client function for timer event.
data Arbitrary data; passed to callback.

Description
After at least msec milliseconds, OpenGLUT will call callback , passing in your user-supplied data parameter. OpenGLUT will call your function only once.
То есть data - это просто целое число, которое передаётся в функцию-callback по пользовательским нуждам.

Вы можете написать 250 в фукции glutTimerFunc и это вывести в update. Правда, я первый раз неправильно написал, назвав параметр time, а нужно было value, как сейчас:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void update(int value)
{
    cout << value << endl;
    glutTimerFunc(500, update, 0);
}
 
int main(int argc, char** argv)
{
    // ...
    // ...
    // ...
    glutTimerFunc(500, update, 250);
    glutMainLoop();
    return 0;
}
В консоль будет выводиться 250 каждые пол секунды.

Добавлено через 1 минуту
То есть я изменил третий параметр с 0 на 250:

Было:
C++
1
glutTimerFunc(500, update, 0);
Стало:
C++
1
glutTimerFunc(500, update, 250);
Добавлено через 17 минут
Цитата Сообщение от CyberGame Посмотреть сообщение
Всё работает, так же есть вопрос по -
C++
1
glutTimerFunc(500, update, 0);
Ты забыл добавить эту функцию в код, чтобы в консоль выводилось "Hello, World" каждые 500 миллисекунд.

Добавлено через 8 минут
Цитата Сообщение от n1b1ru Посмотреть сообщение
8Observer8, ИМХО, глупая затея. Судя по вопросам ТС, у него нет элементарных базовых знаний по программированию.
Я считаю, всё равно какая-то польза будет. Он сталнётся с какими-то ошибками во время написания этой змейки. Пусть не боится задавать любые вопросы, но перед этим пусть постарается с помощью гугла самостоятельно найти ответ, но если не получилось, то хотя бы высказать свои предположения и что ему удалось понять, размышляя самостоятльно. Мне тоже польза есть, потому что я заряжен сильным энтузиазмом. У меня есть надежда, что я смогу объяснить, как перейти от устаревшего OpenGL версии 1.5 с актуальному шейдерному OpenGL версии 3.

Добавлено через 8 минут
Цитата Сообщение от CyberGame Посмотреть сообщение
- так понимаю первый параметр, переодичность с милисекундах, второй название функции в которой будет выводиться, а третий?
Отлично, что ты высказываешь свои размышление, своё понимание, так и нужно продолжать. Нужно объяснять своими словами, что и как ты понимаешь. Но здесь в этом вопросе есть недостаток, что ты не пытался поискать в интернете. Не избегай чтения на английском: документации, ответов на английских форумах, примеров из английских туториалов. Не понял в одном месте ищи в другом. После размышлений и попыток найти ответ - спрашивай.
0
208 / 95 / 15
Регистрация: 27.07.2018
Сообщений: 323
17.11.2018, 19:51  [ТС]
8Observer8, что-то я не понимаю, добавил же я. Посмотрите мой код и скрины.

Добавлено через 3 минуты
8Observer8, ну не знаю, я плох в английском для туториолов.
0
9991 / 2963 / 497
Регистрация: 05.10.2013
Сообщений: 8,135
Записей в блоге: 243
17.11.2018, 19:51
Цитата Сообщение от CyberGame Посмотреть сообщение
что-то я не понимаю, добавил же я. Посмотрите мой код и скрины.
Извини за невнимательность! Я сам же поругал и сам же так поступил Давай на ты.

Сейчас пришлю следующее небольшое задание.
0
208 / 95 / 15
Регистрация: 27.07.2018
Сообщений: 323
17.11.2018, 20:13  [ТС]
8Observer8,
C++ (Qt)
1
2
3
4
5
void update(int value)
{
    cout << value << endl;
    glutTimerFunc(500, update, 0);
}
А разве не
C++ (Qt)
1
2
    cout << value << endl;
    glutTimerFunc(500, update, value);
?
0
9991 / 2963 / 497
Регистрация: 05.10.2013
Сообщений: 8,135
Записей в блоге: 243
17.11.2018, 20:18
Цитата Сообщение от CyberGame Посмотреть сообщение
ну не знаю, я плох в английском для туториолов.
Я тоже был плох, потому что в школе и универе у меня был немецкий. Не было курсов в универе "Английский с нуля". Они потом появились. Нужно не просто не бояться своего плохого английского, а наоборот с энтузиазмом пытаться читать английские туторы и смотреть видео уроки по программированию на Youtube на английском.

И так, следующее задание. Добавим обработчики нажатий клавиш W, A, S, D (вверх, влево, вниз, вправо)

Сначала закомментируй пока эту строку или удали:
C++
1
cout << "update" << endl;
Есть такая функция у библиотеки FreeGLUT:
C++
1
2
void glutKeyboardFunc(void (*func)(unsigned char key,
                                   int x, int y));
Документация: https://www.opengl.org/resourc... ode49.html

glutKeyboardFunc sets the keyboard callback for the current window.
glutKeyboardFunc - устанавливает callback-функцию для текущего окна

When a user types into the window, each key press generating an ASCII character will generate a keyboard callback.
Когда пользователь вводит нажимает клавиши, то для каждого нажатого символа происходит вызов callback-функции.

The key callback parameter is the generated ASCII character.
Первый параметр callback-функции - это параметр key. Это символ клавиши, который был нажат на клавиатуре.

The x and y callback parameters indicate the mouse location in window relative coordinates when the key was pressed.
Второй и третий параметры - это координата (x, y) курсора мыши на окне в момент нажатия клавиши клавиатуры.

По аналогии добавь обработчики нажатий клавиш s и d:
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
void keyboard(unsigned char key, int x, int y)
{
    cout << "key = " << key << endl;
    cout << "x = " << x << endl;
    cout << "y = " << y << endl;
 
    if (key == 'w')
    {
        cout << "Up" << endl;
    }
    if (key == 'a')
    {
        cout << "Left" << endl;
    }
}
 
int main(int argc, char** argv)
{
    // ...
    // ...
    // ...
    glutTimerFunc(500, update, 0);
    glutKeyboardFunc(keyboard);
    glutMainLoop();
    return 0;
}
Добавлено через 2 минуты
Цитата Сообщение от CyberGame Посмотреть сообщение
А разве не
Да, молодец! Это моя ошибка - я не протестил, когда отправлял код на форум.
0
208 / 95 / 15
Регистрация: 27.07.2018
Сообщений: 323
17.11.2018, 20:28  [ТС]
8Observer8,
if (key == 'w')
{
cout << "Up" << endl;
}
if (key == 'a')
{
cout << "Left" << endl;
}
Меня препод за это мучил, можно ли написать через el if?
0
208 / 95 / 15
Регистрация: 27.07.2018
Сообщений: 323
17.11.2018, 20:34  [ТС]
8Observer8,
C++ (Qt)
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
#include <GL/freeglut.h>
 
#include <iostream>
#include <string>
using namespace std;
 
int lives = 3;
int score = 0;
 
void keyboard(unsigned char key, int x, int y)
{
    cout << "key = " << key << endl;
    cout << "x = " << x << endl;
    cout << "y = " << y << endl;
    
    if (key == 'w')
    {
        cout << "Up" << endl;
    }
    if (key == 'a')
    {
        cout << "Left" << endl;
    }
    if (key == 's')
    {
        cout << "Down" << endl;
    }
    if (key == 'd')
    {
        cout << "Right" << endl;
    }
}
 
void update(int value)
{
    //cout << value << endl;
    glutTimerFunc(500, update, value);
}
 
void drawText(float x, float y, string text)
{
    glRasterPos2f(x, y);
    glutBitmapString(GLUT_BITMAP_8_BY_13, (const unsigned char*)text.c_str());
}
 
void draw()
{
    drawText(-0.9f, 0.9f, "Score: " + to_string(score));
    drawText(0.4f, 0.9f, "Lives: " + to_string(lives));
 
    glColor3f(0.0f, 1.0f, 0.0f);
 
    glBegin(GL_QUADS);
    glVertex2f(0.0f, 0.0f); // Эту вершину не нужно менять, пусть она в точке (0, 0)
    glVertex2f(0.f, 0.4f);
    glVertex2f(0.4f, 0.4f);
    glVertex2f(0.4f, 0.0f);
    glEnd();
 
    glutSwapBuffers();
}
 
int main(int argc, char** argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
    glutInitWindowSize(256, 256); // 256x256 пикселей
    glutCreateWindow("Snake");
    glutDisplayFunc(draw);
    glutTimerFunc(500, update, 255);
    glutKeyboardFunc(keyboard);
    glutMainLoop();
    return 0;
}

Вот, как он определяет координаты?
По размерам монитора, или окна консоли?

Так же есть вопрос, возможно ли с помощью этой функции.
Передвигать квадрат, я думаю можно. Даже есть идеи.
0
 Аватар для COKPOWEHEU
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,087
17.11.2018, 20:48
Цитата Сообщение от CyberGame Посмотреть сообщение
Меня препод за это мучил, можно ли написать через el if?
Да, лучше писать через else if:
C++
1
2
3
4
5
if( key == 'w' ){
  cout << "Up" << endl;
}else if( key == 'a' ){
  cout << "Left" << endl;
}else if(...
Дело в том, что после одной успешной проверки нет необходимости проводить остальные.
А еще лучше - через switch - он оставляет компилятору больше простора для оптимизаций.
0
9991 / 2963 / 497
Регистрация: 05.10.2013
Сообщений: 8,135
Записей в блоге: 243
17.11.2018, 20:56
Цитата Сообщение от CyberGame Посмотреть сообщение
Меня препод за это мучил, можно ли написать через el if?
Можно и даже лучше. А ещё лучше switch:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void keyboard(unsigned char key, int x, int y)
{
    switch (key)
    {
        case 'w':
            cout << "Up" << endl;
            break;
        case 'a':
            cout << "Left" << endl;
            break;
        default:
            cout << "This key is not used: " << key << endl;
            break;
    }
}
Цитата Сообщение от CyberGame Посмотреть сообщение
Вот, как он определяет координаты?
По размерам монитора, или окна консоли?
По размерам области рисование, то что сейчас чёрным цветом. Если захочется использовать мышку, то координаты нужно будет пересчитывать из координат области рисование в координаты OpenGL-мира.

Координаты области рисования. Я бы назвал это Canvas Coordinates, но может это название не очень правильное.

Название: CanvasCoords.png
Просмотров: 41

Размер: 3.4 Кб
0
9991 / 2963 / 497
Регистрация: 05.10.2013
Сообщений: 8,135
Записей в блоге: 243
17.11.2018, 21:14
Цитата Сообщение от CyberGame Посмотреть сообщение
Так же есть вопрос, возможно ли с помощью этой функции.
Передвигать квадрат, я думаю можно. Даже есть идеи.
Очень даже можно и нужно реализовывать свои идеи. Не нужно только копировать чужие. Пусть ваши будут не очень оптимальные. Вы в будущем возможно увидите более удобные идеи в чужом коде, или наоборот вы увидите, что ваша идея была лучше или вы угодали идеи, которые использовались много раз до вас. Так что за идея как передвигать клавишами квадрат?

Добавлено через 5 минут
Крайняя точка (255, 255), потому что мы определили размер области рисования в теле функции main()
C++
1
glutInitWindowSize(256, 256); // 256x256 пикселей
Здесь размеры заголовка окна не учитываются. Здесь указывается размер области рисования в пикселях.

Добавлено через 10 минут
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Так что за идея как передвигать клавишами квадрат?
Попровлю себя, что двигать не клавашами, а в функции update() В обработчиках нажатий клавиш нужно менять направление. Например, можно создать две глобальные целые переменные dirX и dirY.
0
208 / 95 / 15
Регистрация: 27.07.2018
Сообщений: 323
17.11.2018, 22:01  [ТС]
8Observer8,
Очень даже можно и нужно реализовывать свои идеи.
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void keyboard(unsigned char key, int x, int y)
{
    switch (key)
    {
        case 'w':
            cout << "Up" << endl;
            break;
        case 'a':
            cout << "Left" << endl;
            break;
        default:
            cout << "This key is not used: " << key << endl;
            break;
    }
}
В блоках реализовать, при нажатии клавиши координаты смещаются на +1 - 1, например.

Так что дальше?

Добавлено через 14 минут
8Observer8, что то не получается мою идею вообразить, давайте вы просто попробуете подсказать, как реализовать передвижение.
0
9991 / 2963 / 497
Регистрация: 05.10.2013
Сообщений: 8,135
Записей в блоге: 243
17.11.2018, 22:11
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Изменение координатной сетки так, чтобы начало координат было не в середине окна, а в нижнем левом углу. И чтобы координаты были не в диапазоне [-1, 1], а, например, в диапазоне [0, 10] или [0, 20], то есть, чтобы координаты были целыми числами, а ячейки змейки, то есть квадраты из которых состоит змейка были размером 1x1, но это не пиксель, а размер в координатной сетке
Дело в том, что нужно будет проверять совпали ли координаты змейки и еды (бонуса, стенки или со своей ячейкой). Но сравнивать на равенство вещественных чисел не очень хорошая идея, потому что они могут в каком-то далёком знаки после запятой не совпасть. Нужно чтобы координаты змейки в всех объектов были целыми: (0, 0), (5, 7) и т.д. Так намного проще работать, чем с координатами: (0, -0.1), (0, 0), (0, 0.1) и т.д.

На OpenGL это легко сделать. Пока что, наверное, отложим разбор следующей функции. Премите пока эти каманды как данность.

Добавьте эту функцию в код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void setNewCoordSystem(int width, int height, int internalWidth, int internalHeight)
{
    glViewport(0, 0, width, height);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(0.0f, internalWidth, 0.0f, internalHeight, 0.0f, 1.0f);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
}
 
int main(int argc, char** argv)
{
    // ...
    // ...
    // ...
    setNewCoordSystem(256, 256, 20, 20);
    glutMainLoop();
    return 0;
}
Задача - поставить на место надписи "Score" и "Lives".

Теперь координатная сетка имеет такой вид:

Название: NewCoordSystem.png
Просмотров: 38

Размер: 2.6 Кб
0
9991 / 2963 / 497
Регистрация: 05.10.2013
Сообщений: 8,135
Записей в блоге: 243
17.11.2018, 22:31
Цитата Сообщение от CyberGame Посмотреть сообщение
8Observer8, что то не получается мою идею вообразить, давайте вы просто попробуете подсказать, как реализовать передвижение.
Хорошо. Только скиньте текущий код с новой координатной системой и расставленными на старые места надписи.

На скриншоте выше у меня нарисован квадрат со следующими координатами вершин:
C++
1
2
3
4
5
6
    glBegin(GL_QUADS);
    glVertex2f(5.0f, 5.0f);
    glVertex2f(5.0f + 1.0f, 5.0f);
    glVertex2f(5.0f + 1.0f, 5.0f + 1.0f);
    glVertex2f(5.0f, 5.0f + 1.0f);
    glEnd();
Ещё одна задача. Уберите рисование квадрата в отдельную функцию. Назовём её drawSquare. Она будет принимать целые координаты (x, y), а так же целые ширину и высоту:
C++
1
2
3
4
void drawSquare(int x, int y, int width, int height)
{
 
}
Добавлено через 5 минут
Точнее, так:

C++
1
2
3
4
void drawSquare(int x, int y)
{
 
}
Потому что если мы можем задавать ширину и высоту, то это уже не квадрат, а прямоугольник и его нужно было бы назвать drawRectangle:

C++
1
2
3
4
void drawRectangle(int x, int y, int width, int height)
{
 
}
Добавлено через 8 минут
Я вам подскажу, как добавить первые две вершины, а вы добавьте ещё две:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void drawSquare(int x, int y)
{
    int size = 1;
 
    glBegin(GL_QUADS);
    glVertex2f(x, y);
    glVertex2f(x + size, y);
    // ...
    // ...
    glEnd();
}
 
void draw()
{
    // ...
    // ...
    drawSquare(5, 5);
    // ...
    // ...
}
0
208 / 95 / 15
Регистрация: 27.07.2018
Сообщений: 323
17.11.2018, 22:44  [ТС]
8Observer8,
C++ (Qt)
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
#include <GL/freeglut.h>
 
#include <iostream>
#include <string>
using namespace std;
 
int lives = 3;
int score = 0;
 
void setNewCoordSystem(int width, int height, int internalWidth, int internalHeight)
{
    glViewport(0, 0, width, height);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(0.0f, internalWidth, 0.0f, internalHeight, 0.0f, 1.0f);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
}
 
void keyboard(unsigned char key, int x, int y)
{
    switch (key)
    {
    case 'w':
        cout << "Up" << endl;
        break;
    case 'a':
        cout << "Left" << endl;
        break;
    default:
        cout << "This key is not used: " << key << endl;
        break;
    }
}
 
void update(int value)
{
    //cout << value << endl;
    glutTimerFunc(500, update, value);
}
 
void drawText(int x, int y, string text)
{
    glRasterPos2f(x, y);
    glutBitmapString(GLUT_BITMAP_8_BY_13, (const unsigned char*)text.c_str());
}
 
void drawSquare(int x, int y)
{
    glBegin(GL_QUADS);
    glVertex2f(x, y);
    glEnd();
}
 
void draw()
{
    drawText(0, 19, "Score: " + to_string(score));
    drawText(15, 19, "Lives: " + to_string(lives));
 
    glColor3f(0, 1, 0);
 
    drawSquare(5, 5);
    drawSquare(5 + 1, 5);
    drawSquare(5 + 1, 5 + 1);
    drawSquare(5, 5 + 1);
 
    glutSwapBuffers();
}
 
int main(int argc, char** argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
    glutInitWindowSize(256, 256); // 256x256 пикселей
    glutCreateWindow("Snake");
    glutDisplayFunc(draw);
    glutTimerFunc(500, update, 255);
    glutKeyboardFunc(keyboard);
    setNewCoordSystem(256, 256, 20, 20);
    glutMainLoop();
    return 0;
}
Что то не понял, как выполнить второе задание. Мы рисовали квадрат с помощью
C++ (Qt)
1
2
3
4
5
6
    glBegin(GL_QUADS);
    glVertex2f(5.0f, 5.0f);
    glVertex2f(5.0f + 1.0f, 5.0f);
    glVertex2f(5.0f + 1.0f, 5.0f + 1.0f);
    glVertex2f(5.0f, 5.0f + 1.0f);
    glEnd();
Тогда куда девать переменные wight and height, если переменные x y отображают координаты.
В данном случаи квадрат не рисуется.
0
9991 / 2963 / 497
Регистрация: 05.10.2013
Сообщений: 8,135
Записей в блоге: 243
17.11.2018, 23:07
Цитата Сообщение от CyberGame Посмотреть сообщение
Тогда куда девать переменные wight and height, если переменные x y отображают координаты.
В данном случаи квадрат не рисуется.
Первый раз я ошибся в описании задания. Нам нужно рисовать квадрат, а не прямоугольник, поэтому переменные width и height не нужны. Нужна одна переменная с именем size, а точнее константа. Все переменные, которые определяются один раз и не меняются нужно снабжать ключевым словом const, чтобы показать читателю, что это не переменная, а константа, значит её значение в процессе работы программы не будет меняться.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.11.2018, 23:07

Какой язык изучать или что изучать?
Здравствуйте форумчане. какой язык программирования изучать чтоб работать дома через интернет? может 1с? я сам живу в деревне работы нет,о...

Подскажите, как лучше всего изучать язык, ежели в академии не дают достаточный объем знаний
хожу на курсы в академию уже 3 месяца, изучаем С++ по либерти, практики нету вообще, просто примеры по книге набираем...в общем туго идет,...

Какие паттерны можно использовать для совершенствования приложения
Доброго времени суток! У меня есть приложение реализованное на Qt C++ - тестирование студентов. Суть приложения заключается в...

Что изучать для работы
Всем здравствуйте. Ребята, такой вопрос. Какие технологии сейчас лучше изучать, чтобы было проще и быстрее, и при этом чтобы можно было...

Что изучать для создания сайтов
Привет всем, всех с новым годом! кто занимается web - разработкой, создание сайтов , хотелось у вас узнать ко э что. В каком порядки...


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

Или воспользуйтесь поиском по форуму:
120
Ответ Создать тему
Новые блоги и статьи
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru