Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 03.11.2011
Сообщений: 6
1

Постоянное движение "змейки"

01.05.2012, 18:48. Показов 964. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Пишу змейку на С++ и 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.05.2012, 18:48
Ответы с готовыми решениями:

Движение змейки
Никак не получается сделать движение змейки с последующим присоединением элементов к ней при...

Отрисовка и движение змейки помощь нужна
не могу понять как отрисовать грамотно тело змейки и заставить его двигаться за головой ерунда...

Осуществить движение змейки без задержки на ожидания ввода
Я вот пишу змейку и у меня встал вопрос. Змейка движется сама, то есть мы управляем только ее...

Движение хвоста змейки, отрисовка хвоста
Как сделать так чтобы вначале игры прорисовывалось тело змейки длиной = length? И чтобы не...

Движение змейки
Помогите реализовать движение змейки,чтобы она самостоятельно двигалась по экрану using System;...

0
01.05.2012, 18:48
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.05.2012, 18:48
Помогаю со студенческими работами здесь

Движение змейки
Private Sub Form1_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles...

Бесконечное движение змейки
Всем привет! Редактировал игру змейку отсюда под себя. Все бы ничего, но столкнулся с такой...

Движение хвоста змейки
Хвост не движется. Только 0 элемент листа void Tail() { if (tail.Count != 0) ...

Реализовать движение змейки
Помогите сделать курсовую из turbo pascal в ABC! uses crt,graph; {подключаем модули Crt и Graph}...

Организовать движение змейки
Никак не могу написать движение для змейки пишу в компиляторе Mingw с использованием библиотеки...

Движение змейки в Python на PyGame
Подскажите, пожалуйста, что надо сделать с моим кодом, чтобы при нажатии кнопки змейка двигалась в...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru