bool gameController::init() { window = new winapiwrapper(hInstance); playerSnake = new snake(1,0,0); curLevel = new area(50,50,50); spawnFruit(10,0,10); playerSnake->add(); playerSnake->add(); try { window->createWindow(300,300,500,500); window->WshowWindow(); window->setCallBack(&gameController::callBack); opengl = new openglwrapper(window->getHDC()); opengl->EnableOpenGL(window->getHWND()); } catch ( std::exception &e ) { std::cerr << "Caught " << e.what( ) << std::endl; return false; }; return true; }
bool gameController::init() { window = new winapiwrapper(hInstance); playerSnake = new snake(0,0,1); //new snake moving to the right expl = new explosion(); //новое spawnFruit(10,0,10); playerSnake->add(); //add length try { window->createWindow(300,300,500,500); window->WshowWindow(); window->setCallBack(&gameController::callBack); opengl = new openglwrapper(window->getHDC()); opengl->EnableOpenGL(window->getHWND()); } catch ( std::exception &e ) { std::cerr << "Caught " << e.what( ) << std::endl; return false; }; return true; }
void gameController::mainloop() { //FPS counter loopTimer.start(); opengl->begindraw(); //opengl->drawAxis(); //opengl->drawCube(0,0,0); //logic moving the snake if (frames == FRAMES_PER_STEP) //if new step started { //do move playerPos[X_] += direction[X_]; //move the snake head playerPos[Y_] += direction[Y_]; playerPos[Z_] += direction[Z_]; playerSnake->move(direction); //move the tail frames = 0; arrowPressed = false; } if(playerPos[X_] == fruitPos[X_] && //if the fruit hit playerPos[Y_] == fruitPos[Y_] && playerPos[Z_] == fruitPos[Z_]) { playerSnake->add(); //add body cell spawnFruit(10,0,10); } //drawing the snake hear if(!fixCamera) //follow the snake head by the camera or set camera to the def points opengl->setCameraCellDelta( playerPos[X_], playerPos[Y_], playerPos[Z_], direction[X_] * (float)frames/FRAMES_PER_STEP, direction[Y_] * (float)frames/FRAMES_PER_STEP, direction[Z_] * (float)frames/FRAMES_PER_STEP, direction[X_], direction[Y_], direction[Z_] ); opengl->drawCubeCellsDelta( //snake head playerPos[X_], playerPos[Y_], playerPos[Z_], direction[X_] * (float)frames/FRAMES_PER_STEP * ((animooted)?1.0f:0),//animate if enabled direction[Y_] * (float)frames/FRAMES_PER_STEP * ((animooted)?1.0f:0), direction[Z_] * (float)frames/FRAMES_PER_STEP * ((animooted)?1.0f:0) ); //draw snake body txyz prev = { playerPos[X_], playerPos[Y_], playerPos[Z_]}; const snakeCell *next = playerSnake->getHead()->next; //go thru the linked list while(next) { prev[X_] -= next->move.x; prev[Y_] -= next->move.y; prev[Z_] -= next->move.z; //draw each body part opengl->drawCubeCellsDelta( prev[X_], prev[Y_], prev[Z_], next->move.x*(float)frames/FRAMES_PER_STEP * ((animooted)?1.0f:0), //animate if enabled next->move.y*(float)frames/FRAMES_PER_STEP * ((animooted)?1.0f:0), next->move.z*(float)frames/FRAMES_PER_STEP * ((animooted)?1.0f:0) ); next = playerSnake->getNext(next); } //draw the fruit if(fruitPos[X_] != -1) { opengl->drawCubeCells(fruitPos[X_], fruitPos[Y_], fruitPos[Z_]); } frames++; //loadBand(2000); opengl->enddraw(); //wait until fixed frame time is reached float fps = (float)loopTimer.getTicksRate().QuadPart/loopTimer.getTime().QuadPart; if(fps > fixedFPS) { waiter(long(loopTimer.getTicksRate().QuadPart/fixedFPS - loopTimer.getTime().QuadPart)); } //fps = (float)loopTimer.getTicksRate().QuadPart/loopTimer.getTime().QuadPart; //std::cout<<fps<<std::endl; loopTimer.reset(); }
void gameController::mainloop() { //FPS counter loopTimer.start(); opengl->begindraw(); //opengl->drawAxis(); //draw axis //opengl->drawCube(0,0,0); //draw cube in that location //logic moving the snake if (frames == FRAMES_PER_STEP) //if new step started { //do move playerPos[X_] += direction[X_]; //move the snake head playerPos[Y_] += direction[Y_]; playerPos[Z_] += direction[Z_]; playerSnake->move(direction); //move the tail frames = 0; arrowPressed = false; } if(playerPos[X_] == fruitPos[X_] && //if the fruit hit playerPos[Y_] == fruitPos[Y_] && playerPos[Z_] == fruitPos[Z_]) { playerSnake->add(); //add body cell spawnFruit(10,0,10); } //drawing the snake here if(!fixCamera) //follow the snake head with camera or set camera to the def points opengl->setCameraCellDelta( playerPos[X_], playerPos[Y_], playerPos[Z_], direction[X_] * (float)frames/FRAMES_PER_STEP, direction[Y_] * (float)frames/FRAMES_PER_STEP, direction[Z_] * (float)frames/FRAMES_PER_STEP, direction[X_], direction[Y_], direction[Z_] ); opengl->drawCubeCellsDelta( //snake head playerPos[X_], playerPos[Y_], playerPos[Z_], direction[X_] * (float)frames/FRAMES_PER_STEP * ((animooted)?1.0f:0),//animate if enabled direction[Y_] * (float)frames/FRAMES_PER_STEP * ((animooted)?1.0f:0), direction[Z_] * (float)frames/FRAMES_PER_STEP * ((animooted)?1.0f:0) ); float zeroes[3]; zeroes[0] = zeroes[1] = zeroes[2] = 3; expl -> DrawExplosion(zeroes); // here will be the explosion // all we have to do is to pass two arguments // don't know which ones yet //expl -> Update(); //draw snake body txyz prev = { playerPos[X_], playerPos[Y_], playerPos[Z_]}; const snakeCell *next = playerSnake->getHead()->next; //making edges if (playerPos[X_] > 30) { playerPos[X_]-=58; } else if (playerPos[X_] < -30) { playerPos[X_]+=58; } else if (playerPos[Y_] > 30) { playerPos[Y_]-=58; } else if (playerPos[Y_] < -30) { playerPos[Y_]+=58; } else if (playerPos[Z_] > 30) { playerPos[Z_]-=58; } else if (playerPos[Z_] < -30) { playerPos[Z_]+=58; }; //go through the linked list while(next) { prev[X_] -= next->move.x; prev[Y_] -= next->move.y; prev[Z_] -= next->move.z; //draw each body part opengl->drawCubeCellsDelta( prev[X_], prev[Y_], prev[Z_], next->move.x*(float)frames/FRAMES_PER_STEP * ((animooted)?1.0f:0), //animate if enabled next->move.y*(float)frames/FRAMES_PER_STEP * ((animooted)?1.0f:0), next->move.z*(float)frames/FRAMES_PER_STEP * ((animooted)?1.0f:0) ); next = playerSnake->getNext(next); //where we can fail if (playerPos[X_] == prev[X_] && playerPos[Y_] == prev[Y_] && playerPos[Z_] == prev[Z_]) { if (failFlag == false) { std::cout << "\nYou failed. Total Score: " << score-1; opengl->DisableOpenGL(); failFlag = true; } //window->quit(); } } //draw the fruit if(fruitPos[X_] != 100) { opengl->drawCubeCellsStatic(fruitPos[X_], fruitPos[Y_], fruitPos[Z_]); } frames++; opengl->enddraw(); //wait until fixed frame time is reached float fps = (float)loopTimer.getTicksRate().QuadPart/loopTimer.getTime().QuadPart; if(fps > fixedFPS) { waiter(long(loopTimer.getTicksRate().QuadPart/fixedFPS - loopTimer.getTime().QuadPart)); } loopTimer.reset(); }