Gå til innhold

sdl_ttf i dev-c++


Anbefalte innlegg

Skrevet

Jeg har begynt å programmere et snake-spill i c++/sdl

 

Dessverre har jeg støtt på et problem: Å vise tekst på skjermen

 

Virker som det ikke følger med noen egnet funkskjon i sdl, hva skal jeg gjøre?

Videoannonse
Annonse
Skrevet

Som du har i topic -- ved å bruke SDL_ttf? Det er skrevet av Sam og er en av standard-utvidelsene til SDL, så det er praktisk talt innebygget. Se her for dokumentasjon, og se om du kan stille et litt mer konkret spørsmål hvis du fortsatt lurer på noe, så er det litt lettere å hjelpe deg ;)

Skrevet

Hadde egentlig tenkt til å spørre om dette:

 

Hvordan bruker/installerer man SDL_TTF

 

Men så tenkte jeg at det kanskje også finnes andre måter som er bedre/lettere..

Skrevet

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.

Skrevet

Tror det skulle virke nå.

 

Det jeg trenger nå er et enkelt program som demonstrerer om og hvordan det virker.

Skrevet (endret)

Når jeg starter spillet får jeg opp en en farget skjerm med noe som ser ut som et lite kirsebær. Når jeg så trykker på 1 eller 2 kommer det en blinkende strek som beveger seg øverst i venstre hjørne før applikasjonen avsluttes...

 

Win2k SP4, DX9.0c...

 

Legger ved DrWatsons log

bendel_error_log.txt

Endret av Mr.Garibaldi
Skrevet
#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;
}

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å
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...