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

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

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.