Graphg

Contenu du snippet

une librairie graphique pour DJGPP pour ceux qui comme moi n'ont pas put installer allegro..

Source / Exemple :


#include <nearptr.h>
#include <go32.h>
#include <dos.h>
#include <stdlib.h>
#include <conio.h>
#include <stdio.h>
#include <string.h>
#define graphics 0x013
#define graphicD 0x012
#define text     0x03
#define white 15
#define TRUE 1
#define FALSE 0
#define REEL 0
#define VIRTUEL 1
void graphicG(); /* passer en mode graphique 320*200*8 */
void textG();     /*passer en mode texte 80*45*16*/
void PixelG(int x,int y,char color,bool endroit);   /* afficher un point*/
void LigneG(int a,int b,int c,int d, char couleur,bool endroit); /*affiche une ligne */
void BoxG(int g,int h,int i,int j,char colo,bool k,bool endroit); /*affiche un cadre*/
void cercleG(int Ox, int Oy, int r, char colorG,bool endroit);    /*dessine un cercle*/
void triangleG(int x,int y,int x1,int y1,int x2,int y2,char col,bool endroit);  /*dessine un triangle*/
void IniT(); /*initialise le "buffer_vide"*/
int  testPixelG(int x,int y); /*test un pixel et sa couleur*/
void EraseScreen();
int  Encadre(double k);

char *video_buffer = (char *)0xA0000;
char *buffer_vide=new char[64000];
char *buffer_virtuel =new char[64000];
char *buffer_videD=new char[256000];
char *buffer_virtuelD=new char[256000];

void Init()
{
 for(int i=0;i<64001;i++)
 buffer_vide[i]=0;
}

void VideoMode(int mode)
{
     union REGS regs;
     regs.x.ax = mode;
     int86(0x10, &regs, &regs);
}

void PixelG(int x,int y,char color,bool endroit)
{
  if(endroit==REEL)video_buffer[(y << 8) + (y << 6) + x] = color;
  if(endroit==VIRTUEL)buffer_virtuel[(y<<8)+(y<<6)+x]=color;
}

int testpixel(int x,int y)
{
  int T;
  T=video_buffer[(y<<8)+(y<<6)+x];
  return T;

}

int TestPixelG(int x,int y)
{
   unsigned char t =testpixel(x,y);
   int k;
   k=(int)t;
   return k;
}

void graphicG()
{
 __djgpp_nearptr_enable();
 Init();
 video_buffer += __djgpp_conventional_base;
 VideoMode(graphics);
}

void graphicGD()
{
 __djgpp_nearptr_enable();
 video_buffer += __djgpp_conventional_base;
 VideoMode(graphicD);
}
void pixelGD(int x,int y,int color)
{
  for(int i=0;i<256000;i++)
   {
    video_buffer[i]=0;
   }
   video_buffer[(640*y)+x]=color;
}

void textG()
{
__djgpp_nearptr_enable();
 VideoMode(0x03);
}

void Revenir()
{
 textG();
 __djgpp_nearptr_disable();
}

void LigneG(int x1,int y1, int x2,int y2, char couleur,bool endroit)
{
  int x,y;
  int Dx,Dy;
  int xincr,yincr;
  int erreur;
  int i;

  /* On initialise nos variables */
  Dx = abs(x2-x1);
  Dy = abs(y2-y1);

  if(x1<x2)
    xincr = 1;
  else
    xincr = -1;

  if(y1<y2)
    yincr = 1;
  else
    yincr = -1;

  /* Trace de ligne */
  x = x1;
  y = y1;

  if(Dx>Dy)
    {
      erreur = Dx/2;     /* c'est plus esthetique comme ca */
      for(i=0;i<Dx;i++)
	{
	  x += xincr;
	  erreur += Dy;
	  if(erreur>Dx)
	    {
	      erreur -= Dx;
	      y += yincr;
	    }
	  PixelG(x,y,couleur,endroit);
	}

    }
  else
    {
      erreur = Dy/2;     /* c'est plus esthetique comme ca */
      for(i=0;i<Dy;i++)
	{
	  y += yincr;
	  erreur += Dx;
	  if(erreur>Dy)
	    {
	      erreur -= Dy;
	      x += xincr;
	    }
	  PixelG(x,y,couleur,endroit);
	}
    }
}

void BoxG(int g,int h,int i,int j,char colo,bool k,bool endroit)
{
  if (k == FALSE)
   {
    LigneG(g,h,i,h,colo,endroit);
    LigneG(g,j,i,j,colo,endroit);
    LigneG(g,h,g,j,colo,endroit);
    LigneG(i,h,i,j,colo,endroit);
    PixelG(g,h,colo,endroit);
   }
 if (k ==TRUE)
 {
   LigneG(g,h,i,h,colo,endroit);
   LigneG(g,j,i,j,colo,endroit);
   LigneG(g,h,g,j,colo,endroit);
   LigneG(i,h,i,j,colo,endroit);
   PixelG(g,h,colo,endroit);
    int a;
       if (g<i)
        {
         for (a=g;a<i+1;a++)
           {
             LigneG(a,h,a,j,colo,endroit);
           }
         }
       if (i<g)
          {
           for (a=i;a<g+1;a++)
             {
               LigneG(a,h,a,j,colo,endroit);
             }
          }
 }
}

void EraseScreen()
{
 memcpy(video_buffer,buffer_vide,64000);
}

void cercleG(int Ox, int Oy, int r, char colorG,bool endroit)
{
int X=0;
int Y=r;
r=r*r;
 while(X<=Y)
 {
  PixelG(Ox+X, Oy-Y, colorG,endroit);
  PixelG(Ox-X, Oy-Y, colorG,endroit);
  PixelG(Ox+X, Oy+Y, colorG,endroit);
  PixelG(Ox-X, Oy+Y, colorG,endroit);
  PixelG(Ox+Y, Oy-X, colorG,endroit);
  PixelG(Ox-Y, Oy-X, colorG,endroit);
  PixelG(Ox+Y, Oy+X, colorG,endroit);
  PixelG(Ox-Y, Oy+X, colorG,endroit);
  X++;
  Y=(sqrt(r-((double)X*X))+0.5);
 }
}

void triangle(int x,int y,int x1,int y1,int x2,int y2,char col,bool endroit)
{
  int ptH,ptB,ptD,ptG;
    LigneG(x,y,x1,y1,col,endroit);
    LigneG(x,y,x2,y2,col,endroit);
    LigneG(x1,y1,x2,y2,col,endroit);

}
void triangleG(int x,int y,int x1,int y1,int x2,int y2,char col,bool endroit)
 {
  int xp=(x+x1)/2,xp1=(x1+x2)/2,xp2=(x+x2)/2,yp=(x+x1)/2,yp1=(x1+x2)/2,yp2=(x+x2)/2;
        do
         {
          triangle(xp,yp,xp1,yp1,xp2,yp2,col-10,endroit);
          xp--;xp1++;yp++;yp1--;yp2--;xp2++;
         }
        while(xp!=x || xp1!=x1||xp2!=x2||yp!=y||yp1!=y1||yp2!=y2);
 }

Conclusion :


attention triangleG(..) ne marche pas
petit tutorial:
#include "graphG.cpp"
void main()
{
graphicG(); //mode graphique
PixelG(12,12,15,REEL); //REEL pour l'ecran
//VIRTUEL pour l'ecran
//virtuel
getch();
}
//

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.