Guest User

Untitled

a guest
Jan 23rd, 2018
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 12.26 KB | None | 0 0
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <time.h>
  4. #include "GL/glut.h"
  5.  
  6. /*
  7.     @author raphel
  8. */
  9. int a=0;
  10. int b=0;
  11. int wybor = 0;
  12. int tab[10][4];
  13. int trafione[10][4];
  14. int rozw[4];
  15. int pozX = 0;
  16. int pozY = 0;
  17. int help = 0;
  18. int wygrana = 0;
  19. int ileDobrze = 0;
  20. int widok = 0;
  21.  
  22. void pozycja(int wspx, int wspy, int color)
  23. {
  24.     int poz1 = wspx/50;
  25.     int poz2 = wspy/50;
  26.        
  27.     tab[poz2][poz1] = color;
  28. }
  29. int pozXFun(int wspx)
  30. {
  31.     return wspx/50;
  32. }
  33. int pozYFun(int wspy)
  34. {
  35.     return wspy/50;
  36. }
  37. void losujRozwiazanie()
  38. {
  39.     rozw[0] = (rand() % 6) + 1;
  40.     rozw[1] = (rand() % 6) + 1;
  41.     rozw[2] = (rand() % 6) + 1;
  42.     rozw[3] = (rand() % 6) + 1;
  43. }
  44. void inicjuj()
  45. {
  46.     for(int i=0; i<10; i++)
  47.         for(int j=0; j<4; j++)
  48.         {
  49.             tab[i][j] = 0;
  50.             trafione[i][j] = 0;
  51.         }
  52.  
  53.     a=0;
  54.     b=0;
  55.     wygrana=0;
  56.     ileDobrze=0;
  57.     help=0;
  58.     for(int i=0; i<4; i++)
  59.         rozw[i] = 0;
  60.     losujRozwiazanie();
  61.  
  62. }
  63. void drawText(double x, double y, char c)
  64. {
  65.     glColor3d(0.0,0.0,0.0);
  66.     glRasterPos2d(x,y);
  67.     glutBitmapCharacter(GLUT_BITMAP_9_BY_15, c);
  68. }
  69.  
  70. void rysujKwadratMenu(int x, int y, float c1, float c2, float c3)
  71. {
  72.     glColor3f( c1, c2, c3 );
  73.     glBegin(GL_QUADS);
  74.         glVertex2f(700,x);
  75.         glVertex2f(750,x);
  76.         glVertex2f(750,y);
  77.         glVertex2f(700,y);
  78.     glEnd();
  79. }
  80. void menu()
  81. {  
  82.     glColor3f(0.5f,0.5f,1.0f);
  83.     glBegin(GL_QUADS);
  84.         glVertex2f(600,0);
  85.         glVertex2f(800,0);
  86.         glVertex2f(800,600);
  87.         glVertex2f(600,600);
  88.     glEnd();
  89.  
  90.     //biały kwadrat
  91.     drawText(670, 570, '1');
  92.     rysujKwadratMenu(600, 550, 1.0f, 1.0f, 1.0f);
  93.     //czerwony kwadrat
  94.     drawText(670, 510, '2');
  95.     rysujKwadratMenu(540,490, 1.0f, 0.0f, 0.0f);
  96.     //zielony kwadrat
  97.     drawText(670, 450, '3');
  98.     rysujKwadratMenu(480,430, 0.0f, 1.0f, 0.0f);
  99.     //niebieski kwadrat
  100.     drawText(670, 390, '4');
  101.     rysujKwadratMenu(420,370, 0.0f, 0.0f, 1.0f);
  102.     //żółty kwadrat
  103.     drawText(670, 330, '5');
  104.     rysujKwadratMenu(360,310, 1.0f, 1.0f, 0.0f);
  105.     //fioletowy kwadrat
  106.     drawText(670, 270, '6');
  107.     rysujKwadratMenu(300,250, 1.0f, 0.0f, 1.0f);
  108.        
  109. }
  110.  
  111. void gra(void)
  112. {
  113.     glColor3f(0.5f, 0.6f, 0.7f);
  114.     glBegin(GL_QUADS);
  115.         glVertex2f(a+10, b+40);
  116.         glVertex2f(a+ 40, b+40);
  117.         glVertex2f(a+ 40, b+10);
  118.         glVertex2f(a+10, b+10);
  119.     glEnd();
  120. }
  121.  
  122. void malujKolor(int aa, int bb, float c1, float c2, float c3)
  123. {
  124.     glColor3f(c1, c2, c3);
  125.     glBegin(GL_QUADS);
  126.         glVertex2f((aa*50)+5, (bb*50)+5);
  127.         glVertex2f((aa*50)+45, (bb*50)+5);
  128.         glVertex2f((aa*50)+45, (bb*50) +45);
  129.         glVertex2f((aa*50)+5, (bb*50)+45);
  130.     glEnd();
  131. }
  132. void malujRozwiazanie()
  133. {
  134.     for(int i=0; i<4;i++)
  135.     {
  136.         if(rozw[i] == 1)
  137.         {
  138.             malujKolor(i,11,1.0f, 1.0f, 1.0f);
  139.         }
  140.         if(rozw[i] == 2)
  141.         {
  142.             malujKolor(i,11,1.0f, 0.0f, 0.0f);
  143.         }
  144.         if(rozw[i] == 3)
  145.         {
  146.             malujKolor(i,11,0.0f, 1.0f, 0.0f);
  147.         }
  148.         if(rozw[i] == 4)
  149.         {
  150.             malujKolor(i,11,0.0f, 0.0f, 1.0f);
  151.         }
  152.         if(rozw[i] == 5)
  153.         {
  154.             malujKolor(i,11,1.0f, 1.0f, 0.0f);
  155.         }
  156.         if(rozw[i] == 6)
  157.         {
  158.             malujKolor(i,11,1.0f, 0.0f, 1.0f);
  159.         }
  160.     }
  161.        
  162. }
  163. bool sprawdzCzyWypelnione(int poziom)
  164. {
  165.     for(int i=0; i<4; i++)
  166.         if(tab[poziom][i] == 0)
  167.             return false;
  168.     return true;
  169. }
  170. void sprTrafione(int poziom)
  171. {
  172.     for(int i=0; i<4; i++)
  173.     {
  174.         if(tab[poziom][i] == rozw[i]) // czy miejsce i kolor się zgadza ok
  175.         {
  176.                 ileDobrze++;
  177.                 trafione[poziom][0] = trafione[poziom][0]+1;
  178.         }
  179.     }
  180.        
  181.     int temp[4];
  182.     for(int i=0; i<4; i++)
  183.     {
  184.         if(tab[poziom][i] == rozw[i])
  185.             temp[i] = 0;
  186.         else
  187.             temp[i] = tab[poziom][i];
  188.     }
  189.                
  190.     int kolory[7];
  191.     for(int i=0; i<7; i++)
  192.             kolory[i] = 0;
  193.  
  194.     /*for(int i=0; i<4; i++)
  195.             printf("%d ",temp[i]) ;*/
  196.  
  197.     //kolory z naszego rozwiazania
  198.     for(int i=0; i<4; i++)
  199.         if(temp[i] !=0)
  200.             kolory[temp[i]] = 1;
  201.  
  202.     //kolory rozwiazania
  203.     for(int i=0; i<4; i++)
  204.         if(kolory[rozw[i]] == 1 && temp[i] !=0)
  205.             kolory[rozw[i]] = 2;
  206.  
  207.     for(int i=0; i<7; i++)
  208.         if(kolory[i] == 2)
  209.         {
  210.             trafione[poziom][1] = trafione[poziom][1]+1;
  211.         }
  212.                        
  213.  
  214.     printf("%d\n",trafione[poziom][1]);
  215.  
  216.     //printf("trafione kolory = %d\n",trafione[poziom][1]);
  217.     if(ileDobrze == 4)
  218.             wygrana = 1;
  219.     if(poziom == 9)
  220.             wygrana = 2;
  221.     printf("dobrze = %d\n",ileDobrze);
  222.     ileDobrze=0;
  223.         //trafioneKolory = 0;
  224. }
  225. void odrysujWszystko()
  226. {
  227.     for(int i=0; i<10; i++)
  228.     {
  229.         for(int j=0; j<4; j++)
  230.         {
  231.             if(tab[i][j] != 0)
  232.             {
  233.                 if(tab[i][j] == 1)
  234.                 {
  235.                     malujKolor(j,i,1.0f, 1.0f, 1.0f);
  236.                 }
  237.                 if(tab[i][j] == 2)
  238.                 {
  239.                     malujKolor(j,i,1.0f, 0.0f, 0.0f);
  240.                 }
  241.                 if(tab[i][j] == 3)
  242.                 {
  243.                     malujKolor(j,i,0.0f, 1.0f, 0.0f);
  244.                 }
  245.                 if(tab[i][j] == 4)
  246.                 {
  247.                     malujKolor(j,i,0.0f, 0.0f, 1.0f);
  248.                 }
  249.                 if(tab[i][j] == 5)
  250.                 {
  251.                     malujKolor(j,i,1.0f, 1.0f, 0.0f);
  252.                 }
  253.                 if(tab[i][j] == 6)
  254.                 {
  255.                     malujKolor(j,i,1.0f, 0.0f, 1.0f);
  256.                 }
  257.             }
  258.         }
  259.     }      
  260. }
  261. void odrysujTrafione()
  262. {
  263.     for(int i=0; i<10; i++)
  264.         for(int j=0; j<trafione[i][0]; j++)
  265.         {
  266.             malujKolor(6+j,i,1.0f, 0.0f, 0.0f);
  267.         }
  268. }
  269. void odrysujTrafionyKolor()
  270. {
  271.     for(int i=0; i<10; i++)
  272.     {
  273.         for(int j=0; j<trafione[i][1]; j++)
  274.         {
  275.             malujKolor(6+trafione[i][0]+j,i,1.0f, 1.0f, 1.0f);
  276.         }
  277.     }
  278.            
  279. }
  280. void keyboard(unsigned char key, int x, int y)
  281. {
  282.     switch (key) {
  283.     case 27:
  284.         exit(0);
  285.         break;
  286.         case 'q':
  287.         exit(0);
  288.         break;
  289.         case 'Q':
  290.         exit(0);
  291.         break;
  292.         case 'h':
  293.             help = 1;
  294.             glutPostRedisplay();
  295.             break;
  296.         case 'n':
  297.             inicjuj();
  298.             glutPostRedisplay();
  299.             break;
  300.         case 'j':
  301.             help = 0;
  302.             glutPostRedisplay();
  303.             break;
  304.         case 'v':
  305.             widok=1;
  306.             glutPostRedisplay();
  307.             break;
  308.             //powrót do normalnego widoku
  309.         case 'c':
  310.             widok=0;
  311.             glutPostRedisplay();
  312.             break;
  313.         case 13:
  314.             if(sprawdzCzyWypelnione(pozYFun(b)))
  315.             {
  316.                 sprTrafione(pozYFun(b));
  317.                 if(b<450 || (wygrana == 0))
  318.                 {
  319.                     b+=50;
  320.                     a=0;          
  321.                 }
  322.                 glutPostRedisplay();
  323.             }
  324.                
  325.             break;
  326.         case 49:
  327.             wybor=1;
  328.             pozycja(a,b,1);
  329.             glutPostRedisplay();
  330.             break;
  331.         case 50:
  332.             wybor=2;
  333.             pozycja(a,b,2);
  334.             glutPostRedisplay();
  335.             break;
  336.         case 51:
  337.             wybor=3;
  338.             pozycja(a,b,3);
  339.             glutPostRedisplay();
  340.             break;
  341.         case 52:
  342.             wybor=4;
  343.             pozycja(a,b,4);
  344.             glutPostRedisplay();
  345.             break;
  346.         case 53:
  347.             wybor=5;
  348.             pozycja(a,b,5);
  349.             glutPostRedisplay();
  350.             break;
  351.         case 54:
  352.             wybor=6;
  353.             pozycja(a,b,6);
  354.             glutPostRedisplay();
  355.             break;
  356.     }
  357. }
  358.  
  359. void sterowanie(int key, int x, int y)
  360. {
  361.     switch (key) {
  362.         case GLUT_KEY_LEFT:
  363.             if(a>0 && (wygrana == 0))
  364.                     a-=50;
  365.  
  366.         glutPostRedisplay();
  367.         break;
  368.         case GLUT_KEY_RIGHT:
  369.             if(a<150 && (wygrana == 0))
  370.                     a+=50;
  371.         glutPostRedisplay();
  372.                
  373.         break;
  374.     }
  375. }
  376.  
  377. void kciukWygrana()
  378. {
  379.     glColor3f(0.1f, 0.2f, 0.5f);
  380.     glBegin(GL_LINES);
  381.         glVertex2f(650, 100);
  382.         glVertex2f(700, 100);
  383.         glVertex2f(700, 100);
  384.         glVertex2f(700, 150);
  385.         glVertex2f(700, 150);
  386.         glVertex2f(750, 150);
  387.         glVertex2f(750, 150);
  388.         glVertex2f(750, 10);
  389.         glVertex2f(750, 10);
  390.         glVertex2f(650, 10);
  391.         glVertex2f(650, 10);
  392.         glVertex2f(650, 100);
  393.  
  394.         glVertex2f(650, 30);
  395.         glVertex2f(690, 30);
  396.  
  397.         glVertex2f(650, 55);
  398.         glVertex2f(690, 55);
  399.  
  400.         glVertex2f(650, 80);
  401.         glVertex2f(690, 80);
  402.     glEnd();
  403. }
  404. void kciukPrzegrana()
  405. {
  406.     glColor3f(0.1f, 0.2f, 0.5f);
  407.     glBegin(GL_LINES);
  408.         glVertex2f(650, 150);
  409.         glVertex2f(750, 150);
  410.         glVertex2f(750, 150);
  411.         glVertex2f(750, 10);
  412.         glVertex2f(750, 10);
  413.         glVertex2f(700, 10);
  414.         glVertex2f(700, 10);
  415.         glVertex2f(700, 60);
  416.         glVertex2f(700, 60);
  417.         glVertex2f(650, 60);
  418.         glVertex2f(650, 60);
  419.         glVertex2f(650, 150);
  420.  
  421.                
  422.         glVertex2f(650, 85);
  423.         glVertex2f(690, 85);
  424.  
  425.         glVertex2f(650, 110);
  426.         glVertex2f(690, 110);
  427.  
  428.         glVertex2f(650, 135);
  429.         glVertex2f(690, 135);
  430.  
  431.     glEnd();
  432. }
  433. void plansza(void)
  434. {
  435.         glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  436.         menu();
  437.         glColor3f(1.0f, 1.0f, 1.0f);
  438.         glBegin(GL_LINES);
  439.             for(int i=50; i<=200; i+=50)
  440.             {
  441.                 glVertex2f(i, 0);
  442.                 glVertex2f(i, 500);
  443.             }
  444.             for(int i=50; i<=500; i+=50)
  445.             {
  446.                 glVertex2f(0, i);
  447.                 glVertex2f(200, i);
  448.             }
  449.             for(int i=50; i<=200; i+=50)
  450.             {
  451.                 glVertex2f(i, 550);
  452.                 glVertex2f(i, 600);
  453.             }
  454.                 glVertex2f(0, 550);
  455.                 glVertex2f(200, 550);
  456.                 glVertex2f(0, 600);
  457.                 glVertex2f(200, 600);
  458.         glEnd();
  459.  
  460.         glBegin(GL_LINES);
  461.         for(int i=300; i<=500; i+=50)
  462.         {
  463.             glVertex2f(i, 0);
  464.             glVertex2f(i, 500);
  465.         }
  466.         for(int i=50; i<=500; i+=50)
  467.         {
  468.             glVertex2f(300, i);
  469.             glVertex2f(500, i);
  470.         }
  471.  
  472.         glEnd();
  473.         gra();
  474.  
  475.         odrysujWszystko();
  476.         if(help == 1)
  477.                 malujRozwiazanie();
  478.         if(wygrana == 1)
  479.         {
  480.                 kciukWygrana();
  481.                 malujRozwiazanie();
  482.         }
  483.                
  484.         if(wygrana == 2)
  485.         {
  486.                 kciukPrzegrana();
  487.                 malujRozwiazanie();
  488.         }
  489.         if(wygrana == 0 && ileDobrze !=4)
  490.         {
  491.             odrysujTrafione();
  492.             odrysujTrafionyKolor();
  493.         }
  494.         if(widok == 1)
  495.         {
  496.             glMatrixMode(GL_MODELVIEW);
  497.             glLoadIdentity();
  498.             //obrót w lewo  gluLookAt(0, 0, 1.0, 0, 0, 0.0, 0.5, 1.0, 0);
  499.             gluLookAt (7.5, 7.5, 12.5, 2.5, 2.5, -5.0, 0.0, 1.0, 0.0);
  500.             //glScalef (1.0, 2.0, 1.0);    
  501.             //glutWireCube (1.0);
  502.             glFlush ();
  503.             glutPostRedisplay();
  504.  
  505.  
  506.         }
  507.         if(widok == 0)
  508.         {
  509.             glMatrixMode(GL_MODELVIEW);
  510.             glLoadIdentity();
  511.             gluLookAt (0.0, 0.0, 0.0, 0.0, 0.0, -1, 0.0, 1.0, 0.0);
  512.             glutPostRedisplay();
  513.  
  514.         }          
  515.  
  516.         glutSwapBuffers();
  517. }
  518.  
  519. void reshape(int w, int h)
  520. {
  521.     //glViewport(0, 0, (GLsizei) w, (GLsizei) h);
  522.     glMatrixMode(GL_PROJECTION);
  523.     glLoadIdentity();
  524.    
  525.   //glScalef(1, 1, 0);
  526.   //glTranslatef(0, 0, 0);
  527.     glOrtho(0,(GLdouble) w,0,(GLdouble) h,0,-1);
  528.     //gluOrtho2D(0.0, (GLdouble) w, 0.0, (GLdouble) h);
  529.     glMatrixMode(GL_MODELVIEW);
  530.     glLoadIdentity();
  531. }
  532.  
  533. int main(int argc,char *argv[])
  534. {
  535.     for(int i=0; i<10; i++)
  536.         for(int j=0; j<4; j++)
  537.         {
  538.             tab[i][j] = 0;
  539.             trafione[i][j] = 0;
  540.         }
  541.                        
  542.  
  543.     srand(time(NULL));
  544.     losujRozwiazanie();
  545.     glutInit(&argc, argv);
  546.     glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
  547.     glutInitWindowSize(800, 600);
  548.     glutCreateWindow(argv[0]);
  549.     glutDisplayFunc(plansza);
  550.        
  551.     glutReshapeFunc(reshape);
  552.     glutKeyboardFunc(keyboard);
  553.         glutSpecialFunc(sterowanie);
  554.     glutMainLoop();
  555.     return 0;
  556. }
Add Comment
Please, Sign In to add comment