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

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

08.11.2018, 09:25. Показов 21485. Ответов 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
9991 / 2963 / 497
Регистрация: 05.10.2013
Сообщений: 8,135
Записей в блоге: 243
18.11.2018, 12:02
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от CyberGame Посмотреть сообщение
Мой вариант передвижения не подходит?
Нет, потому что змейка должна всегда двигаться в выбранном направлении, а на клавиши можно только менять направление, а не двигать.

Цитата Сообщение от CyberGame Посмотреть сообщение
Что нужно сделать?
Нужно разобраться в математике сложения векторов. Понять, что они складываются покоординатно, то есть (x, y) = (x1, y1) + (x2, y2) = (x1 + x2, y1 + y2)

Добавь в программу два вектора (глобальные переменные). Изобразим их в виде массивов из двух элементов (x, y)
C++
1
2
int coord[] = { 0, 0 };
int dir[] = { 1, 0 };
Первый вектор - это координаты головы змейки.
Второй вектор - это направление.

Второй вектор (вектор направления - dir) может принимать следующие значения:
W - (0, 1)
A - (-1, 0)
S - (0, -1)
D - (1, 0)

Вектор dir будет менять направление в switch. Я написал обработку W, A, а ты добавь S и D:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void keyboard(unsigned char key, int x, int y)
{
    switch (key)
    {
        case 'w':
            dir[0] = 0;
            dir[1] = 1;
            break;
        case 'a':
            dir[0] = -1;
            dir[1] = 0;
            break;
            break;
        // ...
        // ...
        default:
            cout << "This key is not used: " << key << endl;
            break;
    }
}
C++
1
2
3
4
5
6
7
8
9
10
void draw()
{
    // ...
    // ...
    // ...
 
    drawSquare(coord[0], coord[1], 1);
 
    // ...
}
Добавлено через 1 минуту
C++
1
2
3
4
5
6
7
void update(int value)
{
    coord[0] += dir[0];
    coord[1] += dir[1];
    glutTimerFunc(500, update, 0);
    glutPostRedisplay();
}
Добавлено через 6 минут
Цитата Сообщение от CyberGame Посмотреть сообщение
Я по моему понял, ты хочешь при нажатии клавиш ads, менялось направление, а при w, он ходил вперед, смотря в каком направлении стоит. Так?
Изначально здесь "int dir[] = { 1, 0 };" можно поставить любое направление - одно из 4-x возможных.

Добавлено через 2 минуты
В коде всё понятно, как работают вектора? К старому значению вектора всегда прибавляется вектор направления, каждый тик.
0
208 / 95 / 15
Регистрация: 27.07.2018
Сообщений: 323
18.11.2018, 12:10  [ТС]
8Observer8, всё вроде понял, остался единственный вопрос.
Змейка всегда двигается вперед, не зависимо от клавиш? Как и в игре "Змейка"?
0
9991 / 2963 / 497
Регистрация: 05.10.2013
Сообщений: 8,135
Записей в блоге: 243
18.11.2018, 12:19
Цитата Сообщение от CyberGame Посмотреть сообщение
всё вроде понял, остался единственный вопрос.
Змейка всегда двигается вперед, не зависимо от клавиш? Как и в игре "Змейка"?
Ты плохо разобрался в коде. Попробуй поставить точки останова. Нарисуй на листочке в клеточку. Один препод в ВУЗ'e (царство ему небесное) говорил, что пока ты не нарисуешь или не распишешь ручкой на листочке, то ничего не поймёшь. Тут смысл не в том, чтобы сделать быстрее змейку и забыть. Лучше больше время потрать и сам разберить, как оно работает.
0
208 / 95 / 15
Регистрация: 27.07.2018
Сообщений: 323
18.11.2018, 12:21  [ТС]
8Observer8, всё, сам ответил на свой вопрос, по сути скорость можно задать через update, милисекунды меньше поставить.
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#include <GL/freeglut.h>
 
#include <iostream>
#include <string>
using namespace std;
 
int lives = 3;
int score = 0;
int coordHead[] = { 0, 0 };
int vectorDir[] = { 1, 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':
        vectorDir[1] = 1;
        vectorDir[0] = 0;
        break;
    case 'a':
        vectorDir[0] = -1;
        vectorDir[1] = 0;
        break;
    case 's':
        vectorDir[1] = -1;
        vectorDir[0] = 0;
        break;
    case 'd':
        vectorDir[0] = 1;
        vectorDir[1] = 0;
        break;
    default:
        cout << "This key is not used: " << key << endl;
        break;
    }
}
 
void update(int value)
{
    coordHead[0] += vectorDir[0];
    coordHead[1] += vectorDir[1];
    glutTimerFunc(500, update, 0);
    glutPostRedisplay();
}
 
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, int size)
{
    glBegin(GL_QUADS);
    glVertex2f(x, y);
    glVertex2f(x + size, y);
    glVertex2f(x + size, y + size);
    glVertex2f(x, y + size);
    glEnd();
}
 
void draw()
{
    drawText(0, 19, "Score: " + to_string(score));
    drawText(15, 19, "Lives: " + to_string(lives));
 
    glColor3f(0.878, 0, 0.050);
    drawSquare(coordHead[0], coordHead[1], 1);
 
 
    glutSwapBuffers();
    glClear(GL_COLOR_BUFFER_BIT);
}
 
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;
}
Всё работает прекрасно.

Добавлено через 2 минуты
Думаю, может сразу сделаем функцию, если зайходишь за край выходишь из другого.
0
9991 / 2963 / 497
Регистрация: 05.10.2013
Сообщений: 8,135
Записей в блоге: 243
18.11.2018, 12:47
Цитата Сообщение от CyberGame Посмотреть сообщение
Всё работает прекрасно.
Даже если ты сейчас понял, то периодически возвращайся к коду, чтобы освежить понимание. Нужно понимать чётко как логика кода работает.

У тебя 100% есть возможности понять, как добавить несколько фруктов, как сравнить их коодринаты с головой змейки, увеличить Score на единицу. Может даже придумаешь, как скрыть еду, которая съедена. Попытайся придумать, если совсем не получается, то спрашивай.

Добавлено через 1 минуту
Цитата Сообщение от CyberGame Посмотреть сообщение
Думаю, может сразу сделаем функцию, если зайходишь за край выходишь из другого.
Это будет здорово. С хвостом потом решим.

Добавлено через 3 минуты
Надо список составить, что нужно реализовать в игре:
- Добавить квадраты-еду (другой цвет), увеличение Score
- Добавить квадраты-стены (врезаешься в стену, уменьшается жизнь), змейка перебрасывается в начало
- Сделать бонусы (придумать)
- Реализовать хваст

Добавлено через 6 минут
Не забывай, что я подключил библиотеку с музыкой и звуками.

Можешь потом или сейчас сделать включение музыки по нажатию на клавишу, допустим, "t".

Сделай глобально:
C++
1
2
3
4
#include <GL/freeglut.h>
#include <irrKlang.h>
 
ISoundEngine *soundEngine = createIrrKlangDevice();
Заведи глобальную булеву переменную:
C++
1
bool lockSounds = true;
Музыка поумолчанию выключена.

При нажатии на "t" меняй ей значение на противоположенное и в switch включай/выключай музыку.

Так музыка запускается в цикле:
C++
1
soundEngine->play2D("Audio/background.mp3", true);
А если второй параметр false, то это будет однократное проигрывание звука. Можно использовать для звука поедания фрукта, бонуса, или врезания в стену.

Добавлено через 13 минут
Цитата Сообщение от CyberGame Посмотреть сообщение
скорость можно задать через update, милисекунды меньше поставить.
Тогда в update нужно тоже поменять, а не только в main
C++
1
2
3
4
5
6
7
void update(int value)
{
    coordHead[0] += vectorDir[0];
    coordHead[1] += vectorDir[1];
    glutTimerFunc(500, update, 0);
    glutPostRedisplay();
}
0
 Аватар для COKPOWEHEU
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,087
18.11.2018, 17:44
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Нужно голову змейки сделать в виде вектора, то есть массива из двух чисел и направление сделать в виде вектора,
Только лучше оформить не в массив, а в структуру или даже класс:
C++
1
2
3
4
class Vector2i{
public:
  int x, y;
};
А потом встроить этот объект в объект самой змейки:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
class Snake{
private:
  Vector2i head;
  Vector2i *body; //массив сегментов змейки
  char dir; //направление движения: 0-вверх, 1-вправо, 2-вниз, 3-влево
  unsigned int len; //длина
public:
  Snake(){...}
  ~Snake(){...}
  void move(){...}
  void draw(){...}
  void rotate(char new_dir){...}
};
1
9991 / 2963 / 497
Регистрация: 05.10.2013
Сообщений: 8,135
Записей в блоге: 243
18.11.2018, 19:26
CyberGame, сможешь начать оформлять код в виде классов? Сделай, как у COKPOWEHEU и покажи нам код.

Добавлено через 4 минуты
Ты попытайся сделать, что сможешь, а то что не сможешь мы тебя направим.
0
208 / 95 / 15
Регистрация: 27.07.2018
Сообщений: 323
18.11.2018, 21:38  [ТС]
8Observer8, в виде классов? Вообще не представляю. Я сделал еду, теперь думаю как сделать ее удаление, потом сделаю рандомно чтобы раставлялась, помоги с удалением пожалуйста. Как сделаю змейку, буду в классы переносить. Или всё таки сразу с них делать? Что я не представляю.
0
309 / 221 / 74
Регистрация: 23.05.2011
Сообщений: 981
18.11.2018, 21:45
Цитата Сообщение от CyberGame Посмотреть сообщение
Nishen, Ты суть моей проблемы не понял, что мне делать дальше. Я остановился, и не знаю что делать, ччто изучать и т.д.
Пиши программы. Потом оптимизируй свои программы. Потом пиши заново. Участвуй в контестах.
0
208 / 95 / 15
Регистрация: 27.07.2018
Сообщений: 323
18.11.2018, 21:52  [ТС]
8Observer8, а всё я не увидел его, код.
Есть пару вопросов:
Vector2i head;
Vector2i *body;
Что это? body так понимаю тело?
Где эти массивы указывать прямо в теле класса?
Snake(){...}
~Snake(){...}
Что вот эти записи означают?
И вот эта, а так всё понятно.
0
9991 / 2963 / 497
Регистрация: 05.10.2013
Сообщений: 8,135
Записей в блоге: 243
18.11.2018, 21:54
CyberGame, ты главное энтузиазм в себе поддерживай. Так только начинается скука, сразу добавляй позитива в энтузиазм.

Цитата Сообщение от CyberGame Посмотреть сообщение
Или всё таки сразу с них делать?
Добавляй по мере появления идей, возвращайте, делай лучше. Например:

C++
1
int coordHead[] = { 0, 0 };
Можно заменить на:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Vector2i
{
public:
    int x, y;
    Vector2i() : x(0), y(0)
    {
    }
};
 
class Snake
{
public:
    Vector2i head;
};
 
Snake snake;
Выглядит громозко, но это можно убрать в отдельные файлы, чтобы файл main.cpp не раздувался.

Зато теперь больее понятно выглядит эта запись:
C++
1
drawSquare(snake.head.x, snake.head.y, 1);
Чем это:
C++
1
drawSquare(coordHead[0], coordHead[1], 1);
0
208 / 95 / 15
Регистрация: 27.07.2018
Сообщений: 323
18.11.2018, 22:38  [ТС]
8Observer8, кхм, что-то я вообще не понимаю, честно говоря в ООП ужастно знаком, до понятий класс, объект, методы, и всё. Что мне делать изучать их или дальше продолжать код?

Добавлено через 41 минуту
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
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
#include <GL/freeglut.h>
 
#include <iostream>
#include <string>
using namespace std;
 
int lives = 3;
int score = 0;
int coordHead[] = { 1, 1 };
int vectorDir[] = { 1, 0 };
int foodEat[] = { 10, 10 };
 
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':
        vectorDir[1] = 1;
        vectorDir[0] = 0;
        break;
    case 'a':
        vectorDir[0] = -1;
        vectorDir[1] = 0;
        break;
    case 's':
        vectorDir[1] = -1;
        vectorDir[0] = 0;
        break;
    case 'd':
        vectorDir[0] = 1;
        vectorDir[1] = 0;
        break;
    default:
        cout << "This key is not used: " << key << endl;
        break;
    }
}
 
void food(int x, int y, int size)
{
    if (coordHead[0] == foodEat[0] && coordHead[1] == foodEat[1])
    {
        x = rand() % 20;
        y = rand() % 20;
        foodEat[0] = x;
        foodEat[1] = y;
    }
    glColor3f(0.023, 0.031, 0.737);
    glBegin(GL_QUADS);
    glVertex2f(foodEat[0], foodEat[1]);
    glVertex2f(foodEat[0] + size, foodEat[1]);
    glVertex2f(foodEat[0] + size, foodEat[1] + size);
    glVertex2f(foodEat[0], foodEat[1] + size);
    glEnd();
    
}
 
void update(int value)
{
    glColor3f(0.878, 0, 0.050);
    coordHead[0] += vectorDir[0];
    coordHead[1] += vectorDir[1];
    if (coordHead[0] == foodEat[0] && coordHead[1] == foodEat[1])
    {
        score++;
    }
    glutTimerFunc(250, update, 0);
    glutPostRedisplay();
}
 
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, int size)
{
    glBegin(GL_QUADS);
    glVertex2f(x, y);
    glVertex2f(x + size, y);
    glVertex2f(x + size, y + size);
    glVertex2f(x, y + size);
    glEnd();
}
 
void draw()
{
    drawText(0, 19, "Score: " + to_string(score));
    drawText(15, 19, "Lives: " + to_string(lives));
 
    drawSquare(coordHead[0], coordHead[1], 1);
    food(10, 10, 1);
    glutSwapBuffers();
    glClear(GL_COLOR_BUFFER_BIT);
}
 
int main(int argc, char** argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
    glutInitWindowSize(256, 256); // 256x256 пикселей
    glutCreateWindow("Snake");
    glutDisplayFunc(draw);
    glutTimerFunc(250, update, 255);
    glutKeyboardFunc(keyboard);
    setNewCoordSystem(256, 256, 20, 20);
    glutMainLoop();
    return 0;
}
Сделал код, при съедении еды score++, и еда исчезает и спавнится в рандомном месте, есть замечания по ходу?
0
9991 / 2963 / 497
Регистрация: 05.10.2013
Сообщений: 8,135
Записей в блоге: 243
18.11.2018, 23:19
Цитата Сообщение от CyberGame Посмотреть сообщение
Что мне делать изучать их или дальше продолжать код?
Практика в приоритете. Но всё равно нужно почитывать теорию, и из других источников что-то пытаться понять, экпериментировать по внедрению новый знаний в свои проекты.

Мне очень понравилось, как Otaka написал в теме Несколько небольших игрушек
Цитата Сообщение от Otaka Посмотреть сообщение
Согласен. Сначала учишься вообще программированию: переменные, условия, циклы, функции. Потом учишься загружать и выводить картиночки на экран и обрабатывать сообщения мыши.
Все, больше ничего не нужно. По крайней мере, я все делал так.

Если ты это все хорошо поймешь, то вопрос "что почитать?" не будет возникать у тебя.

А когда ты достигнешь такого уровня, что просто нагромождение кода "переменныеУсловияЦиклыФункции" накапливаются в таком количестве, что тебе будет уже тяжело с ними справляться, то до тебя дойдет идея и волшебство ООП. И ты сможешь использовать классы/наследование там где это действительно нужно, а не потому что тебе сказали:"только лопухи пишут код процедурно, а не по оопшному".
0
208 / 95 / 15
Регистрация: 27.07.2018
Сообщений: 323
18.11.2018, 23:24  [ТС]
8Observer8, по счёт стенок, их вручную ставить?)
0
131 / 146 / 19
Регистрация: 19.02.2017
Сообщений: 619
18.11.2018, 23:42
Цитата Сообщение от CyberGame Посмотреть сообщение
Изучил уже до ООП, вопрос что делать дальше?
Изучать программирование, а не язык. Изучать какие есть парадигмы, подходы, и решать много алгоритмических задач.

Цитата Сообщение от CyberGame Посмотреть сообщение
Могу ли я уже писать программы, с чего начинать?
Смотря что называть программами. Программы строятся из блоков кода. Минимальный блок кода это функции. Соответственно нужно научиться писать функции. А потом учиться их комбинировать, и строить из них модули. Советую читать СИКП и решать задачи из него. Эта книга дает реальный профит.
0
9991 / 2963 / 497
Регистрация: 05.10.2013
Сообщений: 8,135
Записей в блоге: 243
19.11.2018, 01:53
Цитата Сообщение от CyberGame Посмотреть сообщение
по счёт стенок, их вручную ставить?)
Если это маленькая стенка из двух-трёх блоков, то вручную. А если штук 10 в ряд, то в цикле, но с другой стороны можно и накопипастить для первого раза, а потом вернуться и переделать.

Есть такие практики, что создают массив символов для удобства редактирования уровней:
00000000
01111000
00000000
00001100
00000000

А если карта большая и объектов много, а они представляют из себя картинки, то можно использовать бесплатный Tiled Map Editor. Он сохраняет уровень тоже в виде матрицы чисел, где каждое число означает какой-то объект. Ты знаешь, какое число обозначает какой объект и в программе ставишь на место каждого числа свою картинку.

Сейчас сетка 20x20, но можно от уровня к уровню менять здесь:
C++
1
setNewCoordSystem(256, 256, 20, 20);
В список дел можно добавить:
- Надпись "Game Over" в случае врезания в стенку или в свой хвост
- Добавление перехода между уровнями
- Надпись "Level 01" перед загрузкой уровня

Добавлено через 1 минуту
C++
1
2
3
int coordHead[] = { 1, 1 };
int vectorDir[] = { 1, 0 };
int foodEat[] = { 10, 10 };
Замени на:
C++
1
2
3
4
struct Vector2i
{
    int x, y;
} coordHead{ 1, 1 }, vectorDir{ 1, 0 }, food{ 10, 10 };
Добавлено через 10 минут
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Замени на:
И мы разберём алгоритм добавления хваста.
0
208 / 95 / 15
Регистрация: 27.07.2018
Сообщений: 323
19.11.2018, 10:02  [ТС]
8Observer8, struct, структуры, реально? Я классы то ужасно знаю, а тут структуры.
0
9991 / 2963 / 497
Регистрация: 05.10.2013
Сообщений: 8,135
Записей в блоге: 243
19.11.2018, 10:23
В нашем случае структура просто хранит в себе два числа. Больше о ней ничего знать не нужно.

Тебе во время программирования на Python встречался список (list)? Очень удобная вещь для змейки. В C++ есть аналогия, тоже называется list
0
208 / 95 / 15
Регистрация: 27.07.2018
Сообщений: 323
19.11.2018, 10:29  [ТС]
8Observer8, до list ещё не дошли, но я знаю что она разбивает строку как массив.
0
9991 / 2963 / 497
Регистрация: 05.10.2013
Сообщений: 8,135
Записей в блоге: 243
19.11.2018, 10:36
Цитата Сообщение от CyberGame Посмотреть сообщение
до list ещё не дошли, но я знаю что она разбивает строку как массив.
На Python так создаётся list:
Python
1
snake = [(20, 20)] # snake list of (x, y) positions
Python
1
[(20, 20), (21, 20)] # snake after eating
Это я взял из тутора: https://noobtuts.com/python/snake-game

Это и есть процесс изучения C++ на примере змейки. Ты можешь познакомиться на практике со структурами и с list и стандартной библиотеки (из STL)

В начале файла можно создать два list'а: для змейки и для еды, не забыл подключить #include <list>
C++
1
2
3
4
5
6
7
8
9
10
#include <list>
using namespace std;
 
struct Vector2i
{
    int x, y;
} coordHead{ 5, 1 }, vectorDir{ 1, 0 }, food{ 10, 10 };
 
list<Vector2i> snake;
list<Vector2i> foods;
Добавлено через 2 минуты
В main() можно добавить элементы в list'ы с помощью метода list'а под названием push_back, который добавляет элемент в конец списка:
C++
1
2
3
4
5
6
7
8
9
10
11
    snake.push_back(coordHead);
    Vector2i cell1 = { 4, 1 };
    Vector2i cell2 = { 3, 1 };
    snake.push_back(cell1);
    snake.push_back(cell2);
 
    foods.push_back(food);
    Vector2i food1 = { 4, 8 };
    Vector2i food2 = { 8, 4 };
    foods.push_back(food1);
    foods.push_back(food2);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.11.2018, 10:36

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
160
Ответ Создать тему
Новые блоги и статьи
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