nahoy Skrevet 5. september 2005 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
Dead_Rabbit Skrevet 6. september 2005 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);
nahoy Skrevet 6. september 2005 Forfatter 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; }
nahoy Skrevet 6. september 2005 Forfatter 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
A_N_K Skrevet 6. september 2005 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.
Dead_Rabbit Skrevet 6. september 2005 Skrevet 6. september 2005 SDL_ttf@google for å finne ut mer om hvordan du skriver tekst i programmet, liksom.
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å