» »

c++ enum

c++ enum

aaaaa93 ::

Problem glede menjave med menijem in igro:
Meni ugotovi da je bil kliknjen now game ampak ne prestavi da bi nato zalavfal igro;

Opredelitev problema:
Slika:

Slika: prikazuje 0 pomeni da je prestavil na game play 1 pomeni da smo še v menuju, tako kot vidiš zazna, da smo nekaj delali z gumbi vendar ne prestavi
(zgornju button je new game spodnji exit;)))

Deklaracija enuma:

  enum game_state_e {
        GAME_PLAY,
        GAME_MENU
    };
   game_state_e gameState = GAME_MENU;
//podam da na začetku vrže na new menu !!!!!!!

Klik na miško, kot vidiš spodaj prestavim na GAME_PLAY, vendar čez 100/fps je spet v menu načinu ;(:
void MouseButton(int button,int state,int x, int y)
{
	if (state == GLUT_DOWN)
	{ //IsClicked(x, y);
		switch(button)
		{
		case GLUT_LEFT_BUTTON:
for( int i=0; i< vGumbi.size(); i++ )
{
    if( vGumbi.at(i)->IsClicked(x,y) )
    {
        if( !strcmp(vGumbi.at(i)->GetName(), "gumb_nova_igra"))
        {
         game_state_e gameState=GAME_PLAY;
        
        }
        else if( !strcmp(vGumbi.at(i)->GetName(), "exit"))
        {
            exit(1);
           // printf("zapri");
        }


              break;
		}
		//printf("button pressed at (%d,%d)\n",x,y);
	}


	glutPostRedisplay();
}
}}


    game_state_e gameState = GAME_MENU;


drugi gum exit(1) mi pa zazna čudno to..


main
  int main(int argc, char** argv)    //             <---------------------------------------MAIN
      { for( int i=0; i<256; i++)
        {
            tip[i] = false;
         }
  srand((unsigned)time(0));
          glutInit(&argc, argv);
          glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE);
          glutInitWindowPosition(10, 10);
          glutInitWindowSize(width, height);
          glutCreateWindow("Krneki");
     if(gameState==GAME_MENU)
    {



Gumb *btn = new Gumb();
btn->Set( 128, 128, 100, 20);
btn->SetName ( "gumb_nova_igra");
vGumbi.push_back( btn );
Gumb *bun = new Gumb();
bun->Set( 128, 180, 100, 20);
bun->SetName ( "exit");
vGumbi.push_back( bun );

          glutMouseFunc(MouseButton);
          glutDisplayFunc(display);

          glutTimerFunc(100/FPS, Update, 1); // <--------
          glutMainLoop();
    }


  else  if(gameState==GAME_PLAY)
{


	    for (int i=0; i<ASTEROIDS; i++) {
		asteroids.push_back(new Asteroid());}
   //     cout << asteroids[i]->x << " " << asteroids[i]->y << endl;

        for (int j=0; j<ST_NASPROTNIH_LADIJ; j++) {
            listasovraznih_ladij.push_back(new sovrazna_ladja());
           // cout<<"  ladja ustvarjena  ";
       }
          ship = new Ship();



          // pri inicializacije ne pozabi
glEnable(GL_TEXTURE_2D);

// load
my_texture = SOIL_load_OGL_texture
   (
           "Data/NeHe.bmp",
           SOIL_LOAD_AUTO,
           SOIL_CREATE_NEW_ID,
           SOIL_FLAG_INVERT_Y
        );
my_texture2 = SOIL_load_OGL_texture
   (
           "Data/sovraznaladja.bmp",
           SOIL_LOAD_AUTO,
           SOIL_CREATE_NEW_ID,
           SOIL_FLAG_INVERT_Y
        );
my_texture3 = SOIL_load_OGL_texture
   (
           "Data/morje.bmp",
           SOIL_LOAD_AUTO,
           SOIL_CREATE_NEW_ID,
           SOIL_FLAG_INVERT_Y
        );
my_texture4 = SOIL_load_OGL_texture
   (
           "Data/asteroidi.bmp",
           SOIL_LOAD_AUTO,
           SOIL_CREATE_NEW_ID,
           SOIL_FLAG_INVERT_Y
        );
        glutKeyboardFunc(tipkovnica);
          glutKeyboardUpFunc(tipkovnica2);

          glutMouseFunc(MouseButton);
          glutDisplayFunc(display);
         // glutReshapeFunc(reshape);
          glutTimerFunc(100/FPS, Update, 1); // <--------
          glutMainLoop();

}



return 1;
// system("pouse");
}


update
   static void Update(int value)
{
if(gameState == GAME_MENU)
{
 cout<<gameState;
   // display();
  glutTimerFunc(100/FPS, Update, 1); // <--------
}
     else if(gameState == GAME_PLAY)
   {
    if((listasovraznih_ladij.size()==0)||(ship->zdravje<=0))
            {
         if(listasovraznih_ladij.size()==0)
           {


            glutDisplayFunc(victory);                         // Register The Display Function

	       glutIdleFunc(victory);
           // victory();

       //   if(stevec==20)
            //exit(1);
           //  glutTimerFunc(1000/FPS,victory(), 1);
            }
            else if(ship->zdravje<=0)
           {
               //cout<<"                        "<<"hastala vistalas ubila si mojo ladjo prasica"<<"            ";
          glutDisplayFunc(lost);                         // Register The Display Function

	       glutIdleFunc(lost);
           // victory();
          //exit(1);

           }


            }
            else
            {
            glutTimerFunc(100/FPS, Update, 1);
            }



//             Bonus->bonus
              pritisni();
              glutPostRedisplay();
              ship->move();
              reorder();
         for (int i=0; i<asteroids.size(); i++)
              asteroids.at(i)->move();
         for (int i=0; i<listasovraznih_ladij.size(); i++)
                listasovraznih_ladij.at(i)->move();
              //dodajanje mojih metkov v vektor
         for( int i=0; i<listaMetkov.size(); i++ )
            {
                        // preverjanje
               if( !listaMetkov.at(i)->readytoclear )
                    listaMetkov.at( i )->move();
                else
                      {

                    listaMetkov.erase( listaMetkov.begin() + i);

                      }
                  }
      //dodajanje nasprotnih metkov v vektor
       for( int j=0; j<listanaspMetkov.size(); j++ )
           {

            if( !listanaspMetkov.at(j)->naspreadytoclear )
                    listanaspMetkov.at( j )->move();
                else
                    listanaspMetkov.erase( listanaspMetkov.begin() + j);
                  }
    //preverjanje streljanje moje ladje
    //stevecmetkov spusti 25 metkov potem pa 350ml sekund presledek
       if(stevecmetkov<25)
          {

           if( lahkoStreljas == false )
              {
                 tmrStrel++;
                if( tmrStrel==5)
                  {
                    tmrStrel=0;
                    lahkoStreljas = true;
                  }
              }
         }
        else
        {
             tmrStrel++;
              if( tmrStrel==350)
               {
                  tmrStrel=0;
                  lahkoStreljas = true;
                  stevecmetkov=0;

               }

         }

        //
        for (int i=0; i<listasovraznih_ladij.size(); i++)
        {
               double dx =  ship->x -listasovraznih_ladij[i]-> ladx;
               double dy = ship->y -listasovraznih_ladij[i]-> lady;
               dx=sqrt(dx*dx);
               dy=sqrt(dy*dy);
                   if(dx<(1.0)&&dy<(0.2))
                     {
                      if ( lahkoStreljasnasp == true )
                       {

                          listanaspMetkov.push_back(new naspmetki());
                         lahkoStreljasnasp = false;  //<------------------------
                     //    cout<<"Metek ustvarjen";
                      //   cout<<listaMetkov.size();
                       }

                    }

        }


                if(stevecnaspmetkov<25)
          {

           if( lahkoStreljasnasp == false )
              {
                 tmrStrelnasp++;
                if( tmrStrelnasp==5)
                  {
                    tmrStrelnasp=0;
                    lahkoStreljasnasp = true;
                  }
              }
         }
        else
        {
             tmrStrelnasp++;
              if( tmrStrelnasp==350)
               {
                  tmrStrelnasp=0;
                  lahkoStreljasnasp = true;
                  stevecnaspmetkov=0;

               }

         }

            collision();
          //  cout<<"zdravja je še"<<ship->zdravje;

          for (int j=0; j<listasovraznih_ladij.size(); j++) {
             if(listasovraznih_ladij[j]->zdravjenasp<=0)
                {
             //   cout<<"                        "<<"hastala vistalas"<<"            ";
                listasovraznih_ladij.erase( listasovraznih_ladij.begin()+  j);
                j--;
            }  }
         for(int i=0; i<asteroids.size(); i++) {
              for(int j=0; j<listaMetkov.size(); j++) {
	             	double dx = asteroids[i]->x - listaMetkov[j]->x;
	             	double dy = asteroids[i]->y - listaMetkov[j]->y;
	            	double r = asteroids[i]->maxR + listaMetkov[j]->r;
                   if(dx*dx + dy*dy < r*r) {

                   listaMetkov[j]->strel=0;
                   listaMetkov[j]->readytoclear=1;

                   }}}
            for(int i=0; i<asteroids.size(); i++) {
              for(int j=0; j<listanaspMetkov.size(); j++) {
	             	double dx = asteroids[i]->x - listanaspMetkov[j]->x;
	             	double dy = asteroids[i]->y - listanaspMetkov[j]->y;
	            	double r = asteroids[i]->maxR + listanaspMetkov[j]->r;
                   if(dx*dx + dy*dy < r*r) {

                   listanaspMetkov[j]->naspstrel=0;
                   listanaspMetkov[j]->naspreadytoclear=1;


                   }}}

            stevecbonus++;
          if(stevecbonus==stevecbonus2)
             {
                 stevecbonus2=stevecbonus2+100;
             stevecbonus=0;
          Bonus.push_back(new bonus());
             }



}
}


display
static void display(void) {
   // te tri vrstice naj bodo vedno na začetku

    // izrisi meni
    if(gameState==GAME_MENU)
  {   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
   glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
   glLoadIdentity();
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
   glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
   glLoadIdentity();

	 glMatrixMode (GL_PROJECTION);
        glLoadIdentity ();
        glOrtho (0, width, height, 0, 0, 1);
         glMatrixMode (GL_MODELVIEW);


for( int i=0; i< vGumbi.size(); i++ )
{
  vGumbi.at(i)->Draw();
}


	glutSwapBuffers();

      /* glMatrixMode (GL_PROJECTION);
        glLoadIdentity ();
        glOrtho (0, width, height, 0, 0, 1);
         glMatrixMode (GL_MODELVIEW);

      glBegin(GL_QUADS);
      for(int i = 0; i < 2; i++) {
         glColor3f(1.0f, 1.0f, 1.0f);
         glVertex2f(100.0f, 320 - i*50);
         glVertex2f(300.0f, 320 - i*50);
         glVertex2f(300.0f, 320 - (i*50)+30);
         glVertex2f(100.0f, 320 - (i*50)+30);
      }
      glEnd();

      // izriši kazalec v meniju glede na stanje menija
      if(menuState == MENU_NEWGAME)
      {
         glBegin(GL_QUADS);
            glColor3f(1.0f, 0.0f, 0.0f);
            glVertex2f(60.0f, 320 - 0*50);
            glVertex2f(90.0f, 320 - 0*50);
            glVertex2f(90.0f, 320 - (0*50)+30);
            glVertex2f(60.0f, 320 - (0*50)+30);
         glEnd();
      }
      else if(menuState == MENU_EXIT)
      {
         glBegin(GL_QUADS);
            glColor3f(1.0f, 0.0f, 0.0f);
            glVertex2f(60.0f, 320 - 1*50);
            glVertex2f(90.0f, 320 - 1*50);
            glVertex2f(90.0f, 320 - (1*50)+30);
            glVertex2f(60.0f, 320 - (1*50)+30);
         glEnd();
      }*/
   }
   else if(gameState == GAME_PLAY)
   {

     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

   glLoadIdentity();

   glBindTexture(GL_TEXTURE_2D, my_texture3);
       glBegin(GL_QUADS);

     glColor3f(1.0f, 1.0f, 1.0f);
     glTexCoord2f(0.0f, 0.0f);
     glVertex2f(-1, -1);
     glTexCoord2f(1.0f, 0.0f);
     glVertex2f(1, -1);
     glTexCoord2f(1.0f, 1.0f);
     glVertex2f(1,1);
     glTexCoord2f(0.0f, 1.0f);
     glVertex2f(-1,1);
     glEnd();
     glBindTexture(GL_TEXTURE_2D,5);



      for (int j=0; j<asteroids.size(); j++) {
         asteroids[j]->move();
         ship->move();
      }
       zdavje_izris();
              zdavje_izris2();
           for (int i=0; i<asteroids.size(); i++)
          {
	          asteroids.at(i)->draw();
          }
          for(int i=0;i<Bonus.size();i++)
                 {
          Bonus[i]->draw();
                 }
        // Izris
               ship->draw();
          for (int i=0; i<listasovraznih_ladij.size(); i++)
          {
              listasovraznih_ladij.at(i)->draw();

          }

         for( int i=0; i<listaMetkov.size(); i++ )
              {
                  listaMetkov.at( i )->draw();
              }
         for( int j=0; j<listanaspMetkov.size(); j++ )
              {
                   listanaspMetkov.at( j )->draw();
              }


   }

   glFlush();
   glutSwapBuffers();
}

Bistri007 ::

To pa imaš kode...

Sem pogledal na hitro:
1. imaš na koncu vsakega case (v switch) break?
2. zakaj še enkrat deklariraš spremenljivko gameState kot lokalno?
( game_state_e gameState=GAME_PLAY; )
Največja napaka desetletja je bila narejena 4. novembra 2008
Oni so goljufali in Alah je goljufal, Alah je najboljši prevarant. (Koran 3:54)
Citiraj svetega očeta Benedikta XVI. in postani "persona rudis"...

aaaaa93 ::

Se opravičujem dal sem minimalno kode kolikor se da, imam jo 2,5k vrstic ;)
Ja sem odstranil gameState=GAME_PLAY; ye sedaj in ko kliknem na knof mi pa zbuga zadevo program se izsuje..

//tukaj je prva slika ko samo skompajlamo igra se še ni crashala, še lavfa

//tukaj se je že veslo scrashala in javla več napak


Aja pa nekako bi moral sprmeniti globlano spremenljivko da bi dobila vrednost game play

Zgodovina sprememb…

  • spremenil: aaaaa93 ()

Bistri007 ::

aaaaa93 je izjavil:

Ja sem odstranil gameState=GAME_PLAY; ye sedaj in ko kliknem na knof mi pa zbuga zadevo program se izsuje..

Te ne razumem čisto dobro. Jaz sem mislil, da bi odstranil "game_state_e" izpred "gameState=GAME_PLAY", ker drugače tu ustvariš novo spremenljivko.

aaaaa93 je izjavil:

Aja pa nekako bi moral sprmeniti globlano spremenljivko da bi dobila vrednost game play

Kaj pa če bi delal z objekti, če že uporabljaš C++?
this->gameState ...
Največja napaka desetletja je bila narejena 4. novembra 2008
Oni so goljufali in Alah je goljufal, Alah je najboljši prevarant. (Koran 3:54)
Citiraj svetega očeta Benedikta XVI. in postani "persona rudis"...

aaaaa93 ::

gameState=GAME_PLAY tako sem naredil pa mi crash naredi pri igri
game_state_e gameState=GAME_PLAY pa pomeni da sem kliku pa se ni nič zgodilo

technolog ::

Zagotovo ostani pri prvi možnosti, ker v drugi samo narediš novo lokalno spremenjivko in ne narediš nič.

Kaj pa pravi debugger GDB? Kakšen tip "crasha" dobiš?

Zgodovina sprememb…

matej94 ::

Ja maste prov v mainu sta bila 2 main loopa sedaj imam spet novo napako, ampak ugotvil sem da sem dibival crash zaradi textur v mainu nekam jih moram prestavt vendar ne vem kam ;(

Bistri007 ::

Najbolj enostavno je uporabiti step-by-step debugger. Glede na to, da imaš bolj začetniške napake, bi ti predlagal, da se najprej udomačiš v C# (z XNA, če te zanimajo igre) in greš kasneje na C++. Naučiš se objektno orientiranega programiranja, compiler in .NET runtime pa ti dajeta bolj razumljiva sporočila o napakah. Sama jezika sta si zelo podobna, s tem da se je s C++ veliko lažje "ustreliti v nogo".

Visual C# Express je brezplačen, Visual Studio z ReSharper pa je najbolj produktivno okolje.
Največja napaka desetletja je bila narejena 4. novembra 2008
Oni so goljufali in Alah je goljufal, Alah je najboljši prevarant. (Koran 3:54)
Citiraj svetega očeta Benedikta XVI. in postani "persona rudis"...


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

napaka v c++

Oddelek: Programiranje
201897 (982) čuhalev
»

Java skeniranje map in podmap

Oddelek: Programiranje
61148 (1037) nightrage
»

Grafika

Oddelek: Programiranje
201695 (1047) aaaaa93
»

java net beans pomoč

Oddelek: Programiranje
121598 (1486) i33a
»

C# Pomoč

Oddelek: Programiranje
131400 (1225) jizzer

Več podobnih tem