Forum » Programiranje » 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:
Klik na miško, kot vidiš spodaj prestavim na GAME_PLAY, vendar čez 100/fps je spet v menu načinu ;(:
drugi gum exit(1) mi pa zazna čudno to..
main
update
display
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; )
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"...
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
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 ::
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.
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"...
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
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š?
Kaj pa pravi debugger GDB? Kakšen tip "crasha" dobiš?
Zgodovina sprememb…
- spremenil: technolog ()
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.
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"...
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 ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | napaka v c++Oddelek: Programiranje | 1898 (983) | čuhalev |
» | Java skeniranje map in podmapOddelek: Programiranje | 1148 (1037) | nightrage |
» | GrafikaOddelek: Programiranje | 1695 (1047) | aaaaa93 |
» | java net beans pomočOddelek: Programiranje | 1599 (1487) | i33a |
» | C# PomočOddelek: Programiranje | 1400 (1225) | jizzer |