Пожалуйста, проверьте код на грубые ошибки
| |
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 ).
|
|
| |
|