Anda di halaman 1dari 9

Colegio de educacin profesional tcnica del

estado de Veracruz. Plantel #165 Lic. Jess Reyes


Heroles
Modulo: Programacin De Videojuegos
Docente: Miguel ngel Ramos Grande
Alumno:
Manuel Alexis Hurtado Morales.
Karen Lizbeth Nolasco Garca
Carrera:
Informtica
Grupo: 604 info
Matrcula: 111650246-7
Prctica 12:
Reproducir sonidos. Juego Simn Dice
Propsito de la prctica:
Crear un programa para el juego Simn Dice, juego clsico de
memoria auditiva donde se hacen reproducciones de Sonido.
Direccin del blog:
http://programaciondevideojuegosalexis.blogspot.mx/
Pr ctic 12 Sim n dice
1.- Para la elaboracin de esta prctica lo primero que realice es:
Abrir Dev-Cpp
Damos clic en ARCHIVO
Seleccionamos el men NUEVO
Enseguida damos clic en PROYECTO

2. - Se abrira la siguiente ventana y seleccionamos el men siguiente:

#include <stdlib.h>
#include <ctype.h>
#include <allegro.h>

//Constantes globales

#define ANCHOPANTALLA 320
#define ALTOPANTALLA 200
#define MAXNOTAS 300
#define RETARDONOTA 200
#define RETARDOETAPA 1000
Comentario [A1]: Inicializacin de
librerias
Comentario [A2]: Definimos el ancho
de la pantalla

#define TECLA1 'w'
#define TECLA2 'e'
#define TECLA3 's'
#define TECLA4 'd'

#define FICHEROSONIDO1 "simon1.mid"
#define FICHEROSONIDO2 "simon2.mid"
#define FICHEROSONIDO3 "simon3.mid"
#define FICHEROSONIDO4 "simon4.mid"

//Variables globales

int
notaActual = 0,
notas[MAXNOTAS],
acertado;

MIDI *sonido1, *sonido2, *sonido3, *sonido4;

//Rutina de inicializacion, aqu iniciamos en allegro, intentamos entrar a modo
grfico e intentamos usar el midi

int inicializa()
{
allegro_init();
install_keyboard();
install_timer();


if (set_gfx_mode(GFX_SAFE, ANCHOPANTALLA, ALTOPANTALLA, 0, 0) != 0)
{
set_gfx_mode(GFX_TEXT, 0, 0, 0, 0);
allegro_message(
"Incapaz de entrar a modo grafico\n%s\n",
allegro_error);
return 1;
}


if (install_sound(DIGI_AUTODETECT, MIDI_AUTODETECT, "") != 0) {
allegro_message("Error inicializando el sistema de sonido\n%s\n",
allegro_error);
return 2;
}

sonido1 = load_midi(FICHEROSONIDO1);
Comentario [A3]: Definimos las teclas
a utilizar
Comentario [A4]: Definimos los
ficheros de sonido a utilizar
Comentario [A5]: Instalamos el teclado
if (!sonido1) {
allegro_message("Error leyendo el fichero MID '%s'\n", FICHEROSONIDO1);
return 3;
}

sonido2 = load_midi(FICHEROSONIDO2);
if (!sonido2) {
allegro_message("Error leyendo el fichero MID '%s'\n", FICHEROSONIDO2);
return 3;
}

sonido3 = load_midi(FICHEROSONIDO3);
if (!sonido3) {
allegro_message("Error leyendo el fichero MID '%s'\n", FICHEROSONIDO3);
return 3;
}

sonido4 = load_midi(FICHEROSONIDO4);
if (!sonido4) {
allegro_message("Error leyendo el fichero MID '%s'\n", FICHEROSONIDO4);
return 3;
}

// Preparo nmeros aleatorios
srand(time(0));

// Volumen al mximo, por si acaso
set_volume(255,255);

// Y termino indicando que no ha habido errores
return 0;
}

//Rutina de dibujar pantalla, aqu se dibuja el ambiente grfico, nuestra pantalla
contar con cuatro rectngulos de colores..

void dibujaPantalla()
{

// Borro pantalla
clear_bitmap(screen);

// Primer sector: SupIzq -> verde
rectfill(screen, 10,10,
ANCHOPANTALLA/2-10,ALTOPANTALLA/2-30,
makecol(0, 150, 0));
textprintf(screen, font, ANCHOPANTALLA/4, ALTOPANTALLA/2-28,
Comentario [A6]: Mensajes a mostrar
en caso de error de algn sonido
makecol(0, 150, 0), "%c",
TECLA1);

// Segundo sector: SupDcha -> rojo
rectfill(screen, ANCHOPANTALLA/2+10,10,
ANCHOPANTALLA-10,ALTOPANTALLA/2-30,
makecol(150, 0, 0));
textprintf(screen, font, ANCHOPANTALLA/4*3, ALTOPANTALLA/2-28,
makecol(150, 0, 0), "%c",
TECLA2);

// Tercer sector: InfIzq -> amarillo
rectfill(screen, 10,ALTOPANTALLA/2-10,
ANCHOPANTALLA/2-10,ALTOPANTALLA-50,
makecol(200, 200, 0));
textprintf(screen, font, ANCHOPANTALLA/4, ALTOPANTALLA-48,
makecol(200, 200, 0), "%c",
TECLA3);

// Cuarto sector: InfDcha -> azul
rectfill(screen, ANCHOPANTALLA/2+10,ALTOPANTALLA/2-10,
ANCHOPANTALLA-10,ALTOPANTALLA-50,
makecol(0, 0, 150));
textprintf(screen, font, ANCHOPANTALLA/4*3, ALTOPANTALLA-48,
makecol(0, 0, 150), "%c",
TECLA4);


textprintf(screen, font, 4,ALTOPANTALLA-20, palette_color[13],
"Puntos: %d", notaActual*10); // Puntuacin
}

//Rutina de reproducir notas, se reproducen al azar, es cuando el que juega debe
de igualar las notas que se reproducen en est parte

void reproduceNotas()
{
int i;

for (i=0; i<=notaActual; i++) {

if (notas[i] == 0) {
play_midi(sonido1, FALSE);
rectfill(screen, 10,10,
ANCHOPANTALLA/2-10,ALTOPANTALLA/2-30,
makecol(255, 255, 255));
}
Comentario [A7]: Sector verde
Comentario [A8]: Sector rojo
Comentario [A9]: Sector amarillo
Comentario [A10]: Sector azul

if (notas[i] == 1) {
play_midi(sonido2, FALSE);
rectfill(screen, ANCHOPANTALLA/2+10,10,
ANCHOPANTALLA-10,ALTOPANTALLA/2-30,
makecol(255, 255, 255));
}

if (notas[i] == 2) {
play_midi(sonido3, FALSE);
rectfill(screen, 10,ALTOPANTALLA/2-10,
ANCHOPANTALLA/2-10,ALTOPANTALLA-50,
makecol(255, 255, 255));
}

if (notas[i] == 3) {
play_midi(sonido4, FALSE);
rectfill(screen, ANCHOPANTALLA/2+10,ALTOPANTALLA/2-10,
ANCHOPANTALLA-10,ALTOPANTALLA-50,
makecol(255, 255, 255));
}
rest(RETARDONOTA);
dibujaPantalla();
}
}

//Ahora se comparan las notas reproducidas y las que el jugador hace...

int comparaNota(char tecla, int notaActual)
{
int i;

// Presupongo que no ha acertado y comparare 1 x 1
int seHaAcertado = 0;

if ( (tecla == TECLA1) && (notas[notaActual] == 0) ){
play_midi(sonido1, FALSE);
rectfill(screen, 10,10,
ANCHOPANTALLA/2-10,ALTOPANTALLA/2-30,
makecol(255, 255, 255));
seHaAcertado = 1;
}

if ( (tecla == TECLA2) && (notas[notaActual] == 1) ){
play_midi(sonido2, FALSE);
rectfill(screen, ANCHOPANTALLA/2+10,10,
ANCHOPANTALLA-10,ALTOPANTALLA/2-30,
Comentario [A11]: Uso de los if para
activar el sonido segn el cuadro que
presiones
makecol(150, 0, 0));
seHaAcertado = 1;
}

if ( (tecla == TECLA3) && (notas[notaActual] == 2) ){
play_midi(sonido3, FALSE);
rectfill(screen, 10,ALTOPANTALLA/2-10,
ANCHOPANTALLA/2-10,ALTOPANTALLA-50,
makecol(200, 200, 0));
seHaAcertado = 1;
}

if ( (tecla == TECLA4) && (notas[notaActual] == 3) ){
play_midi(sonido4, FALSE);
rectfill(screen, ANCHOPANTALLA/2+10,ALTOPANTALLA/2-10,
ANCHOPANTALLA-10,ALTOPANTALLA-50,
makecol(255, 255, 255));
seHaAcertado = 1;
}

return seHaAcertado;
}

//Y por ltimo el cuerpo del programa...

int main()
{

int i;
char tecla;

// Intento inicializar
if (inicializa() != 0)
exit(1);

dibujaPantalla();
textprintf(screen, font, ANCHOPANTALLA/4, ALTOPANTALLA/2 - 40,
makecol(255, 255, 255), " S I M E O N D I C E ");
textprintf(screen, font, ANCHOPANTALLA/4, ALTOPANTALLA/2,
makecol(255, 255, 255), "Pulsa una tecla para jugar");
readkey();

do { // Parte que se repite hasta que falle

dibujaPantalla(); // Dibujo la pantalla de juego

// Genero nueva nota y reproduzco todas
Comentario [A12]: Comprobamos con
los if si el cuadro presionado fue igual al
sonido mostrado
notas[notaActual] = rand() % 4;
reproduceNotas();

acertado = 1; // Presupongo que acertar

// Ahora el jugador intenta repetir
i = 0;
do {
tecla = tolower(readkey()); // Leo la tecla
if (tecla == 27) break; // Salgo si es ESC
acertado = comparaNota(tecla, i); // Comparo
i ++; // Y paso a la siguiente
} while ((i<=notaActual) && (acertado == 1));

// Una nota ms
if (acertado == 1) {
textprintf(screen, font,
ANCHOPANTALLA/4, ALTOPANTALLA/2,
makecol(255, 255, 255), "Correcto!");
notaActual ++;
}
else {
textprintf(screen, font,
ANCHOPANTALLA/4, ALTOPANTALLA/2,
makecol(255, 255, 255), "Fallaste!");
}

rest (RETARDOETAPA);

} while ((acertado == 1) && (notaActual < MAXNOTAS));


textprintf(screen, font,
ANCHOPANTALLA/4, ALTOPANTALLA/2 + 20, palette_color[15],
"Partida terminada");
readkey();
return 0;

}

END_OF_MAIN();


Esta prctica es diferente a las que hemos hecho utilizamos sonidos .mid y los
mandamos a llamar en nuestro cdigo del programa, tambin utilizamos varios
mensajes a desplegar en caso de error en algn sonido.
Utilizamos varios ciclos if, do- while, y reforzamos conocimientos, ya que estos
ciclos los hemos utilizado en todas las programaciones que hemos utilizado en los
ltimos 5 semestres de la carrera.

Anda mungkin juga menyukai