Accueil > > > PONG
PONG
Information sur la source
Description
C'est un petit pong fait avec allegro. La balle rebondi contre les murs et contre la palette. La balle peux rebondir de 5 façons sur la palette et elle peux prendre 4 directions au départ. In zip: main.cpp, l'exe, alleg41.dll, raquette.bmp, balle.bmp, balle.wav (pour quand la balle rebondi sur la palette). Vous excuserez les graphiques pas beaux et le son un peu pourris. Si il y a des bugs, merci de me le faire savoir. Soyez indulgents c mon premier prog avec allegro.
Source
- // main.cpp, Rafael Guglielmetti, 18.02.2003, coockiesch@yahoo.fr
-
- #include <allegro.h>
-
- void initialisations();
- void definir_balle();
-
- int balle_x, balle_y;
- int incrementation_x, incrementation_y;
- int raquette_x;
- int touche, perdu = 0;
- double vitesse;
- bool choix = false, jouer = true;
-
- int main()
- {
- initialisations();
-
- BITMAP *buffer, *raquette, *balle;
- SAMPLE *son_balle;
- buffer = create_bitmap(SCREEN_W, SCREEN_H);
- raquette = load_bitmap("raquette.bmp", NULL);
- balle = load_bitmap("balle.bmp", NULL);
- son_balle = load_sample("balle.wav");
-
- // vérif que tous les fichiers sont la
- // (raquette.bmp, balle.bmp, balle.wav)
- if(!raquette || !balle)
- {
- set_gfx_mode(GFX_TEXT, 0, 0, 0, 0);
- allegro_message("Le fichier raquette.bmp et/ou le \nfichier balle.bmp n'a pas ete trouve!");
- exit(1);
- }
- if(!son_balle)
- {
- set_gfx_mode(GFX_TEXT, 0, 0, 0, 0);
- allegro_message("Le fichier balle.wav n'a pas ete trouve!");
- exit(1);
- }
-
- clear_bitmap(buffer);
-
- clear_keybuf();
- textout_centre(buffer, font, "Tapez l pour lent, m pour moyen ou r pour rapide", SCREEN_W / 2, SCREEN_H / 2, makecol(255, 255, 255));
- blit(buffer, screen, 0, 0, 0, 0, SCREEN_W, SCREEN_H);
-
- while(!choix)
- {
- if(keypressed())
- {
- touche = readkey() >> 8;
- if(touche == KEY_L)
- {
- vitesse = 2;
- choix = true;
- }
- else if(touche == KEY_M)
- {
- vitesse = 1;
- choix = true;
- }
- else if(touche == KEY_R)
- {
- vitesse = 0.5;
- choix = true;
- }
- }
- }
-
- raquette_x = (SCREEN_W - raquette->w) / 2;
- definir_balle();
-
- // jeu
- while(jouer)
- {
- if(keypressed())
- {
- touche = readkey() >> 8;
- if(touche == KEY_ESC)
- jouer = false;
- }
-
- // collision?
- // contre plafond
- if(balle_y <= 0 + balle->h / 2)
- incrementation_y = -incrementation_y;
- // contre mur
- if(balle_x <= 0 + balle->w / 2 || balle_x >= SCREEN_W - balle->w)
- incrementation_x = -incrementation_x;
- // contre raquette
- if(balle_y >= SCREEN_H - 5 - raquette->h - balle->h && balle_x >= raquette_x - balle->w / 2 && balle_x <= raquette_x + (raquette->w - balle->w/2))
- {
- // 5 possibilités : milieu, début -> 1/4, 1/4 -> 1/2, 1/2 -> 3/4, 3/4 -> fin
- if(balle_x + balle->w / 2 < raquette_x + raquette->w / 4)
- incrementation_x = -4;
- else if(balle_x + balle->w / 2 >= raquette_x + raquette->w / 4 && balle_x + balle->w / 2 < raquette_x + raquette->w / 2)
- incrementation_x = -2;
- else if(balle_x + balle->w / 2 == raquette_x + raquette->w / 2)
- incrementation_x = 0;
- else if(balle_x + balle->w / 2 > raquette_x + raquette->w / 2 && balle_x + balle->w / 2 < raquette_x + raquette->w * 0.75)
- incrementation_x = 2;
- else if(balle_x + balle->w / 2 >= raquette_x + raquette->w * 0.75)
- incrementation_x = 2;
-
- incrementation_y = -incrementation_y;
- play_sample(son_balle, 255, 128, 1000, 0);
- }
- // balle meurt
- else if(balle_y >= SCREEN_H - 5 - raquette->h - balle->h)
- {
- definir_balle();
- ++perdu;
- }
-
- // mouvement de la raquette
- raquette_x = mouse_x;
- if(raquette_x > SCREEN_W - raquette->w)
- raquette_x = SCREEN_W - raquette->w;
- // mouvement de la balle
- balle_x += incrementation_x / vitesse;
- balle_y += incrementation_y / vitesse;
-
- clear_bitmap(buffer);
- //affichage
- textprintf_centre(buffer, font, SCREEN_W / 2, 5, makecol(156, 135, 241), "Nombre de balle perdues: %d", perdu);
- masked_blit(balle, buffer, 0, 0, balle_x, balle_y, balle->w, balle->h);
- blit(raquette, buffer, 0, 0, raquette_x, SCREEN_H - raquette->h - 5, raquette->w, raquette->h);
- blit(buffer, screen, 0, 0, 0, 0, SCREEN_W, SCREEN_H);
- }
-
- return 0;
- }
- END_OF_MAIN();
-
- void initialisations()
- {
- // Fonction d'initialisation générale
- install_allegro(SYSTEM_AUTODETECT, &errno, atexit);
- install_keyboard();
- install_mouse();
- install_sound(DIGI_AUTODETECT, MIDI_AUTODETECT, "pong");
- // on passse en 65536 couleurs
- set_color_depth(16);
- //on passe en 800*600
- set_gfx_mode(GFX_AUTODETECT, 800, 600, 0, 0);
-
- // on teste la souris, si pas la on quitte
- if(install_mouse() == -1)
- {
- set_gfx_mode(GFX_TEXT, 0, 0, 0, 0);
- allegro_message("La souris n'a pas pu etre installee! ");
- exit(1);
- }
- // on teste le passage en 800*600
- if(set_gfx_mode(GFX_AUTODETECT, 800 ,600, 0, 0) != 0)
- {
- set_gfx_mode(GFX_TEXT, 0, 0, 0, 0);
- allegro_message("Probleme video! ");
- exit(1);
- }
- // initialisation pour les nombres pseudo_aléatoires
- srand((unsigned)time(NULL));
- }
-
- void definir_balle()
- {
- balle_x = SCREEN_W / 2;
- balle_y = SCREEN_H / 4;
- incrementation_x = 2;
- incrementation_y = 2;
-
- // on ajoute un peu hasard à la direction de départ de la balle
- // (4 possibilités)
- if(rand() % 2 == 0)
- incrementation_x = -incrementation_x;
- if(rand() % 2 == 0)
- incrementation_y = -incrementation_y;
- }
// main.cpp, Rafael Guglielmetti, 18.02.2003, coockiesch@yahoo.fr
#include <allegro.h>
void initialisations();
void definir_balle();
int balle_x, balle_y;
int incrementation_x, incrementation_y;
int raquette_x;
int touche, perdu = 0;
double vitesse;
bool choix = false, jouer = true;
int main()
{
initialisations();
BITMAP *buffer, *raquette, *balle;
SAMPLE *son_balle;
buffer = create_bitmap(SCREEN_W, SCREEN_H);
raquette = load_bitmap("raquette.bmp", NULL);
balle = load_bitmap("balle.bmp", NULL);
son_balle = load_sample("balle.wav");
// vérif que tous les fichiers sont la
// (raquette.bmp, balle.bmp, balle.wav)
if(!raquette || !balle)
{
set_gfx_mode(GFX_TEXT, 0, 0, 0, 0);
allegro_message("Le fichier raquette.bmp et/ou le \nfichier balle.bmp n'a pas ete trouve!");
exit(1);
}
if(!son_balle)
{
set_gfx_mode(GFX_TEXT, 0, 0, 0, 0);
allegro_message("Le fichier balle.wav n'a pas ete trouve!");
exit(1);
}
clear_bitmap(buffer);
clear_keybuf();
textout_centre(buffer, font, "Tapez l pour lent, m pour moyen ou r pour rapide", SCREEN_W / 2, SCREEN_H / 2, makecol(255, 255, 255));
blit(buffer, screen, 0, 0, 0, 0, SCREEN_W, SCREEN_H);
while(!choix)
{
if(keypressed())
{
touche = readkey() >> 8;
if(touche == KEY_L)
{
vitesse = 2;
choix = true;
}
else if(touche == KEY_M)
{
vitesse = 1;
choix = true;
}
else if(touche == KEY_R)
{
vitesse = 0.5;
choix = true;
}
}
}
raquette_x = (SCREEN_W - raquette->w) / 2;
definir_balle();
// jeu
while(jouer)
{
if(keypressed())
{
touche = readkey() >> 8;
if(touche == KEY_ESC)
jouer = false;
}
// collision?
// contre plafond
if(balle_y <= 0 + balle->h / 2)
incrementation_y = -incrementation_y;
// contre mur
if(balle_x <= 0 + balle->w / 2 || balle_x >= SCREEN_W - balle->w)
incrementation_x = -incrementation_x;
// contre raquette
if(balle_y >= SCREEN_H - 5 - raquette->h - balle->h && balle_x >= raquette_x - balle->w / 2 && balle_x <= raquette_x + (raquette->w - balle->w/2))
{
// 5 possibilités : milieu, début -> 1/4, 1/4 -> 1/2, 1/2 -> 3/4, 3/4 -> fin
if(balle_x + balle->w / 2 < raquette_x + raquette->w / 4)
incrementation_x = -4;
else if(balle_x + balle->w / 2 >= raquette_x + raquette->w / 4 && balle_x + balle->w / 2 < raquette_x + raquette->w / 2)
incrementation_x = -2;
else if(balle_x + balle->w / 2 == raquette_x + raquette->w / 2)
incrementation_x = 0;
else if(balle_x + balle->w / 2 > raquette_x + raquette->w / 2 && balle_x + balle->w / 2 < raquette_x + raquette->w * 0.75)
incrementation_x = 2;
else if(balle_x + balle->w / 2 >= raquette_x + raquette->w * 0.75)
incrementation_x = 2;
incrementation_y = -incrementation_y;
play_sample(son_balle, 255, 128, 1000, 0);
}
// balle meurt
else if(balle_y >= SCREEN_H - 5 - raquette->h - balle->h)
{
definir_balle();
++perdu;
}
// mouvement de la raquette
raquette_x = mouse_x;
if(raquette_x > SCREEN_W - raquette->w)
raquette_x = SCREEN_W - raquette->w;
// mouvement de la balle
balle_x += incrementation_x / vitesse;
balle_y += incrementation_y / vitesse;
clear_bitmap(buffer);
//affichage
textprintf_centre(buffer, font, SCREEN_W / 2, 5, makecol(156, 135, 241), "Nombre de balle perdues: %d", perdu);
masked_blit(balle, buffer, 0, 0, balle_x, balle_y, balle->w, balle->h);
blit(raquette, buffer, 0, 0, raquette_x, SCREEN_H - raquette->h - 5, raquette->w, raquette->h);
blit(buffer, screen, 0, 0, 0, 0, SCREEN_W, SCREEN_H);
}
return 0;
}
END_OF_MAIN();
void initialisations()
{
// Fonction d'initialisation générale
install_allegro(SYSTEM_AUTODETECT, &errno, atexit);
install_keyboard();
install_mouse();
install_sound(DIGI_AUTODETECT, MIDI_AUTODETECT, "pong");
// on passse en 65536 couleurs
set_color_depth(16);
//on passe en 800*600
set_gfx_mode(GFX_AUTODETECT, 800, 600, 0, 0);
// on teste la souris, si pas la on quitte
if(install_mouse() == -1)
{
set_gfx_mode(GFX_TEXT, 0, 0, 0, 0);
allegro_message("La souris n'a pas pu etre installee! ");
exit(1);
}
// on teste le passage en 800*600
if(set_gfx_mode(GFX_AUTODETECT, 800 ,600, 0, 0) != 0)
{
set_gfx_mode(GFX_TEXT, 0, 0, 0, 0);
allegro_message("Probleme video! ");
exit(1);
}
// initialisation pour les nombres pseudo_aléatoires
srand((unsigned)time(NULL));
}
void definir_balle()
{
balle_x = SCREEN_W / 2;
balle_y = SCREEN_H / 4;
incrementation_x = 2;
incrementation_y = 2;
// on ajoute un peu hasard à la direction de départ de la balle
// (4 possibilités)
if(rand() % 2 == 0)
incrementation_x = -incrementation_x;
if(rand() % 2 == 0)
incrementation_y = -incrementation_y;
}
Conclusion
Je ne crois pas que trops de bugs soient présents.
Je vais essayer de généraliser la procédure de collision afin d'en faire PEUT-ETRE un jeu casse brique.
Sources du même auteur
Sources de la même categorie
Commentaires et avis
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Forum
MATRICE TEMPLATEMATRICE TEMPLATE par hjr2610
Cliquez pour lire la suite par hjr2610 RE : SAC A DOS RE : SAC A DOS par hadjkaddour
Cliquez pour lire la suite par hadjkaddour
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|