nahoy Skrevet 5. september 2005 Del Skrevet 5. september 2005 (endret) 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 5. september 2005 av nahoy Lenke til kommentar
Klette Skrevet 5. september 2005 Del Skrevet 5. september 2005 les på libsdl.org! Lenke til kommentar
Dead_Rabbit Skrevet 6. september 2005 Del Skrevet 6. september 2005 http://jcatki.no-ip.org/SDL_mixer/SDL_mixer_49.html http://jcatki.no-ip.org/SDL_mixer/SDL_mixer_51.html#SEC51 Tror dette skulle funke: Mix_Music* musFile = Mix_LoadMUS("musikkfil.mp3"); Mix_PlayMusic(musFile, 1); Lenke til kommentar
nahoy Skrevet 6. september 2005 Forfatter Del Skrevet 6. september 2005 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
nahoy Skrevet 6. september 2005 Forfatter Del Skrevet 6. september 2005 Har fått det til Lenke til kommentar
nahoy Skrevet 6. september 2005 Forfatter Del Skrevet 6. september 2005 (endret) 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 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 6. september 2005 av nahoy Lenke til kommentar
A_N_K Skrevet 6. september 2005 Del Skrevet 6. september 2005 Du kan oppnå jevn framerate (kom ikke på noe bedre norsk ord) ved å sove en viss tid mellom hver iterasjon av spill-løkka. Lenke til kommentar
Dead_Rabbit Skrevet 6. september 2005 Del Skrevet 6. september 2005 SDL_ttf@google for å finne ut mer om hvordan du skriver tekst i programmet, liksom. Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå