Exemple #1
0
	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;

	}
Exemple #3
0
	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();

	}