Nenhuma descrição
Jose Ortiz 2f1fb8abc1 Lab initial commit 8 anos atrás
images Lab initial commit 8 anos atrás
resources Lab initial commit 8 anos atrás
CarScrollingGame.pro Lab initial commit 8 anos atrás
README.md Lab initial commit 8 anos atrás
car.cpp Lab initial commit 8 anos atrás
car.h Lab initial commit 8 anos atrás
flag.cpp Lab initial commit 8 anos atrás
flag.h Lab initial commit 8 anos atrás
images.qrc Lab initial commit 8 anos atrás
main.cpp Lab initial commit 8 anos atrás
mainwindow.cpp Lab initial commit 8 anos atrás
mainwindow.h Lab initial commit 8 anos atrás
mainwindow.ui Lab initial commit 8 anos atrás
obstacle.cpp Lab initial commit 8 anos atrás
obstacle.h Lab initial commit 8 anos atrás
play.cpp Lab initial commit 8 anos atrás
play.h Lab initial commit 8 anos atrás
work.cpp Lab initial commit 8 anos atrás

README.md

English | Español

Estructuras de Selección - Juego de Desplazamiento de coche

En casi todas las instancias en que queremos resolver un problema hay una o más opciones que dependen de si se cumplen o no ciertas condiciones. Los programas de computadoras se construyen para resolver problemas y, por lo tanto, deben tener una estructura que permita tomar decisiones. En C++ las instrucciones de decisión (o condicionales) se estructuran utilizando if, else, else if o switch. Muchas veces el uso de estas estructuras también envuelve el uso de expresiones de relación y operadores lógicos. En la experiencia de laboratorio de hoy practicarás el uso de algunas estructuras de decisión completando el diseño de una aplicación de juego de colisiones de carros con obstáculos en una pista.

Objetivos:

  1. Utilizar expresiones relacionales y seleccionar operadores lógicos adecuados para la toma de decisiones.
  2. Aplicar estructuras de decisión.

Pre-Lab:

Antes de llegar al laboratorio debes:

  1. Haber repasado los siguientes conceptos: a. operadores lógicos b. if, else, else if, switch

  2. Haber estudiado los conceptos e instrucciones para la sesión de laboratorio.

  3. Haber tomado el quiz Pre-Lab que se encuentra en Moodle.

Juego de Desplazamiento de coche.

Los juegos de colisiones consisten en un objeto esquivando la posible colisión contra otros objetos que puede descontar puntos o hacer perder el juego, y/o provocar la colisión con otros objetos que acumulan puntos. En el juego de esta experiencia el objeto es un carrito, los objetos que causan que el juego pare son pinos, agujeros, entre otros y los otros objetos que suman puntos son las banderas.

Los controles del juego son bien sencillos, la tecla hacia arriba desplaza el carro hacia arriba y la tecla hacia abajo desplaza el carro hacia abajo. El carro es desplazado hacia arriba y hacia abajo para esquivar los obstáculos y para capturar las banderas. De haber una colisión con un obstáculo el juego se detiene. El jugador puede continuar marcando el botón de Retry.

Sesión de laboratorio:

En esta experiencia de laboratorio practicarás el uso de expresiones matemáticas y estructuras condicionales para implementar la detección de colisiones del carrito contra los obstáculos y contra las banderas.

Tu tarea es completar el diseño de la aplicación del juego.

Ejercicio 1: Familiarizate con las funciones pre-definidas

El primer paso en esta experiencia de laboratorio es familiarizarte con las funciones pre-definidas en el código. Pon enfazis en las funciones:

  • Car::getYCar() - Devuelve la posición Y del carro en la pista.
  • Flag::getXFlag() - Devuelve la posición X de la bandera en la pista.
  • Flag::getYFlag() - Devuelve la posición Y del bandera en la pista.
  • Obstacle::getXObstacle() - Devuelve la posición X del obstáculo en la pista.
  • Obstacle::getYObstacle() - Devuelve la posición Y del obstáculo en la pista.
  • Play::setScore(n) - Recibe un número entero y lo suma a la puntuación del juego.
  • Flag::hide() - Esconde la bandera. Desaparece de la pista.

Invocarás estas funciones en el código que completarás para detectar las colisiones. Note que no hay función getXCar() porque el carro nunca se mueve del eje de X.

Instrucciones

  1. Carga a Qt creator el proyecto CarScrollingGame haciendo doble “click” en el archivo CarScrollingGame.pro en el directorio Documents/eip/Conditionals-CarScrollingGame de tu computadora. También puedes ir a http://bitbucket.org/eip-uprrp/conditionals-carscrollinggame para descargar la carpeta Conditionals-CarScrollingGame a tu computadora.

  2. Configura el proyecto. El proyecto consiste de varios archivos. Solo escribirás código en el archivo work.cpp . No debes cambiar nada en los demás archivos. Sin embargo, debes familiarizarte con las funciones que ya están definidas en ellos, ya que usarás algunas de ellas para crear tu código.

    • obtstacle.cpp y obstacle.h: contienen las funciones del objeto Obstacle
    • flag.cpp y flag.h: contienen las funciones del objeto Flag
    • car.cpp y flag.h: contienen las funciones del objeto Car

Ejercicio 2: Completar la función para cambiar la pista del juego.

La función setTrack(Track track_type) recibe un variable de tipo Track que puede contener los valores:

* play::DAY - para la pista de día
* play::NIGHT - para la pista de la noche
* play::BEACH - para la pista de la playa
* play::CANDYLAND - para la pista de dulces

Esta función cambia el ambiente de la pista del juego dependiendo del tipo de track que se recibe. En este ejercicio el estudiante utilizará la estructura de condición de C++ switch para cambiar los atributos de la pista.

Los atributos que se pueden cambiar de la pista son:

* la imagen de la pista usando la función `setTrackPixmap()`
* la imagen de los obstáculos usando la función `setObstaclesPixmap()`

La función setTrackPixmap(Track ) recibe una variable de tipo Track que puede ser un valor entre (play::DAY, play::NIGHT, play::BEACH, play::CANDYLAND)

La función setObstaclePixmap(string) recibe una variable de tipo string que puede ser un valor entre (“hole”, “cone”, “it”, “zombie”, “spongebob”, “patric”, “monster”).

En este ejercicio debes completar la función setTrack() de tal manera que utilizando la estructura de selección switch se cambie la pista con el valor de tipo Track que la función setTrack() recibe y si el tipo de pista que se recibe es:

  • play::DAY - los obstáculos sean de tipo “hole” o “cone”, si el
  • play::NIGHT - los obstáculos sean de tipo “it” o “zombie”
  • play::BEACH - los obstáculos sean de tipo “spongebob” o “patric”
  • play::CANDYLAND - los obstáculos sean de tipo “monster”

En las opciones que tengan dos posibles obstáculos utilze la función rand() para escoger aleatoriamente entre un obstáculo u otro.

Ejercicio 2: Completar la función para colisiones con obstáculos.

En este ejercicio completaras la función obstacleCollision(Obstacle obs, Car car) que recibe un objeto de tipo Obstacle y otro objeto de tipo Car utilizando la estructura de selección if/else para detectar una colisión entre el obstáculo y el carro. La función devuelve cierto si hay colisión y falso si no hay colisión.

Para detectar la colisión debe solicitar las coordenadas del obstáculo y la coordenada Y del carro. Recuerde que el carro no se desplaza en la coordenada X. Por ende para que ocurra una colisión con el carro, el obstáculo debe estar en la misma coordenada X del carro y a una distancia del centro del carro hacia los lados en la coordenada Y. La coordenada X del carro se encuentra guardada en la variable constante CARX. El rango de distancia del centro del carro hacia los lados se encuentra guardada en la variable constante OBSTACLERANGE.

Si se detecta una colisión la función debe devolver true y si no debe devolver false.

Ejercicio 3: Completar la función para colisiones con banderas.

En este ejercicio completarás la función flagCollision(Obstacle obs, Car car) que recibe un objeto de tipo Obstacle y otro objeto de tipo Flag utilizando la estructura de selección if/else para detectar una colisión entre la bandera y el carro. Esta función es bien similar a la del ejericio 2, excepto que esta función no devuelve nada. Las acciones que se toman cuando se detecta la colisión se van a tomar dentro de la función.

En este caso si se detecta una colisión, se debe aumentar la puntuación del juego 30 puntos utilizando la función setScore() y esconder la bandera para que cree la ilusión de que se recogió la bandera en la colisión utilizando la función flag.hide().


English | Español

Selection Structures - Car Scrolling Game

Objectives

Throughout this exercise the students will practice:

  • if/else
  • do/while
  • setter/getters

Concepts

This laboratory consist on a simple side scrolling game. The user controls a car on the left edge of the screen, that can be moved up and down. Obstacles and checkpoints are created on the right edge of the screen, and these scroll toward the user on the left edge. The user earns a score, shown at the bottom, and the game ends when the user hits an obstacle. This laboratory is an adaptation of the assigment presented by Dave Feinberg [1].

Exercise 1

Deliverables

In the following text box, copy the code that you developed for the program. Remember to properly comment the code and use good indentation and variable naming practices.

References

[1] Dave Feinberg, http://nifty.stanford.edu/2011/feinberg-generic-scrolling-game/