Guest User

Untitled

a guest
Aug 18th, 2018
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.22 KB | None | 0 0
  1. void gameController::mainloop()
  2.     {
  3.         //FPS counter
  4.         loopTimer.start();
  5.  
  6.         opengl->begindraw();
  7.         //opengl->drawAxis();
  8.         //opengl->drawCube(0,0,0);
  9.  
  10.         //logic moving the snake
  11.  
  12.         if (frames == FRAMES_PER_STEP)  //if new step started
  13.         {
  14.             //do move
  15.  
  16.             playerPos[X_] += direction[X_]; //move the snake head
  17.             playerPos[Y_] += direction[Y_];
  18.             playerPos[Z_] += direction[Z_];
  19.  
  20.             playerSnake->move(direction);   //move the tail
  21.  
  22.             frames = 0;
  23.             arrowPressed = false;
  24.         }
  25.  
  26.            
  27.         if(playerPos[X_] == fruitPos[X_] &&     //if the fruit hit
  28.             playerPos[Y_] == fruitPos[Y_] &&
  29.             playerPos[Z_] == fruitPos[Z_])
  30.         {
  31.             playerSnake->add(); //add body cell
  32.             spawnFruit(10,0,10);
  33.         }
  34.  
  35.         //drawing the snake here
  36.  
  37.         if(!fixCamera)  //follow the snake head by the camera or set camera to the def points
  38.             opengl->setCameraCellDelta(
  39.                                     playerPos[X_], playerPos[Y_], playerPos[Z_],
  40.                                     direction[X_] * (float)frames/FRAMES_PER_STEP,
  41.                                     direction[Y_] * (float)frames/FRAMES_PER_STEP,
  42.                                     direction[Z_] * (float)frames/FRAMES_PER_STEP,
  43.                                     direction[X_], direction[Y_], direction[Z_]
  44.                                     );
  45.  
  46.         opengl->drawCubeCellsDelta(         //snake head
  47.                                     playerPos[X_],
  48.                                     playerPos[Y_],
  49.                                     playerPos[Z_],
  50.                                     direction[X_] * (float)frames/FRAMES_PER_STEP * ((animooted)?1.0f:0),//animate if enabled
  51.                                     direction[Y_] * (float)frames/FRAMES_PER_STEP * ((animooted)?1.0f:0),
  52.                                     direction[Z_] * (float)frames/FRAMES_PER_STEP * ((animooted)?1.0f:0)
  53.                                     ); 
  54.  
  55.         //draw snake body
  56.  
  57.  
  58.  
  59.         txyz prev = { playerPos[X_],  playerPos[Y_],  playerPos[Z_]};
  60.         const snakeCell *next = playerSnake->getHead()->next;
  61.  
  62.  
  63.         if (playerPos[X_] > 30)
  64.         {
  65.             playerPos[X_]-=58;
  66.         }
  67.         else if (playerPos[X_] < -30)
  68.         {
  69.             playerPos[X_]+=58;
  70.         }
  71.         else if (playerPos[Y_] > 30)
  72.         {
  73.             playerPos[Y_]-=58;
  74.         }
  75.         else if (playerPos[Y_] < -30)
  76.         {
  77.             playerPos[Y_]+=58;
  78.         }
  79.         else if (playerPos[Z_] > 30)
  80.         {
  81.             playerPos[Z_]-=58;
  82.         }
  83.         else if (playerPos[Z_] < -30)
  84.         {
  85.             playerPos[Z_]+=58;
  86.         };
  87.  
  88.  
  89.         //go through the linked list
  90.         while(next)
  91.         {
  92.             prev[X_] -= next->move.x;
  93.             prev[Y_] -= next->move.y;
  94.             prev[Z_] -= next->move.z;
  95.  
  96.             //draw each body part
  97.             opengl->drawCubeCellsDelta(
  98.                     prev[X_],
  99.                     prev[Y_],
  100.                     prev[Z_],
  101.                     next->move.x*(float)frames/FRAMES_PER_STEP * ((animooted)?1.0f:0)//animate if enabled
  102.                     next->move.y*(float)frames/FRAMES_PER_STEP * ((animooted)?1.0f:0),
  103.                     next->move.z*(float)frames/FRAMES_PER_STEP * ((animooted)?1.0f:0)
  104.                 );
  105.  
  106.             next = playerSnake->getNext(next);
  107.  
  108.             //Where we can fail
  109.             if  (playerPos[X_] == prev[X_] &&      
  110.             playerPos[Y_] == prev[Y_] &&
  111.             playerPos[Z_] == prev[Z_])
  112.             {
  113.                 if (failFlag == false)
  114.                 {
  115.                 std::cout << "\nYou failed. Total Score: " << score-1;
  116.                 opengl->DisableOpenGL();
  117.                 failFlag = true;
  118.                 }
  119.                 //window->quit();
  120.             }
  121.         }
  122.            
  123.  
  124.  
  125.         //draw the fruit
  126.         if(fruitPos[X_] != 100)
  127.         {
  128.             opengl->drawCubeCells(fruitPos[X_], fruitPos[Y_], fruitPos[Z_]);   
  129.         }
  130.  
  131.         frames++;
  132.         //loadBand(2000);
  133.         opengl->enddraw();
  134.  
  135.         //wait until fixed frame time is reached
  136.         float fps = (float)loopTimer.getTicksRate().QuadPart/loopTimer.getTime().QuadPart;
  137.    
  138.         if(fps > fixedFPS)
  139.         {
  140.             waiter(long(loopTimer.getTicksRate().QuadPart/fixedFPS - loopTimer.getTime().QuadPart));
  141.         }
  142.  
  143.         //fps = (float)loopTimer.getTicksRate().QuadPart/loopTimer.getTime().QuadPart;
  144.         //std::cout<<fps<<std::endl;
  145.  
  146.         loopTimer.reset();
  147.  
  148.     }
  149.  
  150.     int power(int val, unsigned int P)
  151.     {
  152.      int r = val;
  153.      while (--P)
  154.          r *= val;
  155.      return r;
  156.     }
  157.  
  158.     void gameController::spawnFruit(int xr, int yr, int zr)
  159.     {
  160.         //throw fruit randomly
  161.         std::cout << "\rScore " << score;
  162.  
  163.         int xdel = (xr!=0)?(int)rand()%xr:0;
  164.         int ydel = (yr!=0)?(int)rand()%yr:0;
  165.         int zdel = (zr!=0)?(int)rand()%zr:0;
  166.  
  167.         /*int xt = -(int)xr/2 + xdel;
  168.         int yt = -(int)yr/2 + ydel;
  169.         int zt = -(int)zr/2 + zdel;*/
  170.  
  171.         //fruitPos[X_] = -(int)xr/2 + xdel;
  172.         //fruitPos[Y_] = -(int)yr/2 + ydel;
  173.         //fruitPos[Z_] = -(int)zr/2 + zdel;
  174.  
  175.         fruitPos[X_] = power(-1, (int)rand()) * xdel;
  176.         fruitPos[Y_] = power(-1, (int)rand()) * ydel;
  177.         fruitPos[Z_] = power(-1, (int)rand()) * zdel;
  178.  
  179.         score++;
  180.     }
  181.  
  182. }
Add Comment
Please, Sign In to add comment