Gå til innhold

Anbefalte innlegg

Vet hvordan man kan spille av lyd i sdl?

 

Skal spille av/legge til lyd i dette programmet/spillet:

 

//Bendelormer
//programmert av johan helsing
//kopiert diverse kode fra cone3d's-guider
//
// 2005
#include <stdio.h>
#include <stdlib.h>
#include <ctime>

#include <SDL/SDL.h>


class epler
{
     public:
            int x;
            int y;
            int verdi;
};
int antallepler=10;
epler eple[20];
//ei i bruk


class ormer
{
     public:
            int x[10000];
            int y[10000];
            int lengde;
            int r;
            int g;
            int b;
            // 0 = opp, 1 = ned, 2 = venstre, 3 = høyre
            int retning;
            int tempretning;
            // poeng er ikke brukt til noe enda
            int poeng;
            int turbo;
};
ormer orm[3];


int done=0;
int skritt;
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<=orm[p].lengde; i++)
           {
           DrawPixel(screen, orm[p].x[i], orm[p].y[i],
           orm[p].r, orm[p].g, orm[p].b);
           }
 }
 
 //så tegnes eplene
 for(int a=0; a<antallepler; a++)
 {
         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[a].x+i), eple[a].y+j, 255, 0, 0); }
                 }
         }
         DrawPixel(screen, (eple[a].x+2), eple[a].y-1, 0, 150, 0);
         DrawPixel(screen, (eple[a].x+2), eple[a].y-2, 0, 150, 0);
         //DrawPixel(screen, (eple[a].x+2), eple[a].y-3, 0, 255, 0);
 } 

 
 //slutt på epletegning
 
 
 
 Sulock(screen);
 SDL_Flip(screen);
}

void ormflytt(int p)
{
    for(int i=orm[p].lengde; i>=1; i--)
    {
            orm[p].x[i]=orm[p].x[(i-1)];
            orm[p].y[i]=orm[p].y[(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 spawneple(int e=0)
{
    eple[e].x=(rand()%637);
    eple[e].y=(rand()%477);
}



// 0 returnet betyr kollidering, ulogisk, men slik var det lettest å få til
int kollisjonsdetektor(int p)
{
   if (orm[p].x[0]<0 || orm[p].x[0]>=640 || orm[p].y[0]<0 || orm[p].y[0]>480)  { return 0; }
   for(int c=0; c<players; c++)
   {
           for(int g=1; g<orm[p].lengde; g++)
           {
                   if (orm[c].x[g]==orm[p].x[0] && orm[c].y[g]==orm[p].y[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);
 }

 //gjør slik at ormene ikke krasjer med en gang
 orm[0].x[0]=30;
 orm[0].y[0]=20;
 orm[1].x[0]=30;
 orm[1].y[0]=460;
 orm[2].x[0]=30;
 orm[2].y[0]=240;
 //lengde
 orm[0].lengde=10;
 orm[1].lengde=10;
 orm[2].lengde=10;
 //tempretning
 orm[0].tempretning=3;
 orm[1].tempretning=3;
 orm[2].tempretning=3;
 //farge
 orm[0].r=255;
 orm[0].g=255;
 orm[0].b=255;
 
 orm[1].r=0;
 orm[1].g=0;
 orm[1].b=0;
 
 orm[2].r=0;
 orm[2].g=255;
 orm[2].b=0;
 //epleverdien settes
 eple[0].verdi=10;

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

 if ( mJoystick == NULL )
   ; // error handling
 //slutt 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
 for(int a=0; a<antallepler; a++)
 {
         spawneple(a);
         eple[a].verdi=10;
 }


 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; }
     }
   }
   
   for(int p=0; p<players; p++)
   {
           orm[p].turbo=0;
   }
   
   
   

   
   keys = SDL_GetKeyState(NULL);
   //tastatur1knapper
   int tast1=0;
   if ( keys[SDLK_UP])    { orm[tast1].tempretning=0; }
   if ( keys[SDLK_DOWN])  { orm[tast1].tempretning=1; }
   if ( keys[SDLK_LEFT])  { orm[tast1].tempretning=2; }
   if ( keys[SDLK_RIGHT]) { orm[tast1].tempretning=3; }
   if ( keys[SDLK_RETURN]){ orm[tast1].turbo=1;       }
   //tastatur2-knapper
   int tast2=1;
   if ( keys[SDLK_w]) { orm[tast2].tempretning=0; }
   if ( keys[SDLK_s]) { orm[tast2].tempretning=1; }
   if ( keys[SDLK_a]) { orm[tast2].tempretning=2; }
   if ( keys[SDLK_d]) { orm[tast2].tempretning=3; }
   if ( keys[SDLK_LSHIFT]){ orm[tast2].turbo=1;   }
   //eple[0].verdi +-
   if ( keys[SDLK_o] ) { eple[0].verdi+=1; }
   if ( keys[SDLK_l] ) { eple[0].verdi-=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=2;
   SDL_JoystickUpdate();
   if(SDL_JoystickGetAxis( mJoystick, 1 )<0 )      { orm[joy1].tempretning=0; }
   if(SDL_JoystickGetAxis( mJoystick, 1 )>10000 )  { orm[joy1].tempretning=1; }
   if(SDL_JoystickGetAxis( mJoystick, 0 )<0 )      { orm[joy1].tempretning=2; }
   if(SDL_JoystickGetAxis( mJoystick, 0 )>10000 )  { orm[joy1].tempretning=3; }
   if(SDL_JoystickGetButton(mJoystick, 0)==1){ orm[joy1].turbo=1;   }


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

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

 

EDIT: Skruveleif

Endret av nahoy
Lenke til kommentar
Videoannonse
Annonse

Har prøvd å putte inn lyd nå, men ser ikke ut til å virke.

 

//Bendelormer
//programmert av johan helsing
//kopiert diverse funksjoner fra cone3d
//
// 2005
#include <stdio.h>
#include <stdlib.h>
#include <ctime>
#include <SDL/SDL_mixer.h>
#include <SDL/SDL.h>


class epler
{
     public:
            int x;
            int y;
            int verdi;
};
int antallepler=10;
epler eple[20];
//ei i bruk


class ormer
{
     public:
            int x[10000];
            int y[10000];
            int lengde;
            int r;
            int g;
            int b;
            // 0 = opp, 1 = ned, 2 = venstre, 3 = høyre
            int retning;
            int tempretning;
            // poeng er ikke brukt til noe enda
            int poeng;
            int turbo;
};
ormer orm[3];


int done=0;
int skritt;
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<=orm[p].lengde; i++)
           {
           DrawPixel(screen, orm[p].x[i], orm[p].y[i],
           orm[p].r, orm[p].g, orm[p].b);
           }
 }
 
 //så tegnes eplene
 for(int a=0; a<antallepler; a++)
 {
         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[a].x+i), eple[a].y+j, 255, 0, 0); }
                 }
         }
         DrawPixel(screen, (eple[a].x+2), eple[a].y-1, 0, 150, 0);
         DrawPixel(screen, (eple[a].x+2), eple[a].y-2, 0, 150, 0);
         //DrawPixel(screen, (eple[a].x+2), eple[a].y-3, 0, 255, 0);
 } 

 
 //slutt på epletegning
 
 
 
 Sulock(screen);
 SDL_Flip(screen);
}

void ormflytt(int p)
{
    for(int i=orm[p].lengde; i>=1; i--)
    {
            orm[p].x[i]=orm[p].x[(i-1)];
            orm[p].y[i]=orm[p].y[(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 spawneple(int e=0)
{
    eple[e].x=(rand()%637);
    eple[e].y=(rand()%477);
}



// 0 returnet betyr kollidering, ulogisk, men slik var det lettest å få til
int kollisjonsdetektor(int p)
{
   if (orm[p].x[0]<0 || orm[p].x[0]>=640 || orm[p].y[0]<0 || orm[p].y[0]>480)  { return 0; }
   for(int c=0; c<players; c++)
   {
           for(int g=1; g<orm[p].lengde; g++)
           {
                   if (orm[c].x[g]==orm[p].x[0] && orm[c].y[g]==orm[p].y[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_AUDIO|SDL_INIT_NOPARACHUTE) < 0 ) //test om noparachute er nødvendig!
 {
   printf("Unable to init SDL: %s\n", SDL_GetError());
   exit(1);
 }

 //gjør slik at ormene ikke krasjer med en gang
 orm[0].x[0]=30;
 orm[0].y[0]=20;
 orm[1].x[0]=30;
 orm[1].y[0]=460;
 orm[2].x[0]=30;
 orm[2].y[0]=240;
 //lengde
 orm[0].lengde=10;
 orm[1].lengde=10;
 orm[2].lengde=10;
 //tempretning
 orm[0].tempretning=3;
 orm[1].tempretning=3;
 orm[2].tempretning=3;
 //farge
 orm[0].r=255;
 orm[0].g=255;
 orm[0].b=255;
 
 orm[1].r=0;
 orm[1].g=0;
 orm[1].b=0;
 
 orm[2].r=0;
 orm[2].g=255;
 orm[2].b=0;
 //epleverdien settes
 eple[0].verdi=10;

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

 if ( mJoystick == NULL )
    ; // error handling
 //slutt på joystick-greier
 
 
 //musikk-greier, ikke ferdig
 Mix_Music *music;
 int audio_rate = 22050;
 Uint16 audio_format = AUDIO_S16; /* 16-bit stereo */
 int audio_channels = 2;
 int audio_buffers = 4096;
 music=Mix_LoadMUS("CannonFodder.mod");
 Mix_PlayMusic(music, -1);
 
 atexit(SDL_Quit);
 atexit(Mix_CloseAudio);
 

 
 

 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
 for(int a=0; a<antallepler; a++)
 {
         spawneple(a);
         eple[a].verdi=10;
 }


 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; }
     }
   }
   
   for(int p=0; p<players; p++)
   {
           orm[p].turbo=0;
   }
   
   
   

   
   keys = SDL_GetKeyState(NULL);
   //tastatur1knapper
   int tast1=0;
   if ( keys[SDLK_UP])    { orm[tast1].tempretning=0; }
   if ( keys[SDLK_DOWN])  { orm[tast1].tempretning=1; }
   if ( keys[SDLK_LEFT])  { orm[tast1].tempretning=2; }
   if ( keys[SDLK_RIGHT]) { orm[tast1].tempretning=3; }
   if ( keys[SDLK_RETURN]){ orm[tast1].turbo=1;       }
   //tastatur2-knapper
   int tast2=1;
   if ( keys[SDLK_w]) { orm[tast2].tempretning=0; }
   if ( keys[SDLK_s]) { orm[tast2].tempretning=1; }
   if ( keys[SDLK_a]) { orm[tast2].tempretning=2; }
   if ( keys[SDLK_d]) { orm[tast2].tempretning=3; }
   if ( keys[SDLK_LSHIFT]){ orm[tast2].turbo=1;   }
   //eple[0].verdi +-
   if ( keys[SDLK_o] ) { eple[0].verdi+=1; }
   if ( keys[SDLK_l] ) { eple[0].verdi-=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=2;
   SDL_JoystickUpdate();
   if(SDL_JoystickGetAxis( mJoystick, 1 )<0 )      { orm[joy1].tempretning=0; }
   if(SDL_JoystickGetAxis( mJoystick, 1 )>10000 )  { orm[joy1].tempretning=1; }
   if(SDL_JoystickGetAxis( mJoystick, 0 )<0 )      { orm[joy1].tempretning=2; }
   if(SDL_JoystickGetAxis( mJoystick, 0 )>10000 )  { orm[joy1].tempretning=3; }
   if(SDL_JoystickGetButton(mJoystick, 0)==1){ orm[joy1].turbo=1;   }


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

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

Lenke til kommentar

Men kunne trengt hjelp til en del andre ting: Vil at det skal stå "score:" og så skoren din oppe i hjørnet. Det har jeg forsøkt å få til uten hell:

 

//Bendelormer
//programmert av johan helsing
//kopiert diverse funksjoner fra cone3d
//
// 2005
#include <stdio.h>
#include <stdlib.h>
#include <ctime>
#include <SDL/SDL_mixer.h>
#include <SDL/SDL.h>
#include <SDL/SDL_ttf.h>


class epler
{
     public:
            int x;
            int y;
            int verdi;
};
int antallepler=10;
epler eple[20];
//ei i bruk


class ormer
{
     public:
            int x[10000];
            int y[10000];
            int lengde;
            int r;
            int g;
            int b;
            // 0 = opp, 1 = ned, 2 = venstre, 3 = høyre
            int retning;
            int tempretning;
            // poeng er ikke brukt til noe enda
            int poeng;
            int turbo;
};
ormer orm[3];

TTF_Font *font;
SDL_Surface *text_surface;
SDL_Color color={255,255,255};

int done=0;
int skritt;
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);
 
 //Fade-bakgrunn
 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<=orm[p].lengde; i++)
           {
           DrawPixel(screen, orm[p].x[i], orm[p].y[i],
           orm[p].r, orm[p].g, orm[p].b);
           }
 }
 
 //så tegnes eplene
 for(int a=0; a<antallepler; a++)
 {
         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[a].x+i), eple[a].y+j, 255, 0, 0); }
                 }
         }
         DrawPixel(screen, (eple[a].x+2), eple[a].y-1, 0, 150, 0);
         DrawPixel(screen, (eple[a].x+2), eple[a].y-2, 0, 150, 0);
         //DrawPixel(screen, (eple[a].x+2), eple[a].y-3, 0, 255, 0);
 } 
 
 //slutt på epletegning
 
 //ttf
 SDL_BlitSurface(text_surface,NULL,screen,NULL);
 
 Sulock(screen);
 SDL_Flip(screen);
}

void ormflytt(int p)
{
    for(int i=orm[p].lengde; i>=1; i--)
    {
            orm[p].x[i]=orm[p].x[(i-1)];
            orm[p].y[i]=orm[p].y[(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 spawneple(int e=0)
{
    eple[e].x=(rand()%637);
    eple[e].y=(rand()%477);
}



// 0 returnet betyr kollidering, ulogisk, men slik var det lettest å få til
int kollisjonsdetektor(int p)
{
   if (orm[p].x[0]<0 || orm[p].x[0]>=640 || orm[p].y[0]<0 || orm[p].y[0]>480)  { return 0; }
   for(int c=0; c<players; c++)
   {
           for(int g=1; g<orm[p].lengde; g++)
           {
                   if (orm[c].x[g]==orm[p].x[0] && orm[c].y[g]==orm[p].y[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_AUDIO|SDL_INIT_NOPARACHUTE) < 0 ) //test om noparachute er nødvendig!
 {
   printf("Unable to init SDL: %s\n", SDL_GetError());
   exit(1);
 }

 //gjør slik at ormene ikke krasjer med en gang
 orm[0].x[0]=30;
 orm[0].y[0]=20;
 orm[1].x[0]=30;
 orm[1].y[0]=460;
 orm[2].x[0]=30;
 orm[2].y[0]=240;
 //lengde
 orm[0].lengde=10;
 orm[1].lengde=10;
 orm[2].lengde=10;
 //tempretning
 orm[0].tempretning=3;
 orm[1].tempretning=3;
 orm[2].tempretning=3;
 //farge
 orm[0].r=255;
 orm[0].g=255;
 orm[0].b=255;
 
 orm[1].r=0;
 orm[1].g=0;
 orm[1].b=0;
 
 orm[2].r=0;
 orm[2].g=255;
 orm[2].b=0;
 //epleverdien settes
 eple[0].verdi=10;

 //ttf-greier
 TTF_Init();
 font=TTF_OpenFont("cezanne.ttf", 16);
 text_surface=TTF_RenderText_Solid(font,"Score:" ,color);
 
 
 //Joystick-greier fra internett 
 SDL_JoystickEventState( SDL_ENABLE );
 SDL_Joystick* mJoystick;
 mJoystick = SDL_JoystickOpen( 0 );

 if ( mJoystick == NULL )
   ; // error handling
 //slutt på joystick-greier
 
 
 //musikk-greier, ikke ferdig
 Mix_Music *music;
 //int audio_rate = 22050;
 //Uint16 audio_format = AUDIO_S16; /* 16-bit stereo */
 //int audio_channels = 2;
 //int audio_buffers = 4096;
 //MIX_DEFAULT_FORMAT
 if(Mix_OpenAudio(22050, AUDIO_S16, 2, 4096)==-1)
 {
   printf("Mix_OpenAudio: %s\n", Mix_GetError());
   done=1;
   exit(2);
 }
 
 music=Mix_LoadMUS("SuperCars2.mod");
 Mix_PlayMusic(music, -1);
 

 
 atexit(SDL_Quit);
 atexit(TTF_Quit);
 atexit(Mix_CloseAudio);

 
 

 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
 for(int a=0; a<antallepler; a++)
 {
         spawneple(a);
         eple[a].verdi=10;
 }


 while(done == 0)
 {
   //SDL_Delay(50);  // bruk denne for å regulere farten
   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; }
     }
   }
   
   for(int p=0; p<players; p++)
   {
           orm[p].turbo=0;
   }
   
   
   

   
   keys = SDL_GetKeyState(NULL);
   //tastatur1knapper
   int tast1=0;
   if ( keys[SDLK_UP])    { orm[tast1].tempretning=0; }
   if ( keys[SDLK_DOWN])  { orm[tast1].tempretning=1; }
   if ( keys[SDLK_LEFT])  { orm[tast1].tempretning=2; }
   if ( keys[SDLK_RIGHT]) { orm[tast1].tempretning=3; }
   if ( keys[SDLK_RETURN]){ orm[tast1].turbo=1;       }
   //tastatur2-knapper
   int tast2=1;
   if ( keys[SDLK_w]) { orm[tast2].tempretning=0; }
   if ( keys[SDLK_s]) { orm[tast2].tempretning=1; }
   if ( keys[SDLK_a]) { orm[tast2].tempretning=2; }
   if ( keys[SDLK_d]) { orm[tast2].tempretning=3; }
   if ( keys[SDLK_LSHIFT]){ orm[tast2].turbo=1;   }
   //eple[0].verdi +-
   if ( keys[SDLK_o] ) { eple[0].verdi+=1; }
   if ( keys[SDLK_l] ) { eple[0].verdi-=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=2;
   SDL_JoystickUpdate();
   if(SDL_JoystickGetAxis( mJoystick, 1 )<0 )      { orm[joy1].tempretning=0; }
   if(SDL_JoystickGetAxis( mJoystick, 1 )>10000 )  { orm[joy1].tempretning=1; }
   if(SDL_JoystickGetAxis( mJoystick, 0 )<0 )      { orm[joy1].tempretning=2; }
   if(SDL_JoystickGetAxis( mJoystick, 0 )>10000 )  { orm[joy1].tempretning=3; }
   if(SDL_JoystickGetButton(mJoystick, 0)==1){ orm[joy1].turbo=1;   }


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

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

off dette ble rotete :ermm:

 

 

En annen ting er at spillet tar veldig mye maskinkraft, eller det tar så mye som er tilgjengelig, og dermed reguleres hastigheten i spillet etter hvor rask maskinen er. Slik som på de gamle pc-spillene! Jippi!

Finnes det noen måte man kan la være å spise så mye maskinkraft på, og samtidig ha en jevn fart som er lik på alle maskiner?

 

For de som har lyst til å prøve:

PreAlpha25

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

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