|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
26.03.2023, 16:21 | #1 |
Пользователь
Регистрация: 21.11.2022
Сообщений: 84
|
Ребят срочно помогите решить пару проблем в коде змейки
Ребят срочно помогите решить пару проблем в коде
не могу понять как добавить таблицу очков и как исправить чтоб смейка головой не двигала в своё тело помогите исправить код: вот код Код:
|
26.03.2023, 16:45 | #2 |
Пользователь
Регистрация: 21.11.2022
Сообщений: 84
|
вот изменённый код я добавил счётчик но он не считает кол-во съеденных яблок
где я ошибся подскажите как исправить #include <SFML/Graphics.hpp> #include <time.h> using namespace sf; int N = 30, M = 20; //N - длина, M - ширина int ts = 25; //Размер каждого плитки int dir = 2, num = 4; //переменная dir отвечает за поворот, переменная num отвечает за длину змейки /*Как поварачивается змейка при помощи переменной dir dir = 1 -> лево dir = 2 -> право dir = 3 -> вверх dir = 0 -> вниз*/ bool game = true; //переменная game отвечает за режима игры //Структура змейки отвечает за её длину struct Snake { int x, y; //В структуре указаны переменные x, y //они отвечают за координаты плитки } s[600]; //s[] - это каждая плитка змейки //Структура яблоки struct Fruct { int x, y; //Задаём координаты яблоки } f; //Функция Tick отвечает за саму игру void Tick() { //Здесь находятся первичные координаты //Просто рисуется сама змейка for (int i = num; i > 0; i--) { s[i].x = s[i - 1].x; s[i].y = s[i - 1].y; } if (dir == 0) s[0].y += 1; //вниз if (dir == 1) s[0].x -= 1; //влево if (dir == 2) s[0].x += 1; //право if (dir == 3) s[0].y -= 1; //вверх //Здесь отвечает, если змейка уходит через стенку экрана //то она возращается на через другую if (s[0].x > N) s[0].x = 0; if (s[0].x < 0) s[0].x = N; if (s[0].y > M) s[0].y = 0; if (s[0].y < 0) s[0].y = M; //Если змейка поедает яблоко static int score = 0; // статическая переменная для сохранения счета между вызовами функции if ((s[0].x == f.x) && (s[0].y == f.y)) { num++; //Змейка растёт score++; // Увеличиваем значение счетчика f.x = rand() % N; //Меняем рандомные координаты яблоки f.y = rand() % M; } //Здесь проигрышь for (int i = 1; i < num; i++) //цикл for для всех плиток змейки //Если змейка сталкивается со своим телом if ((s[0].x == s[i].x) && (s[0].y == s[i].y)) game = false; //меняем значение переменной game на false } int main() { srand(time(0)); RenderWindow window(VideoMode(ts * N, ts * M), "Snake!"); static int score = 0; //Загрузка шрифта для текста Font font; font.loadFromFile("D:/Snake/Paint/sans.ttf"); //Текст для вывода счета Text scoreText; scoreText.setFont(font); scoreText.setCharacterSize(30); scoreText.setFillColor(Color::Red); scoreText.setString("Score: " + std::to_string(score)); scoreText.setPosition(10, 10); //Как ставляется картинка /* Texture t; <- Задаётся переменная для текстуры t.loadFromFile("Расположение картинки"); <- в переменную текстуры загружаем картинку Sprite tiles(t); <- Задаём следующию переменную спрайта и загружаем текстуру */ //Ставим картнинку titels Texture t; t.loadFromFile("D:/Snake/Paint/tiles.png"); Sprite tiles(t); //Ставим картинку змейки Texture sn; sn.loadFromFile("D:/Snake/Paint/snake.png"); Sprite snake(sn); //Ставим картинку яблоко Texture ap; ap.loadFromFile("D:/Snake/Paint/apple.png"); Sprite apple(ap); //Ставим надпись gameover Texture go; go.loadFromFile("D:/Snake/Paint/gameover.png"); Sprite gameover(go); gameover.setPosition(0, 175); f.x = 10; f.y = 10; //первичные координаты яблоки Clock clock; //переменная clock нужна для ирового времени float timer = 0, delay = 0.1; //timer и delay отвечают за скорость змейки //timer отвечает, через какое время змейка двигается //delay - за задержку while (window.isOpen()) { //Игровое время float time = clock.getElapsedTime().asSeconds(); clock.restart(); timer += time; Event event; while (window.pollEvent(event)) { if (event.type == Event::Closed) window.close(); } //Управление змейкой через клавиатуру if (Keyboard::isKeyPressed(Keyboard::L eft)) //Если стрелка влево нажата dir = 1; if (Keyboard::isKeyPressed(Keyboard::R ight)) //Если стрелка вправо нажата dir = 2; if (Keyboard::isKeyPressed(Keyboard::U p)) //Если стрелка вверх нажата dir = 3; if (Keyboard::isKeyPressed(Keyboard::D own)) //Если стрелка вниз нажата dir = 0; //Здесь отвечает за работу игры if (timer > delay && game) { timer = 0; //Возвращаем время Tick(); //Вызываем работу игры } window.clear(); //Для прорисовки всего графичесского окна //Пишем цикл for for (int i = 0; i < N; i++) for (int j = 0; j < M; j++) { tiles.setPosition(i * ts, j * ts); //Позиция window.draw(tiles); //Рисуем } //Рисуем змейку for (int i = 0; i < num; i++) { if (i != 0) //Рисуем тело змейки snake.setTextureRect(IntRect(0, 0, ts, ts)); else //Рисуем голову змейки snake.setTextureRect(IntRect(dir * ts, ts, ts, ts)); // Во время проигрыша голова изменяется if (!game && i == 1) snake.setTextureRect(IntRect(dir * ts, ts * 2, ts, ts)); snake.setPosition(s[i].x * ts, s[i].y * ts); //Задаём позицию //для плиток змейки window.draw(snake); } apple.setPosition(f.x * ts, f.y * ts); //Позиция яблоки window.draw(apple); //Рисуем яблоко //Если мы проиграли, то будеть выдовать надпись gameover if (!game) window.draw(gameover); // Обновляем значение счетчика на экране scoreText.setString("Score: " + std::to_string(score)); window.draw(scoreText); window.display(); } return 0; } |
26.03.2023, 17:55 | #3 |
Участник клуба
Регистрация: 17.04.2022
Сообщений: 1,833
|
Код:
Код:
Код:
|
26.03.2023, 18:09 | #4 |
Пользователь
Регистрация: 21.11.2022
Сообщений: 84
|
я имею ввиду про счётчик как в игре типа сколько сьел и тд
но он не работает стоит на нуле |
26.03.2023, 20:21 | #5 |
Пользователь
Регистрация: 21.11.2022
Сообщений: 84
|
ещё подправил код счётчик не работает не считает кол - во сьеденных яблок хвост растёт а вот в счётчике score 0
Код:
|
26.03.2023, 21:27 | #6 | ||
Участник клуба
Регистрация: 17.04.2022
Сообщений: 1,833
|
Код:
Цитата:
Цитата:
|
||
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Ребят помогите срочно | Kuzhimov | Помощь студентам | 1 | 21.02.2019 09:29 |
Ребят,нужно срочно решить задачки кому не сложно | иванкпгкпр | Помощь студентам | 1 | 23.10.2016 15:52 |
Ребят! Нужно срочно решить задачу с массивами!!! | carev96 | Помощь студентам | 0 | 12.12.2014 21:25 |
Парни помогите!!срочно нужно решить в течении пару часов..завтра зачет!Парни помогите! | razorl1ner | Паскаль, Turbo Pascal, PascalABC.NET | 0 | 01.06.2009 00:02 |
Помогите решить пару задач! СРОЧНО!!! | andrew_brest | Помощь студентам | 3 | 13.04.2009 22:16 |