0 / 0 / 0
Регистрация: 03.11.2011
Сообщений: 6
|
|
1
|
Постоянное движение "змейки"
01.05.2012, 18:48. Показов 964. Ответов 0
Пишу змейку на С++ и opengl. Нужно организовать постоянное движения змейки, но я не очень помимая как это сделать. Вот до чего додумался сам: Главный срр:
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
| CSnake snake;
void display()
{
glClear(GL_COLOR_BUFFER_BIT);
snake.DrawSnake();
glFlush();
glutSwapBuffers();
}
void timer(int = 0)
{
display();
snake.GoStep();
}
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
glutInitWindowSize(800,600);
glutInitWindowPosition(10,10);
glutCreateWindow("Змея");
glLoadIdentity();
glMatrixMode(GL_PROJECTION);
glViewport(0,0,400,300);
gluOrtho2D(0.0, 400.0, 0.0, 300.0);
glutDisplayFunc(display);
//init();
glutTimerFunc(60, timer, 0);
glutMainLoop();
return 0;
} |
|
сама функция:
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
| void DrawCell(int x,int y,GLuint textureid)
{
int glx=x + 175;
int gly=y + 150;
glPointSize(10);
//glBindTexture(GL_TEXTURE_2D,modeltexture[textureid]);
glBegin(GL_QUADS);
/*glTexCoord2f(0.0,1.0);*/glVertex2i(glx,gly);
/*glTexCoord2f(1.0,1.0);*/glVertex2i(glx+3,gly);
/*glTexCoord2f(1.0,0.0);*/glVertex2i(glx+3,gly-3);
/*glTexCoord2f(0.0,0.0);*/glVertex2i(glx,gly-3);
glEnd();
}
void CSnake::DrawSnake()
{ glColor3f(0.5, 0.1, 0);
DrawCell(snake[0].x_pos,snake[0].y_pos,0);
for (int i=1;i<NodeNumber;i++)
{
DrawCell(snake[i].x_pos,snake[i].y_pos,0);
}
}
void CSnake::GoStep(void)
{
for (int i=NodeNumber-1;i>0;i--)
{
snake[i].x_pos=snake[i-1].x_pos;
snake[i].y_pos=snake[i-1].y_pos;
}
if (direction==UP)
snake[0].y_pos--;
if (direction==DOWN) //задания управления взависимости от нажатх клавиш
snake[0].y_pos++;
if (direction==LEFT)
snake[0].x_pos--;
if (direction==RIGHT)
snake[0].x_pos++;
} |
|
классы
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
| enum SnakeDirection
{
UP=0,
DOWN,
LEFT,
RIGHT
};
struct SPosition
{
int x_pos;
int y_pos;
};
class CSnake
{
public:
CSnake()
{
NodeNumber=rand()%3+4;
SPosition head;
head.x_pos=rand()%20+10;
head.y_pos=rand()%30+10;
for (int i=0;i<NodeNumber;i++)
{
snake[i].x_pos=head.x_pos+i;
snake[i].y_pos=head.y_pos;
}
}
~CSnake(){}
void GoStep(void);
BOOL Die(void);
void ProcessDie(gameobject *game) ;
void SnakeTurn(int direction);
BOOL EatedNut(Nut *nut);
void ProcessEat(Nut *nut,gameobject *game);
SPosition *GetSnake(void);
int GetNodeNumber(void);
void DrawSnake(void);
int NodeNumber;
SnakeDirection direction;
public:
SPosition snake[400];
}; |
|
ошибок нет никаких, просто призапуска змейка торчит на одном месте. Кто знает, как обеспечить движение, прошу, помогите.
Добавлено через 17 часов 51 минуту
Всё, я разобрался.
0
|