Marchez lemmings marchez... [borland c++]

Soyez le premier à donner votre avis sur cette source.

Vue 4 680 fois - Téléchargée 203 fois

Description

Ce prog laisse marcher 3 lemmings de droite a gauche et de gauche a droite, jusqu'a l appuie d'une touche. Ce prog est ecrit en c++ et testé sous borland c++ 5.02 . L'affichage se fait en 320*200 avec 256 couleurs. ce source permet de voir comment se fait la programmation graphique sous borland. biensur ici il n'y a qu'une petite possibilité de se que l'on peut faire.

Source / Exemple :


#include <iostream.h>
#include <stdio.h>
#include <bios.h>
#include <dos.h>
#include <mem.h>
#include <conio.h>
#include <stdlib.h>
#include <math.h>

#include "moteur.h"  /* inclut dans le fichier zip */

/*******************************************************************************
								Methodes de la classe moteur2D

                                                                                                                                                              • /
void moteur2D::mode_vga() { _AX=0x13; /* l'interruption 13h signifie que l'on veut se mettre en 320*200 256 c */ geninterrupt(0x10); /* on lance l'interruption, 10 est la requete de l'interuption de la carte video*/ }; void moteur2D::texte() { /* idem que pour mode_vga */ _AX=0x03; geninterrupt(0x10); }; void moteur2D::palette() { /* creatiuon de la palette des couleurs (bientot modifier) */ int i; for(i=0;i<63;i++) table_palette(i,i,0,0); for(i=64;i<127;i++) table_palette(i,0,i,0); for(i=128;i<191;i++) table_palette(i,0,0,i); for(i=192;i<255;i++) table_palette(i,i,i,i); }; void moteur2D::table_palette(unsigned char index, unsigned char rouge, unsigned char vert, unsigned char bleu) { outportb(0x03c8,index); outportb(0x03c9,rouge); outportb(0x03c9,vert); outportb(0x03c9,bleu); }; void moteur2D::couleur_fond(unsigned char couleur) { /* initialiser tous les pixels de l'ecran avec une couleur*/ int x,y; for(x=0;x<320;x++) for(y=0;y<200;y++) virtuel[320*y+x]=couleur; }; void moteur2D::droite(int x,int y,unsigned char coul) { /* dessiner une droite */ int i; /* on commence de la gauche de l'ecran jusqu'a x, avec x<=320*/ for(i=0;i<x;i++) virtuel[320*y+i]=coul; }; void moteur2D::afficher() { /* copier le pointeur "virtuel" sur l'ecran" */ memcpy(ecran,virtuel,64000); }; void moteur2D::effacer() { /* initialiser a 0 le pointeur virtuel */ memset(virtuel,0,64000); }; /******************************************************************************* Fin methode de la classe moteur2D
                                                                                                                                                              • /
/****************************************************************************** Methode de la classe lemmings
                                                                                                                                                            • /
/* sens =0 gauche-> droite, sens =1 droite-> gauche*/ int lemmings::affiche_lemming(int x, int y,int position_lemming[]) { /* bon bah permet d'afficher le lem */ int i,cpt=0; for(i=0;i<60;i++) { /* sens permet d'afficher le lem soit regardant vers la droite soit en regardant vers la gauche*/ if(sens==0) virtuel[320*y+(x++)]=position_lemming[i]; else virtuel[320*y+(x--)]=position_lemming[i]; cpt++; /* lorsque 'cpt' vaut 6 cela signifie qu'une ligne entiere du lem a ete copier sur l'ecran virtuel, donc il faut passer a la ligne suivante*/ if(cpt==6) { cpt=0; y++; if(sens==0) x=x-6; else x=x+6; } } /* 'y' a la valeur de la derniere ligne+1 du dessin du lem */ return y; }; int lemmings::choix_position_lem(int x, int y,int compteur) { int y_pos; switch(compteur) { /* choisir d'afficher un des mouvement du lem, ici j ai decidé que le lem aurait 4 positions */ case 1: y_pos=affiche_lemming(x,y,lemming_position1); break; case 2: y_pos=affiche_lemming(x,y,lemming_position2); break; case 3: y_pos=affiche_lemming(x,y,lemming_position3); break; case 4: y_pos=affiche_lemming(x,y,lemming_position4); break; } return y_pos; }; /******************************************************************************* Fin des methodes de la classe lemmings
                                                                                                                                                              • /
void main() { moteur2D mon_moteur; lemmings mon_lem[NB_MAX_LEM]; /* x est un tableau pour permettre l'affichage de plusieurs lemmings*/ int i,x[NB_MAX_LEM],y,y_reference,compteur=1; /* 'y' prend la valeur où sera le haut du lem*/ y=150; /* 'x' indique où seront placer les différents lems lors du lancement du prog */ x[0]=10; x[1]=50; x[2]=30; /* donner un sens par defaut, ici de la gauche vers la droite*/ mon_lem[0].sens=0; mon_lem[1].sens=0; mon_lem[2].sens=0; mon_moteur.mode_vga(); mon_moteur.palette(); /* faire tant que aucune touche ne soit appuyé */ while(!kbhit()) { mon_moteur.effacer(); /* faire autant de fois qu'il y a de lem, si il n'y a qu'un seul lem cette boucle n'est meme pas utile */ for(i=0;i<3;i++) { /* 'compteur' permet de selectionner le mouvement du lem situé dans lachoix_position_lem() de la classe lemmings */ if(compteur>4) compteur=1; /*'mon_lem[i]' selectionne un lem parmis ceux qu'on veux afficher, 'x[i]' coorespond au placement du lem selectionner, 'compteur' selectionne le mouvement a afficher a l'ecran*/ y_reference=mon_lem[i].choix_position_lem(x[i],y,compteur); /*cette condition permet de faire marcher le lem de la gauche vers la droite */ if(mon_lem[i].sens==0) { x[i]=x[i]+5; } /*cette condition permet de faire marcher le lem de la droite vers la gauche */ else { x[i]=x[i]-5; } /* condition evitant que la variable 'x' ne dépacer les valeurs autorise, autrement dit 0<x>321*/ if(x[i]>310) mon_lem[i].sens=1; if(x[i]<5) mon_lem[i].sens=0; } /* tracer de droite sous les pieds des lem de couleurs différentes */ mon_moteur.droite(320,y_reference,35); mon_moteur.droite(320,y_reference+1,20); compteur=compteur+1; delay(300); /* tempo */ mon_moteur.afficher(); /* afficher "virtuel" a l'ecran */ } mon_moteur.texte(); /* se mettre en mode texte */ cout<<"A bientot..."; free(virtuel); /* liberer l'espace alloue en memoire */ }

Conclusion :


si ca vous interesse on recherche tjs des developpeurs pour le projet commun Lemmings, pour decouvrir bcp plus de fonctions graphiques.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

cs_bobby03
Messages postés
71
Date d'inscription
lundi 30 décembre 2002
Statut
Membre
Dernière intervention
24 juin 2019
-
Très bon tes lemmings, quand je comprendrez plus je pourrais peut être le faire en windows.
cs_Draven
Messages postés
62
Date d'inscription
dimanche 22 octobre 2000
Statut
Membre
Dernière intervention
8 octobre 2006
-
merci bobby03.
si tu le fais en windows tu pourras me passer ta source que je vois comment tu l as fait. si tu veux plus d explication demande moi. pour les autre ausi, si les commentaires ne sont pas suffisant posez moi des questions.
dolphin84
Messages postés
5
Date d'inscription
jeudi 10 avril 2003
Statut
Membre
Dernière intervention
24 février 2005
-
Salut...
Excellent ton prog d'animation ... ca m'a rappelle de bons souvenirs et surtout de prises de tete.
Oui, par contre, si tu le programme en WINDOWS, je serai interessé aussi pour avoir les sources...
Meme si à mes yx, la programme est plus difficile sous borlandc que sur WINDOWS.
Bonne continuation...
cs_Draven
Messages postés
62
Date d'inscription
dimanche 22 octobre 2000
Statut
Membre
Dernière intervention
8 octobre 2006
-
merci dolphin84 ca fait plaisir
a+
cs_slims
Messages postés
14
Date d'inscription
jeudi 12 décembre 2002
Statut
Membre
Dernière intervention
9 avril 2005
-
Salut,
interessant ton source tu pourrais me dire ou ce trouve cette fonction
outportb() dans quel fichier d en tete.
J utilise builder merci d avance.:)

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.