Gå til innhold

legge sammen tekst?


Anbefalte innlegg

Videoannonse
Annonse

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 av nahoy
Lenke til kommentar

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 av teflonpanne
Lenke til kommentar
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
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 av nahoy
Lenke til kommentar

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 av nahoy
Lenke til kommentar

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
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 av Nazgul
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å
×
×
  • Opprett ny...