示例#1
0
int main(int argc, char *argv[])
{
	Setup();

	bool done = false;

	SDL_Event event;

	PreProcesses();

	const Uint8* keys = SDL_GetKeyboardState(NULL);

	Paddle p1(-0.9);
	Paddle p2(0.9);
	float angle[] = { 45, 135, 225, 315 };
	int choice = floor(rand() % 4);
	Ball ball(0.0005, angle[choice]);

	GLuint wins = LoadTexture("wins.png", GL_RGBA);

	while (!done) {
		while (SDL_PollEvent(&event)) {
			if (event.type == SDL_QUIT || event.type == SDL_WINDOWEVENT_CLOSE) {
				done = true;
			}
			else if (event.type == SDL_KEYDOWN){
				if (event.key.keysym.scancode == SDL_SCANCODE_SPACE){
					p1.Reset(-0.9);
					p2.Reset(0.9);
					choice = floor(rand() % 4);
					ball.Reset(angle[choice]);
				}
			}

		}

		if (CollisionX(ball)){
			ball.d_y = -ball.d_y;
		}

		if (CollisionY(ball, p1, p2)){
			if (ball.x > 0){
				ball.d_x = -abs(ball.d_x);
			}
			else {
				ball.d_x = abs(ball.d_x);
			}
		}

		PaddleMovement(keys, p1.y, p2.y);

		Update(ball);
		Render(p1, p2, ball, wins);

		SDL_GL_SwapWindow(displayWindow);
	}

	SDL_Quit();
	return 0;
}
示例#2
0
void Movement(unsigned char key, int x, int y) 
{
	//Obrót zrealizowany jest jako rotacja wektora od oczu obserwatora do punktu na który patrzy wokó³ wektora wskazuj¹cego 'w górê' od obserwatora, 
	//a nastêpnie wyliczenie nowego punktu skupienia wzroku obserwatora jako przesuniêcie punktu oczu o zrotowany wczeœniej wektor.

	//Przesuniêcie to translacja punktu po³o¿enia obserwatora i punktu skupienia jego wzroku o znormalizowany wektor od oczu do obserwowanego punktu
	//(w taki sposób modu³ tego wektora nie ulega zmianie).
	
	glm::vec4 vrot;
	glm::vec3 move;

	int i = 1, j = 1;


	if (key == 'a' || key == 'd' )
	{
		vrot = glm::rotate(glm::mat4(1.0f), key == 'a' ? 3.0f : -3.0f, m_up)*glm::vec4(m_center - m_eye, 0);
		m_center = m_eye + glm::vec3(vrot);

	}
	else if ((key == 'w' || key == 's') && direction == 0)
	{
		move = glm::normalize(m_center - m_eye);
		move *= 0.2;

		if (key == 's')move *= -1;

		if (fly || !CollisionX(move, i))
		{
			m_eye.x += move.x;
			m_center.x += move.x;
			p_i = i;
		}

		if (fly || !CollisionZ(move, j))
		{
			m_eye.z += move.z;
			m_center.z += move.z;
			p_j = j;
		}
		
		if (fly)
		{
				m_eye.y += move.y;  
				m_center.y += move.y;
		}
	}
	else if (key == 'c')
	{
		if (M[p_i][p_j] == 'u')Up();
		else if (M[p_i][p_j] == 'd')Down();
	}
	else if (key == 'm')
	{
		M.Show(cur_layer); 
		printf("%d %d\n", p_i, p_j);
	}
	else if (key == 'f')fly = !fly;
}