Snažím sa spraviť veľmi jednoduchú hru v OpenGL, niečo podobné ako bola hra CERVII. Zatiaľ som spravil kód, podľa ktorého by sa had mal predlžovať (had sa v tejto hre nehýbe, iba rastie požadovaným smerom). No akosi mi to nefunguje. Poradí mi niekto?
#include <stdio.h>
#include <GL/glut.h>
GLint x = 100, y = 100;
GLint smer; //R = 1, L = 2, U = 3, D = 4
//---------------------------------------------------------------------
// Nastavenie súradnicového systému
//---------------------------------------------------------------------
void onResize(int w, int h) // W a H reprezentujú novú veľkosť okna
{
glViewport(0, 0, w, h); // Viditeľná oblasť nastavená cez celé okno
glMatrixMode(GL_PROJECTION); // Začiatok modifikácie projekčnej matice
glLoadIdentity(); // Vymazanie projekčnej matice
glOrtho(0, w, 0, h, -1, 1); // Mapovanie abstraktných súradníc do súradníc okna
}
//--------------------------------------------------------------------
// Táto funkcia podľa stlačených kláves vykresľuje hada
//--------------------------------------------------------------------
void Hra()
{
int x = 50; y = 50; // Začiatočné body ;;;;NESKOR RAND()
switch(smer)
{
case 1:
x++; break;
case 2:
x--; break;
case 3:
y++; break;
case 4:
y--; break;
}
}
void VykresliHada()
{
glColor3f(0.0, 0.0, 1.0);
glEnable(GL_POINT_SMOOTH);
glPointSize(5.0);
glBegin(GL_POINTS);
glVertex2i(x, y);
glEnd();
}
//---------------------------------------------------------------------
// Táto funkcia je volaná pri každom prekreslení okna
//---------------------------------------------------------------------
void onDisplay(void)
{
glClearColor(0.0, 0.0, 0.0, 1.0); // Nastavenie mazacej farby na čiernu
glClear(GL_COLOR_BUFFER_BIT); // Vymazanie bitových rovín farebného bufferu
VykresliHada(); // Volanie funkcie, ktorá vykreslí hada
glFlush(); // Vykreslenie zmien
}
//---------------------------------------------------------------------
// Táto funkcia určuje smer hada podľa stlačených klávesov
//---------------------------------------------------------------------
void Smer(int key, int x, int y){
switch(key){
case GLUT_KEY_RIGHT:
smer = 1;
break;
case GLUT_KEY_LEFT:
smer = 2;
break;
case GLUT_KEY_UP:
smer = 3;
break;
case GLUT_KEY_DOWN:
smer = 4;
break;
}
}
//---------------------------------------------------------------------
// Funkcia volaná pri stlačení klávesy
//---------------------------------------------------------------------
void onKeyboard(unsigned char key, int x, int y)
{
if (key == 27)
exit(0);
}
//---------------------------------------------------------------------
// Hlavná funkcia konzolovej aplikácie
//---------------------------------------------------------------------
int main(int argc, char **argv)
{
glutInit(&argc, argv); // Inicializovanie knižnice GLUT
glutCreateWindow("CERVIK v0.1"); // Vytvorenie okna
glutReshapeWindow(1024, 768); // Nastavenie veľkosti okna
glutPositionWindow(100, 100); // Nastavenie pozície ľavého horného rohu okna
glutSpecialFunc(Smer);
glutReshapeFunc(onResize); // Registrácia funkcie volanej pri zmene veľkosti okna
glutDisplayFunc(onDisplay); // Registrácia funkcie volanej pri prekreslení okna
glutKeyboardFunc(onKeyboard); // Registrácia funkcie volanej pri stlačení klávesy
Hra();
glutMainLoop(); // Nekonečný cyklus, kde sa volajú zaregistrované funkcie
return 0;
}