Está en la página 1de 10

Colegio de Educacin Profesional Tcnica del Estado de

Veracruz
Plantel Tuxpan Lic. Jess Reyes Heroles165
Docente: Miguel ngel Ramos Grande
Modulo: Programacin de videojuegos
Practica 12: Reproducir sonidos. Juego Simen Dice usando
lenguaje de programacin
Propsito: Elabora una aplicacin de videojuego Simen Dice
usando lenguaje de programacin para generar el juego
clsico de memoria auditiva donde se hacen reproducciones
de sonido.
Alumnas:
Diana Laura Ramrez Xochihua
Lucia Ramrez Xochihua





604-INFORMATICA


INTRODUCION
En esta prctica se realiz el videojuego de Simen dice en cual consista en
repetir una secuencia de sonidos (y luces) que nos iba proporcionando la
computadora: primero mostraba una sola nota; si la recordamos, se aada una
segunda nota; si recordbamos estas dos se aada una tercera, despus una
cuarta y as sucesivamente hasta que cometamos un error. Todo mediante
ficheros con formatos MID.

Desarrollo:
Lo primero que hice fue abrir el programa
Dev-C++ >archivo > nuevo >proyecto.
Despus de eso nos parece una ventana en
la cual tenemos que dar clic en
Multimedia>Allegro aplication (static)
>colocamos el nombre de nuestro proyecto>y
damos enter.
Cundo se da el enter inmediatamente nos
manda a la ventana en la cual
seleccionamos la opcin de Multimedia >
Allegro application [static].
Despus de que seleccionamos
estas opciones colocamos en
nombre del proyecto, en mi caso
yo le puse Practica11, luego de
haber echo eso damos enter y
automticamente nos manda a
nuestra pgina de cdigo donde se
comienza a programar.
Pautas generales.
cin.



Recuerda que los principales tipos de sonidos por computadora que sirven
para juegos y reproducirlos son los siguientes:
1) Sonidos simples mediante el altavoz
Emitir un sonido de una cierta frecuencia durante un cierto tiempo. Se
pueden usar las ordenes de emitir un sonido con la orden "sound(freq)"
donde "freq" es la frecuencia del sonido . Paramos este sonido con
"nosound". Para que el sonido dure un cierto tiempo, podemos usar
"delay(ms)" para esperar una cantidad de milisegundos, o bien hacer otra
cosa mientras se escucha el sonido y comprobar la hora continuamente.
Existen estas rdenes para muchos compiladores de C como Turbo C y
DJGPP (para DJGPP estn declaradas en "pc.h"): sound(freq); ... nosound().
2) Sonidos digitalizados.
Capturar un sonido con la ayuda de un micrfono y reproducirlo
posteriormente. El estndar en Windows es el formato WAV, Otro formato
conocido es el VOC, de
Creative Labs, la casa desarrolladora de las tarjetas de sonido SoundBlaster. Y un
tercer formato, es el AU. Hay herramientas para convertir de un formato a otro. Un
cuarto formato es el formato MP3, que es un formato comprimido, lo que supone
una cierta prdida de calidad a cambio de ocupar menos espacio
(habitualmente cerca de un 10% de lo que ocupara el WAV correspondiente).
Usar secuencia de rdenes para capturar un sonido con la Grabadora de
Windows, guardarlo en formato WAV y reproducirlo. En la orden "play_sample" los
parmetros que se indican son: el sonido a reproducir, el volumen (0 a 255), el
desplazamiento (posicin a partir de la que reproducir, "pan", 0 a 255), la
frecuencia (relativa: 1000 es la velocidad original, 2000 es el doble y as
sucesivamente) y si se debe repetir (TRUE para si y FALSE para no repetir). Si un
sonido se est repitiendo, para pararlo se usa "stop_sample".
3) Melodas MIDI.
Son melodas formadas por secuencias de notas. Se crean con programas que
muestran partituras en pantalla, o incluso conectando ciertos instrumentos
musicales electrnicos (teclados) a una conexin que muchos computadoras
incluyen (MIDI: Musical Instrument Device Interface). Entornos como Windows (e
incluso muchos telfonos mviles actuales) incluyen reproductores de sonido
capaces de manejar ficheros MID . Se puede reproducir los sonidos con la orden
"play_midi", "play_sample".
4) Melodas MOD y similares (S3M, XM, etc).
Son formatos ms complejos que el anterior, ya que junto con las notas a
reproducir se detalla cmo "suena" cada uno de los instrumentos (normalmente
usando una "muestra" digitalizada -en ingls: "sample").
Construir un algoritmo para Juego Simn dice


Cdigo
#include <stdlib.h> // Para "rand"
#include <ctype.h> // Para "tolower"
#include <allegro.h>

/* -------------- Constantes globales ------------- */
#define ANCHOPANTALLA 320
#define ALTOPANTALLA 200
#define MAXNOTAS 300
#define RETARDONOTA 200
#define RETARDOETAPA 1000

#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, // Numero de nota actual
notas[MAXNOTAS], // Secuencia de notas
acertado; // Si se ha acertado o no

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

/* -------------- Rutina de inicializacin -------- */
int inicializa()
{
allegro_init(); // Inicializamos Allegro
install_keyboard();
install_timer();

// Intentamos entrar a modo grafico
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;
}

// e intentamos usar midi
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);
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 ------ */
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,
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); // Puntuaci?n
}


/* -------------- Rutina de reproducir notas ------ */
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));
}

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();
}
}

/* -------------- Rutina de comparar notas ------ */
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,
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;
}

/* -------------- 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
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();










Pantallas de la la practica en ejecucion


CONCLUSION:
En esta prctica realizada, al momento de ejecutar marcaba error con los
ficheros MIDI y comprend que no se poda por el Windows 8 que tena la
computadora y en mi casa y funciono correctamente tambin para que
funcionara se tena que guardar los sonidos en la misma carpeta de la prctica.