ЗМЕЙКА НА C++ - ПРАКТИКА #1

Поделиться
HTML-код
  • Опубликовано: 3 авг 2023
  • Написали змейку, используя пройденные средства
    Поддержать: boosty.to/somestudentchannel/...
    Плейлист со всеми уроками: • ЯЗЫК C++
    Music: Lawrence - TrackTribe

Комментарии • 132

  • @severusov
    @severusov 8 месяцев назад +70

    Если меня не возьмут на работу после змейки, то видос не эффективен

    • @kliment5116
      @kliment5116 8 месяцев назад +17

      все работает. Устроился на пост мидла у нас в Москве. Теперь планирую взять яхту.

    • @user-fc2un9fz6w
      @user-fc2un9fz6w 7 месяцев назад

      Жестко возьмёшь яхту или нежно?@@kliment5116

    • @PROgibator1
      @PROgibator1 7 месяцев назад

      Тоже устроился сеньёром в корпорацию зла. Получаю золотом. Планирую купить землю@@kliment5116

    • @user-fo3pk4yp5q
      @user-fo3pk4yp5q 2 месяца назад +1

      А какую практически полезную программу ты можешь написать сам?

  • @user-vv4im8yg7b
    @user-vv4im8yg7b 10 месяцев назад +45

    Обычно вообще не пишу комменты, но тут случайно наткнулся на ролик, и на самом деле не поверил, что у канала всего 110 подписчиков, прекрасный голос и хорошее качество звука, как раз то чего не хватает начинающим каналам. Классная подача материала, старайся дальше будем ждать 110, но еще с тремя нулями)))

    • @someStudentChannel
      @someStudentChannel  10 месяцев назад +5

      Спасибо :)
      Да, пока 110 с нулём нулей

    • @PROgibator1
      @PROgibator1 7 месяцев назад +1

      Уже 1 510. Посоветовал знакомым, а те своим,.Будет больше@@someStudentChannel

  • @yokzzzz
    @yokzzzz 9 месяцев назад +4

    супер приятно слушать, объяснения быстрые и понятные, спасибо за урок!

    • @someStudentChannel
      @someStudentChannel  9 месяцев назад

      Спасибо за обратную связь 😊

  • @bacruru
    @bacruru 7 месяцев назад +4

    Ваше существование вселяет в меня надежду

  • @user-ni9tf5yr6m
    @user-ni9tf5yr6m 10 месяцев назад +3

    Стиль превьюшек забавный. После них очень удивил женский голос. Рад найти ещё одного C++ Enjoyer-а

  • @garffild
    @garffild 10 месяцев назад +6

    Рекомендую, для удобства чтения и уменьшения отступов, пользоваться early return. То есть "сначала проверять невыполненные условия и прерывать или пропускать", вместо "исполненять, только есть условия выполняются".
    Отличная подача! Успехов вам! :)

    • @someStudentChannel
      @someStudentChannel  10 месяцев назад +7

      Да-да, тоже сначала хотелось так делать, но мы ещё не проходили эти словечки циклов, поэтому потом как улучшение кода будет. А может кто-то прочитает ваш комментарий и сам добавит.
      Спасибо большое! ❤️

  • @rustpolecat2770
    @rustpolecat2770 8 месяцев назад +1

    первый урок и сразу практика, круто

  • @progerlife6690
    @progerlife6690 4 месяца назад +2

    Офигеть лайк и подписка! Жду уроки по С++)

  • @astutusmvp5769
    @astutusmvp5769 8 месяцев назад +5

    Респект даме. Написала свой код(с хорошими пояснениями) , хоть и с косячками, но свой(открыто показала как взяла пару чужих функций - респект). Про недочёты чел уже в коментах по фактам написал, так что я не буду. Желаю удачи и развития, ты классная(по крайней мере такого мое первое впечатление)

  • @mr.ressety5118
    @mr.ressety5118 8 месяцев назад +2

    классный ролик только не предусмотрено пару мелочей ,но я так понимаю ты их поправишь в следующих роликах .А так добра и позитива

  • @nk-93
    @nk-93 8 месяцев назад +1

    Не знаю зачем мне это, но я посмотрел и мне понравилось! )
    Комменты тоже все в тему
    Похоже адекватный народ подписывается

  • @positivenozy6065
    @positivenozy6065 8 месяцев назад +3

    Молодчинка! Есть в планах создавать материал по алгоритмам и структурам данных?)

  • @scottywood3171
    @scottywood3171 3 месяца назад +2

    Ух красиво😊

  • @vadim4ikiii486
    @vadim4ikiii486 8 месяцев назад +2

    1:24 почему именно такая формула нельзя просто найти площадь и отнять 1 чтобы когда змейка достигла свего размера игра закончилась
    -1 потому что не будет места чтобы заспавнилось яблоко

  • @MrAsun-zd4yo
    @MrAsun-zd4yo 8 месяцев назад +2

    Очень хорошая подача, да и слушать тоже очень интересно, ждем что-нибудь еще интересненькое (желательно, чуть более ооп`шное, хах), удачи вам, очень интересно!

  • @donat7951
    @donat7951 9 месяцев назад +1

    О это то что я искал

  • @MartinIden-hn7ld
    @MartinIden-hn7ld Месяц назад

    4:47
    Лучше через else if или switch
    Если через if- это разные условия и проверка будет заходить в каждое, а не в одно

  • @muchas_gracias
    @muchas_gracias 2 месяца назад

    жду не дождусь когда будуть гайды по OpenGL

  • @maksimboiko007
    @maksimboiko007 5 месяцев назад +3

    Идея топ, а аот реализация так себе. Почему бы не написать змейку с использованием графических библиотек? Консоль это конечно хорошо, но когда будете выбиратся с песочницы? А ещё у Вас яблоко спавнится в змейке. Удачи в продолжении канала, продолжайте делать то что делаете и всёу вас получится😊

  • @ultrahab4293
    @ultrahab4293 25 дней назад

    Я подписался, а если игру еще и на сессии оценят то и на бусти зайду

  • @dmitry7341
    @dmitry7341 8 месяцев назад +1

    Привет! А когда будет продолжение?

  • @madideax
    @madideax 9 месяцев назад

    Я с вами!

  • @user-ko7qk7nt5w
    @user-ko7qk7nt5w 8 месяцев назад +1

    Всем привет. Подскажите как можно изменить символ головы змеи, чтобы он выделялся

    • @kosiak10851
      @kosiak10851 8 месяцев назад +3

      массив for(...) map[...] = snake; Начинать не с 0, а с i=1;
      а после цикла написать map[snake_y[0]...] = snake_head; где snake_head новая char переменная

  • @Mathemat1cs-1
    @Mathemat1cs-1 8 месяцев назад

    вообще круто, еще б с Qt намутить и можно хвастаться преподу/ друзьям на сколько ты крута

  • @user-mz4ry9cw3n
    @user-mz4ry9cw3n 8 месяцев назад +1

    простите а где исходный код?

  • @nullpeer
    @nullpeer 8 месяцев назад +1

    Добрый вечер. 4:40 почему просто switch нельзя использовать? получается как в питоне тогда, if заместо switch

    • @user-kt8se8gr2o
      @user-kt8se8gr2o 3 месяца назад +1

      Я попытлся через свитч сделать, но у меня змейка вообще двигаться перестала :/
      Мб это у меня руки не из того места, но через if всё заработало

  • @lpwlx
    @lpwlx 8 месяцев назад +3

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

  • @barladeanserghei6062
    @barladeanserghei6062 4 дня назад

    наверно поздновато , но можешь скинуть ссылку на гитхаб с кодом , хочу сверить(
    не могу найти ошибку

  • @defolt7
    @defolt7 7 месяцев назад +2

    Можно ссылочку на файл пж

  • @user-gc3bt1sq8d
    @user-gc3bt1sq8d 7 месяцев назад +1

    GPT почти один в один такую же змейку пишет на запрос: напиши простую реализацию игры змейка на c++

    • @someStudentChannel
      @someStudentChannel  7 месяцев назад

      Можешь сюда скинуть его код?

  • @user-ut5lo6wy1b
    @user-ut5lo6wy1b 8 месяцев назад +1

    Вот бы змейка была написана в ООП стили

  • @Vlad_Jonson
    @Vlad_Jonson 8 месяцев назад +1

    Всем привет, возможно глупый вопрос но зачем большинство переворачивает систему координат,в не которых моментах не совсем удобно? 🤗🤔

    • @someStudentChannel
      @someStudentChannel  8 месяцев назад +2

      Например?
      Если кратко, то потому что библиотеки могут быть написаны под другую систему. А вообще это идёт от всяких правил правой руки и всего такого, к чему уже все привыкли и написали книжек

  • @viruskiller18106
    @viruskiller18106 7 месяцев назад +3

    переписал код, но змейка сразу проигрывается

  • @ErkeTan879
    @ErkeTan879 11 дней назад

    Что делать если змейка спокойно движется по координате х (тоесть прямо вправо или прямо влево),но придвижении координате у он косится? (Допустим змейка идет вверх но она идет в левый верхний угол)

    • @hsywer
      @hsywer 9 дней назад

      Таже проблема

  • @DI4P443R-rw1kh
    @DI4P443R-rw1kh 8 месяцев назад

    А где исходные коды?

  • @byOwneD
    @byOwneD 10 месяцев назад +2

    Здравствуй
    А можеш снять ролик на тему C# wpf Dissolve а то на ютубе вообще нету нечего связано с данним параметром.

    • @someStudentChannel
      @someStudentChannel  10 месяцев назад

      Привет, знать бы ещё что это. C# может будет, когда юнити начнём затрагивать, а насчёт wpf и вообще простых оконных програм пока не знаю, так что извиняй

    • @lpwlx
      @lpwlx 8 месяцев назад

      по поводу WPF вот есть плейлист:ruclips.net/p/PL0lO_mIqDDFVI0xwaYbm7h9ewYu5hftfA&si=3wryZVgbQJKWk6QG

    • @byOwneD
      @byOwneD 8 месяцев назад

      @@lpwlx Спасибо. Данний материал я весь изучил. А вот по данной функции инфи не могу найти.

  • @user-je4dm5oy1i
    @user-je4dm5oy1i 10 месяцев назад +1

    хайп круто

  • @AndreyBorisov-vk8em
    @AndreyBorisov-vk8em 10 месяцев назад +10

    напиши клиент сервер чат пожалуйста.

    • @someStudentChannel
      @someStudentChannel  10 месяцев назад +2

      Возьму на заметку, но не в ближайшее время

    • @smenxsmenx4180
      @smenxsmenx4180 8 месяцев назад

      +1

  • @lastgames6797
    @lastgames6797 5 месяцев назад +2

    Привет, нужна помощь, повторял код как в видео, но когда запускаю консоль змейка сразу появляется в верхней границе карты , соответственно игра заканчивается.Как это можно исправить?

    • @someStudentChannel
      @someStudentChannel  5 месяцев назад +1

      Надо кода бы

    • @lastgames6797
      @lastgames6797 5 месяцев назад

      @@someStudentChannel
      #include
      #include
      void gotoxy(int x, int y) {
      COORD pos = { x, y };
      HANDLE output = GetStdHandle(STD_OUTPUT_HANDLE);
      SetConsoleCursorPosition(output, pos);
      }
      const int WIDTH = 17;
      const int HEIGHT = 10;
      const int MAX_SNAKE_LEN = (WIDTH - 2) * (HEIGHT - 2);
      const int UP = 0;
      const int DOWN = 1;
      const int LEFT = 2;
      const int RIGHT = 3;
      int snake_dir = UP;
      bool isRunning = true;
      char map[] =
      "#################
      "
      "# #
      "
      "# #
      "
      "# #
      "
      "# #
      "
      "# #
      "
      "# #
      "
      "# #
      "
      "# #
      "
      "#################
      ";
      char snake = 'o';
      int snake_x[MAX_SNAKE_LEN] = { 0 };
      int snake_y[MAX_SNAKE_LEN] = { 0 };
      int snake_len = 1;
      int food_x = 1+(rand()%(WIDTH-3));
      int food_y = 1 + (rand() % (HEIGHT - 2));
      char food = '*';
      int main() {
      snake_x[0] = WIDTH / 2;
      snake_y[0] = HEIGHT / 2;
      double time = clock();
      while (isRunning) {
      if (GetKeyState('A') & 0x8000)
      {
      if (snake_dir != RIGHT) {
      snake_dir = LEFT;
      }
      }
      if (GetKeyState('D') & 0x8000)
      {
      if (snake_dir != LEFT) {
      snake_dir = RIGHT;
      }
      }
      if (GetKeyState('W') & 0x8000)
      {
      if (snake_dir != DOWN) {
      snake_dir = UP;
      }
      }
      if (GetKeyState('S') & 0x8000)
      {
      if (snake_dir != UP) {
      snake_dir = DOWN;
      }
      }
      if ((clock() - time / CLOCKS_PER_SEC >= 0.3)) {
      time = clock();
      if (snake_x[0] == food_x && snake_y[0] == food_y) {
      ++snake_len;
      food_x = 1 + (rand() % (WIDTH - 3));
      food_y = 1 + (rand() % (HEIGHT - 2));
      }
      for (int i = snake_len - 2; i >= 0; ++i) {
      snake_x[i + 1] = snake_x[i];
      snake_y[i + 1] = snake_y[i];
      }
      if (snake_dir == UP) {
      --snake_y[0];
      }
      if (snake_dir == DOWN) {
      ++snake_y[0];
      }
      if (snake_dir == RIGHT) {
      ++snake_x[0];
      }
      if (snake_dir == LEFT) {
      --snake_x[0];
      }
      if (snake_x[0] == 0 || snake_y[0] == 0 || snake_x[0] == WIDTH - 2 || snake_y[0] == HEIGHT - 1) {
      isRunning = false;
      }
      for (int i = 1; i < snake_len; ++i) {
      if (snake_x[0] == snake_x[i] && snake_y[0] == snake_y[i]) {
      isRunning = false;
      i = snake_len;
      }
      }
      gotoxy(0, 0);
      std::cout

    • @lastgames6797
      @lastgames6797 4 месяца назад

      @@someStudentChannel
      #include
      #include
      void gotoxy(int x, int y) {
      COORD pos = { x, y };
      HANDLE output = GetStdHandle(STD_OUTPUT_HANDLE);
      SetConsoleCursorPosition(output, pos);
      }
      const int WIDTH = 17;
      const int HEIGHT = 10;
      const int MAX_SNAKE_LEN = (WIDTH - 2) * (HEIGHT - 2);
      const int UP = 0;
      const int DOWN = 1;
      const int LEFT = 2;
      const int RIGHT = 3;
      int snake_dir = UP;
      bool isRunning = true;
      char map[] =
      "#################
      "
      "# #
      "
      "# #
      "
      "# #
      "
      "# #
      "
      "# #
      "
      "# #
      "
      "# #
      "
      "# #
      "
      "#################
      ";
      char snake = 'o';
      int snake_x[MAX_SNAKE_LEN] = { 0 };
      int snake_y[MAX_SNAKE_LEN] = { 0 };
      int snake_len = 1;
      int food_x = 1+(rand()%(WIDTH-3));
      int food_y = 1 + (rand() % (HEIGHT - 2));
      char food = '*';
      int main() {
      snake_x[0] = WIDTH / 2;
      snake_y[0] = HEIGHT / 2;
      double time = clock();
      while (isRunning) {
      if (GetKeyState('A') & 0x8000)
      {
      if (snake_dir != RIGHT) {
      snake_dir = LEFT;
      }
      }
      if (GetKeyState('D') & 0x8000)
      {
      if (snake_dir != LEFT) {
      snake_dir = RIGHT;
      }
      }
      if (GetKeyState('W') & 0x8000)
      {
      if (snake_dir != DOWN) {
      snake_dir = UP;
      }
      }
      if (GetKeyState('S') & 0x8000)
      {
      if (snake_dir != UP) {
      snake_dir = DOWN;
      }
      }
      if ((clock() - time / CLOCKS_PER_SEC >= 0.3)) {
      time = clock();
      if (snake_x[0] == food_x && snake_y[0] == food_y) {
      ++snake_len;
      food_x = 1 + (rand() % (WIDTH - 3));
      food_y = 1 + (rand() % (HEIGHT - 2));
      }
      for (int i = snake_len - 2; i >= 0; ++i) {
      snake_x[i + 1] = snake_x[i];
      snake_y[i + 1] = snake_y[i];
      }
      if (snake_dir == UP) {
      --snake_y[0];
      }
      if (snake_dir == DOWN) {
      ++snake_y[0];
      }
      if (snake_dir == RIGHT) {
      ++snake_x[0];
      }
      if (snake_dir == LEFT) {
      --snake_x[0];
      }
      if (snake_x[0] == 0 || snake_y[0] == 0 || snake_x[0] == WIDTH - 2 || snake_y[0] == HEIGHT - 1) {
      isRunning = false;
      }
      for (int i = 1; i < snake_len; ++i) {
      if (snake_x[0] == snake_x[i] && snake_y[0] == snake_y[i]) {
      isRunning = false;
      i = snake_len;
      }
      }
      gotoxy(0, 0);
      std::cout

  • @garunchek
    @garunchek 7 месяцев назад +2

    Здравствуйте, у меня такая проблема, змейка двигается только вверх и вниз, не знаете как это исправить?

  • @DI4P443R-rw1kh
    @DI4P443R-rw1kh 8 месяцев назад +1

    Можно ещё по поводу char map задать вопрос где стеночки?
    У меня правильно получилось или как?
    char map[]=

    "#################
    "
    "# #
    "
    "# #
    "
    "# #
    "
    "# #
    "
    "# #
    "
    "# #
    "
    "# #
    "
    "# #
    "
    "#################
    ";
    Нет ли ошибки? Высота 10 включая верхнюю и нижние планки?

  • @KenanShuk
    @KenanShuk 7 месяцев назад +2

    У меня он улетает просто
    змейка не успиваю ничего сделать как это исправить

  • @KenanShuk
    @KenanShuk 7 месяцев назад +2

    У меня проблема код тот же самый но змейка очень быстро передвигается

    • @someStudentChannel
      @someStudentChannel  6 месяцев назад

      Можно Sleep поставить между кадрами

  • @1mpalo362
    @1mpalo362 2 месяца назад +1

    можно же было с UP LEFT RIGHT DOWN использовать enum, а не просто переменные

    • @someStudentChannel
      @someStudentChannel  2 месяца назад +1

      Да, мне почему-то захотелось на более низком уровне показать какая тут логика. Енам по сути предоставляет удобную обёртку для той же цели)

    • @1mpalo362
      @1mpalo362 2 месяца назад +1

      @@someStudentChannel да, он буквально то же самое, просто удобнее, на мой взгляд. Если функционал языка позволят, значит нужно его использовать

  • @Alviona_WoW
    @Alviona_WoW 23 дня назад

    Уважаемый автор, а почему у меня при запуске программы, она просто мгновенно завершается? То есть я не могу управлять змейкой... Она просто появляется в верхней границы карты и всё.

    • @someStudentChannel
      @someStudentChannel  22 дня назад

      Дайте на код взглянуть

    • @Alviona_WoW
      @Alviona_WoW 22 дня назад

      @@someStudentChannel делал прям как у вас в видео. То есть за вами повторял

    • @someStudentChannel
      @someStudentChannel  22 дня назад

      @@Alviona_WoW все так говорят)
      прям сюда копипастом можно

    • @Alviona_WoW
      @Alviona_WoW 22 дня назад

      @@someStudentChannel отправил уже копипастом) сюда, в переписку эту, с вами)

  • @Golosarii
    @Golosarii 2 месяца назад +1

    желательно было бы если написать еще комментарий , а то так интиутивно не поймешь

  • @Alviona_WoW
    @Alviona_WoW 21 день назад

    Уважаемый автор, так и что по итогу не так в коде у меня? :-) Я его скинул) Не смотрели ещё?

    • @someStudentChannel
      @someStudentChannel  20 дней назад

      Да, я завтра посмотрю, будни загруженные сейчас :(

    • @Alviona_WoW
      @Alviona_WoW 20 дней назад

      @@someStudentChannel Спасибо, жду)

    • @Alviona_WoW
      @Alviona_WoW 11 дней назад

      @@someStudentChannel Уважаемый автор, здравствуйте. Вы так и не поглядели мой код(

  • @vas_._sfer6157
    @vas_._sfer6157 10 месяцев назад +23

    Понятно, что видео для новичков, но возможно стоило бы улучшить качество кода, без потери понятности естественно.
    Что я имею в виду:
    1) Стараться не злоупотреблять глобальными переменными.
    Лучше оставить глобальные константы. Хотя иногда они вполне могут быть полезны и наглядны. Но вот snake_len, food_x, food_y. Для простоты глобальными стоит оставить только состояние поля, или некоторые данные змейки, и то если вам просто не хочется использовать ссылки или указатели на данном этапе.
    2) Разделить функционал стоит хотя бы на пару функций.
    Это поможет понятно показать какой код ответственен за определённые действия.
    По сути игровой цикл состоит из этих задач:
    - Получение действия игрока.
    - Проверка отсутствия препятствий или конец игры.
    - Проверка на еду и поглощение еды (+ генерация нового кусочка)
    - Передвижение.
    - Отрисовка
    - Ожидание
    Если использовать разделение на функции для хотя бы некоторых этих пунктов, то можно сделать код понятнее и проще.
    Как минимум можно упростить код ожидания следующего кадра, если вынесете его в отдельную функцию.
    Ну и функция отрисовки прям напрашивается, с учётом необходимости переставлять курсор.
    3) Использовать более простые решения.
    - Статический многомерного массив не требует формул для расчёта координат.
    - Нет никакого толка размещать в массив границы поля, так как их можно добавлять во время отрисовки.
    Можно ведь просто оставить игровое поле игровым полем.
    - Хорошо бы избежать кучи лишних операций с массивом, да ещё и сократить код работы с туловищем змейки. Можно использовать очень примитивную реализацию очереди, так как мы знаем максимальную длину змейки.
    Есть ещё небольшая ошибка в вашем коде:
    Еда может появиться на теле змейки.
    В остальном у вас хороший голос и неплохая подача. Я думаю вас ждёт успех!
    P.S. На гитхаб старайтесь выкладывать ваш код. А ссылку на проект в описание. Так каждый сможет полностью осмотреть код из урока.

    • @someStudentChannel
      @someStudentChannel  10 месяцев назад +4

      Да, замечания все по факту, спасибо. В следующих практиках будем улучшать код.
      Баг с едой, вообще, остался, чтобы не нагружать и так уже загруженный мозг зрителя.

    • @Alex_Rukhubovsky
      @Alex_Rukhubovsky 10 месяцев назад +5

      Сеньор учит джуна)) сразу чувствуется опыт и прохождение через такие же ошибки)
      Да, критика по существу тут.
      П.С. я не программист, только учусь для себя, если что.

    • @hegatib4ik843
      @hegatib4ik843 7 месяцев назад

      Возможно подскажете уак пофиксить баг з едой, реализовал идею на с# делаю проверку не попападает ли координата еды на змейку но иногда всеравно попадает, возможно изза того что в одном кадре там нет змейки а в другом она там появляеться и прячеться под саму змейку

    • @vas_._sfer6157
      @vas_._sfer6157 7 месяцев назад

      @@hegatib4ik843 Давайте ссылку на Gist или репозиторий с кодом. Посмотрю, что там может быть не так

  • @ItachiUchiha-wd5kk
    @ItachiUchiha-wd5kk 5 месяцев назад +1

    Помоги, пожалуйста
    У меня функция рандом даже при использовании srand(time(0)) всё равно генерирует всё в одном месте - в рамке, в верхнем правом углу
    Если же то же рандомное создание для фруктов в начале, вне int main(), то тогда число генерирует лишь один не изменяющийся результат( и скорее всего не меняется)
    И да, я пытался использовать сторонние функции рандома( не помогло)
    Мой код:
    #include
    #include
    #include
    #include
    void gotoxy(int x, int y)
    {
    COORD pos = { x, y };
    HANDLE output = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleCursorPosition(output, pos);
    }
    const int Width = 18;
    const int Height = 10;
    const int Max_Len_Snake = (Width - 3) * (Height - 2);
    const int Up = 0;
    const int Down = 1;
    const int Left = 2;
    const int Right = 3;
    bool isRunning = true;
    int snake_dir = Up;
    char map[] =
    "#################
    "
    "# #
    "
    "# #
    "
    "# #
    "
    "# #
    "
    "# #
    "
    "# #
    "
    "# #
    "
    "# #
    "
    "#################
    ";
    char snake = 'O';
    int snake_x[Max_Len_Snake] = {0};
    int snake_y[Max_Len_Snake] = {0};
    int snake_len = 1;
    int food_x;
    int food_y;
    char food = '*';
    void Print(const char* message)
    {
    std::cout = 0; --i)
    {
    snake_x[i + 1] = snake_x[i];
    snake_y[i + 1] = snake_y[i];
    }

    if (snake_dir == Up)
    --snake_y[0];
    if (snake_dir == Down)
    ++snake_y[0];
    if (snake_dir == Right)
    ++snake_x[0];
    if (snake_dir == Left)
    --snake_x[0];
    if ((snake_x[0] == 0) || (snake_y == 0) || (snake_x[0] == Width - 2) || (snake_y[0] == Height - 1))
    isRunning = false;
    for (int i = 1; i < snake_len; i++)
    {
    if(snake_x[0]== snake_x[i]&& snake_y[0]==snake_y[i])
    {
    isRunning = false;
    i = snake_len;
    }
    }
    gotoxy(0, 0);
    std::cout

    • @someStudentChannel
      @someStudentChannel  5 месяцев назад

      У тебя food_x и food_y не заданы начальные значения. Приравняй к 5 их там хотя-бы. У меня заработало

    • @ItachiUchiha-wd5kk
      @ItachiUchiha-wd5kk 5 месяцев назад

      @@someStudentChannel Я изначально как в видео ставил значения рандомные, потом ставил какие-то другие, экспериментировал
      Но там просто одно это яблоко остается и никуда не перемещается

    • @someStudentChannel
      @someStudentChannel  5 месяцев назад

      @@ItachiUchiha-wd5kk все равно не работает?

    • @ItachiUchiha-wd5kk
      @ItachiUchiha-wd5kk 5 месяцев назад

      @@someStudentChannel Неа
      Проверял

    • @someStudentChannel
      @someStudentChannel  5 месяцев назад

      @@ItachiUchiha-wd5kk а первый фрукт то спавнится? Или там прям все объекты в одной точке

  • @norskiy9765
    @norskiy9765 10 месяцев назад

    Ура победа!!!

    • @someStudentChannel
      @someStudentChannel  10 месяцев назад

      На С++ в С-стайле так сказать

    • @norskiy9765
      @norskiy9765 10 месяцев назад

      @@someStudentChannel зато +1 игра

  • @define_success_true
    @define_success_true 3 месяца назад +1

    Глобальные переменный и нет использования ООП

  • @thestinger8677
    @thestinger8677 10 месяцев назад +9

    А можно и каналам-миллионникам запариваться над видео хотя бы в половину как ты? от некоторых не то что картиночек на монтаже вставить, а даже объяснения написанного не дождёшься, красава

    • @someStudentChannel
      @someStudentChannel  10 месяцев назад +6

      Ухх, спасибо.
      Кстати, знаю что зарубежные миллионники (Code Bullet например) очень запариваются над монтажом

    • @thestinger8677
      @thestinger8677 10 месяцев назад

      ​ @someStudentChannel да, шикарных каналов тоже много, но видя как запариваешься ты, становится грустно что кто-то может пукать невнятными видео с почти нулевыми затратами по времени и силам, а получать в сотни раз больше внимания :(
      Благо таких меньшинство

  • @russleg9510
    @russleg9510 9 месяцев назад

    +

  • @user-yi5ch6oc5t
    @user-yi5ch6oc5t 8 месяцев назад

    ti paren ili dewochka???????

  • @fitileo
    @fitileo 7 месяцев назад +1

    всё круто ,просто супер,но ни чё не понятно

  • @aliexpress5284
    @aliexpress5284 9 месяцев назад +2

    :) точна студень: в ручную массив заполнил и посчитал колличество строк столбцов😂

    • @someStudentChannel
      @someStudentChannel  9 месяцев назад +1

      Да ладно. Зато понятно как, что, откуда берётся

  • @kosiak10851
    @kosiak10851 8 месяцев назад

    Странно, что автор ведёт канал для школьников, даже не старшеклассников, но уже кидает ссылку на бусти.

  • @devlightff482
    @devlightff482 7 месяцев назад +1

    Тут только смотрять м. пола?

  • @unqp52
    @unqp52 8 месяцев назад +1

    А че без всяких ООП, раскидывания по файлам ?
    Так же не красиво, не чётен ко и не вкусно 😢

  • @alexf3289
    @alexf3289 7 месяцев назад +2

    Вот эти постоянные "как нетрудно понять" - это не объяснение. Массив чаров для игрового поля - это ещё понятно, всё что после - нет. Логику выбора и определения переменных и констант нужно подробно описывать, если вы делаете уроки для начинающих. Иначе это профанация.

    • @someStudentChannel
      @someStudentChannel  7 месяцев назад +3

      Уроки для начинающих да, а практика рассчитана на то что с уроками человек уже хорошо освоился. Аудитория просто разная и выпускать только для новичков не совсем правильно, как мне кажется

  • @pampers3215
    @pampers3215 8 месяцев назад +1

    shluha

  • @user-ot9wq6lf1x
    @user-ot9wq6lf1x 7 месяцев назад +1

    Иди на кухню

  • @gasirovka
    @gasirovka 10 месяцев назад +1

    Недавно тоже змейку писал на raylib

    • @someStudentChannel
      @someStudentChannel  10 месяцев назад +2

      Библиотеки для игр это мы любим

  • @disasterChildPo
    @disasterChildPo 10 месяцев назад +3

    круто. Спасибо за видос!
    Помогите пожалуйста, кто-нибудь: у меня проблема. При вертикальном перемещении змейка двигается по диагонали
    Вот код:
    #include
    #include
    void gotoxy(int x, int y) {
    COORD pos = { x,y };
    HANDLE output = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleCursorPosition(output, pos);
    }
    const int WIDTH = 21;
    const int HEIGHT = 11;
    const int MAX_LEN_SNAKE = (WIDTH - 3) * (HEIGHT - 2);
    const int UP=0;
    const int DOWN=1;
    const int LEFT = 2;
    const int RIGHT = 3;
    int snake_dir = 0;
    bool isRunning = true;
    char map[] =
    "#####################
    "
    "# #
    "
    "# #
    "
    "# #
    "
    "# #
    "
    "# #
    "
    "# #
    "
    "# #
    "
    "# #
    "
    "# #
    "
    "#####################
    ";
    char snake = '0';
    int snake_x [MAX_LEN_SNAKE] = { 0 };
    int snake_y [MAX_LEN_SNAKE] = { 0 };
    int snake_len = 1;
    int main()
    {
    snake_x[0] = WIDTH / 2;
    snake_y[0] = HEIGHT / 2;
    int time = clock();
    while (isRunning) {
    if (GetKeyState('W') & 0x8000) {
    if (snake_dir != DOWN) {
    snake_dir = UP;
    }
    }
    else if (GetKeyState('S') & 0x8000) {
    if (snake_dir != UP) {
    snake_dir = DOWN;
    }
    }
    else if (GetKeyState('D') & 0x8000) {
    if (snake_dir != LEFT) {
    snake_dir = RIGHT;
    }
    }
    else if (GetKeyState('A') & 0x8000) {
    if (snake_dir != RIGHT) {
    snake_dir = LEFT;
    }
    }
    if ((clock() - time) / CLOCKS_PER_SEC >= 0.3) {
    time = clock();
    for (int i = snake_len - 2; i >= 0; --i) {
    snake_x[i + 1] = snake_x[i];
    snake_y[i + 1] = snake_y[i];
    }
    if (snake_dir == UP) {
    --snake_y[0];
    }
    else if (snake_dir == DOWN) {
    ++snake_y[0];
    }
    else if (snake_dir == RIGHT) {
    ++snake_x[0];
    }
    else if (snake_dir == LEFT) {
    --snake_x[0];
    }
    else if (snake_x[0] == 0 || snake_y[0] == 0 || snake_x[0] == WIDTH - 2 || snake_y[0] == HEIGHT - 1) {
    isRunning = false;
    }
    gotoxy(0, 0);
    for (int i = 0; i < snake_len; i++) {
    map[snake_y[i] * WIDTH + snake_x[i]] = snake;
    }
    std::cout

    • @someStudentChannel
      @someStudentChannel  10 месяцев назад +3

      С шириной общитался.
      Напиши const int WIDTH = 22

    • @disasterChildPo
      @disasterChildPo 10 месяцев назад +1

      @@someStudentChannel Спасибо ОГРОМНОЕ. Я 4 раза считал. Так и не смог нормально посчитать😂

    • @ItachiUchiha-wd5kk
      @ItachiUchiha-wd5kk 5 месяцев назад

      @@someStudentChannel Я столкнулся с этой же ошибкой и регулировка Width помогла, так как я не принимал во внимание

      Большое спасибо за видео и за вашу помощь

  • @AComplexWave
    @AComplexWave 2 месяца назад

    const int MAX_SNAKE = (WEITH - 3) * (HEiGHT - 2); - НЕ ПОНЯЛ , ПОЧЕМУ -3 И -2, ОТКУДА ЭТИ ПАРАМЕТРЫ Максимальная длина змейки, 2 символа '#'' '#' по бокам вычесть и два (1 вверх и 1 - низ) символ
    считаем ? Обьясните чтоб понятно было новичку!

    • @someStudentChannel
      @someStudentChannel  2 месяца назад

      Да,
      в счёт)

    • @AComplexWave
      @AComplexWave 2 месяца назад

      @@someStudentChannel спасибо, очень приятно, когда автор видео даёт feedback
      std::cout

  • @user-xx7ev5hy7g
    @user-xx7ev5hy7g 7 месяцев назад +1

    main.cpp:46:17: error: ‘MAX_LEN_SNAKE’ was not declared in this scope
    46 | int snake_x[MAX_LEN_SNAKE] = { 0 };
    | ^~~~~~~~~~~~~

    • @user-xx7ev5hy7g
      @user-xx7ev5hy7g 7 месяцев назад +1

      як вирішити?

    • @user-fv8ey8ev2p
      @user-fv8ey8ev2p 7 месяцев назад +1

      Ты не объявил MAX_LEN_SNAKE или ошибся в его написании при объявлении, ошибка в невозможности найти константу в области видимости