Обычно вообще не пишу комменты, но тут случайно наткнулся на ролик, и на самом деле не поверил, что у канала всего 110 подписчиков, прекрасный голос и хорошее качество звука, как раз то чего не хватает начинающим каналам. Классная подача материала, старайся дальше будем ждать 110, но еще с тремя нулями)))
Рекомендую, для удобства чтения и уменьшения отступов, пользоваться early return. То есть "сначала проверять невыполненные условия и прерывать или пропускать", вместо "исполненять, только есть условия выполняются". Отличная подача! Успехов вам! :)
Да-да, тоже сначала хотелось так делать, но мы ещё не проходили эти словечки циклов, поэтому потом как улучшение кода будет. А может кто-то прочитает ваш комментарий и сам добавит. Спасибо большое! ❤️
Респект даме. Написала свой код(с хорошими пояснениями) , хоть и с косячками, но свой(открыто показала как взяла пару чужих функций - респект). Про недочёты чел уже в коментах по фактам написал, так что я не буду. Желаю удачи и развития, ты классная(по крайней мере такого мое первое впечатление)
1:24 почему именно такая формула нельзя просто найти площадь и отнять 1 чтобы когда змейка достигла свего размера игра закончилась -1 потому что не будет места чтобы заспавнилось яблоко
Привет, нужна помощь, повторял код как в видео, но когда запускаю консоль змейка сразу появляется в верхней границе карты , соответственно игра заканчивается.Как это можно исправить?
Что делать если змейка спокойно движется по координате х (тоесть прямо вправо или прямо влево),но придвижении координате у он косится? (Допустим змейка идет вверх но она идет в левый верхний угол)
Бонус может появиться и в змейке. Насчет использования двух массивов для змейки, не знаю, такое. Каждая итерация это перебор ее кординат для смещения, да и "железный" алгоритм для генерации бонуса с учетом занятых координат будет весьма трудоемким. Типичная инженерная задача, либо память, либо же скорость) Сам использовал связанный список, для того, чтобы каждую итерацию хвост перемещать в голове. Пробывал и с матрицей, но там свои приколы. Вообщем, спасибо за видео, учу ++
надеюсь ответите, у меня такая проблема, я когда запускаю стенка смещена а сама змейка не посередине а в самих решетках(которые являются полем) два раза переписывал код с нуля не изменилось помогите пожалуйста
Понятно, что видео для новичков, но возможно стоило бы улучшить качество кода, без потери понятности естественно. Что я имею в виду: 1) Стараться не злоупотреблять глобальными переменными. Лучше оставить глобальные константы. Хотя иногда они вполне могут быть полезны и наглядны. Но вот snake_len, food_x, food_y. Для простоты глобальными стоит оставить только состояние поля, или некоторые данные змейки, и то если вам просто не хочется использовать ссылки или указатели на данном этапе. 2) Разделить функционал стоит хотя бы на пару функций. Это поможет понятно показать какой код ответственен за определённые действия. По сути игровой цикл состоит из этих задач: - Получение действия игрока. - Проверка отсутствия препятствий или конец игры. - Проверка на еду и поглощение еды (+ генерация нового кусочка) - Передвижение. - Отрисовка - Ожидание Если использовать разделение на функции для хотя бы некоторых этих пунктов, то можно сделать код понятнее и проще. Как минимум можно упростить код ожидания следующего кадра, если вынесете его в отдельную функцию. Ну и функция отрисовки прям напрашивается, с учётом необходимости переставлять курсор. 3) Использовать более простые решения. - Статический многомерного массив не требует формул для расчёта координат. - Нет никакого толка размещать в массив границы поля, так как их можно добавлять во время отрисовки. Можно ведь просто оставить игровое поле игровым полем. - Хорошо бы избежать кучи лишних операций с массивом, да ещё и сократить код работы с туловищем змейки. Можно использовать очень примитивную реализацию очереди, так как мы знаем максимальную длину змейки. Есть ещё небольшая ошибка в вашем коде: Еда может появиться на теле змейки. В остальном у вас хороший голос и неплохая подача. Я думаю вас ждёт успех! P.S. На гитхаб старайтесь выкладывать ваш код. А ссылку на проект в описание. Так каждый сможет полностью осмотреть код из урока.
Да, замечания все по факту, спасибо. В следующих практиках будем улучшать код. Баг с едой, вообще, остался, чтобы не нагружать и так уже загруженный мозг зрителя.
Сеньор учит джуна)) сразу чувствуется опыт и прохождение через такие же ошибки) Да, критика по существу тут. П.С. я не программист, только учусь для себя, если что.
Возможно подскажете уак пофиксить баг з едой, реализовал идею на с# делаю проверку не попападает ли координата еды на змейку но иногда всеравно попадает, возможно изза того что в одном кадре там нет змейки а в другом она там появляеться и прячеться под саму змейку
массив for(...) map[...] = snake; Начинать не с 0, а с i=1; а после цикла написать map[snake_y[0]...] = snake_head; где snake_head новая char переменная
ролик неплохой, подача хорошая. но не хватает подробных объяснений. я думаю, что здесь всё поймут только те, кто сам уже в состоянии написать "змейку". по поводу кода уже подробно всё расписали, для начинающих, как я считаю, лучше писать, так сказать, примитивно, но правильно. а так, в целом, качество видео для маленького канала хорошее.
Очень хорошая подача, да и слушать тоже очень интересно, ждем что-нибудь еще интересненькое (желательно, чуть более ооп`шное, хах), удачи вам, очень интересно!
Например? Если кратко, то потому что библиотеки могут быть написаны под другую систему. А вообще это идёт от всяких правил правой руки и всего такого, к чему уже все привыкли и написали книжек
Идея топ, а аот реализация так себе. Почему бы не написать змейку с использованием графических библиотек? Консоль это конечно хорошо, но когда будете выбиратся с песочницы? А ещё у Вас яблоко спавнится в змейке. Удачи в продолжении канала, продолжайте делать то что делаете и всёу вас получится😊
Уважаемый автор, а почему у меня при запуске программы, она просто мгновенно завершается? То есть я не могу управлять змейкой... Она просто появляется в верхней границы карты и всё.
Привет, знать бы ещё что это. C# может будет, когда юнити начнём затрагивать, а насчёт wpf и вообще простых оконных програм пока не знаю, так что извиняй
Помоги, пожалуйста У меня функция рандом даже при использовании 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 Я изначально как в видео ставил значения рандомные, потом ставил какие-то другие, экспериментировал Но там просто одно это яблоко остается и никуда не перемещается
я сделал все также проблем нет, все классно, но почему то змейка двигается только по оси Y почему? (и еще не на те кнопки, на которые надо) ПОМОГИ пожалуйста, буду благодарен❤
А можно и каналам-миллионникам запариваться над видео хотя бы в половину как ты? от некоторых не то что картиночек на монтаже вставить, а даже объяснения написанного не дождёшься, красава
@someStudentChannel да, шикарных каналов тоже много, но видя как запариваешься ты, становится грустно что кто-то может пукать невнятными видео с почти нулевыми затратами по времени и силам, а получать в сотни раз больше внимания :( Благо таких меньшинство
Вот эти постоянные "как нетрудно понять" - это не объяснение. Массив чаров для игрового поля - это ещё понятно, всё что после - нет. Логику выбора и определения переменных и констант нужно подробно описывать, если вы делаете уроки для начинающих. Иначе это профанация.
Уроки для начинающих да, а практика рассчитана на то что с уроками человек уже хорошо освоился. Аудитория просто разная и выпускать только для новичков не совсем правильно, как мне кажется
const int MAX_SNAKE = (WEITH - 3) * (HEiGHT - 2); - НЕ ПОНЯЛ , ПОЧЕМУ -3 И -2, ОТКУДА ЭТИ ПАРАМЕТРЫ Максимальная длина змейки, 2 символа '#'' '#' по бокам вычесть и два (1 вверх и 1 - низ) символ считаем ? Обьясните чтоб понятно было новичку!
Если меня не возьмут на работу после змейки, то видос не эффективен
все работает. Устроился на пост мидла у нас в Москве. Теперь планирую взять яхту.
Жестко возьмёшь яхту или нежно?@@kliment5116
Тоже устроился сеньёром в корпорацию зла. Получаю золотом. Планирую купить землю@@kliment5116
А какую практически полезную программу ты можешь написать сам?
@@СтарыйВаленок-к4лЗмейка
Обычно вообще не пишу комменты, но тут случайно наткнулся на ролик, и на самом деле не поверил, что у канала всего 110 подписчиков, прекрасный голос и хорошее качество звука, как раз то чего не хватает начинающим каналам. Классная подача материала, старайся дальше будем ждать 110, но еще с тремя нулями)))
Спасибо :)
Да, пока 110 с нулём нулей
Уже 1 510. Посоветовал знакомым, а те своим,.Будет больше@@someStudentChannel
Ваше существование вселяет в меня надежду
Офигеть лайк и подписка! Жду уроки по С++)
Стиль превьюшек забавный. После них очень удивил женский голос. Рад найти ещё одного C++ Enjoyer-а
супер приятно слушать, объяснения быстрые и понятные, спасибо за урок!
Спасибо за обратную связь 😊
Рекомендую, для удобства чтения и уменьшения отступов, пользоваться early return. То есть "сначала проверять невыполненные условия и прерывать или пропускать", вместо "исполненять, только есть условия выполняются".
Отличная подача! Успехов вам! :)
Да-да, тоже сначала хотелось так делать, но мы ещё не проходили эти словечки циклов, поэтому потом как улучшение кода будет. А может кто-то прочитает ваш комментарий и сам добавит.
Спасибо большое! ❤️
Респект даме. Написала свой код(с хорошими пояснениями) , хоть и с косячками, но свой(открыто показала как взяла пару чужих функций - респект). Про недочёты чел уже в коментах по фактам написал, так что я не буду. Желаю удачи и развития, ты классная(по крайней мере такого мое первое впечатление)
Не знаю зачем мне это, но я посмотрел и мне понравилось! )
Комменты тоже все в тему
Похоже адекватный народ подписывается
4:47
Лучше через else if или switch
Если через if- это разные условия и проверка будет заходить в каждое, а не в одно
наверное уже писали, но имхо - записать направления было бы элегантней в enum. Они все равно хранятся как числа далее
1:24 почему именно такая формула нельзя просто найти площадь и отнять 1 чтобы когда змейка достигла свего размера игра закончилась
-1 потому что не будет места чтобы заспавнилось яблоко
Привет, нужна помощь, повторял код как в видео, но когда запускаю консоль змейка сразу появляется в верхней границе карты , соответственно игра заканчивается.Как это можно исправить?
Надо кода бы
@@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
@@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
Добрый вечер. 4:40 почему просто switch нельзя использовать? получается как в питоне тогда, if заместо switch
Я попытлся через свитч сделать, но у меня змейка вообще двигаться перестала :/
Мб это у меня руки не из того места, но через if всё заработало
Что делать если змейка спокойно движется по координате х (тоесть прямо вправо или прямо влево),но придвижении координате у он косится? (Допустим змейка идет вверх но она идет в левый верхний угол)
Таже проблема
короче добавь +1 к твоему полю в ширину ,ты недосчитал
первый урок и сразу практика, круто
Бонус может появиться и в змейке. Насчет использования двух массивов для змейки, не знаю, такое. Каждая итерация это перебор ее кординат для смещения, да и "железный" алгоритм для генерации бонуса с учетом занятых координат будет весьма трудоемким. Типичная инженерная задача, либо память, либо же скорость) Сам использовал связанный список, для того, чтобы каждую итерацию хвост перемещать в голове. Пробывал и с матрицей, но там свои приколы. Вообщем, спасибо за видео, учу ++
Здравствуй! чтобы исправить проблему с пленкой можно использовать system("cls"); после вывода краты.
Ух красиво😊
надеюсь ответите, у меня такая проблема, я когда запускаю стенка смещена а сама змейка не посередине а в самих решетках(которые являются полем) два раза переписывал код с нуля не изменилось помогите пожалуйста
Понятно, что видео для новичков, но возможно стоило бы улучшить качество кода, без потери понятности естественно.
Что я имею в виду:
1) Стараться не злоупотреблять глобальными переменными.
Лучше оставить глобальные константы. Хотя иногда они вполне могут быть полезны и наглядны. Но вот snake_len, food_x, food_y. Для простоты глобальными стоит оставить только состояние поля, или некоторые данные змейки, и то если вам просто не хочется использовать ссылки или указатели на данном этапе.
2) Разделить функционал стоит хотя бы на пару функций.
Это поможет понятно показать какой код ответственен за определённые действия.
По сути игровой цикл состоит из этих задач:
- Получение действия игрока.
- Проверка отсутствия препятствий или конец игры.
- Проверка на еду и поглощение еды (+ генерация нового кусочка)
- Передвижение.
- Отрисовка
- Ожидание
Если использовать разделение на функции для хотя бы некоторых этих пунктов, то можно сделать код понятнее и проще.
Как минимум можно упростить код ожидания следующего кадра, если вынесете его в отдельную функцию.
Ну и функция отрисовки прям напрашивается, с учётом необходимости переставлять курсор.
3) Использовать более простые решения.
- Статический многомерного массив не требует формул для расчёта координат.
- Нет никакого толка размещать в массив границы поля, так как их можно добавлять во время отрисовки.
Можно ведь просто оставить игровое поле игровым полем.
- Хорошо бы избежать кучи лишних операций с массивом, да ещё и сократить код работы с туловищем змейки. Можно использовать очень примитивную реализацию очереди, так как мы знаем максимальную длину змейки.
Есть ещё небольшая ошибка в вашем коде:
Еда может появиться на теле змейки.
В остальном у вас хороший голос и неплохая подача. Я думаю вас ждёт успех!
P.S. На гитхаб старайтесь выкладывать ваш код. А ссылку на проект в описание. Так каждый сможет полностью осмотреть код из урока.
Да, замечания все по факту, спасибо. В следующих практиках будем улучшать код.
Баг с едой, вообще, остался, чтобы не нагружать и так уже загруженный мозг зрителя.
Сеньор учит джуна)) сразу чувствуется опыт и прохождение через такие же ошибки)
Да, критика по существу тут.
П.С. я не программист, только учусь для себя, если что.
Возможно подскажете уак пофиксить баг з едой, реализовал идею на с# делаю проверку не попападает ли координата еды на змейку но иногда всеравно попадает, возможно изза того что в одном кадре там нет змейки а в другом она там появляеться и прячеться под саму змейку
@@hegatib4ik843 Давайте ссылку на Gist или репозиторий с кодом. Посмотрю, что там может быть не так
Здравствуйте, у меня такая проблема, змейка двигается только вверх и вниз, не знаете как это исправить?
Код суды
Всем привет. Подскажите как можно изменить символ головы змеи, чтобы он выделялся
массив for(...) map[...] = snake; Начинать не с 0, а с i=1;
а после цикла написать map[snake_y[0]...] = snake_head; где snake_head новая char переменная
простите а где исходный код?
переписал код, но змейка сразу проигрывается
Мне нужен кодд
напиши клиент сервер чат пожалуйста.
Возьму на заметку, но не в ближайшее время
+1
Молодчинка! Есть в планах создавать материал по алгоритмам и структурам данных?)
Конечно
GPT почти один в один такую же змейку пишет на запрос: напиши простую реализацию игры змейка на c++
Можешь сюда скинуть его код?
ролик неплохой, подача хорошая. но не хватает подробных объяснений. я думаю, что здесь всё поймут только те, кто сам уже в состоянии написать "змейку". по поводу кода уже подробно всё расписали, для начинающих, как я считаю, лучше писать, так сказать, примитивно, но правильно.
а так, в целом, качество видео для маленького канала хорошее.
классный ролик только не предусмотрено пару мелочей ,но я так понимаю ты их поправишь в следующих роликах .А так добра и позитива
Привет! А когда будет продолжение?
Скоро)
У меня он улетает просто
змейка не успиваю ничего сделать как это исправить
хым хым надо код смотреть
У меня проблема код тот же самый но змейка очень быстро передвигается
Можно Sleep поставить между кадрами
Можно ссылочку на файл пж
Очень хорошая подача, да и слушать тоже очень интересно, ждем что-нибудь еще интересненькое (желательно, чуть более ооп`шное, хах), удачи вам, очень интересно!
Здравствуй ! Почему в момент когда змейка подбирает еду то игра завершается с результатом 2
Надо код смотреть
А как базу генератора случайных чисел сделать случайной?
Про seed рандома почитайте
Всем привет, возможно глупый вопрос но зачем большинство переворачивает систему координат,в не которых моментах не совсем удобно? 🤗🤔
Например?
Если кратко, то потому что библиотеки могут быть написаны под другую систему. А вообще это идёт от всяких правил правой руки и всего такого, к чему уже все привыкли и написали книжек
хочу с тобой связаться, ответь, пожалуйста
Так так, что такое
@@someStudentChannel проверь почту)
Идея топ, а аот реализация так себе. Почему бы не написать змейку с использованием графических библиотек? Консоль это конечно хорошо, но когда будете выбиратся с песочницы? А ещё у Вас яблоко спавнится в змейке. Удачи в продолжении канала, продолжайте делать то что делаете и всёу вас получится😊
Уважаемый автор, а почему у меня при запуске программы, она просто мгновенно завершается? То есть я не могу управлять змейкой... Она просто появляется в верхней границы карты и всё.
Дайте на код взглянуть
@@someStudentChannel делал прям как у вас в видео. То есть за вами повторял
@@Alviona_WoW все так говорят)
прям сюда копипастом можно
@@someStudentChannel отправил уже копипастом) сюда, в переписку эту, с вами)
Здравствуй
А можеш снять ролик на тему C# wpf Dissolve а то на ютубе вообще нету нечего связано с данним параметром.
Привет, знать бы ещё что это. C# может будет, когда юнити начнём затрагивать, а насчёт wpf и вообще простых оконных програм пока не знаю, так что извиняй
по поводу WPF вот есть плейлист:ua-cam.com/play/PL0lO_mIqDDFVI0xwaYbm7h9ewYu5hftfA.html&si=3wryZVgbQJKWk6QG
@@lpwlx Спасибо. Данний материал я весь изучил. А вот по данной функции инфи не могу найти.
наверно поздновато , но можешь скинуть ссылку на гитхаб с кодом , хочу сверить(
не могу найти ошибку
На бусти выкладывался
Я подписался, а если игру еще и на сессии оценят то и на бусти зайду
Хахахв
вообще круто, еще б с Qt намутить и можно хвастаться преподу/ друзьям на сколько ты крута
Помоги, пожалуйста
У меня функция рандом даже при использовании 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
У тебя food_x и food_y не заданы начальные значения. Приравняй к 5 их там хотя-бы. У меня заработало
@@someStudentChannel Я изначально как в видео ставил значения рандомные, потом ставил какие-то другие, экспериментировал
Но там просто одно это яблоко остается и никуда не перемещается
@@ItachiUchiha-wd5kk все равно не работает?
@@someStudentChannel Неа
Проверял
@@ItachiUchiha-wd5kk а первый фрукт то спавнится? Или там прям все объекты в одной точке
О это то что я искал
я сделал все также проблем нет, все классно, но почему то змейка двигается только по оси Y почему? (и еще не на те кнопки, на которые надо)
ПОМОГИ пожалуйста, буду благодарен❤
Нада кода
Можно ещё по поводу char map задать вопрос где стеночки?
У меня правильно получилось или как?
char map[]=
"#################
"
"# #
"
"# #
"
"# #
"
"# #
"
"# #
"
"# #
"
"# #
"
"# #
"
"#################
";
Нет ли ошибки? Высота 10 включая верхнюю и нижние планки?
Да, у меня учитывались они
жду не дождусь когда будуть гайды по OpenGL
можно же было с UP LEFT RIGHT DOWN использовать enum, а не просто переменные
Да, мне почему-то захотелось на более низком уровне показать какая тут логика. Енам по сути предоставляет удобную обёртку для той же цели)
@@someStudentChannel да, он буквально то же самое, просто удобнее, на мой взгляд. Если функционал языка позволят, значит нужно его использовать
Уважаемый автор, так и что по итогу не так в коде у меня? :-) Я его скинул) Не смотрели ещё?
Да, я завтра посмотрю, будни загруженные сейчас :(
@@someStudentChannel Спасибо, жду)
@@someStudentChannel Уважаемый автор, здравствуйте. Вы так и не поглядели мой код(
@@Alviona_WoW посмотрели ?
@@Azemrov нет(
Вот бы змейка была написана в ООП стили
А где исходные коды?
Я с вами!
хайп круто
Глобальные переменный и нет использования ООП
А можно и каналам-миллионникам запариваться над видео хотя бы в половину как ты? от некоторых не то что картиночек на монтаже вставить, а даже объяснения написанного не дождёшься, красава
Ухх, спасибо.
Кстати, знаю что зарубежные миллионники (Code Bullet например) очень запариваются над монтажом
@someStudentChannel да, шикарных каналов тоже много, но видя как запариваешься ты, становится грустно что кто-то может пукать невнятными видео с почти нулевыми затратами по времени и силам, а получать в сотни раз больше внимания :(
Благо таких меньшинство
Ура победа!!!
На С++ в С-стайле так сказать
@@someStudentChannel зато +1 игра
желательно было бы если написать еще комментарий , а то так интиутивно не поймешь
ti paren ili dewochka???????
всё круто ,просто супер,но ни чё не понятно
Давай, что не понял??
:) точна студень: в ручную массив заполнил и посчитал колличество строк столбцов😂
Да ладно. Зато понятно как, что, откуда берётся
Вот эти постоянные "как нетрудно понять" - это не объяснение. Массив чаров для игрового поля - это ещё понятно, всё что после - нет. Логику выбора и определения переменных и констант нужно подробно описывать, если вы делаете уроки для начинающих. Иначе это профанация.
Уроки для начинающих да, а практика рассчитана на то что с уроками человек уже хорошо освоился. Аудитория просто разная и выпускать только для новичков не совсем правильно, как мне кажется
Странно, что автор ведёт канал для школьников, даже не старшеклассников, но уже кидает ссылку на бусти.
Тут только смотрять м. пола?
А че без всяких ООП, раскидывания по файлам ?
Так же не красиво, не чётен ко и не вкусно 😢
+
shluha
Daun
Иди на кухню
В отличие от тебя она даже умеет кодить на микроволновке
Недавно тоже змейку писал на raylib
Библиотеки для игр это мы любим
const int MAX_SNAKE = (WEITH - 3) * (HEiGHT - 2); - НЕ ПОНЯЛ , ПОЧЕМУ -3 И -2, ОТКУДА ЭТИ ПАРАМЕТРЫ Максимальная длина змейки, 2 символа '#'' '#' по бокам вычесть и два (1 вверх и 1 - низ) символ
считаем ? Обьясните чтоб понятно было новичку!
Да,
в счёт)
@@someStudentChannel спасибо, очень приятно, когда автор видео даёт feedback
std::cout
main.cpp:46:17: error: ‘MAX_LEN_SNAKE’ was not declared in this scope
46 | int snake_x[MAX_LEN_SNAKE] = { 0 };
| ^~~~~~~~~~~~~
як вирішити?
Ты не объявил MAX_LEN_SNAKE или ошибся в его написании при объявлении, ошибка в невозможности найти константу в области видимости
круто. Спасибо за видос!
Помогите пожалуйста, кто-нибудь: у меня проблема. При вертикальном перемещении змейка двигается по диагонали
Вот код:
#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
С шириной общитался.
Напиши const int WIDTH = 22
@@someStudentChannel Спасибо ОГРОМНОЕ. Я 4 раза считал. Так и не смог нормально посчитать😂
@@someStudentChannel Я столкнулся с этой же ошибкой и регулировка Width помогла, так как я не принимал во внимание
Большое спасибо за видео и за вашу помощь