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

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

08.11.2018, 09:25. Показов 19535. Ответов 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
208 / 95 / 15
Регистрация: 27.07.2018
Сообщений: 323
21.12.2018, 18:43  [ТС]
8Observer8, буду исключать пункты потихоньку. Как закончу со змейкой, перепишу на новый OpenGL. Шейдеры поставлю и т.д.

Добавлено через 42 минуты
8Observer8,
Привет, есть код
C++ (Qt)
1
2
3
4
5
6
7
8
9
for (auto it = snake.begin(); it != snake.end();)
        {
            int snakeX = (*it).x;
            int snakeY = (*it).y;
            if (snake.front().x == snakeX && snake.front().y == snakeY)
            {
                dirSnake = false;
            }
        }
Как сделать чтобы он итерировал не с первого элемента а с следующего.
0
9949 / 2950 / 497
Регистрация: 05.10.2013
Сообщений: 8,030
Записей в блоге: 242
21.12.2018, 21:30
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
for (auto it = snake.begin(); it != snake.end();)
{
    if (it == snake.begin())
    {
        it++;
        continue;
    }
 
    int snakeX = (*it).x;
    int snakeY = (*it).y;
    if (snake.front().x == snakeX && snake.front().y == snakeY)
    {
        dirSnake = false;
    }
}
Добавлено через 1 минуту
Итерирование итератора - это вот, у тебя этого пока нет:
C++
1
it++;
Цитата Сообщение от CyberGame Посмотреть сообщение
dirSnake = false;
А что ты хочешь сделать? Для чего dirSnake?
0
151 / 86 / 35
Регистрация: 05.08.2017
Сообщений: 257
21.12.2018, 22:03
8Observer8, проще же так сделать
C++
1
2
3
4
5
6
7
8
9
for (auto it = snake.begin()+1; it != snake.end();)
{
    int snakeX = (*it).x;
    int snakeY = (*it).y;
    if (snake.front().x == snakeX && snake.front().y == snakeY)
    {
        dirSnake = false;
    }
}
1
0 / 0 / 0
Регистрация: 03.12.2018
Сообщений: 1
21.12.2018, 22:25
Потренируйся что-нибудь написать. Например в студенчестве я играл на калькуляторе Б3-34 в игру "Охота на лис", которая описана в журнале «Наука и жизнь» в номере 12 за 1985 год. Напиши её.
Мало этого, возьмем с 80х годов из Техники-Молодежи "Полет Кон-Тики" - сделай из него что-то красивое...
P.S. Предложил, что первое пришло в голову.
0
208 / 95 / 15
Регистрация: 27.07.2018
Сообщений: 323
22.12.2018, 08:29  [ТС]
Resistanse, нельзя так делать.
0
151 / 86 / 35
Регистрация: 05.08.2017
Сообщений: 257
22.12.2018, 10:41
Цитата Сообщение от CyberGame Посмотреть сообщение
нельзя так делать.
Почему?
0
208 / 95 / 15
Регистрация: 27.07.2018
Сообщений: 323
22.12.2018, 11:19  [ТС]
Resistanse, ошибка компиляции
1
98 / 64 / 36
Регистрация: 14.10.2018
Сообщений: 152
22.12.2018, 11:25
CyberGame, Вместо
C++
1
snake.begin()+1
C++
1
++snake.begin()
2
151 / 86 / 35
Регистрация: 05.08.2017
Сообщений: 257
22.12.2018, 11:33
Цитата Сообщение от CyberGame Посмотреть сообщение
ошибка компиляции
JAlHund,
Да, не посмотрел, просто я подумал что это вектор
1
9949 / 2950 / 497
Регистрация: 05.10.2013
Сообщений: 8,030
Записей в блоге: 242
22.12.2018, 12:39
CyberGame, скажи честно, ты чётко понимаешь, что происходит в следующих строках? Или вообще не понимаешь?
C++
1
2
3
4
5
6
7
void update(int value)
{
    Vector2i newPos;
    newPos.x = snake.front().x + snakeDir.x;
    newPos.y = snake.front().y + snakeDir.y;
    snake.push_front(newPos);
    snake.pop_back();
Добавлено через 26 минут
Попробуй, как можно более подробно, своими словами описать, что делает каждая из этих пяти строк.

Добавлено через 5 минут
Ответь, пожалуйста, ещё на такой вопрос. В каком порядке и с какой периодичностью вызываются функции update() и draw()?
0
208 / 95 / 15
Регистрация: 27.07.2018
Сообщений: 323
23.12.2018, 12:32  [ТС]
8Observer8,
Создаётся объект newPos
и туда присваивается сложение двух векторов определенной оси на координатной плоскости.
Вектор головы ( x ) + направление змейки ( 1, -1 )
В список змеи ( тела ) добавляется первый элемент объекта newPos
А последний из змейки убирается, это обеспечивает передвижение по полю.
Единственное что не понял почему добавляется в начало списка snake, там же голова, или это не умеет значения?

Добавлено через 6 минут
8Observer8,
Пока перемещался по отладчик увидел весь метод push_back
Так же словил ошибку Для freeglut.dll не загружен файл символов
Но понял я одно, сначало поочередно в функции main всё создается и проходит.
Дальше в draw а потом уже uptade с переодичностью указанной в
C++ (Qt)
1
glutTimerFunc
0
208 / 95 / 15
Регистрация: 27.07.2018
Сообщений: 323
23.12.2018, 12:33  [ТС]
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void draw()
{
    glClear(GL_COLOR_BUFFER_BIT);
    drawText(0, 19, "Score: " + to_string(score));
    drawText(15, 19, "Lives: " + to_string(lives));
    if (score >= 3)
    {
        drawText(gameFieldSize / 3, gameFieldSize / 2, "You win the game");
    }
    drawFood();
    drawSnake();
 
    glutSwapBuffers();
}
Выскакивает эта ошибка когда дохожу до конца draw()
0
9949 / 2950 / 497
Регистрация: 05.10.2013
Сообщений: 8,030
Записей в блоге: 242
23.12.2018, 12:40
Вот это уже интересненько. Обсудим не всё сразу, а потихоньку, по шагам. Торопиться нам некуда.

Цитата Сообщение от CyberGame Посмотреть сообщение
Вектор головы ( x ) + направление змейки ( 1, -1 )
Подумай над твоим примером вектора направления змейки - ( 1, -1 ). Разве возможно такое направление?
0
208 / 95 / 15
Регистрация: 27.07.2018
Сообщений: 323
23.12.2018, 12:47  [ТС]
8Observer8,
Всмысле подумать?
Если змейка движеться вверх вектор по
x - 0
y - 1
Влево
x - -1
y - 0
0
9949 / 2950 / 497
Регистрация: 05.10.2013
Сообщений: 8,030
Записей в блоге: 242
23.12.2018, 13:11
А это направеление ( 1, -1 ) куда?

Добавлено через 3 минуты
Вектор направления змейки может смотреть только в 4 стороны:
  • (0, 1) - вверх
  • (-1, 0) - влево
  • (0, -1) - вниз
  • (1, 0) - вправо

А направление (1, -1) - невозможно!

Добавлено через 11 минут
Цитата Сообщение от CyberGame Посмотреть сообщение
Вектор головы ( x ) + направление змейки ( 1, -1 )
Так это я неравильно понял или ты ошибся? Здесь ( 1, -1 ) - направление или какой-то результат? Если направление, то куда? Можешь нарисовать?
0
208 / 95 / 15
Регистрация: 27.07.2018
Сообщений: 323
23.12.2018, 13:17  [ТС]
8Observer8, Я не имел ввиду ( 1, -1 ). А просто что есть значения, направление змейки ( 1, -1 ). Может быть 1 или -1
Вот же я написал
Если змейка движеться вверх вектор по
x - 0
y - 1
Влево
x - -1
y - 0
0
9949 / 2950 / 497
Регистрация: 05.10.2013
Сообщений: 8,030
Записей в блоге: 242
23.12.2018, 13:39
Цитата Сообщение от CyberGame Посмотреть сообщение
В список змеи ( тела ) добавляется первый элемент объекта newPos
Этот элемент имеет координаты, которых в змейке ещё нет. В этот момент этот элемент не нарисован. Элемент - это просто пара чисел { x, y }. В newPos мы расчитали координаты, по которым будет чуть позже нарисован квадрат. Точнее, сначала отработает до конца update(), обновит координаты, сделает все проверки, а после неё сразу будет вызвана функция draw(), благодаря это строке в конце функции update():
C++
1
2
3
4
5
6
void update()
{
    /* ... */
 
    glutPostRedisplay();
}
Добавлено через 2 минуты
Цитата Сообщение от CyberGame Посмотреть сообщение
Единственное что не понял почему добавляется в начало списка snake, там же голова, или это не умеет значения?
Алгоритм движения змейки такой, что мы удаляем последний элемент хваста и создаём новую голову, впереди старой головы.

Добавлено через 6 минут
Цитата Сообщение от 8Observer8 Посмотреть сообщение
В этот момент этот элемент не нарисован.
Когда мы создали новую голову newPos, то раз она ещё не нарисована, то мы можем поработать с этой головой в update. К примеру, можно запустить цикл по всем текущим элементам змейки и проверить не совпадает ли по координатам хотя бы один из элементов змейки с newPos. Если совпадает, то значит мы врезались в свой хвост. Тогда можно как-то обработать эту ситуацию: поставить игру на паузу, вывести сообщение "Game Over. Press Enter to try again."
0
208 / 95 / 15
Регистрация: 27.07.2018
Сообщений: 323
23.12.2018, 13:43  [ТС]
8Observer8, сейчас чуть-чуть отдохну.
Из пунктов что мне осталось сделать это:
•Нет проигрыша. Не выводится сообщение "Game Over. Try again", когда змейка врезается в свой хвост.
0
9949 / 2950 / 497
Регистрация: 05.10.2013
Сообщений: 8,030
Записей в блоге: 242
24.12.2018, 00:59
Цитата Сообщение от CyberGame Посмотреть сообщение
•Нет проигрыша. Не выводится сообщение "Game Over. Try again", когда змейка врезается в свой хвост.
Я предлагаю эту задачу разбить на подзадачи:
  • Если змейка врезается в хвост, то выводить сообщение в консоль "Game Over. Try again". Пусть игра при этом продолжается.
  • Если змейка врезается в хвост, то ставить игру на паузу. Для этого добавить глобальную переменную bool isPause = false; В начале update проверять isPause. Если isPause == false, то продолжать, как обычно. Если isPause == true, то пропускать всю логику игры в update(). isPause нужно выставлять в true, там где newPos совпал с одим из элементов змейки.
  • Если змейка врезается в хвост, то вывести надпись на поле игры: "Game Over. Press Enter to try again".
  • Добавить обработчик нажатия клавиши Enter, чтобы выставлять isPause в true.
  • Сделать сброс координаты змейки на начальзую позицию и на начальную длину.
0
9949 / 2950 / 497
Регистрация: 05.10.2013
Сообщений: 8,030
Записей в блоге: 242
24.12.2018, 01:02
CyberGame, допустим, программа остановлена на том моменте, когда змейка подошла вплотную к еде снизу. Мы находимся в начале функции update(), а перед нами еда. Опиши, по шагам, как происходит увеличение змейки на одну ячейку, которое увидит игрок после срабатывания draw()
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.12.2018, 01:02

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
280
Ответ Создать тему
Новые блоги и статьи
Свет внутри себя
kumehtar 07.06.2026
Пусть это будет здесь lIs4oanZS9Y
Программа для com-порта
Uhbif79 05.06.2026
Всем привет, давно хотел изучить Qt, начинал, бросал, потом снова начинал. И сейчас вот смог написать свою первую программу. До этого имел опыт программирования микроконтроллеров, писал прошивки на. . .
Транскрипция 55-минутного видео через Whisper: WhisperDesktop облажался, спас Google Colab[
anaschu 01.06.2026
Понадобилось получить текст из свежезагруженного видео на YouTube. Казалось бы, задача на пять минут. Заняла полтора часа. Делюсь опытом — может кому пригодится последовательность решений. . . .
21 мат мед. Планы на развитие модели здравоСохранения
anaschu 01.06.2026
AnyLogic: план развития симуляционной модели рабочего коллектива — динамический абсентеизм, реальные данные, три сценария сравнения Продолжаю серию постов о дискретно-событийной модели рабочего. . .
20. Мат мед. Абсентеизм как отдельный тип простоя
anaschu 29.05.2026
Апдейт модели: исправленные баги, абсентеизм и новые механизмы Продолжаю развивать ранее описанную модель рабочего коллектива на AnyLogic. За последние несколько дней был проведён серьёзный. . .
19. здоровье, усталость и психотип работника влияют на производительность предприятия, и наоборот, производительность на здоровье, усталось и психотип
anaschu 28.05.2026
Дискретно-событийная модель рабочего коллектива на AnyLogic: здоровье, выгорание, психотипы и микростимуляция Привет, коллеги. Хочу поделиться итогами нескольких недель работы над симуляционной. . .
"Прокси" для последовательного порта
Eddy_Em 28.05.2026
Эту штуку написал я достаточно давно. Но сейчас вот понадобилось настроить датчик грозы, но при этом не отключать его от "метеодемона". Соответственно, надо запустить этот "прокси": метеодемон будет. . .
Рефакторинг программы уравнивания.
Massaraksh7 26.05.2026
Пример по предыдущей записи в блоге. Но, надо заметить, что, во-первых, там оптимизация не только математики, но и работы с базой данных, и с графами, а во-вторых, это ещё не всё.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru