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

Баг в функции еды, игра змейка (Glut + C++)

03.03.2015, 23:20. Показов 1162. Ответов 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
#include <iostream>
#include <gl\glut.h>
#include <gl\glaux.h>
#include <time.h>
 
float cx=0, cy=0,bx = 2,by = 2;
 
int counter[4] = {1,1,1,1};
int b = 0;
    const double t = glutGet(GLUT_ELAPSED_TIME) / 1000.0;
    const double a = t*90.0;
void key(unsigned char key, int x, int y)
{
    switch (key)
    {
            case 'd':
                cx+=0.5f;
                void display();
 
                std::cout << "Vi nazhali D " << counter[0] << " raz(a)." << std::endl;
                counter[0]++;
                break;
            case 'a':
                cx-=0.5f;
                void display();
                std::cout << "Vi nazhali A " << counter[1] << " raz(a)." << std::endl;
                counter[1]++;
                break;
            case 'w':
                cy+=0.5f;
                void display();
                std::cout << "Vi nazhali W " << counter[2] << " raz(a)." << std::endl;
                counter[2]++;
                break;
            case 's':
                cy-=0.5f;
                void display();
                std::cout << "Vi nazhali S " << counter[3] << " raz(a)." << std::endl;
                counter[3]++;
                break;
    }
    }
void coolimg(int width, int height) {
    const float ar = (float) width / (float) height;
 
    glViewport(0, 0, width , height);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glFrustum(-ar, ar, -1.0, 1.0, 2.0, 100.0);
 
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity() ;
}
void display() {
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glColor3d(1,0,0); // цвет 3d
    glPushMatrix();
        glTranslated(cx + 0.92,cy + 0.92,-30);
        glRotated(60,1,0,0);
        glRotated(a,0,0,1);
        glutSolidSphere(1,5000,5000);
    glPopMatrix();
        if (cy == by, cx == bx) {
                b = 0;
        }
 
        if (b == 0) {
                b = 1;
                glColor3d(0,1,0);
                glPushMatrix();
                srand(time(0));
                glTranslated(bx + rand()%15,by + rand()%15, -30);
                glutSolidSphere(1,5000,5000);
                glPopMatrix();
                // создать еду
                }
 
    glutSwapBuffers();
    glutPostRedisplay(); // перерисовка окна
}
 
const GLfloat light_ambient[]  = { 0.0f, 0.0f, 0.0f, 1.0f };
const GLfloat light_diffuse[]  = { 1.0f, 1.0f, 1.0f, 1.0f };
const GLfloat light_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
const GLfloat light_position[] = { 2.0f, 5.0f, 5.0f, 0.0f };
 
const GLfloat mat_ambient[]    = { 0.7f, 0.7f, 0.7f, 1.0f };
const GLfloat mat_diffuse[]    = { 0.8f, 0.8f, 0.8f, 1.0f };
const GLfloat mat_specular[]   = { 1.0f, 1.0f, 1.0f, 1.0f };
const GLfloat high_shininess[] = { 100.0f };
 
 
int main(int argc, char **argv) {
 
 
    // инициализация
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutInitWindowPosition(100,100);
    glutInitWindowSize(1000,600);
    glutCreateWindow("Game");
    // Функции
    glutReshapeFunc(coolimg);
    glutDisplayFunc(display);
    glutKeyboardFunc(key);
    // 3d
 
    glClearColor(1,1,1,1);
    glEnable(GL_CULL_FACE);
    glCullFace(GL_BACK);
 
    glEnable(GL_DEPTH_TEST);
    glDepthFunc(GL_LESS);
 
    glEnable(GL_LIGHT0);
    glEnable(GL_NORMALIZE);
    glEnable(GL_COLOR_MATERIAL);
    glEnable(GL_LIGHTING);
 
    glLightfv(GL_LIGHT0, GL_AMBIENT,  light_ambient);
    glLightfv(GL_LIGHT0, GL_DIFFUSE,  light_diffuse);
    glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);
    glLightfv(GL_LIGHT0, GL_POSITION, light_position);
 
    glMaterialfv(GL_FRONT, GL_AMBIENT,   mat_ambient);
    glMaterialfv(GL_FRONT, GL_DIFFUSE,   mat_diffuse);
    glMaterialfv(GL_FRONT, GL_SPECULAR,  mat_specular);
    glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess);
    // Основной цикл GLUT
    glutMainLoop();
 
    return 1;
}
Добавлено через 29 минут
Как будто не кто не знает

Добавлено через 13 секунд
Помогите блин
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.03.2015, 23:20
Ответы с готовыми решениями:

Змейка C++ glut
Здравствуйте, короче решил делать игры на C++, в общем, сам C++ я уже практичесски выучил, а именно иммперативный, процедурный стиль...

Случайное расположение еды в игре "Змейка"
вот в форме сделал змейку, но есть проблемка = как задать еде(Foodis) рандом чтобы при наезде змейки(Player) , еда рандомно меняла свое...

Игра "Змейка": чтобы змейка не съедала сама себя
Здравствуйте! Пишу змейку на VB 2010. Не получается составить условие того, что бы змейка не ползла в направлении обратному...

3
Обитатель форума
201 / 184 / 54
Регистрация: 28.10.2012
Сообщений: 543
03.03.2015, 23:31
Во-первых, это не тот раздел.
Во-вторых, отвратительная структура кода.

Сделайте класс змеи, класс "частей" змеи. Каждая часть имеет свой номер (guid), опишите метод движения например, такой:
C++
1
2
3
4
5
6
7
8
enum ENUM_DEST
{
    MOVE_RIGHT,
    MOVE_LEFT,
//....
};
 
Snake::MoveTo(ENUM_DEST destination, double range)
В нем проверяйте координатно. Если в координате (Snake::TempPosition + range) есть часть змеи, проверьте, не является ли она отдельной (не в составе змеи). Если да - присоедините (например, Snake::Add(...)). Если нет (guid части есть в списке частей вашей змейки), значит вы наткнулись сами на себя и игре конец.

У вас змейка 3D? зачем перспективная проекция? И свет можно сделать в последнюю очередь. Тем более, что у вас нет нормалей
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
03.03.2015, 23:34
Переменные очень плохо названы, тяжело разобраться в коде. Советую проверку построить по принципу: если после очередного сдвига змейка стала внутри себя содержать точку с координатами еды, то добавить + 1 очко, хвост змейки не сдвигать, а еду перерисовать в новом месте.
0
0 / 0 / 0
Регистрация: 23.11.2014
Сообщений: 18
03.03.2015, 23:42  [ТС]
MrGluck, По такому же принципу и работает,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
   if (cy == by, cx == bx) {
                b = 0;
        }
 
        if (b == 0) {
                b = 1;
                glColor3d(0,1,0);
                glPushMatrix();
                srand(time(0));
                glTranslated(bx + rand()%15,by + rand()%15, -30);
                glutSolidSphere(1,5000,5000);
                glPopMatrix();
                // создать еду
                }
bx, by - еда(корд.)
cx, cy - змея(корд.)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.03.2015, 23:42
Помогаю со студенческими работами здесь

Змейка в консоли(баг при повороте)
Доброго времени суток, не могли бы подсказать как исправить один баг в моей игре в консоли. Когда я нажимаю например стрелочку...

игра змейка
Здравствуйте! Знакомый попросил помощи, объяснить подробно как работает программа и как сделать разные уровни в игре. Но я не особо ее...

Игра змейка
Код игры змейки пришлите пожалуйста. Или другой какой-нибудь простой.

Игра змейка
Кто делал подобную игру отзовитесь, есть пару вопросов! заранее спасибо!

Игра змейка
Помогите пожалуйста, нужно написать игру &quot;Змейка&quot;, как в тетрисе.


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Киев стоит - украинская песня
zorxor 28.01.2026
wfWdiRqdTxc О Господи, Вечный, Ты . . . Я помоги, Бесконечный. . . Я прошу Ты. . . Я погибаю, спаси. . . Я прошу Тебя Вечный. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru