Форум программистов, компьютерный форум, киберфорум
OpenGL
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 24.05.2016
Сообщений: 1
1

Изменить в функции время задержки

24.05.2016, 16:34. Просмотров 775. Ответов 2
Метки нет (Все метки)

Не получается изменить время задержки в функции void timer(int level), если в glutTimerFunc(level, timer, 0);
подставить вместо level число 100 , то все работает как нужно. А хотелось бы сделать уровни у игры. Мб кто сталкивался? И знает, что не так?


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
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
#include <time.h>
#include <stdlib.h>
#include <iostream>
#include  <GL/glut.h>
#include  <freeglut.h>
 
 
int handle;
int i = 0;
int N = 25, M = 25;
int Scale = 25;
 
int w = Scale*N;
int h = Scale*M;
 
int dir;            //  направление головного элемента
int num = 3;        //  размер змейки
int zzz = 5;
int level = 100;
 
struct              // змейка
{
    int x;
    int y;
}  s[100];
 
typedef struct _fruct
{
    int x;
    int y;
} fruct;
 
fruct m;
 
typedef struct _bonus
{
    int x;
    int y;
} bonus;
 
fruct b;
 
 
void NewPosition()      // функция, которая меняет координаты яблока ( на другое случайное значение)
{
    m.x = rand() % N;
    m.y = rand() % M;
}
 
void NewPositionbonus()      // функция, которая меняет координаты яблока ( на другое случайное значение)
{
    b.x = rand() % N;
    b.y = rand() % M;
}
 
void DrawApple()
{
    glColor3f(0.0, 1.0, 0.0);
    glRectf(m.x*Scale, m.y*Scale, (m.x + 1)*Scale, (m.y + 1)*Scale);
}
 
void DrawBigApple()
{
    glColor3f(1.F, 0.0, 0.0);
    glRectf(b.x*Scale, b.y*Scale, (b.x + 1)*Scale, (b.y + 1)*Scale);
}
 
 
void DrawSnake()
{
    glColor3f(0.0, 0.0, 1.0);
    for (int i = 0; i < num; i++)
    {
        glRectf(s[i].x*Scale, s[i].y*Scale, (s[i].x + 0.9)*Scale, (s[i].y + 0.9)*Scale);
    }
}
 
int maxnum = 0;
int flag1 = 0;
void Snake()
{
    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 == m.x) && (s[0].y == m.y))   // если значение головного элемента и яблока совпадает, то
    {
        num++;
        NewPosition();
        if (num > maxnum)
            maxnum = num;
        if (num == zzz)
        {
            flag1 = 1; //змейка достигла максимальной длины
            glutLeaveMainLoop();
        }
    }
 
    if (s[0].x>N) dir = 1;  if (s[0].x<0) dir = 2;     // описание поведения змеи при упоре в стену
    if (s[0].y>M) dir = 3;  if (s[0].y<0) dir = 0;
 
    for (int i = 1; i < num; i++)              //  описание поведения змейки в случае наезда на свой хвост
        if (s[0].x == s[i].x && s[0].y == s[i].y)
        {
            num = 3;
        }
 
}
 
void DrawField()
{
    glColor3f(0.0, 0.7, 0.0);
    glBegin(GL_LINES);
    for (int i = 0; i<w; i += Scale)
    {
        glVertex2f(i, 0); glVertex2f(i, h);
    }
    for (int j = 0; j<h; j += Scale)
    {
        glVertex2f(0, j); glVertex2f(w, j);
    }
    glEnd();
}
 
void display()
{
    glClear(GL_COLOR_BUFFER_BIT);
    DrawField();
    DrawSnake();
    DrawApple();
    DrawBigApple();
    glFlush();
    glutSwapBuffers();
}
 
void KeyboardEvent(int key, int a, int b)
{
 
    switch (key)
    {
    case 101:   dir = 0; break;
    case 102:   dir = 2; break;
    case 100:  dir = 1; break;
    case 103:  dir = 3; break;
    }
}
int flag;
void KeyboardFunc(unsigned char key, int x, int y)
{
    if ((char)key == 27)
 
        glutLeaveMainLoop();
}
 
 
void timer(int level)
{
    display();
    Snake();
    glutTimerFunc(level, timer, 0);
}
 
using namespace std;
 
int main(int argc, char **argv)
{
    setlocale(LC_ALL, "Russian");
 
    int a = 1, lev = 0;
    
    while (a != 7)
    {
        switch (a)
        {
        case 1:
            cout << " Меню:" << endl;
            cout << "1. Вывод меню" << endl;
            cout << "2. Лучший результат" << endl;
            cout << "3. Изменение длины змейки, при которой достигается победа. " << endl;
            cout << "4. Изменение сложности игры (по умолчанию средний уровень)" << endl;
            cout << "5. Новая игра" << endl;
            cout << "6. Правила игры <<Змейка>>" << endl;
            cout << "7. Выход" << endl;
            break;
        case 2:
            cout << "Лучший результат: ";
            cout << maxnum << endl;
            break;
        case 3:
            cout << " Текущая длина змейки: " << zzz << endl;
            cout << " Установите желаемую длину змейки, при которой достигается победа. " << endl;
            cin >> zzz;
            break;
        case 4:
            cout << "Выберите один из уровней:" << endl;
            cout << "1. Легкий" << endl;
            cout << "2. Средний" << endl;
            cout << "3. Сложный" << endl;
            cout << "4. Для нереально крутых ребят" << endl;
            cin >> lev;
            if (lev == 1)
                level = 200;
            else
                if (lev == 2)
                    level = 100;
                else
                    if (lev == 3)
                        level = 70;
                    else
                        if (lev == 4)
                            level = 50;
                        else
                        {
                            cout << "Такого уровня не существует." << endl;
                            cout << "Повторите попытку снова." << endl;
                        }
            
            break;
        case 5:
            srand(time(NULL));
        
            NewPosition();
            s[i].x = 10;
            s[i].y = 10;
            num = 3;
 
            glutInit(&argc, argv);
            glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
            glutInitWindowSize(w, h);
            handle = glutCreateWindow("Snake");
            glClearColor(1.0, 1.0, 0.6, 1.0);  //цвет фона
            glMatrixMode(GL_PROJECTION);
            glLoadIdentity();
            gluOrtho2D(0, w, 0, h);
            glutSetOption(GLUT_ACTION_ON_WINDOW_CLOSE, GLUT_ACTION_GLUTMAINLOOP_RETURNS);
            glutKeyboardFunc(KeyboardFunc);
            glutTimerFunc(level, timer, 0);
            glutDisplayFunc(display);
            glutSpecialFunc(KeyboardEvent);
            glutMainLoop();
            break;
        case 6:
            cout << "Управлять змейкой, нужно с помощью кнопок, на которых нарисованы стрелки." << endl;
            cout << "В случаях выхождения за рамки поля или столкновение головы с туловищем змеи," << endl;
            cout << "змейка становится первоначального размера. Поедайте яблоки и растите. Удачи!" << endl;
            cout << "Для выхода из игры нажмите клавишу <esp>" << endl;
            break;
        default:
            cout << "Ошибка ввода.Введите снова" << endl;
            break;
        }
        if (flag1 == 1)
        {
            cout << "Вы победили." << endl;
            flag1 = 0;
        }
        cout << " Введите пункт главного меню для исполнения" << endl;
        cin >> a;
    }
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.05.2016, 16:34
Ответы с готовыми решениями:

Разное время задержки
Здравствуйте. Такая проблема, есть функция, которая должна выполняться каждые N минут. Причем...

Время задержки delay
Доброго времени суток. столкнулся с AnyLogic University 6.9.0. задача: Есть 3 блока Sourсе. из них...

Узнать время задержки в GIF
В одной статье GDI+: графика нового поколения нашёл пример как вывести анимированный Gif в окно...

Как поставить время задержки в анимации js
Я не разбираюсь в этом языке, но понимаю что нужно c.fl что то дописать что будет отвечать за...

2
1027 / 659 / 109
Регистрация: 12.10.2013
Сообщений: 4,275
24.05.2016, 18:59 2
Может таймер запускать кратно нужным интервалам например секунды. При событии считать срабатывание раз. И получать время кратное секундам. If 10 тиков то 10 секунд и т.д.
0
2395 / 1238 / 210
Регистрация: 26.02.2009
Сообщений: 4,939
Записей в блоге: 5
25.05.2016, 00:07 3
A так?
C++
1
2
3
4
5
6
7
8
9
void timer(int level)
{
    display();
    Snake();
    glutTimerFunc(level, timer, level);
}
 
...
glutTimerFunc(level, timer, level);
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.05.2016, 00:07

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Время задержки между onclick и ondblclick
Ребят, подскажите пожалуйста, как прописать время задержки между onclick и ondblclick. Из памяти...

Сигнал во время задержки для AVR
Добрый вечер! У меня такая проблема. В обработчике прерываний по переполнению таймера 0...

QUdpSocket. Как сделать время задержки 0,5 мс
Здравствуйте уважаемые. Передаю пакеты - 1032 байта в одном. Передаю 65525 пакетов. Надо...

Максимальное время задержки в сети для 90% запросов
Здравствуйте, у меня только один вопрос по GPSS. Как определить максимальное время задержки в...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.