Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 08.07.2022
Сообщений: 85

Счётчик съеденных яблок

26.03.2023, 18:05. Показов 759. Ответов 4
Метки с++ (Все метки)

Студворк — интернет-сервис помощи студентам
Ребят срочно скажите как подправить код хотел сделать счётчик съеденных яблок в змейке игре счётчик есть но он не работает не считает кол -во как исправить
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
#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;
 
  
 
 
    //Если змейка поедает яблоко
    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::Left)) //Если стрелка влево нажата
            dir = 1;
        if (Keyboard::isKeyPressed(Keyboard::Right)) //Если стрелка вправо нажата
            dir = 2;
        if (Keyboard::isKeyPressed(Keyboard::Up)) //Если стрелка вверх нажата
            dir = 3;
        if (Keyboard::isKeyPressed(Keyboard::Down))  //Если стрелка вниз нажата
            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;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.03.2023, 18:05
Ответы с готовыми решениями:

Массивы: найти общее число съеденных пирожных и прогнозируемое число съеденных пирожных за 10 лет
Условие: Начать свои тренировки в статистике Алексей решил с членов собственной семьи. В семье Алексея N человек, в этом месяце каждый...

Хочу сделать счетчик съеденных яблок
Пытаюсь сделать для игры змейка на библиотеки pygame счетчик съеденных яблок. Пробовал через библиотеку tkinter но не получилось сделать...

Получить максимальное число съеденных яблок: непонимание условия задачи.
Ребят, помогите решить задачку, не могу понять условие задачи, от того и не могу решить. решение должно быть в функциональном виде. There...

4
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
26.03.2023, 19:10
score вынеси наверх. Там же уже есть глобальные.
0
0 / 0 / 0
Регистрация: 08.07.2022
Сообщений: 85
26.03.2023, 20:28  [ТС]
не помогает

Добавлено через 46 минут
вот исправил но всё равно счётчик не считает как было 0 так и остался помогите срочно надо уже 3 часа сижу не могу исправить
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
#include <SFML/Graphics.hpp>
#include <time.h>
 
using namespace sf;
sf::Text scoreText;
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;
 
 
int score = 0;
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;
 
    //Если змейка поедает яблоко
    if ((s[0].x == f.x) && (s[0].y == f.y)) {
        num++; //Змейка растёт
        score++; // Увеличиваем значение счетчика
 
        f.x = rand() % N; //Меняем рандомные координаты яблоки
        f.y = rand() % M;
        scoreText.setString("Score: " + std::to_string(score));
    }
    //Здесь проигрышь
    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!");
    //Загрузка шрифта для текста
    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::Left)) //Если стрелка влево нажата
            dir = 1;
        if (Keyboard::isKeyPressed(Keyboard::Right)) //Если стрелка вправо нажата
            dir = 2;
        if (Keyboard::isKeyPressed(Keyboard::Up)) //Если стрелка вверх нажата
            dir = 3;
        if (Keyboard::isKeyPressed(Keyboard::Down))  //Если стрелка вниз нажата
            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);
        // Обновляем значение счетчика на экране
   
        window.draw(scoreText);
 
        window.display();
    }
 
    return 0;
}
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
26.03.2023, 21:26
Значит, проблема в чём-то ещё.
0
0 / 0 / 0
Регистрация: 08.07.2022
Сообщений: 85
26.03.2023, 21:27  [ТС]
Решил тема закрыта.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.03.2023, 21:27
Помогаю со студенческими работами здесь

Сколькими способами можно разделить 17 яблок на 6 пакетов по 2 яблока и 1 кучу из 5 яблок?
Сколькими способами можно разделить 17 яблок на 6 пакетов по 2 яблока и 1 кучу из 5 яблок?

Программа вычисления стоимости количества (по весу) яблок. С вводом сорта яблок
Написать программу вычисления стоимости некоторого количества (по весу) яблок. По выбору пользователя вводится сорт яблок и на основании...

Дано число c – стоимость 1 кг яблок Выведите стоимости 100 г, 200 г, 300 г, …, 3 кг яблок
1)Дано число c – стоимость 1 кг яблок. Выведите стоимости 100 г, 200 г, 300 г, …, 3 кг яблок.

Дележ яблок так, чтобы количество яблок, доставшихся любым двум школьникам, отличалось бы не более, чем на 1
n школьников делят k яблок “поровну”, то есть так, чтобы количество яблок, доставшихся любым двум школьникам, отличалось бы не более, чем...

n школьников делят k яблок поровну, неделящийся остаток остаётся в корзинке. Сколько яблок достанется каждому школьнику?
n школьников делят k яблок поровну, неделящийся остаток остаётся в корзинке. Сколько яблок достанется каждому школьнику? ...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru