Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
kaheu
34 / 0 / 0
Регистрация: 19.08.2013
Сообщений: 246
#1

косая змейка - C++

22.05.2014, 20:46. Просмотров 171. Ответов 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
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
#include <time.h>
#include <stdlib.h>
#include  <GL/glut.h>
 
int N=30,M=20;
int Scale=25;
 
int w = Scale*N;
int h = Scale*M;
 
int dir,num=4;
 
struct 
{ int x;
  int y;}  s[100];
 
class Fructs
{ 
public:
    int x,y;
 
    void New()
    {  x=rand() % N;
        y=rand() % M;   }
    
    void DrawApple()
   {   glColor3f(0.0,1.0,0.0);
       glRectf(x*Scale,y*Scale,(x+1)*Scale,(y+1)*Scale); }
 
} m[10];
 
 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); }
 }
 
 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;         
 
  for (int i=0;i<10;i++)
    if ((s[0].x==m[i].x) && (s[0].y==m[i].y)) 
      {num++; m[i].New();}
 
  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=i;
 }
 
 
 
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(); 
 
   for (int i=0;i<10;i++)
     m[i].DrawApple();
 
   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;
     }
}
 
void timer(int = 0)
{
  display();
 
  Tick();
       
 glutTimerFunc(50,timer,0);
}
 
int main(int argc, char **argv) {
 
    srand(time(0));
    
    for (int i=0;i<10;i++)
        m[i].New();
    
 
     s[i].x=10;
     s[i].y=10;
 
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB );
glutInitWindowSize (w, h);
glutCreateWindow ("Test"); 
glClearColor(1.0,1.0,0.6,1.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0,w,0,h);
 
glutDisplayFunc (display);
glutSpecialFunc(KeyboardEvent);
glutTimerFunc(50,timer,0);
 
glutMainLoop();
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.05.2014, 20:46
Здравствуйте! Я подобрал для вас темы с ответами на вопрос косая змейка (C++):

Что означает косая черта в имени библиотеки? - C++
Встретила в jaula такой инклуд:&quot;jaula/jaula_bad_data_type.h&quot;, в связи с чем возник вопрос: что значит эта косая? Это значит, что...

Змейка - C++
Решил написать собственный аналог змейки. Создал костяк программы, и у меня возникло три вопроса. 1. Змейка отказывается двигаться...

Змейка - C++
Можно пожалуйста самую простую змейку консольную на c++ вобще самую простую без очков без всяких дополнений просто змейка ограда для нее и...

змейка - C++
Хочу написать игру змейка, как на первых телефонах. не могу придумать классы которые, при этом использовать(свои). Помогите...

змейка с++ - C++
ребят,вот наработки,не могу придумать нормальный алгоритм перемещения змейки,точнее перемещение,когда она будет увеличиваться... ведь ей...

Змейка в С - C++
Доброй ночи всем. Подскажите пожалуйста как можно написать игру змейку в консольном окне на С? 3аранее спасибо

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.05.2014, 20:46
Привет! Вот еще темы с ответами:

Змейка - C++
Надо заполнить массив нулями по змейке как на рисунке. Не могу придумать как заполнять нулями по строкам( Вот код : #include...

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

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

и снова змейка - C++
у меня огромная просьба,задали на выходные написать змейку на С++ в Visual Sudio 2010, но очень много ограничений в плане библиотек,поэтому...


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

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

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