Понедельник, 02 Декабря 2024, 10:48

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Пожалуйста, проверьте код на грубые ошибки
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 ).
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг