Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdlib.h>
- #include <stdio.h>
- #include <time.h>
- #include "GL/glut.h"
- /*
- @author raphel
- */
- int a=0;
- int b=0;
- int wybor = 0;
- int tab[10][4];
- int trafione[10][4];
- int rozw[4];
- int pozX = 0;
- int pozY = 0;
- int help = 0;
- int wygrana = 0;
- int ileDobrze = 0;
- int widok = 0;
- void pozycja(int wspx, int wspy, int color)
- {
- int poz1 = wspx/50;
- int poz2 = wspy/50;
- tab[poz2][poz1] = color;
- }
- int pozXFun(int wspx)
- {
- return wspx/50;
- }
- int pozYFun(int wspy)
- {
- return wspy/50;
- }
- void losujRozwiazanie()
- {
- rozw[0] = (rand() % 6) + 1;
- rozw[1] = (rand() % 6) + 1;
- rozw[2] = (rand() % 6) + 1;
- rozw[3] = (rand() % 6) + 1;
- }
- void inicjuj()
- {
- for(int i=0; i<10; i++)
- for(int j=0; j<4; j++)
- {
- tab[i][j] = 0;
- trafione[i][j] = 0;
- }
- a=0;
- b=0;
- wygrana=0;
- ileDobrze=0;
- help=0;
- for(int i=0; i<4; i++)
- rozw[i] = 0;
- losujRozwiazanie();
- }
- void drawText(double x, double y, char c)
- {
- glColor3d(0.0,0.0,0.0);
- glRasterPos2d(x,y);
- glutBitmapCharacter(GLUT_BITMAP_9_BY_15, c);
- }
- void rysujKwadratMenu(int x, int y, float c1, float c2, float c3)
- {
- glColor3f( c1, c2, c3 );
- glBegin(GL_QUADS);
- glVertex2f(700,x);
- glVertex2f(750,x);
- glVertex2f(750,y);
- glVertex2f(700,y);
- glEnd();
- }
- void menu()
- {
- glColor3f(0.5f,0.5f,1.0f);
- glBegin(GL_QUADS);
- glVertex2f(600,0);
- glVertex2f(800,0);
- glVertex2f(800,600);
- glVertex2f(600,600);
- glEnd();
- //biały kwadrat
- drawText(670, 570, '1');
- rysujKwadratMenu(600, 550, 1.0f, 1.0f, 1.0f);
- //czerwony kwadrat
- drawText(670, 510, '2');
- rysujKwadratMenu(540,490, 1.0f, 0.0f, 0.0f);
- //zielony kwadrat
- drawText(670, 450, '3');
- rysujKwadratMenu(480,430, 0.0f, 1.0f, 0.0f);
- //niebieski kwadrat
- drawText(670, 390, '4');
- rysujKwadratMenu(420,370, 0.0f, 0.0f, 1.0f);
- //żółty kwadrat
- drawText(670, 330, '5');
- rysujKwadratMenu(360,310, 1.0f, 1.0f, 0.0f);
- //fioletowy kwadrat
- drawText(670, 270, '6');
- rysujKwadratMenu(300,250, 1.0f, 0.0f, 1.0f);
- }
- void gra(void)
- {
- glColor3f(0.5f, 0.6f, 0.7f);
- glBegin(GL_QUADS);
- glVertex2f(a+10, b+40);
- glVertex2f(a+ 40, b+40);
- glVertex2f(a+ 40, b+10);
- glVertex2f(a+10, b+10);
- glEnd();
- }
- void malujKolor(int aa, int bb, float c1, float c2, float c3)
- {
- glColor3f(c1, c2, c3);
- glBegin(GL_QUADS);
- glVertex2f((aa*50)+5, (bb*50)+5);
- glVertex2f((aa*50)+45, (bb*50)+5);
- glVertex2f((aa*50)+45, (bb*50) +45);
- glVertex2f((aa*50)+5, (bb*50)+45);
- glEnd();
- }
- void malujRozwiazanie()
- {
- for(int i=0; i<4;i++)
- {
- if(rozw[i] == 1)
- {
- malujKolor(i,11,1.0f, 1.0f, 1.0f);
- }
- if(rozw[i] == 2)
- {
- malujKolor(i,11,1.0f, 0.0f, 0.0f);
- }
- if(rozw[i] == 3)
- {
- malujKolor(i,11,0.0f, 1.0f, 0.0f);
- }
- if(rozw[i] == 4)
- {
- malujKolor(i,11,0.0f, 0.0f, 1.0f);
- }
- if(rozw[i] == 5)
- {
- malujKolor(i,11,1.0f, 1.0f, 0.0f);
- }
- if(rozw[i] == 6)
- {
- malujKolor(i,11,1.0f, 0.0f, 1.0f);
- }
- }
- }
- bool sprawdzCzyWypelnione(int poziom)
- {
- for(int i=0; i<4; i++)
- if(tab[poziom][i] == 0)
- return false;
- return true;
- }
- void sprTrafione(int poziom)
- {
- for(int i=0; i<4; i++)
- {
- if(tab[poziom][i] == rozw[i]) // czy miejsce i kolor się zgadza ok
- {
- ileDobrze++;
- trafione[poziom][0] = trafione[poziom][0]+1;
- }
- }
- int temp[4];
- for(int i=0; i<4; i++)
- {
- if(tab[poziom][i] == rozw[i])
- temp[i] = 0;
- else
- temp[i] = tab[poziom][i];
- }
- int kolory[7];
- for(int i=0; i<7; i++)
- kolory[i] = 0;
- /*for(int i=0; i<4; i++)
- printf("%d ",temp[i]) ;*/
- //kolory z naszego rozwiazania
- for(int i=0; i<4; i++)
- if(temp[i] !=0)
- kolory[temp[i]] = 1;
- //kolory rozwiazania
- for(int i=0; i<4; i++)
- if(kolory[rozw[i]] == 1 && temp[i] !=0)
- kolory[rozw[i]] = 2;
- for(int i=0; i<7; i++)
- if(kolory[i] == 2)
- {
- trafione[poziom][1] = trafione[poziom][1]+1;
- }
- printf("%d\n",trafione[poziom][1]);
- //printf("trafione kolory = %d\n",trafione[poziom][1]);
- if(ileDobrze == 4)
- wygrana = 1;
- if(poziom == 9)
- wygrana = 2;
- printf("dobrze = %d\n",ileDobrze);
- ileDobrze=0;
- //trafioneKolory = 0;
- }
- void odrysujWszystko()
- {
- for(int i=0; i<10; i++)
- {
- for(int j=0; j<4; j++)
- {
- if(tab[i][j] != 0)
- {
- if(tab[i][j] == 1)
- {
- malujKolor(j,i,1.0f, 1.0f, 1.0f);
- }
- if(tab[i][j] == 2)
- {
- malujKolor(j,i,1.0f, 0.0f, 0.0f);
- }
- if(tab[i][j] == 3)
- {
- malujKolor(j,i,0.0f, 1.0f, 0.0f);
- }
- if(tab[i][j] == 4)
- {
- malujKolor(j,i,0.0f, 0.0f, 1.0f);
- }
- if(tab[i][j] == 5)
- {
- malujKolor(j,i,1.0f, 1.0f, 0.0f);
- }
- if(tab[i][j] == 6)
- {
- malujKolor(j,i,1.0f, 0.0f, 1.0f);
- }
- }
- }
- }
- }
- void odrysujTrafione()
- {
- for(int i=0; i<10; i++)
- for(int j=0; j<trafione[i][0]; j++)
- {
- malujKolor(6+j,i,1.0f, 0.0f, 0.0f);
- }
- }
- void odrysujTrafionyKolor()
- {
- for(int i=0; i<10; i++)
- {
- for(int j=0; j<trafione[i][1]; j++)
- {
- malujKolor(6+trafione[i][0]+j,i,1.0f, 1.0f, 1.0f);
- }
- }
- }
- void keyboard(unsigned char key, int x, int y)
- {
- switch (key) {
- case 27:
- exit(0);
- break;
- case 'q':
- exit(0);
- break;
- case 'Q':
- exit(0);
- break;
- case 'h':
- help = 1;
- glutPostRedisplay();
- break;
- case 'n':
- inicjuj();
- glutPostRedisplay();
- break;
- case 'j':
- help = 0;
- glutPostRedisplay();
- break;
- case 'v':
- widok=1;
- glutPostRedisplay();
- break;
- //powrót do normalnego widoku
- case 'c':
- widok=0;
- glutPostRedisplay();
- break;
- case 13:
- if(sprawdzCzyWypelnione(pozYFun(b)))
- {
- sprTrafione(pozYFun(b));
- if(b<450 || (wygrana == 0))
- {
- b+=50;
- a=0;
- }
- glutPostRedisplay();
- }
- break;
- case 49:
- wybor=1;
- pozycja(a,b,1);
- glutPostRedisplay();
- break;
- case 50:
- wybor=2;
- pozycja(a,b,2);
- glutPostRedisplay();
- break;
- case 51:
- wybor=3;
- pozycja(a,b,3);
- glutPostRedisplay();
- break;
- case 52:
- wybor=4;
- pozycja(a,b,4);
- glutPostRedisplay();
- break;
- case 53:
- wybor=5;
- pozycja(a,b,5);
- glutPostRedisplay();
- break;
- case 54:
- wybor=6;
- pozycja(a,b,6);
- glutPostRedisplay();
- break;
- }
- }
- void sterowanie(int key, int x, int y)
- {
- switch (key) {
- case GLUT_KEY_LEFT:
- if(a>0 && (wygrana == 0))
- a-=50;
- glutPostRedisplay();
- break;
- case GLUT_KEY_RIGHT:
- if(a<150 && (wygrana == 0))
- a+=50;
- glutPostRedisplay();
- break;
- }
- }
- void kciukWygrana()
- {
- glColor3f(0.1f, 0.2f, 0.5f);
- glBegin(GL_LINES);
- glVertex2f(650, 100);
- glVertex2f(700, 100);
- glVertex2f(700, 100);
- glVertex2f(700, 150);
- glVertex2f(700, 150);
- glVertex2f(750, 150);
- glVertex2f(750, 150);
- glVertex2f(750, 10);
- glVertex2f(750, 10);
- glVertex2f(650, 10);
- glVertex2f(650, 10);
- glVertex2f(650, 100);
- glVertex2f(650, 30);
- glVertex2f(690, 30);
- glVertex2f(650, 55);
- glVertex2f(690, 55);
- glVertex2f(650, 80);
- glVertex2f(690, 80);
- glEnd();
- }
- void kciukPrzegrana()
- {
- glColor3f(0.1f, 0.2f, 0.5f);
- glBegin(GL_LINES);
- glVertex2f(650, 150);
- glVertex2f(750, 150);
- glVertex2f(750, 150);
- glVertex2f(750, 10);
- glVertex2f(750, 10);
- glVertex2f(700, 10);
- glVertex2f(700, 10);
- glVertex2f(700, 60);
- glVertex2f(700, 60);
- glVertex2f(650, 60);
- glVertex2f(650, 60);
- glVertex2f(650, 150);
- glVertex2f(650, 85);
- glVertex2f(690, 85);
- glVertex2f(650, 110);
- glVertex2f(690, 110);
- glVertex2f(650, 135);
- glVertex2f(690, 135);
- glEnd();
- }
- void plansza(void)
- {
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
- menu();
- glColor3f(1.0f, 1.0f, 1.0f);
- glBegin(GL_LINES);
- for(int i=50; i<=200; i+=50)
- {
- glVertex2f(i, 0);
- glVertex2f(i, 500);
- }
- for(int i=50; i<=500; i+=50)
- {
- glVertex2f(0, i);
- glVertex2f(200, i);
- }
- for(int i=50; i<=200; i+=50)
- {
- glVertex2f(i, 550);
- glVertex2f(i, 600);
- }
- glVertex2f(0, 550);
- glVertex2f(200, 550);
- glVertex2f(0, 600);
- glVertex2f(200, 600);
- glEnd();
- glBegin(GL_LINES);
- for(int i=300; i<=500; i+=50)
- {
- glVertex2f(i, 0);
- glVertex2f(i, 500);
- }
- for(int i=50; i<=500; i+=50)
- {
- glVertex2f(300, i);
- glVertex2f(500, i);
- }
- glEnd();
- gra();
- odrysujWszystko();
- if(help == 1)
- malujRozwiazanie();
- if(wygrana == 1)
- {
- kciukWygrana();
- malujRozwiazanie();
- }
- if(wygrana == 2)
- {
- kciukPrzegrana();
- malujRozwiazanie();
- }
- if(wygrana == 0 && ileDobrze !=4)
- {
- odrysujTrafione();
- odrysujTrafionyKolor();
- }
- if(widok == 1)
- {
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
- //obrót w lewo gluLookAt(0, 0, 1.0, 0, 0, 0.0, 0.5, 1.0, 0);
- gluLookAt (7.5, 7.5, 12.5, 2.5, 2.5, -5.0, 0.0, 1.0, 0.0);
- //glScalef (1.0, 2.0, 1.0);
- //glutWireCube (1.0);
- glFlush ();
- glutPostRedisplay();
- }
- if(widok == 0)
- {
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
- gluLookAt (0.0, 0.0, 0.0, 0.0, 0.0, -1, 0.0, 1.0, 0.0);
- glutPostRedisplay();
- }
- glutSwapBuffers();
- }
- void reshape(int w, int h)
- {
- //glViewport(0, 0, (GLsizei) w, (GLsizei) h);
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- //glScalef(1, 1, 0);
- //glTranslatef(0, 0, 0);
- glOrtho(0,(GLdouble) w,0,(GLdouble) h,0,-1);
- //gluOrtho2D(0.0, (GLdouble) w, 0.0, (GLdouble) h);
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
- }
- int main(int argc,char *argv[])
- {
- for(int i=0; i<10; i++)
- for(int j=0; j<4; j++)
- {
- tab[i][j] = 0;
- trafione[i][j] = 0;
- }
- srand(time(NULL));
- losujRozwiazanie();
- glutInit(&argc, argv);
- glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
- glutInitWindowSize(800, 600);
- glutCreateWindow(argv[0]);
- glutDisplayFunc(plansza);
- glutReshapeFunc(reshape);
- glutKeyboardFunc(keyboard);
- glutSpecialFunc(sterowanie);
- glutMainLoop();
- return 0;
- }
Add Comment
Please, Sign In to add comment