Gå til innhold

sdl_ttf i dev-c++


Anbefalte innlegg

Videoannonse
Annonse

Du laster ned denne filen, legger SDL_ttf.h i include-mappen din, SDL_ttf.lib i lib-mappen din og SDL_ttf.dll i en mappe som leses når filen kjøres (f.eks. C:\Windows\system32, hvis jeg ikke husker galt). Det er mulig at .lib-filer for Visual C++ og Dev-C++ er forskjellige -- i så fall kan du se om det finnes et konverteringsprogram, eller du kan kompilere selv.

Lenke til kommentar
#include <stdio.h>
#include <stdlib.h>
#include <ctime>

#include <SDL/SDL.h>

int eple[2] = { 200, 200 };
int ormlengde[3]={10, 10, 10};
int tempretning[3]={3, 3, 3};
int orm[3][2][100000] = {{{ 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20 },
{ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20 }},
{{ 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20 },
{ 460,460,460,460,460,460,460,460,460,460,460 }},
{{ 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20 },
{ 240,240,240,240,240,240,240,240,240,240,240 }}};

int ormfarge[3][3]={ {50,50,255}, {0,255,0}, {255,50,50} };

// 0 = opp, 1 = ned, 2 = venstre, 3 = høyre
int retning[3]={3, 3, 3};
int done=0;
int skritt;
int epleverdi=10;
int players=0;


void DrawPixel(SDL_Surface *screen, int x, int y,
                                   Uint8 R, Uint8 G, Uint8 B)
{
 Uint32 color = SDL_MapRGB(screen->format, R, G, B);
 switch (screen->format->BytesPerPixel)
 {
   case 1: // Assuming 8-bpp
     {
       Uint8 *bufp;
       bufp = (Uint8 *)screen->pixels + y*screen->pitch + x;
       *bufp = color;
     }
     break;
   case 2: // Probably 15-bpp or 16-bpp
     {
       Uint16 *bufp;
       bufp = (Uint16 *)screen->pixels + y*screen->pitch/2 + x;
       *bufp = color;
     }
     break;
   case 3: // Slow 24-bpp mode, usually not used
     {
       Uint8 *bufp;
       bufp = (Uint8 *)screen->pixels + y*screen->pitch + x * 3;
       if(SDL_BYTEORDER == SDL_LIL_ENDIAN)
       {
         bufp[0] = color;
         bufp[1] = color >> 8;
         bufp[2] = color >> 16;
       } else {
         bufp[2] = color;
         bufp[1] = color >> 8;
         bufp[0] = color >> 16;
       }
     }
     break;
   case 4: // Probably 32-bpp
     {
       Uint32 *bufp;
       bufp = (Uint32 *)screen->pixels + y*screen->pitch/4 + x;
       *bufp = color;
     }
     break;
 }
}


void Slock(SDL_Surface *screen)
{
 if ( SDL_MUSTLOCK(screen) )
 {
   if ( SDL_LockSurface(screen) < 0 )
   {
     return;
   }
 }
}


void Sulock(SDL_Surface *screen)
{
 if ( SDL_MUSTLOCK(screen) )
 {
   SDL_UnlockSurface(screen);
 }
}


void DrawScene(SDL_Surface *screen)
{
 Slock(screen);
 for(int x=0;x<640;x++)
 {
   for(int y=0;y<480;y++)
   {
     DrawPixel(screen, x,y,x/3,50,y/2);
   }
 }
 //nå tegnes bendelormen(e)
 for(int p=0; p<players; p++)
 {
   for(int i=0; i<=ormlengde[p]; i++)
           {
           DrawPixel(screen, orm[p][0][i], orm[p][1][i],
           ormfarge[p][0], ormfarge[p][1], ormfarge[p][2]);
           }
 }
 
 //så tegnes "eplet"
 for(int j=0; j<5; j++)
 {
         for(int i=0; i<5; i++)
         {
         if (!((i==0 || i==4) && (j==0 || j==4)))
            { DrawPixel(screen, (eple[0]+i), eple[1]+j, 255, 0, 0); }
         }
 } 
 DrawPixel(screen, (eple[0]+2), eple[1]-1, 0, 150, 0);
 DrawPixel(screen, (eple[0]+2), eple[1]-2, 0, 150, 0);
 //DrawPixel(screen, (eple[0]+2), eple[1]-3, 0, 255, 0);
 
 //slutt på epletegning
 
 
 
 Sulock(screen);
 SDL_Flip(screen);
}

void ormflytt(int p)
{
    for(int i=ormlengde[p]; i>=1; i--)
    {
            orm[p][0][i]=orm[p][0][(i-1)];
            orm[p][1][i]=orm[p][1][(i-1)];
    }
}

//plasser sier om ormen skal bli lengre eller om det bare skal plasseres et eple
//p betyr spiller 0=spiller1 1=spiller2
void eplespist(int plasser=0, int p=0)
{
    if (!plasser){ ormlengde[p]+=epleverdi; }
    eple[0]=(rand()%637);
    eple[1]=(rand()%477);
}

// 0 returnet betyr kollidering, ulogisk, men slik var det lettest å få til
bool kollisjonsdetektor(int p)
{
   if (orm[p][0][0]<0 || orm[p][0][0]>=640 || orm[p][1][0]<0 || orm[p][1][0]>480)  { return 0; }
   for(int c=0; c<players; c++)
   {
           for(int g=1; g<ormlengde[p]; g++)
           {
                   if (orm[c][0][g]==orm[p][0][0] && orm[c][1][g]==orm[p][1][0]){ return 0; }                  
           }
   }
   
   
}


int main(int argc, char *argv[])
{
 srand(time(0));
 Uint8* keys;
 if ( SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO|SDL_INIT_JOYSTICK|SDL_INIT_NOPARACHUTE) < 0 ) //test om noparachute er nødvendig!
 {
   printf("Unable to init SDL: %s\n", SDL_GetError());
   exit(1);
 }

 //Joystick-greier fra internett 
 SDL_JoystickEventState( SDL_ENABLE );
 SDL_Joystick* mJoystick;
 mJoystick = SDL_JoystickOpen( 0 );

 if ( mJoystick == NULL )
    ; // error handling
 //slut på joystick-greier
 
  
 atexit(SDL_Quit);
 

 SDL_Surface *screen;
screen=SDL_SetVideoMode(640,480,32,SDL_HWSURFACE|SDL_DOUBLEBUF|SDL_FULLSCREEN);
 if ( screen == NULL )
 {
   printf("Unable to set 640x480 video: %s\n", SDL_GetError());
   exit(1);
 }
 //her starter tegningen
 eplespist(1);
 


 while(done == 0)
 {
   SDL_Event event;
       
   while ( SDL_PollEvent(&event) )
   {
     if ( event.type == SDL_QUIT )  {  done = 1;  }

     if ( event.type == SDL_KEYDOWN )
     {
       if ( event.key.keysym.sym == SDLK_ESCAPE ) { done = 1; }
     }
   }
   
   
   
   
   

   
   keys = SDL_GetKeyState(NULL);
   //tastatur1knapper
   int tast1=0;
   if ( keys[SDLK_UP])    { tempretning[tast1]=0; }
   if ( keys[SDLK_DOWN])  { tempretning[tast1]=1; }
   if ( keys[SDLK_LEFT])  { tempretning[tast1]=2; }
   if ( keys[SDLK_RIGHT]) { tempretning[tast1]=3; }
   int tast2=2;
   if ( keys[SDLK_w]) { tempretning[tast2]=0; }
   if ( keys[SDLK_s]) { tempretning[tast2]=1; }
   if ( keys[SDLK_a]) { tempretning[tast2]=2; }
   if ( keys[SDLK_d]) { tempretning[tast2]=3; }
   //epleverdi +-
   if ( keys[SDLK_o] ) { epleverdi+=1; }
   if ( keys[SDLK_l] ) { epleverdi-=1; }
   //1/2/3 spillere
   if ( keys[SDLK_1] && players==0 ) { players=1; };
   if ( keys[SDLK_2] && players==0 ) { players=2; };
   if ( keys[SDLK_3] && players==0 ) { players=3; };
   //joystick-knapper
   int joy1=1;
   
   SDL_JoystickUpdate();
   if(SDL_JoystickGetAxis( mJoystick, 1 )<0 )      { tempretning[joy1]=0; }
   if(SDL_JoystickGetAxis( mJoystick, 1 )>10000 )  { tempretning[joy1]=1; }
   if(SDL_JoystickGetAxis( mJoystick, 0 )<0 )      { tempretning[joy1]=2; }
   if(SDL_JoystickGetAxis( mJoystick, 0 )>10000 )  { tempretning[joy1]=3; }


    
   
   
   for(int p=0; p<players; p++)
   {
           if((retning[p]==0 && tempretning[p]!=1) ||
           (retning[p]==1 && tempretning[p]!=0) ||
           (retning[p]==2 && tempretning[p]!=3) ||
           (retning[p]==3 && tempretning[p]!=2))
           { 
              retning[p]=tempretning[p]; 
           }
           
           if ( !kollisjonsdetektor(p) )  { done=1; }
           
           
           //Er eplet spist?
           for(int j=0; j<5; j++)
           {
                   for(int i=0; i<5; i++)
                   {
                     //      eple[0]+2), eple[1]-1
                   if ((orm[p][0][0]==eple[0]+j) && (orm[p][1][0]==eple[1]+i)
                      && !((i==0 || i==4) && (j==0 || j==4)))
                      { eplespist(0, p); }
                   }
           } 
           
           
           if(retning[p]==0){ormflytt(p); orm[p][1][0]-=1;}
           if(retning[p]==1){ormflytt(p); orm[p][1][0]+=1;}
           if(retning[p]==2){ormflytt(p); orm[p][0][0]-=1;}
           if(retning[p]==3){ormflytt(p); orm[p][0][0]+=1;}
           //skritt+=1;
   }
   
   if (done == 0)DrawScene(screen);

 }
 SDL_JoystickClose(mJoystick);
 //her sluttern
 return 0;
}

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...