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

แชร์
ฝัง
  • เผยแพร่เมื่อ 4 ม.ค. 2025

ความคิดเห็น • 153

  • @severusov
    @severusov ปีที่แล้ว +110

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

    • @kliment5116
      @kliment5116 ปีที่แล้ว +20

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

    • @Дмитрий-з1з3у
      @Дмитрий-з1з3у ปีที่แล้ว

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

    • @PROgibator1
      @PROgibator1 ปีที่แล้ว

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

    • @СтарыйВаленок-к4л
      @СтарыйВаленок-к4л 9 หลายเดือนก่อน +1

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

    • @Alekc2020
      @Alekc2020 3 หลายเดือนก่อน

      ​@@СтарыйВаленок-к4лЗмейка

  • @НиколайПодколзин-с8р
    @НиколайПодколзин-с8р ปีที่แล้ว +49

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

    • @someStudentChannel
      @someStudentChannel  ปีที่แล้ว +6

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

    • @PROgibator1
      @PROgibator1 ปีที่แล้ว +1

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

  • @КимЧенОрк
    @КимЧенОрк ปีที่แล้ว +7

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

  • @yokzzzz
    @yokzzzz ปีที่แล้ว +6

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

    • @someStudentChannel
      @someStudentChannel  ปีที่แล้ว

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

  • @bacruru
    @bacruru ปีที่แล้ว +5

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

  • @garffild
    @garffild ปีที่แล้ว +8

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

    • @someStudentChannel
      @someStudentChannel  ปีที่แล้ว +8

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

  • @astutusmvp5769
    @astutusmvp5769 ปีที่แล้ว +6

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

  • @progerlife6690
    @progerlife6690 11 หลายเดือนก่อน +3

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

  • @vadim4ikiii486
    @vadim4ikiii486 ปีที่แล้ว +2

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

  • @angsttt904
    @angsttt904 4 หลายเดือนก่อน +2

    наверное уже писали, но имхо - записать направления было бы элегантней в enum. Они все равно хранятся как числа далее

  • @MartinIden-hn7ld
    @MartinIden-hn7ld 8 หลายเดือนก่อน

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

  • @nk-93
    @nk-93 ปีที่แล้ว +2

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

  • @eueiiew
    @eueiiew 6 หลายเดือนก่อน

    Бонус может появиться и в змейке. Насчет использования двух массивов для змейки, не знаю, такое. Каждая итерация это перебор ее кординат для смещения, да и "железный" алгоритм для генерации бонуса с учетом занятых координат будет весьма трудоемким. Типичная инженерная задача, либо память, либо же скорость) Сам использовал связанный список, для того, чтобы каждую итерацию хвост перемещать в голове. Пробывал и с матрицей, но там свои приколы. Вообщем, спасибо за видео, учу ++

  • @scottywood3171
    @scottywood3171 10 หลายเดือนก่อน +2

    Ух красиво😊

  • @mr.ressety5118
    @mr.ressety5118 ปีที่แล้ว +2

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

  • @ErkeTan879
    @ErkeTan879 7 หลายเดือนก่อน +1

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

    • @hsywer
      @hsywer 7 หลายเดือนก่อน +1

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

    • @Azemrov
      @Azemrov 5 หลายเดือนก่อน

      короче добавь +1 к твоему полю в ширину ,ты недосчитал

  • @pelmeshik2909
    @pelmeshik2909 6 หลายเดือนก่อน

    Здравствуй! чтобы исправить проблему с пленкой можно использовать system("cls"); после вывода краты.

  • @rustpolecat2770
    @rustpolecat2770 ปีที่แล้ว +1

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

  • @lpwlx
    @lpwlx ปีที่แล้ว +4

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

  • @lastgames6797
    @lastgames6797 ปีที่แล้ว +2

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

    • @someStudentChannel
      @someStudentChannel  11 หลายเดือนก่อน +1

      Надо кода бы

    • @lastgames6797
      @lastgames6797 11 หลายเดือนก่อน

      @@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 11 หลายเดือนก่อน

      @@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

  • @positivenozy6065
    @positivenozy6065 ปีที่แล้ว +3

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

  • @Равич-б2у
    @Равич-б2у ปีที่แล้ว +1

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

    • @kosiak10851
      @kosiak10851 ปีที่แล้ว +3

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

  • @garunchek
    @garunchek ปีที่แล้ว +2

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

  • @nullpeer
    @nullpeer ปีที่แล้ว +1

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

    • @Andrew_ku
      @Andrew_ku 9 หลายเดือนก่อน +1

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

  • @MrAsun-zd4yo
    @MrAsun-zd4yo ปีที่แล้ว +2

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

  • @Игорь-х6ф6и
    @Игорь-х6ф6и ปีที่แล้ว +2

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

  • @Vlad_Jonson
    @Vlad_Jonson ปีที่แล้ว +1

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

    • @someStudentChannel
      @someStudentChannel  ปีที่แล้ว +2

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

  • @dangro9424
    @dangro9424 หลายเดือนก่อน

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

    • @someStudentChannel
      @someStudentChannel  10 วันที่ผ่านมา

      Может символы не так посчитал, надо кода

  • @AndreyBorisov-vk8em
    @AndreyBorisov-vk8em ปีที่แล้ว +10

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

    • @someStudentChannel
      @someStudentChannel  ปีที่แล้ว +2

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

    • @smenxsmenx4180
      @smenxsmenx4180 ปีที่แล้ว

      +1

  • @dmitry7341
    @dmitry7341 ปีที่แล้ว +1

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

  • @ultrahab4293
    @ultrahab4293 7 หลายเดือนก่อน

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

  • @muchas_gracias
    @muchas_gracias 8 หลายเดือนก่อน

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

  • @Mathemat1cs-1
    @Mathemat1cs-1 ปีที่แล้ว +1

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

  • @Игорь-г7т8щ
    @Игорь-г7т8щ ปีที่แล้ว +1

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

    • @someStudentChannel
      @someStudentChannel  ปีที่แล้ว

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

  • @DI4P443R-rw1kh
    @DI4P443R-rw1kh ปีที่แล้ว +1

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

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

  • @KenanShuk
    @KenanShuk ปีที่แล้ว +2

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

  • @byOwneD
    @byOwneD ปีที่แล้ว +2

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

    • @someStudentChannel
      @someStudentChannel  ปีที่แล้ว

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

    • @lpwlx
      @lpwlx ปีที่แล้ว

      по поводу WPF вот есть плейлист:th-cam.com/play/PL0lO_mIqDDFVI0xwaYbm7h9ewYu5hftfA.html&si=3wryZVgbQJKWk6QG

    • @byOwneD
      @byOwneD ปีที่แล้ว

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

  • @petrpashutin9197
    @petrpashutin9197 5 หลายเดือนก่อน

    А как базу генератора случайных чисел сделать случайной?

    • @someStudentChannel
      @someStudentChannel  3 หลายเดือนก่อน

      Про seed рандома почитайте

  • @KenanShuk
    @KenanShuk ปีที่แล้ว +2

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

    • @someStudentChannel
      @someStudentChannel  ปีที่แล้ว

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

  • @blindboy007
    @blindboy007 ปีที่แล้ว +3

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

  • @viruskiller18106
    @viruskiller18106 ปีที่แล้ว +3

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

  • @barladeanserghei6062
    @barladeanserghei6062 6 หลายเดือนก่อน

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

    • @someStudentChannel
      @someStudentChannel  3 หลายเดือนก่อน

      На бусти выкладывался

  • @_veterok_856
    @_veterok_856 6 หลายเดือนก่อน

    я сделал все также проблем нет, все классно, но почему то змейка двигается только по оси Y почему? (и еще не на те кнопки, на которые надо)
    ПОМОГИ пожалуйста, буду благодарен❤

  • @Azemrov
    @Azemrov 5 หลายเดือนก่อน

    Здравствуй ! Почему в момент когда змейка подбирает еду то игра завершается с результатом 2

  • @donat7951
    @donat7951 ปีที่แล้ว +1

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

  • @defolt7
    @defolt7 ปีที่แล้ว +2

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

  • @1mpalo362
    @1mpalo362 9 หลายเดือนก่อน +1

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

    • @someStudentChannel
      @someStudentChannel  9 หลายเดือนก่อน +1

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

    • @1mpalo362
      @1mpalo362 9 หลายเดือนก่อน +1

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

  • @Alviona_WoW
    @Alviona_WoW 7 หลายเดือนก่อน

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

    • @someStudentChannel
      @someStudentChannel  7 หลายเดือนก่อน

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

    • @Alviona_WoW
      @Alviona_WoW 7 หลายเดือนก่อน

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

    • @someStudentChannel
      @someStudentChannel  7 หลายเดือนก่อน

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

    • @Alviona_WoW
      @Alviona_WoW 7 หลายเดือนก่อน

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

  • @ДмитрийКунов-к9ч
    @ДмитрийКунов-к9ч 3 หลายเดือนก่อน

    хочу с тобой связаться, ответь, пожалуйста

  • @Alviona_WoW
    @Alviona_WoW 7 หลายเดือนก่อน

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

    • @someStudentChannel
      @someStudentChannel  7 หลายเดือนก่อน

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

    • @Alviona_WoW
      @Alviona_WoW 7 หลายเดือนก่อน

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

    • @Alviona_WoW
      @Alviona_WoW 7 หลายเดือนก่อน +1

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

    • @Azemrov
      @Azemrov 5 หลายเดือนก่อน

      @@Alviona_WoW посмотрели ?

    • @Alviona_WoW
      @Alviona_WoW 5 หลายเดือนก่อน

      @@Azemrov нет(

  • @ИТОтдел-щ4ы
    @ИТОтдел-щ4ы ปีที่แล้ว +1

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

  • @ItachiUchiha-wd5kk
    @ItachiUchiha-wd5kk ปีที่แล้ว +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  ปีที่แล้ว

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

    • @ItachiUchiha-wd5kk
      @ItachiUchiha-wd5kk ปีที่แล้ว

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

    • @someStudentChannel
      @someStudentChannel  ปีที่แล้ว

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

    • @ItachiUchiha-wd5kk
      @ItachiUchiha-wd5kk ปีที่แล้ว

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

    • @someStudentChannel
      @someStudentChannel  ปีที่แล้ว

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

  • @DI4P443R-rw1kh
    @DI4P443R-rw1kh ปีที่แล้ว

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

  • @madideax
    @madideax ปีที่แล้ว

    Я с вами!

  • @define_success_true
    @define_success_true 10 หลายเดือนก่อน +1

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

  • @Golosarii
    @Golosarii 9 หลายเดือนก่อน +1

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

  • @thestinger8677
    @thestinger8677 ปีที่แล้ว +9

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

    • @someStudentChannel
      @someStudentChannel  ปีที่แล้ว +6

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

    • @thestinger8677
      @thestinger8677 ปีที่แล้ว

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

  • @СергейСунцов-я2э
    @СергейСунцов-я2э ปีที่แล้ว +1

    хайп круто

  • @vas_._sfer6157
    @vas_._sfer6157 ปีที่แล้ว +23

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

    • @someStudentChannel
      @someStudentChannel  ปีที่แล้ว +5

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

    • @Alex_Rukhubovsky
      @Alex_Rukhubovsky ปีที่แล้ว +5

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

    • @hegatib4ik843
      @hegatib4ik843 ปีที่แล้ว

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

    • @vas_._sfer6157
      @vas_._sfer6157 ปีที่แล้ว

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

  • @fitileo
    @fitileo ปีที่แล้ว +1

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

  • @norskiy9765
    @norskiy9765 ปีที่แล้ว

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

    • @someStudentChannel
      @someStudentChannel  ปีที่แล้ว

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

    • @norskiy9765
      @norskiy9765 ปีที่แล้ว

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

  • @MarkFilipov-m2w
    @MarkFilipov-m2w ปีที่แล้ว

    ti paren ili dewochka???????

  • @kosiak10851
    @kosiak10851 ปีที่แล้ว +1

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

  • @alexf3289
    @alexf3289 ปีที่แล้ว +2

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

    • @someStudentChannel
      @someStudentChannel  ปีที่แล้ว +3

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

  • @unqp52
    @unqp52 ปีที่แล้ว +1

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

  • @devlightff482
    @devlightff482 ปีที่แล้ว +1

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

  • @aliexpress5284
    @aliexpress5284 ปีที่แล้ว +2

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

    • @someStudentChannel
      @someStudentChannel  ปีที่แล้ว +1

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

  • @russleg9510
    @russleg9510 ปีที่แล้ว

    +

  • @pampers3215
    @pampers3215 ปีที่แล้ว +1

    shluha

  • @НикитаАгеев-п2ж
    @НикитаАгеев-п2ж ปีที่แล้ว +1

    Иди на кухню

    • @pipkurek2005
      @pipkurek2005 2 หลายเดือนก่อน +1

      В отличие от тебя она даже умеет кодить на микроволновке

  • @gasirovka
    @gasirovka ปีที่แล้ว +1

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

    • @someStudentChannel
      @someStudentChannel  ปีที่แล้ว +2

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

  • @AComplexWave
    @AComplexWave 8 หลายเดือนก่อน

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

    • @someStudentChannel
      @someStudentChannel  8 หลายเดือนก่อน

      Да,
      в счёт)

    • @AComplexWave
      @AComplexWave 8 หลายเดือนก่อน

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

  • @Марія-МаринаГИЩУК
    @Марія-МаринаГИЩУК ปีที่แล้ว +1

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

    • @Марія-МаринаГИЩУК
      @Марія-МаринаГИЩУК ปีที่แล้ว +1

      як вирішити?

    • @АртёмШакиров-к2о
      @АртёмШакиров-к2о ปีที่แล้ว +1

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

  • @disasterChildPo
    @disasterChildPo ปีที่แล้ว +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  ปีที่แล้ว +3

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

    • @disasterChildPo
      @disasterChildPo ปีที่แล้ว +1

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

    • @ItachiUchiha-wd5kk
      @ItachiUchiha-wd5kk ปีที่แล้ว

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

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