Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Pong
- // (c)2012 Cèsar Rincón Nadal
- // EMAID - Escola d'art i diseny de Vilanova
- /*
- Juego
- */
- /*
- Importa los archivos de clases necesarios
- */
- import flash.utils.Timer;
- import flash.events.TimerEvent;
- import flash.events.KeyboardEvent;
- import emaid.commons.CTools;
- import emaid.classes.CPong;
- /*
- Variables globales y creacion de clases
- */
- // Crea el objeto Tools de la Clase CTools
- var Tools = new CTools();
- // Variables
- var playerSpeed:Number = 12; // Velocidad del jugador
- var ballSpeedX:Number; // Velocidades X e Y de la bola
- var ballSpeedY:Number;
- var ballStartSpeed:Number = 5;
- var cpuSeekDistance:Number = 300; // Distancia de seguimiento (X)
- var cpuMoveSpeed:Number = 12; // Velocidad de movimiento de la Cpu
- var ballMaxSpeed:Number = 0; // Velocidad maxima de la bola
- var ballSpeedAcc:Number = 1; // Incremento de velocidad a cada rebote
- var playerScore:Number = 0; // Puntuacion del jugador
- var cpuScore:Number = 0; // Puntuacion de la CPU
- var matchPoints:Number = 9; // Numero de puntos para ganar el juego
- var playGame:Boolean = false; // Control de la pausa del juego
- var gameOver:Boolean = false; // Flag de Game Over
- var spaceKeyShow:Boolean = false; // Flag de visualizacion de el mensage Space Key
- var spaceKeyTimer:Number = 0; // Control de tiempo entre parpadeos del mensage de SpaceKey
- /*
- Bloque de Update
- */
- // Define el Timer a 30 fps
- var myTimer:Timer = new Timer(1000/30);
- // Crea el listener
- myTimer.addEventListener(TimerEvent.TIMER, Update);
- // Funcion Update
- function Update(e:TimerEvent) {
- /*
- >>> (Todo el codigo que se actualiza en cada frame, va aqui <<<
- */
- if (playGame) {
- // Si no hay pausa
- MoveBall(); // Mueve la bola
- MovePlayer(); // Mueve la pala del jugador
- // Si es juego single player...
- if (CPong.playerNum == 1) {
- CpuIa(); // Mueve la pala de la CPU
- } else {
- MoveVersus(); // El player 2 mueve la segunda pala
- }
- PalasCollision(); // Detecta si la bola colisiona con alguna de las palas
- } else {
- // Si estas en pausa, espera a que se presione espacio
- if (Tools.kSpace) {
- // Si es el fin de juego, vuelve al menu
- if (gameOver) {
- // Deten el Timer
- myTimer.stop();
- // Elimina todos los eventos declarados
- PongCleanUpEvents();
- // Vuelve al menu
- gotoAndStop(1);
- } else {
- // Si no, continua la partida
- playGame = true;
- }
- }
- // Gestion del mensage de Press Space Key
- PressSpaceKeyMessage();
- }
- }
- /*
- Bloque de declaracion de funciones
- */
- // Control del teclado mediante los eventos KEY_UP y KEY_DOWN
- // Al presionar una tecla...
- stage.addEventListener(KeyboardEvent.KEY_DOWN, KeyDown);
- function KeyDown(e:KeyboardEvent):void {
- // Al presionar cualquier tecla, llama a la funcion KeysDown de la Clase CTools
- Tools.KeysDown(e.keyCode);
- }
- // Al soltar una tecla...
- stage.addEventListener(KeyboardEvent.KEY_UP, KeyUp);
- function KeyUp(e:KeyboardEvent):void {
- // Al soltar cualquier tecla, llama a la funcion KeysUp de la Clase CTools
- Tools.KeysUp(e.keyCode);
- }
- // Movimiento de la pala del jugador
- function MovePlayer():void {
- // Si se presiona arriba
- if (Tools.kUp) {
- palaA.y -= playerSpeed;
- // Limites
- if (palaA.y <= 20) palaA.y = 20;
- }
- // Si se presiona abajo
- if (Tools.kDown) {
- palaA.y += playerSpeed;
- // Limites
- if (palaA.y >= (580 - palaA.height)) palaA.y = (580 - palaA.height);
- }
- }
- // Movimiento de la pala del jugador 2 (Versus)
- function MoveVersus():void {
- // Variables privadas
- var mousePos = (stage.mouseY - (palaB.height / 2));
- // Si el puntero del mouse esta mas arriba
- if (mousePos < palaB.y) {
- palaB.y -= playerSpeed;
- // Limites
- if (palaB.y <= 20) palaB.y = 20;
- }
- // Si el puntero del mouse esta mas abajo
- if (mousePos > palaB.y) {
- palaB.y += playerSpeed;
- // Limites
- if (palaB.y >= (580 - palaB.height)) palaB.y = (580 - palaB.height);
- }
- }
- // Funcion CpuIa
- function CpuIa():void {
- // Variables privadas
- var ballY:Number = (ball.y + (ball.height / 2)); // Coordenada Y central de la bola
- var palaY:Number = (palaB.y + (palaB.height / 2)); // Coordenada Y central de la pala B
- var mySpeed:Number = cpuMoveSpeed;
- // Primer check, si la bola se esta acercando...
- if ((ballSpeedX > 0) && (ball.x > cpuSeekDistance)) {
- // Si la bola esta mas arriba, sube
- if (ballY < palaY) {
- // Compensa la velocidad a la baja si es necesario
- if ((palaY - ballY) < mySpeed) mySpeed = (palaY - ballY);
- // Mueve la pala
- palaB.y -= mySpeed;
- // Limites
- if (palaB.y <= 20) palaB.y = 20;
- }
- // Si la bola esta mas abajo
- if (ballY > palaY) {
- // Compensa la velocidad a la baja si es necesario
- if ((ballY - palaY) < mySpeed) mySpeed = (ballY - palaY);
- // Mueve la pala
- palaB.y += mySpeed;
- // Limites
- if (palaB.y >= (580 - palaB.height)) palaB.y = (580 - palaB.height);
- }
- }
- }
- // Movimiento de la bola
- function MoveBall():void {
- // Mueve la bola en ambos ejes
- ball.x += ballSpeedX;
- ball.y += ballSpeedY;
- // Si tocas la parte superior o inferior del decorado...
- if (ball.y <= 10) {
- ball.y = 10;
- ballSpeedY = -ballSpeedY;
- }
- if (ball.y >= (590 - ball.height)) {
- ball.y = (590 - ball.height);
- ballSpeedY = -ballSpeedY;
- }
- // Si tocas la parte derecha o izquierda del decorado...
- if (ball.x <= 0) {
- ball.x = 0;
- ballSpeedX = -ballSpeedX;
- SetPoint(false); // Punto para la CPU
- }
- if (ball.x >= (800 - ball.width)) {
- ball.x = (800 - ball.width);
- ballSpeedX = -ballSpeedX;
- SetPoint(true); // Punto para el Player
- }
- }
- // Funcion de deteccion de colisiones con las palas
- function PalasCollision():void {
- // Variables privadas
- var ballY:Number = 0; // Posicion Y de la bola
- var palY:Number = 0; // Posicion Y de la pala
- var palSize:Number = 0; // Tamaño de la pala
- var collision:Boolean = false; // Si a habido colision
- var maxY:Number = (ballMaxSpeed * 1.5);
- // Si la bola va hacia la izquierda y colisiona con la pala A
- if (ballSpeedX < 0) {
- // Si hay colision...
- if (Tools.BoxCollision(ball.x, ball.y, ball.width, ball.height, palaA.x, palaA.y, palaA.width, palaA.height)) {
- // Recoloca la bola
- ball.x = (palaA.x + palaA.width);
- // Invierte el sentido de la bola
- ballSpeedX = -ballSpeedX;
- // Registra la posicion de la pala e indica que a habido una colision
- palY = (palaA.y + (palaA.height / 2));
- palSize = palaA.height;
- collision = true;
- }
- }
- // Si la bola va hacia la derecha y colisiona con la pala B
- if (ballSpeedX > 0) {
- // Si hay colision...
- if (Tools.BoxCollision(ball.x, ball.y, ball.width, ball.height, palaB.x, palaB.y, palaB.width, palaB.height)) {
- // Recoloca la bola
- ball.x = (palaB.x - ball.width);
- // Invierte el sentido de la bola
- ballSpeedX = -ballSpeedX;
- // Registra la posicion de la pala e indica que a habido una colision
- palY = (palaB.y + (palaB.height / 2));
- palSize = palaB.height;
- collision = true;
- }
- }
- // Angulo de rebote Y velocidad si hay colision
- if (collision) {
- // Calcula la Y de la bola
- ballY = (ball.y + (ball.height / 2));
- // Si has colisionado en la zona superior...
- if (ballY < (palY - (palSize / 8))) {
- ballSpeedY = -((palY - ballY) / 4);
- if (ballSpeedY < -maxY) ballSpeedY = -maxY;
- }
- // Si has colisionado en la zona inferior...
- if (ballY > (palY + (palSize / 8))) {
- ballSpeedY = ((ballY - palY) / 4);
- if (ballSpeedY > maxY) ballSpeedY = maxY;
- }
- // Si ivas hacia la derecha
- if (ballSpeedX > 0) {
- // Aumenta la velocidad
- ballSpeedX += ballSpeedAcc;
- // Y limita el maximo
- if (ballSpeedX > ballMaxSpeed) ballSpeedX = ballMaxSpeed;
- } else {
- // Aumenta la velocidad
- ballSpeedX -= ballSpeedAcc;
- // Y limita el maximo
- if (ballSpeedX < -ballMaxSpeed) ballSpeedX = -ballMaxSpeed;
- }
- }
- }
- // Actualiza los marcadores de puntuacion
- function UpdateScore():void {
- // Score del player
- scoreA.gotoAndStop(playerScore + 1);
- // Score de la CPU
- scoreB.gotoAndStop(cpuScore + 1);
- }
- // Funcion SetPoint (Mira quien ha marcado el punto)
- function SetPoint(player:Boolean):void {
- // Recoloca las palas en las posiciones iniciales
- palaA.y = (300 - (palaA.height / 2));
- palaB.y = (300 - (palaB.height / 2));
- // Dependiendo de quien sea el punto...
- if (player) {
- // Si el punto es del jugador
- playerScore ++;
- // Haz que la CPU sea mas lista, reduciendo el tiempo de reaccion
- cpuSeekDistance -= 10;
- // Si ha ganado la partida...
- if (playerScore >= matchPoints) {
- playerScore = matchPoints;
- // Indica el final del juego
- gameOver = true;
- // Muestra el cartel correspondiente
- winText.alpha = 1;
- }
- // Recoloca la bola
- ball.y = (palaB.y + (palaB.height / 2) - (ball.height / 2));
- ball.x = (palaB.x - 50);
- // Reinicia la velocidad X
- ballSpeedX = -ballStartSpeed;
- } else {
- // Si el punto es de la CPU
- cpuScore ++;
- // Si ha ganado la partida...
- if (cpuScore >= matchPoints) {
- cpuScore = matchPoints;
- // Indica el final del juego
- gameOver = true;
- // Muestra el cartel correspondiente
- loseText.alpha = 1;
- }
- ball.y = (palaA.y + (palaA.height / 2) - (ball.height / 2));
- ball.x = (palaA.x + 50);
- // Reinicia la velocidad X
- ballSpeedX = ballStartSpeed;
- }
- // Pausa el juego
- playGame = false;
- // Actualiza los marcadores
- UpdateScore();
- // Reinicia la velocidad Y
- ballSpeedY = ballStartSpeed;
- }
- // Control del mensage de Press Space Key
- function PressSpaceKeyMessage():void {
- if (playGame) {
- // Si el juego esta en marcha, oculta el mensage
- spaceKey.alpha = 0;
- spaceKeyShow = false;
- spaceKeyTimer = 0;
- } else {
- // Si no, animacion del mensage de Space Key
- spaceKeyTimer ++;
- if (spaceKeyTimer >= 30) {
- spaceKeyTimer = 0;
- if (spaceKeyShow) {
- // Muestra el mensage
- spaceKey.alpha = 1;
- } else {
- // Oculta el mensage
- spaceKey.alpha = 0;
- }
- // Invierte el estado de visivilidad
- spaceKeyShow = !spaceKeyShow;
- }
- }
- }
- // Elimina TODOS los eventos antes de salir del frame
- function PongCleanUpEvents():void {
- myTimer.removeEventListener(TimerEvent.TIMER, Update);
- stage.removeEventListener(KeyboardEvent.KEY_DOWN, KeyDown);
- stage.removeEventListener(KeyboardEvent.KEY_UP, KeyUp);
- }
- /*
- Bloque del programa principal
- */
- // Inicializaciones
- ballMaxSpeed = palaA.width; // Velocidad maxima de la pelota == ancho de la paleta
- ballSpeedX = ballStartSpeed; // Velocidad Inicial
- ballSpeedY = ballStartSpeed; // Velocidad Inicial
- UpdateScore(); // Actualiza los marcadores
- // Enciende el Timer
- myTimer.start();
- // Deten FLASH para que no sale al siguiente frame
- stop();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement