begin process at 2012 05 30 06:10:43
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

Programmation graphique...


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Programmation graphique...

jeudi 10 avril 2003 à 17:03:21 | Programmation graphique...

yafuka

Yafuka ( * _ * )

salut je fais mes premiers pas en programmation graphique. je suis actuellement un tutorial et je n arrive pas a compiler la source. quelqu'un pourrait m'aider ou me conseiller sur un site ou meme le compilateur a utiliser ?

le code est ci dessous..

//////////////////////////// debut du code //////////////////

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <dos.h>
#include <mem.h>

#define MAX_ETOILES 500

char far *vga = (char far *) MK_FP(0xA000, 0); // pointeur sur memoire video

typedef unsigned char byte; // char non signe 0-255

typedef struct type_etoile // pour contenir les infos sur chaque etoiles
{
int x,y,z;
};


/****************************************************************************/
/* SetVGA - Appelle le mode 320x200x256 13h du BIOS */
/****************************************************************************/
void SetVGA()
{
_AX = 0x0013;
geninterrupt (0x10);
}


/****************************************************************************/
/* Putpixel - Affiche un pixel directement dans la memoire */
/****************************************************************************/
void Putpixel (int x, int y, byte col)
{
memset(vga+x+(y*320),col,1);
}


/****************************************************************************/
/* SetText - Appelle le mode texte 03h du BIOS */
/****************************************************************************/
void SetText()
{
_AX = 0x0003;
geninterrupt (0x10);
}


/****************************************************************************/
/* Cls - Vide l'ecran avec la couleur col */
/****************************************************************************/
void Cls(unsigned char col)
{
memset(vga,col,0xffff);
}


/*************************** PROGRAMME PRINCIPAL ****************************/


main()
{

// Rappel mathematique: % = modulo, le reste de la division entiere
// x mod y donne toujours entre 0 et y ex: x % 15 donne toujours
// un nombre entre 0 et 15. Bon moyen pour ramener des valeurs dans
// un cadre defini. On s'en sert en adressage disperse.

int et;
byte col;
type_etoile etoiles[MAX_ETOILES]; // Tableau d'etoiles du type etoiles
// definie plus haut
SetText();
printf("*** CHAPITRE 1 - Mode video VGA et Putpixel ***\n\n\n");
printf("Ce programme illustre les differentes notions vues\n");
printf("dans le premier chapitre. Le programme cree un champs\n");
printf("d'etoiles defilantes, ou un starfield en anglais. Pour\n");
printf("debuter, appuyer sur une touche...");
getch();

SetVGA();
randomize(); // Generateur de nombres aleatoires
for (int i=0;i<=MAX_ETOILES;i++) // Initialise la structure a 0
{
etoiles[i].x = 0;
etoiles[i].y = 0;
etoiles[i].z = 0;
}

do // boucle
{
delay(20); // Modifier la valeur de delay pour modifier la vitesse
for (et=0;et<MAX_ETOILES;et++) // Pour chaque etoiles
{
Putpixel(etoiles[et].x,etoiles[et].y,0); //efface ancienne position
etoiles[et].x = etoiles[et].x - (etoiles[et].z % 15 + 1); // la vitesse de deplacement en fonction du z
if (etoiles[et].x <= 0) // si l'etoile est a gauche...
{
etoiles[et].x = 319; // on la remet a droite,
etoiles[et].y = random(200); // a une nouvelle hauteur,
etoiles[et].z = random (256); // sur un nouveau z.
}
col = etoiles[et].z % 15 + 17; // couleurs 17-32 sont des tons de gris
Putpixel(etoiles[et].x,etoiles[et].y,col); // affiche nouvelle position
}
} while (!kbhit()); // tant qu'une touche n'est pas enfoncer


SetText();
printf("*** CHAPITRE 1 - Mode video VGA et Putpixel ***\n\n\n");
printf("Le principe de ce programme est que chaque etoile est derementee\n");
printf("en fonction de son z, ce qui donne un effet de profondeur a l'effet.\n");
printf("Un tableau de type etoile comprenant sa coordonee X, Y ainsi que son z\n");
printf(", sa 'profondeur', contient les informations de chaque etoiles.\n");
printf("Pour chaque etoile, on verifie qu'elle n'est pas encore rendue a gauche.\n");
printf("Si c'est le cas, elle retourne a droite, sinon, sa positions est mise a jour.\n");
printf("Le programme profite du fait que les couleurs 17-32 sont des degrader de tons\n");
printf("gris. Plus d'informations sont disponibles dans le code source. Pour questions\n");
printf("et commentaires:\n\nShaun Dore * Krashlog * dores@videotron.ca");
getch();
getch();

return 0;
}
jeudi 10 avril 2003 à 17:13:26 | Re : Programmation graphique...

djuddju

Membre Club
Salut,
est ce que tu développes en visual C++ ?


Kevina


-------------------------------
Réponse au message :
-------------------------------

> Yafuka ( * _ * )
>
> salut je fais mes premiers pas en programmation graphique. je suis actuellement un tutorial et je n arrive pas a compiler la source. quelqu'un pourrait m'aider ou me conseiller sur un site ou meme le compilateur a utiliser ?
>
> le code est ci dessous..
>
> //////////////////////////// debut du code //////////////////
>
> #include <stdio.h>
> #include <stdlib.h>
> #include <conio.h>
> #include <dos.h>
> #include <mem.h>
>
> #define MAX_ETOILES 500
>
> char far *vga = (char far *) MK_FP(0xA000, 0); // pointeur sur memoire video
>
> typedef unsigned char byte; // char non signe 0-255
>
> typedef struct type_etoile // pour contenir les infos sur chaque etoiles
> {
> int x,y,z;
> };
>
>
> /****************************************************************************/
> /* SetVGA - Appelle le mode 320x200x256 13h du BIOS */
> /****************************************************************************/
> void SetVGA()
> {
> _AX = 0x0013;
> geninterrupt (0x10);
> }
>
>
> /****************************************************************************/
> /* Putpixel - Affiche un pixel directement dans la memoire */
> /****************************************************************************/
> void Putpixel (int x, int y, byte col)
> {
> memset(vga+x+(y*320),col,1);
> }
>
>
> /****************************************************************************/
> /* SetText - Appelle le mode texte 03h du BIOS */
> /****************************************************************************/
> void SetText()
> {
> _AX = 0x0003;
> geninterrupt (0x10);
> }
>
>
> /****************************************************************************/
> /* Cls - Vide l'ecran avec la couleur col */
> /****************************************************************************/
> void Cls(unsigned char col)
> {
> memset(vga,col,0xffff);
> }
>
>
> /*************************** PROGRAMME PRINCIPAL ****************************/
>
>
> main()
> {
>
> // Rappel mathematique: % = modulo, le reste de la division entiere
> // x mod y donne toujours entre 0 et y ex: x % 15 donne toujours
> // un nombre entre 0 et 15. Bon moyen pour ramener des valeurs dans
> // un cadre defini. On s'en sert en adressage disperse.
>
> int et;
> byte col;
> type_etoile etoiles[MAX_ETOILES]; // Tableau d'etoiles du type etoiles
> // definie plus haut
> SetText();
> printf("*** CHAPITRE 1 - Mode video VGA et Putpixel ***\n\n\n");
> printf("Ce programme illustre les differentes notions vues\n");
> printf("dans le premier chapitre. Le programme cree un champs\n");
> printf("d'etoiles defilantes, ou un starfield en anglais. Pour\n");
> printf("debuter, appuyer sur une touche...");
> getch();
>
> SetVGA();
> randomize(); // Generateur de nombres aleatoires
> for (int i=0;i<=MAX_ETOILES;i++) // Initialise la structure a 0
> {
> etoiles[i].x = 0;
> etoiles[i].y = 0;
> etoiles[i].z = 0;
> }
>
> do // boucle
> {
> delay(20); // Modifier la valeur de delay pour modifier la vitesse
> for (et=0;et<MAX_ETOILES;et++) // Pour chaque etoiles
> {
> Putpixel(etoiles[et].x,etoiles[et].y,0); //efface ancienne position
> etoiles[et].x = etoiles[et].x - (etoiles[et].z % 15 + 1); // la vitesse de deplacement en fonction du z
> if (etoiles[et].x <= 0) // si l'etoile est a gauche...
> {
> etoiles[et].x = 319; // on la remet a droite,
> etoiles[et].y = random(200); // a une nouvelle hauteur,
> etoiles[et].z = random (256); // sur un nouveau z.
> }
> col = etoiles[et].z % 15 + 17; // couleurs 17-32 sont des tons de gris
> Putpixel(etoiles[et].x,etoiles[et].y,col); // affiche nouvelle position
> }
> } while (!kbhit()); // tant qu'une touche n'est pas enfoncer
>
>
> SetText();
> printf("*** CHAPITRE 1 - Mode video VGA et Putpixel ***\n\n\n");
> printf("Le principe de ce programme est que chaque etoile est derementee\n");
> printf("en fonction de son z, ce qui donne un effet de profondeur a l'effet.\n");
> printf("Un tableau de type etoile comprenant sa coordonee X, Y ainsi que son z\n");
> printf(", sa 'profondeur', contient les informations de chaque etoiles.\n");
> printf("Pour chaque etoile, on verifie qu'elle n'est pas encore rendue a gauche.\n");
> printf("Si c'est le cas, elle retourne a droite, sinon, sa positions est mise a jour.\n");
> printf("Le programme profite du fait que les couleurs 17-32 sont des degrader de tons\n");
> printf("gris. Plus d'informations sont disponibles dans le code source. Pour questions\n");
> printf("et commentaires:\n\nShaun Dore * Krashlog * dores@videotron.ca");
> getch();
> getch();
>
> return 0;
> }
jeudi 10 avril 2003 à 17:15:45 | Re : Programmation graphique...

yafuka

oui Kevina.. j ai visual c++ c++builder et devc++..
jeudi 10 avril 2003 à 21:48:55 | Re : Programmation graphique...

djuddju

Membre Club
Ben si tu developpes sous visual C++, je te conseil d'utiliser les applications AppWizard(exe). Tu verras, on trouves facilement des renseignements sur le net la dessus.

Kevina


-------------------------------
Réponse au message :
-------------------------------

> oui Kevina.. j ai visual c++ c++builder et devc++..
>
jeudi 17 juin 2004 à 23:14:43 | Re : Programmation graphique...

douggyfresh

De Lefuy James Douglass (Haiti)
Me voici, je viens a votre rescousse.

J'ai rencontré ce problème lors de ma premiere connaissance avec le graphisme en c.
Il existe 3 facons de rémédier à ce problèmes:

Uno:
Si vous programmez avec Turbo C++ 3.0, vous pouvez déclarez un pointeur far vers l'addresse mémoire de l'écran comme suit :

unsigned char far *ecran=(unsigned char far *) (0xA0000000L);
//j'ai inclu unsigned char car les indices de couleurs vont de
//0 à 255
//avec char on a -128-0-128
//avec unsigned char : 0-255 qui convient mieux aux couleurs
//pour raccourcir unsigned char, creer un type
//avec typedef avec le nom dont vous voulez
//ex: typedef unsigned char byte
//donc on aura qu'a declarer d'une nouvelle facon le pointeur
//ex: byte far *ecran=(byte far *)(0xA0000000L);

Segundo : en utilisant le macro
// void far MK_FP(unsigned segment, unsigned decalage)
//qui est inclu dans dos.h

//la declaration :

unsigned char far *ecran=(unsigned char *)MK_FP(0xA000,0);

Tercero:
//en utilisant la fonction
//void pokeb(unsigned segm,unsigned offset,char valeur)
//pour initialiser l'adresse memoire de l'ecran

//Ex:

void setpixel(unsigned X,unsigned Y, unsigned char coul)
{
pokeb(0xA000,320*y+x,coul);
}

//Cette fonction placera un pixel suivant x et y

Je suis en premiere annee d'etude informatique en Haiti. Et j'aime tout ce qui est technologique et informatique(programmation , electronique)
Pour tout commentaire ou question, veuillez me contacter à l'adresse suivante :
douggynix@yahoo.fr

//j'espere que vous avez compris mes conseils et qu'il vous aide a surmonter vos peurs pour le graphisme. Jettez un mail dans ma boite


Cette discussion est classée dans : printf, col, etoiles, putpixel, etoile


Répondre à ce message

Sujets en rapport avec ce message

comment cacher les valeurs d'un tableau 2d [ par lil_adriano ] Salut j'ai un souci, j'ai crée un tableau 2d   #include #include <stdlib bloqué dans programme [ par juju0612 ] bonjour !!!est ce que vous pourriez m'aider, je n'arrive pas a ressoudre un probleme. je veux taper des noms d'eleve avec leur points (ok)et je veux m Installer des fichiers dans temp (Windows/Mac) [ par rouxdesecour ] CoucouVoici mon but : je dois créer des fichiers de log dans le répertoire temporaire d'un poste client. Celui-ci peut être sous Mac ou Windows (pas v Printf & Puts [ par dayvid75014 ] Bonjour à tous,Quelqu'un connait-il la difference entre la fonction printf et la fonction puts ?Merci. Menu en C [ par acidjackproject ] Bonjour, j'aimerai faire un menu en C, dans lequel je peux voyager avec les flèches haut et bas. J'ai bien trouvé quelque chose a faire mais avec un d Aide codage [ par jeanphilippe37 ] Bonjour, j'avais déja demandé pour me coder mon prgm, ms on a pas voulu!!!! iol Voila, je l'ai codé aprés mon algo. Pourriez vous me dire s'il y multiplication matrcie [ par juju0612 ] voila mon programme en faite je veux multiplier deux matrice d'absice et d'ordonnée mis par l'utilisateurmais avec ma formule tout faite je ne sais pa Editeur blague dans fenetre [ par romar02 ] Salut,je construit un editeur de blague :pDu genre:#include #include int main(int argc, char *argv[]){  long choixMenu;</ Monnaie que doit rendre un caissier [ par genidou ] voila ce que je dois faire: Écrire un programme capable de calculer le nombre de billets minimal par un caissier lors d'un retrait d'argent d'un clie quadrillage matrices [ par Gaston0510 ] Notre prof d cours nous a demand¨¦ de saisir et afficher des matrices .Les matrices affich¨¦ doivent etr entour¨¦ avec un double qudrillage on utilisa


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,792 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales