| 
				
				Пожалуйста, проверьте код на грубые ошибки
				 |   |  
| Saitei | Дата: Воскресенье, 06 Января 2013, 01:13 | Сообщение # 1 |  
| 
 старожил 
Сейчас нет на сайте 
 
 | использую GLUT. Ещё полнейший новичок   main.cpp:   Код #include <glut.h>   #include <time.h>   #include <locale>   #include "gamecore.h" 
   void display()      {      glClear(GL_COLOR_BUFFER_BIT);      drawField();      playerCubeDraw();      glFlush();   } 
   void timer(int = 0)      {      display();      glutTimerFunc(33,timer,0);   } 
   int main(int argc, char** argv)      {      setlocale(0,"Russian");      glutInit(&argc,argv);      glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);      glutInitWindowSize(w,h);      glutCreateWindow("Игра ^^");      glMatrixMode(GL_PROJECTION);      glLoadIdentity();      gluOrtho2D(0,w,h,0);      glutDisplayFunc(display);      glutTimerFunc(33,timer,0);      glutSpecialFunc(Keyboard);      glutMainLoop();      return 0;   }     gamecore.h:   Код #pragma once;   #include <glut.h> 
   int w = 25*30;   int h = 25*30;   int px = 0;   int py = 0; 
   void drawField()   {      glColor3f(0.1,0.1,0.01);      glBegin(GL_LINES);      for(int i = 0; i < w; i+=25)      {       glVertex2f(i,0); glVertex2f(i,h);      }      for(int j = 0; j < h; j+=25)      {       glVertex2f(0,j); glVertex2f(w,j);      }      glEnd();   } 
   void Keyboard(int key, int a, int b)   {      switch(key)      {      case 101: {px -= 25; break;} //UP      case 100: {py -= 25;  break;} //LEFT      case 102: {py += 25; break;} //RIGHT      case 103: {px += 25; break;} //DOWN      } 
   } 
   void playerCubeDraw()   {      glColor3f(0.5,0.0,0.0);      glBegin(GL_POLYGON);      glVertex2f(0+py,1+px);      glVertex2f(0+py,25+px);      glVertex2f(25+py,25+px);      glVertex2f(25+py,1+px);      glEnd();   }     Кстати! А вот с кодами клавиш я долго парился. Где я могу найти все? Разумеется, сам я искал уже. Находил, но они не работали. Работают только (для стрелочек): 101, 100, 102, 103. Что это за коды-то такие? Где я могу найти такие коды для всей клавиатуры? И вообще как в GLUT'е выводится текст? 
   Добавлено (06.01.2013, 01:13)   ---------------------------------------------   и ещё вопрос... Я слышал что у программистов есть своего рода "этикет программирования". Я нигде его не нарушил? Названия функций принято писать с маленькой буквы у вас или как? Ха-ха, знаю, смешной вопрос, но ведь интересно))
 
 Сообщение отредактировал Saitei - Воскресенье, 06 Января 2013, 01:14  |  
| 
 | 
 |    |  
| AlexeyBond | Дата: Воскресенье, 06 Января 2013, 14:28 | Сообщение # 2 |  
| 
 был не раз 
Сейчас нет на сайте 
 
 | Цитата (Saitei) Код void timer(int = 0)       {       display();       glutTimerFunc(33,timer,0);   }     
   этого делать не обязательно т.к. ты уже передал glut указатель на функцию отрисовки, и он сам вызовет её когда надо. 
   Все коды клавиш определены где-то в заголовках винды, и выглядят примерно так: VK_* ( VK_LEFT, VK_ESCAPE etc. ). 
   По поводу этикета: я склонен считать, что каждый программист имеет право на собственный стиль. Я, например, никогда не пишу названия функций с маленькой буквы, и всегда перехожу на новую строку перед { в начале функции.   Но, думаю, каждый может писать так как ему удобнее, главное соблюдать единство стиля.
 |  
| 
 | 
 |    |  
| Vinchensoo | Дата: Воскресенье, 06 Января 2013, 15:16 | Сообщение # 3 |  
 
Злобный социопат с комплексом Бога 
Сейчас нет на сайте 
 
 | Цитата (AlexeyBond) По поводу этикета: я склонен считать, что каждый программист имеет право на собственный стиль. Я, например, никогда не пишу названия функций с маленькой буквы, и всегда перехожу на новую строку перед { в начале функции.        В итоге твой код превратиться в нечитаемое говно для других программистов.   Есть 3 стандарта оформления:   1. Java   2. С/С++   3. C#(у них там своя атмосфера). 
   Гуглить самостоятельно, ибо описано и не раз.
 
  
 |  
| 
 | 
 |    |  
| Saitei | Дата: Воскресенье, 06 Января 2013, 16:42 | Сообщение # 4 |  
| 
 старожил 
Сейчас нет на сайте 
 
 | а как средствами glut вывести текст? Хотел написать специальную функцию, но гуглил-гуглил - ничего не нашёл... У меня функция "renderBitmapString" вообще не пашет... Добавлено (06.01.2013, 16:42) --------------------------------------------- Ах да... Ну... Вот обновленный код.   main.cpp:    Код #include <glut.h>   #include <time.h>   #include <locale>   #include "gamecore.h" 
   void display()    {    glClear(GL_COLOR_BUFFER_BIT);    drawField();    for(int i = 0; i < 10; i++)    {     n[i].DrawBonus();    }    hero[1].playerDraw();    /* renderBitmapString */    glFlush();   } 
   void timer(int = 0)    {    display();    if(dir == 0)    {     hero[1].y-=25;    }    if(dir == 3)    {     hero[1].x-=25;    }    if(dir == 1)    {     hero[1].x+=25;    }    if(dir == 2)    {     hero[1].y+=25;    }    for(int i = 0; i < 10; i++)    {     if((hero[1].x == n[i].x) && (hero[1].y == n[i].y))     {      n[i].New();     }    }    if(hero[1].x<-1)    {     hero[1].x = w-25;    }        glutTimerFunc(100,timer,0);   } 
   int main(int argc, char** argv)    {    setlocale(0,"Russian");    for(int i = 0; i < 10; i++)    {     n[i].New();    }    hero[1].New();    glutInit(&argc,argv);    glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);    glutInitWindowSize(w,h);    glutCreateWindow("Игра ^^");    glMatrixMode(GL_PROJECTION);    glLoadIdentity();    gluOrtho2D(0,w,h,0);    glutDisplayFunc(display);    glutTimerFunc(33,timer,0);    glutSpecialFunc(Keyboard);    glutMainLoop();    return 0;   }     gamecore.h:   Код #pragma once;   #include <glut.h> 
   int w = 25*30;   int h = 25*30;   int dir = 2; 
   void drawField()   {    glColor3f(0.1,0.1,0.01);    glBegin(GL_LINES);    for(int i = 0; i < w; i+=25)    {     glVertex2f(i,0); glVertex2f(i,h);    }    for(int j = 0; j < h; j+=25)    {     glVertex2f(0,j); glVertex2f(w,j);    }    glEnd();   } 
   void Keyboard(int key, int a, int b)   {    switch(key)    {    case 101: {dir = 0;  break;} //UP    case 100: {dir = 3;  break;} //LEFT    case 102: {dir = 1;  break;} //RIGHT    case 103: {dir = 2;  break;} //DOWN    } 
   } 
   class playerCubeDraw   {    public:    int x, y;    void New()    {     x = 25;     y = 25;    }    void playerDraw()    {    glColor3f(0.5,0.0,0.0);    glRectf(x, y, x+25, y+25);    }   }hero[1]; 
   class bonusPoint    {    public:    int x, y;    void New()    {     x = (rand() % 30)*25;     y = (rand() % 30)*25;    }    void DrawBonus()    {     glColor3f(0.0,0.0,0.5);     glRectf(x, y, x+25, y+25);    }   } n[10];     
 |  
| 
 | 
 |    |  
| AlexeyBond | Дата: Воскресенье, 06 Января 2013, 20:53 | Сообщение # 5 |  
| 
 был не раз 
Сейчас нет на сайте 
 
 | Saitei, исключительно средствами glut - никак.   Для вывода текста существуют различные способы - можно использовать функции WinAPI и wgl, а можно, например, грузить текстуру с нарисованными символами и выводить соответствующие её фрагменты. У NeHe есть несколько уроков на эту тему ( 13, 14, 15, 17 ).
 |  
| 
 | 
 |    |     
		
		 
 |