Dead_Rabbit Skrevet 21. februar 2006 Del Skrevet 21. februar 2006 Antar at du bare kan gjøre det samme som du gjorde over. Siden det meste av SDL-stuffet er reference counta, trenger du ikke tenke på å delete noe først heller. Lenke til kommentar
nahoy Skrevet 21. februar 2006 Forfatter Del Skrevet 21. februar 2006 (endret) Det som skjer er at når scoren endrer seg og skal vises på skjermen, kommer alt bare etter hverandre: Score: 50Score: 100Score: 150 EDIT: Hvis jeg da ikke declearer på nytt: std::stringstream scoretemp; Problemet mitt er bare at jeg ikke vet helt hva jeg skal gjøre når jeg putter scoretemp inni et objekt. Endret 21. februar 2006 av nahoy Lenke til kommentar
teflonpanne Skrevet 21. februar 2006 Del Skrevet 21. februar 2006 (endret) en ganske primitiv måte å gjøre det på er bare å legge med mange nok '\r' (backspace) i strengen. eks: int main() { int score = 0; char foo[20]; for(int i = 0; i < 10000000; i++) { sprintf(foo, "Score: %d", score); printf("\r%s", foo); score++; } } Endret 21. februar 2006 av teflonpanne Lenke til kommentar
nahoy Skrevet 21. februar 2006 Forfatter Del Skrevet 21. februar 2006 en ganske primitiv måte å gjøre det på er bare å legge med mange nok '\r' (backspace) i strengen. eks: int main() { int score = 0; char foo[20]; for(int i = 0; i < 10000000; i++) { sprintf(foo, "Score: %d", score); printf("\r%s", foo); score++; } } 5642298[/snapback] det funker ikke med sprintf når jeg skal bruke sdl Lenke til kommentar
Dead_Rabbit Skrevet 21. februar 2006 Del Skrevet 21. februar 2006 Se etter en metode som kan "tilbakestille/klarere" objektet på noe vis. Eller finn en måte hvor du kan begrense scopet til objektet, og at det blir destruert for hver gang du skal oppdatere scoren, liksom. (Bare si ifra om forklaringen var litt teit ) Lenke til kommentar
nahoy Skrevet 21. februar 2006 Forfatter Del Skrevet 21. februar 2006 Vet ikke om jeg skjønte helt. Kan noen gi eksempel på kode? Dette er lov: std::stringstream scoretemp; Men ikke dette: std::stringstream orm[1].scoretemp; Hva skal jeg skrive isteden? Lenke til kommentar
Dead_Rabbit Skrevet 21. februar 2006 Del Skrevet 21. februar 2006 Tror du må paste koden din først, isåfall. Blir litt vanskelig når ting er helt ute av sammenheng. Lenke til kommentar
nahoy Skrevet 21. februar 2006 Forfatter Del Skrevet 21. februar 2006 (endret) Tror du må paste koden din først, isåfall. Blir litt vanskelig når ting er helt ute av sammenheng. 5643665[/snapback] Koden min er lang og vanskelig å forstå. Men den kan vel sammendras til noe slikt: ... #include <sstream> //for å legge sammen tekst 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; SDL_Surface *scoretext; SDL_Color farge; int scorecordx; int scorecordy; std::stringstream scoretemp; }; ormer orm[3]; ... orm[p].poeng+=10; //her må det være et eller annet som nullstiller orm[p].scoretemp! orm[p].scoretemp << "Score: " << orm[p].poeng; orm[p].scoretext=TTF_RenderText_Solid(scorefont, orm[p].scoretemp.str().c_str(), orm[p].farge); ... EDIT: Feil i koden Endret 21. februar 2006 av nahoy Lenke til kommentar
Dead_Rabbit Skrevet 21. februar 2006 Del Skrevet 21. februar 2006 (endret) Jo, du har pastet det der før, men det blir vanskelig å finne noen løsning om man ikke ser hele koden. Veit liksom ikke hvordan du har "satt opp" ting, og slikt. Edit: slik ja Endret 21. februar 2006 av zirener Lenke til kommentar
nahoy Skrevet 21. februar 2006 Forfatter Del Skrevet 21. februar 2006 (endret) ok her er hele koden på 827 linjer: //Bendelormer //programmert av johan helsing //kopiert diverse funksjoner fra cone3d // // 2005 #include <fstream> #include <iostream> //denne kan fjernes etter hvert #include <map> //hva gjør denne?? finn ut!! #include <string> // Hva gjør denne? #include <cstdlib> #include <ctime> #include <SDL/SDL_mixer.h> #include <SDL/SDL.h> #include <SDL/SDL_ttf.h> #include <sstream> //for å legge sammen tekst SDL_Surface *back; SDL_Surface *screen; int xpos=0,ypos=0; // config-greier using namespace std; typedef std::map<string, string> StringMap; class epler { public: int x; int y; int verdi; }; int antallepler=10; //10 er default, men blir endret med cfg-filen int standardepleverdi=10; // samme som over epler eple[100]; TTF_Font *font; TTF_Font *scorefont; TTF_Font *menyfont; TTF_Font *infofont; SDL_Surface *text_surface; SDL_Surface *pausetext; SDL_Surface *infotext; 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; SDL_Surface *scoretext; SDL_Color farge; int scorecordx; int scorecordy; void oppdater_score(int ii) { poeng += ii; stringstream tmp; tmp << "Score: " << poeng; scoretext = TTF_RenderText_Solid(scorefont, tmp.str().c_str(), farge); } }; ormer orm[3]; SDL_Color color={255,255,255}; Mix_Music *music; int done=0; int skritt; int players=0; int pause=0; int pang=0; int lightcyclemodus=0; int pausedelay=0; int tast1; int tast2; int joy1; int fart=15; //hastighet, jo høyere jo saktere int selected=0; SDL_Color merketfarge={0, 0, 150}; SDL_Color umerketfarge={190, 230, 255}; class meny { public: int x; int y; int value; int multivalue; int r; int g; int b; char* textvalue; SDL_Surface *overflate; SDL_Color farge; char* caption; void oppdater_meny(int i) { value+=i; stringstream tmp2; if(caption=="Players: " && i) { if(value==0)value=1; if(value==4)value=3; if(value==1)textvalue="1"; else if(value==2)textvalue="2"; else if(value==3)textvalue="3"; else textvalue="error"; } if(caption=="Speed: " && i) { if(value==-1)value=0; if(value==3)value=2; if(value==0)textvalue = "Slow"; else if(value==1)textvalue = "Normal"; else if(value==2)textvalue = "Fast"; } if(caption=="Achtung die Ecke mode: " && i) { if(value==-1)value=1; if(value==2)value=0; if(value)textvalue = "on"; if(!value)textvalue = "off"; } if(caption=="Mute: " && i) { if(value==-1)value=1; if(value==2)value=0; if(value)textvalue = "on"; if(!value)textvalue = "off"; if(value)Mix_PauseMusic(); if(!value)Mix_ResumeMusic(); } stringstream tmp; tmp << caption << textvalue; //if(multivalue)tmp << value; overflate = TTF_RenderText_Solid(menyfont, tmp.str().c_str(), farge); pausedelay=10; } }; meny hovedmeny[6]; template <typename Type> bool ConvertString(const string& data, Type& value) { // Convert string to specified datatype. stringstream stream(data); stream >> value; if( stream.fail() ) return false; return true; } StringMap config; //les av cfg-fil void HandleConfiguration(StringMap& config) { StringMap::const_iterator search; search = config.find("antallepler"); if( !ConvertString(search->second, antallepler) && search == config.end() ) cout << "Unable to find value for antallepler" << endl; search = config.find("standardepleverdi"); if( !ConvertString(search->second, standardepleverdi) && search == config.end() ) cout << "Unable to find value for standardepleverdi" << endl; search = config.find("fart"); if( !ConvertString(search->second, fart) && search == config.end() ) cout << "Unable to find value for fart" << endl; //knapper //tasteoppsett1 search = config.find("tast1"); if( !ConvertString(search->second, tast1) && search == config.end() ) cout << "Unable to find value for tast1" << endl; //tasteoppsett2 search = config.find("tast2"); if( !ConvertString(search->second, tast2) && search == config.end() ) cout << "Unable to find value for tast2" << endl; //joystickoppsett search = config.find("joy1"); if( !ConvertString(search->second, joy1) && search == config.end() ) cout << "Unable to find value for joy1" << endl; //orm 1 search = config.find("orm[0].x[0]"); if( !ConvertString(search->second, orm[0].x[0]) && search == config.end() ) cout << "Unable to find value for orm[0].x[0]" << endl; search = config.find("orm[0].y[0]"); if( !ConvertString(search->second, orm[0].y[0]) && search == config.end() ) cout << "Unable to find value for orm[0].y[0]" << endl; search = config.find("orm[0].lengde"); if( !ConvertString(search->second, orm[0].lengde) && search == config.end() ) cout << "Unable to find value for orm[0].lengde" << endl; search = config.find("orm[0].tempretning"); if( !ConvertString(search->second, orm[0].tempretning) && search == config.end() ) cout << "Unable to find value for orm[0].tempretning" << endl; search = config.find("orm[0].r"); if( !ConvertString(search->second, orm[0].r) && search == config.end() ) cout << "Unable to find value for orm[0].r" << endl; search = config.find("orm[0].g"); if( !ConvertString(search->second, orm[0].g) && search == config.end() ) cout << "Unable to find value for orm[0].g" << endl; search = config.find("orm[0].b"); if( !ConvertString(search->second, orm[0].b) && search == config.end() ) cout << "Unable to find value for orm[0].b" << endl; //neste orm search = config.find("orm[1].x[0]"); if( !ConvertString(search->second, orm[1].x[0]) && search == config.end() ) cout << "Unable to find value for orm[1].x[0]" << endl; search = config.find("orm[1].y[0]"); if( !ConvertString(search->second, orm[1].y[0]) && search == config.end() ) cout << "Unable to find value for orm[1].y[0]" << endl; search = config.find("orm[1].lengde"); if( !ConvertString(search->second, orm[1].lengde) && search == config.end() ) cout << "Unable to find value for orm[1].lengde" << endl; search = config.find("orm[1].tempretning"); if( !ConvertString(search->second, orm[1].tempretning) && search == config.end() ) cout << "Unable to find value for orm[1].tempretning" << endl; search = config.find("orm[1].r"); if( !ConvertString(search->second, orm[1].r) && search == config.end() ) cout << "Unable to find value for orm[1].r" << endl; search = config.find("orm[1].g"); if( !ConvertString(search->second, orm[1].g) && search == config.end() ) cout << "Unable to find value for orm[1].g" << endl; search = config.find("orm[1].b"); if( !ConvertString(search->second, orm[1].b) && search == config.end() ) cout << "Unable to find value for orm[1].b" << endl; //siste orm search = config.find("orm[2].x[0]"); if( !ConvertString(search->second, orm[2].x[0]) && search == config.end() ) cout << "Unable to find value for orm[2].x[0]" << endl; search = config.find("orm[2].y[0]"); if( !ConvertString(search->second, orm[2].y[0]) && search == config.end() ) cout << "Unable to find value for orm[2].y[0]" << endl; search = config.find("orm[2].lengde"); if( !ConvertString(search->second, orm[2].lengde) && search == config.end() ) cout << "Unable to find value for orm[2].lengde" << endl; search = config.find("orm[2].tempretning"); if( !ConvertString(search->second, orm[2].tempretning) && search == config.end() ) cout << "Unable to find value for orm[2].tempretning" << endl; search = config.find("orm[2].r"); if( !ConvertString(search->second, orm[2].r) && search == config.end() ) cout << "Unable to find value for orm[2].r" << endl; search = config.find("orm[2].g"); if( !ConvertString(search->second, orm[2].g) && search == config.end() ) cout << "Unable to find value for orm[2].g" << endl; search = config.find("orm[2].b"); if( !ConvertString(search->second, orm[2].b) && search == config.end() ) cout << "Unable to find value for orm[2].b" << endl; //ferdig med ormene } 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 DrawIMG(SDL_Surface *img, int x, int y) { SDL_Rect dest; dest.x = x; dest.y = y; SDL_BlitSurface(img, NULL, screen, &dest); } void DrawIMG(SDL_Surface *img, int x, int y, int w, int h, int x2, int y2) { SDL_Rect dest; dest.x = x; dest.y = y; SDL_Rect dest2; dest2.x = x2; dest2.y = y2; dest2.w = w; dest2.h = h; SDL_BlitSurface(img, &dest2, screen, &dest); } void DrawBG() { Slock(screen); DrawIMG(back, 0, 0); Sulock(screen); } void DrawScene(SDL_Surface *screen) { Slock(screen); DrawIMG(back, xpos-2, ypos-2, 132, 132, xpos-2, ypos-2); /*/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++) { for(int h=0; h<=3; h++) { for(int v=0; v<=3; v++) { DrawPixel(screen, (orm[p].x[i]*4+h), (orm[p].y[i]*4+v), orm[p].r, orm[p].g, orm[p].b); } } } DrawIMG(orm[p].scoretext, orm[p].scorecordx, orm[p].scorecordy); } //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*4+i), eple[a].y*4+j, eple[a].verdi*10, 0, 0); } //jo rødere eplene er, jo mer er de verdt } } DrawPixel(screen, (eple[a].x*4+2), eple[a].y*4-1, 0, 150, 0); DrawPixel(screen, (eple[a].x*4+2), eple[a].y*4-2, 0, 150, 0); } //slutt på epletegning //ttf if (pang) { DrawIMG(text_surface, 25, 100); stringstream tmp; tmp << pang << "p crashed"; infotext=TTF_RenderText_Solid(infofont, tmp.str().c_str(),color); DrawIMG(infotext, 210, 300); } //meny if (players==0) { for(int i=0; i<6; i++) { DrawIMG(hovedmeny[i].overflate, hovedmeny[i].x, hovedmeny[i].y); } } if (pause) DrawIMG(pausetext, 85, 90); 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()%160); eple[e].y=(rand()%119); } // 1 eller mer returnet betyr kollidering int kollisjonsdetektor(int p) { int i=0; if (orm[p].x[0]<0 || orm[p].x[0]>=160 || orm[p].y[0]<1 || orm[p].y[0]>118) { i=p+1; } 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]){ i=p+1; } } } return i; } int menyreturn() { if(selected==0) { players=hovedmeny[1].value; lightcyclemodus=hovedmeny[3].value; if(hovedmeny[2].value==0)fart=30; else if(hovedmeny[2].value==1)fart=15; else fart=0; } if(selected==5)done=1; pausedelay=10; } int changeselected(int i) { selected=selected+i; if(selected==-1)selected=5; if(selected==6)selected=0; for(int k=0; k<6; k++) { if(k!=selected) {hovedmeny[k].farge=umerketfarge;} if(k==selected) {hovedmeny[k].farge=merketfarge;} hovedmeny[k].oppdater_meny(0); } } int selectedvalue(int i) { hovedmeny[selected].oppdater_meny(i); } int main(int argc, char *argv[]) { srand(time(0)); Uint8* keys; //config-greier const char* config_filename = "config.cfg"; // Open configuration file. ifstream config_file( config_filename ); if(!config_file) { cout << "Error opening " << config_filename << "." << endl; return -1; } // Read configuration from file. StringMap config; string id, value; while( !config_file.eof() ) { config_file >> id; config_file >> value; if(config_file.fail()) { cout << "Error while reading " << config_filename << "." << endl; cout << "Unable to parse id " << id << "." << endl; config_file.close(); return -1; } config.insert( StringMap::value_type(id, value) ); } config_file.close(); // Handle configuration. HandleConfiguration(config); //slutt på config-greier 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); } //ttf-greier TTF_Init(); font=TTF_OpenFont("cezanne.ttf", 200); scorefont=TTF_OpenFont("cezanne.ttf", 20); infofont=TTF_OpenFont("cezanne.ttf", 50); menyfont=TTF_OpenFont("cezanne.ttf", 40); text_surface=TTF_RenderText_Solid(font,"Loooser!" ,color); for(int p=0; p<3; p++) { SDL_Color tempfarge={orm[p].r, orm[p].g, orm[p].b}; orm[p].farge= tempfarge; orm[p].oppdater_score(0); } orm[0].scorecordx=5; orm[0].scorecordy=5; orm[1].scorecordx=540; orm[1].scorecordy=5; orm[2].scorecordx=5; orm[2].scorecordy=452; pausetext=TTF_RenderText_Solid(font, "Pause" , color); hovedmeny[0].x=120; hovedmeny[0].y=110; hovedmeny[1].x=120; hovedmeny[1].y=150; hovedmeny[2].x=120; hovedmeny[2].y=190; hovedmeny[3].x=120; hovedmeny[3].y=230; hovedmeny[4].x=120; hovedmeny[4].y=270; hovedmeny[5].x=120; hovedmeny[5].y=310; hovedmeny[0].caption = "Start Game"; hovedmeny[1].caption = "Players: "; hovedmeny[1].textvalue = "1"; hovedmeny[1].multivalue = 1; hovedmeny[2].caption = "Speed: "; hovedmeny[2].textvalue = "Normal"; hovedmeny[2].multivalue = 1; hovedmeny[3].caption = "Achtung die Ecke mode: "; hovedmeny[3].textvalue = "off"; hovedmeny[3].multivalue = 1; hovedmeny[4].caption = "Mute: "; hovedmeny[4].textvalue = "off"; hovedmeny[4].multivalue = 1; hovedmeny[5].caption = "Exit to dos"; hovedmeny[1].value=1; hovedmeny[2].value=1; //dette gjør at menyen kommer fram changeselected(0); //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; denne er nå global //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("musikk.mod"); Mix_PlayMusic(music, -1); atexit(SDL_Quit); atexit(TTF_Quit); atexit(Mix_CloseAudio); 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); } back = SDL_LoadBMP("bg.bmp"); DrawBG(); //her starter tegningen for(int a=0; a<antallepler; a++) { eple[a].verdi=(((rand()%2)+1)*12); //to typer epler: røde og råtne spawneple(a); } while(done == 0) { SDL_Event event; while ( SDL_PollEvent(&event) ) { if ( event.type == SDL_QUIT ) { done = 1; } } for(int p=0; p<players; p++) { orm[p].turbo=0; } keys = SDL_GetKeyState(NULL); if(players && !pausedelay) { //tastatur1knapper 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 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; } //nyttspillknapp if ( keys[SDLK_n] || keys[SDLK_ESCAPE]) { //skal flyttes til egen funksjon, men av en eller annen gurnn går det ikke HandleConfiguration(config); for(int p=0; p<players; p++) { for(int i=1; i<orm[p].lengde; i++) { orm[p].x[i]=0; orm[p].y[i]=0; } } players=0; pang=0; orm[0].poeng=0; orm[1].poeng=0; orm[2].poeng=0; orm[0].oppdater_score(0); orm[1].oppdater_score(0); orm[2].oppdater_score(0); orm[0].retning=3; orm[1].retning=3; orm[2].retning=3; pausedelay=10; }; //tron-/lightcycle-modus if ( keys[SDLK_t]) { pausedelay=10; if(lightcyclemodus)lightcyclemodus=0; else lightcyclemodus=1; }; //Mute-knapp if ( keys[SDLK_m]) { Mix_PauseMusic(); } //pause if ( keys[SDLK_p] && !pang && players) { pausedelay=10; if(pause) pause=0; else pause=1; } //høyere og lavere fart if ( keys[SDLK_HOME] && fart>=1) { fart--; } if ( keys[SDLK_END]) { fart++; } //joystick-knapper 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; } } else if(!pausedelay) { //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; }; //menyknappene if ( keys[SDLK_UP]) { changeselected(-1); } if ( keys[SDLK_DOWN]) { changeselected(1); } if ( keys[SDLK_LEFT]) { selectedvalue(-1); } if ( keys[SDLK_RIGHT]) { selectedvalue(1); } if ( keys[SDLK_RETURN]){ menyreturn(); } if ( keys[SDLK_ESCAPE]){ done=1; } } if (pausedelay) pausedelay--; //her er alt som skjer så lenge pause ikke er på eller spillet ikke har startet enda if (!pause && !pang) 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; } //pang=kollisjonsdetektor(p); if(kollisjonsdetektor(p)){pang=p+1;} //Er eplet spist? for(int a=0; a<antallepler; a++) { for(int j=0; j<3; j++) { for(int i=0; i<3; i++) { // eple[0].x+2), eple[0].y-1 if ((orm[p].x[0]==eple[a].x) && (orm[p].y[0]==eple[a].y)) //&& !((i==0 || i==4) && (j==0 || j==4))) { for(int s=orm[p].lengde; s<orm[p].lengde+eple[a].verdi; s++) { orm[p].x[s]=0; orm[p].y[s]=0; } orm[p].lengde+=eple[a].verdi; orm[p].oppdater_score(eple[a].verdi*10); spawneple(a); } } } } if(orm[p].retning==0 && !pang){ormflytt(p); orm[p].y[0]-=1+orm[p].turbo;} if(orm[p].retning==1 && !pang){ormflytt(p); orm[p].y[0]+=1+orm[p].turbo;} if(orm[p].retning==2 && !pang){ormflytt(p); orm[p].x[0]-=1+orm[p].turbo;} if(orm[p].retning==3 && !pang){ormflytt(p); orm[p].x[0]+=1+orm[p].turbo;} skritt+=1; if(lightcyclemodus){ orm[p].x[orm[p].lengde+1]=0; orm[p].y[orm[p].lengde+1]=0; orm[p].lengde++;} } if (done == 0) { DrawBG(); DrawScene(screen); } SDL_Delay(fart); // bruk denne for å regulere farten jo høyere jo saktere } SDL_JoystickClose(mJoystick); TTF_CloseFont(font); //her sluttern return 0; } EDIT: Koden er nå oppdatert Endret 25. februar 2006 av nahoy Lenke til kommentar
Dead_Rabbit Skrevet 21. februar 2006 Del Skrevet 21. februar 2006 Du kan lage en update-funksjon, f.eks. class ormer { public: //samme som over TTF_Font* scorefont; void oppdater_score(int ii) { poeng += ii; stringstream tmp; tmp << "Score: " << poeng; scoretext = TTF_RenderText_Solid(scorefont, tmp.str().c_str(), farge); } }; //Så, for å øke scoren med 10, gjør du bare slik: orm[0].oppdater_score(10); Denne koden er ikke testa, så jeg kan ikke garantere at den fungerer. Men du skjønner sikkert poenget. Her ser du bl.a. at du ikke trenger (om ikke jeg tar helt feil) noen "klarerings"-funksjon, som "nullstiller" scorefont før du oppdaterer scoren. Lenke til kommentar
nahoy Skrevet 21. februar 2006 Forfatter Del Skrevet 21. februar 2006 Takk skal du ha! Hadde virkelig ikke trodd at noen skulle gidde å lese hele den lange koden min. Lenke til kommentar
Peter Skrevet 21. februar 2006 Del Skrevet 21. februar 2006 (endret) Vet ikke om jeg skjønte helt. Kan noen gi eksempel på kode? Dette er lov: std::stringstream scoretemp; Men ikke dette: std::stringstream orm[1].scoretemp; Hva skal jeg skrive isteden? 5643377[/snapback] Bare for å vare på dette: #include <sstream> #include <iostream> int main() { std::stringstream ss; ss << "mintekst"; std::cout << ss.str() << std::endl; ss.str(""); ss << "naz er tøff"; std::cout << ss.str() << std::endl; return 0; } Du burde forresten bruke cstdio and cstdlib istedet for stdio.h og stdlib.h når du koder i C++ (selv om koden din ser ut som en herlig miks av det meste) Endret 21. februar 2006 av Nazgul Lenke til kommentar
dayslepr Skrevet 22. februar 2006 Del Skrevet 22. februar 2006 (endret) edit: tror jeg må ha feilpostet denne ellernoe Endret 22. februar 2006 av dayslepr Lenke til kommentar
nahoy Skrevet 25. februar 2006 Forfatter Del Skrevet 25. februar 2006 Har et lite problem til, i fullskjerm vises verken bilder (bakgrunn) eller text, bare de prikkene jeg plotter inn selv. Her er koden og bilder og alt man trenger vedlagt, skal endre koden i innlegget over så den stemmer. bendelormer_alpha35_source.zip 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å