void MainExitState(void) { debug(("Old main state = %d\n", state)); switch (state) { case STATE_OFFLINE: MenuDisconnect(); OfflineExit(); break; case STATE_CONNECTING: ConnectingExit(); break; case STATE_LOGIN: // Free any modules that are sitting around (need to be unloaded so that // they can be overwritten during download). ModulesClose(); LoginExit(); break; case STATE_STARTUP: AbortStartupTimer(); break; case STATE_TERM: TermExit(); break; case STATE_GAME: GameExit(); break; case STATE_DOWNLOAD: DownloadExit(); break; } }
int HandleEvent(SDL_Event sdlEvent) { switch (sdlEvent.type) { case SDL_KEYDOWN: if(IN_KeyDown(sdlEvent.key.keysym.sym)) break; break; case SDL_KEYUP: if(IN_KeyUp(sdlEvent.key.keysym.sym)) break; break; case SDL_TEXTINPUT: IN_TextInputChar(sdlEvent.text.text); break; case SDL_TEXTEDITING: break; case SDL_MOUSEBUTTONDOWN: if(sdlEvent.button.button==SDL_BUTTON_LEFT) IN_MouseDown(sdlEvent.button.x,sdlEvent.button.y); break; case SDL_QUIT: GameExit(); return -1; } return 0; }
void ExitSessionState(session_node *s) { /* these functions must NOT write to their session, because it may have hung up and you will get infinite loops */ switch (s->state) { case STATE_ADMIN : AdminExit(s); break; case STATE_MAINTENANCE : MaintenanceExit(s); break; case STATE_GAME : GameExit(s); break; case STATE_TRYSYNC : TrySyncExit(s); break; case STATE_SYNCHED : SynchedExit(s); break; case STATE_RESYNC : ResyncExit(s); break; } }
//--------------------------------------------------------------------------- //########################################################################### int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hprevinstance, LPSTR lpcmdline, int ncmdshow) { WNDCLASSEX winclass ; HWND hwnd ; MSG msg ; winclass.cbSize=sizeof(WNDCLASSEX); winclass.style =CS_DBLCLKS|CS_OWNDC|CS_HREDRAW|CS_VREDRAW; winclass.lpfnWndProc = WindowProc; winclass.cbClsExtra=0; winclass.cbWndExtra=0; winclass.hIcon=LoadIcon(NULL,IDI_APPLICATION); winclass.hCursor=LoadCursor(NULL,IDC_ARROW); winclass.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH); winclass.lpszMenuName=NULL; winclass.lpszClassName=WINDOW_CLASS_NAME; winclass.hIconSm=LoadIcon(NULL,IDI_APPLICATION); if(!RegisterClassEx(&winclass)) return(0); hwnd=CreateWindowEx(NULL,WINDOW_CLASS_NAME, "THE HIVE", WS_POPUP|WS_VISIBLE, 0,0, //- position screen_HEIGHT,screen_WIDTH, //- size NULL,NULL,hinstance,NULL); if(!hwnd)return(0); main_handle = hwnd ; main_hinstance = hinstance ; GameInit(); // INITIALIZING while(true) { if(PeekMessage(&msg,NULL,0,0,PM_REMOVE)) { if(msg.message==WM_QUIT)break; TranslateMessage(&msg); DispatchMessage(&msg); } ; GameMain(); // MAIN GAME FUNCTION } ; GameExit(); // RELEASE return(msg.wParam); };
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_KEYDOWN: switch (wParam) { case VK_ESCAPE: SendMessage(hwnd, WM_DESTROY, 0, 0); break; default: break; } break; case WM_DESTROY: GameExit(hwnd); PostQuitMessage(0); break; default: return DefWindowProc(hwnd, message, wParam, lParam); } return 0; }
void Game::GameScene::Process(){ // 入力処理 ANAS::InputData State; do { State = pContainer->pInput->PopState(); if( State.InputType == ANAS::IT_KEY ){ if( State.KeyChar == ANAS::IK_BACK ){ ANAS::Log::i("Game Scene", "Detect Back Key"); GameExit(); //pNextScene = new test::testScene; //SetSceneEnd(); break; } } else if( State.InputType == ANAS::IT_MOTION ){ //mTestSprite.Pos[0] = State.x; //mTestSprite.Pos[1] = State.y; ANAS::Log::i("Input State", "Peek Motion"); ANAS::Log::i("Input State", (boost::format("Type:%1%, x:%2%, y:%3%, C:%4%")%State.ActionType%State.Pos.x%State.Pos.y%AttackIntervalCounter).str().c_str()); if(State.ActionType == AMOTION_EVENT_ACTION_DOWN && (AttackIntervalCounter <= 0) ){ // Lock boost::mutex::scoped_lock Lock(Mutex); BombData *pdata = new BombData; pdata->x = State.Pos.x; pdata->y = State.Pos.y; pdata->life = BombLife; BombList.push_back(pdata); AttackIntervalCounter = AttackInterval; } } } while( State.KeyChar != -1 ); //mTestSprite.Time += 0.01f; { // Lock boost::mutex::scoped_lock Lock(Mutex); std::vector<BombData*>::iterator Ite = BombList.begin(); while( Ite != BombList.end() ){ (*Ite)->life--; // Life*2 (*Ite)->x+= (0.5f*TileSize)/(BombLife*2); (*Ite)->y+= (0.5f*TileSize)/(BombLife*2); // ライフの切れたのを消去 if( (*Ite)->life <= 0){ bool isHit= false; // 当たり判定 BOOST_FOREACH( Enemy::EnemyBase *v, EnemyList ){ isHit |= v->HitCheck( (*Ite)->x, (*Ite)->y, 64, 1 ); } // 当たっていれば爆発 if( isHit ){ Effect::BombLine _temp; _temp.x = (*Ite)->x; _temp.y = (*Ite)->y; _temp.life = 64; _temp.theta = 0; _temp.pSprite = &mBombLineSprite; BombLineEffect.Create( _temp ); } // 消去 delete *Ite; Ite = BombList.erase( Ite ); continue; } Ite++; }
int main(void) { int i,j,k,x,y; //byte bi,bj; //byte cursize=1; //int cursorx=0,cursory=0; //byte spritecont=10,spritecont2=10+16; //byte sprconmeno,sprconpiu; //byte sprconmeno2,sprconpiu2; //byte terrancont=0,solidcont=0; //bool speed=false; //bool print=false,toggleprint=false; //bool moved=false,pushed=false; int nlevel; BITMAP *buffer; // Double-buffering BITMAP *textures; // Immagine globale delle texture BITMAP *sprites[256]; // Array degli sprite //RGB color[256]; //char nomefile[30],errmess[20]; //FILE *fp; T_Map mappa; strcpy(errmess,""); // inizializzo la stringa if(!mappa.InitLevel()){ strcpy(errmess,"Impossibile allocare la mappa"); exit(0); } /////////// INPUT NOME FILE DELLA MAPPA /////////////////////// printf("\n\t Inserta il nome del file della mappa(senza est.) : "); gets(nomefile); strcat(nomefile,".map"); ///////////////////////////////////////////////////////////////// if(!mappa.SetMapFile){ printf("\n\t File non trovato"); } nlevel=mappa.RetNLevel(); printf("\n\t Numero attuale di livelli: %d",nlevel); printf("\n\t Inserta il numero di livelli da creare nella mappa:"); printf("\n\t (0 per non aggiungerne)"); scanf("%d",&i); if(i>0){ nlevel+=i; mappa.SetNLevel(nlevel); mappa.AllocMap(); } GameInit(); textures=create_bitmap(128,128); mappa.SetTextureFile("D:\\DJGPP\\Game01\\IndexTxt.txt"); /////// Gestione delle texture... s�, lo so, lo so che sono tile for(y=0,i=0;y<16&&i<256;y++){ for(x=0;x<16&&i<256;x++,i++){ sprites[i]=create_sub_bitmap(textures,x*UNITX, y*UNITY,UNITX,UNITY); } } /////////// INIZIALIZZAZIONE MATRICE DELLA FINESTRELLA ///// for(i=0;i<WIMGY;i++){ for(j=0;j<WIMGX;j++){ miniwmask[i][j]=0; } } ////// INIZIALIZZAZIONE MATRICE DELLA LISTA DELLE TILE///////////// for(i=0;i<2;i++){ for(j=0;j<20;j++){ spritemask1[i][j]=0; spritemask2[i][j]=0; } } ///////////////// BUFFER PER IL DOUBLE BUFFERING ////////////// buffer=create_bitmap(SCREEN_W,SCREEN_H); //show_mouse(buffer); clear_to_color(buffer,DESK_COL); //clear_to_color(lvldis,BACKG_COL); ////////////////////////////////////////////////////////////////// /////////////////////////// PUTTAGGIO /////////////////////////// DrawMainWindow(); DrawMiniWindow(); DrawTileLists(); //show_mouse(buffer); blit(buffer,screen,0,0,0,0,SCREEN_W,SCREEN_H); //rectfill(screen,0,0,100,100,5); ////////////////////////////////////////////////////////////////// ////////////////// INPUT E CONTROLLI //////////////////////////// while(!key[KEY_ESC]){ if(key[KEY_RSHIFT]||key[KEY_LSHIFT]){ speed=true; }else{ speed=false; } if(key[KEY_P]){ cursize=2; moved=true; } if(key[KEY_O]){ cursize=1; moved=true; } if(key[KEY_SPACE]&&!pushed){ print=true; pushed=true; moved=true; } if(key[KEY_T]&&!pushed){ pushed=true; moved=true; if(toggleprint){ toggleprint=false; }else{ toggleprint=true; } } if(key[KEY_LEFT]&&cursorx&&!pushed){ if(!speed) pushed=true; cursorx--; if(cursize==2&&cursorx) cursorx--; relx=cursorx*MUNITX; moved=true; } if(key[KEY_RIGHT]&&cursorx<NSPRITEX-cursize&&!pushed){ if(!speed) pushed=true; cursorx++; if(cursize==2&&cursorx<NSPRITEX-cursize) cursorx++; relx=cursorx*MUNITX; moved=true; } if(key[KEY_UP]&&cursory&&!pushed){ if(!speed) pushed=true; cursory--; if(cursize==2&&cursory) cursory--; rely=cursory*MUNITY; moved=true; } if(key[KEY_DOWN]&&cursory<NSPRITEY-cursize&&!pushed){ if(!speed) pushed=true; cursory++; if(cursize==2&&cursory<NSPRITEY-cursize) cursory++; rely=cursory*MUNITY; moved=true; } if(key[KEY_PLUS_PAD]&&!pushed){ //if(!button[KEY_PLUS_PAD]){ pushed=true; BACKG_COL++; moved=true; //button[KEY_PLUS_PAD]=true; //} //}else{ // button[KEY_PLUS_PAD]=false; } if(key[KEY_Z]&&!pushed){ if(!speed) pushed=true; //spritecont--; //spritecont2--; //relx=cursorx*MUNITX; moved=true; } if(key[KEY_X]&&!pushed){ if(!speed) pushed=true; //spritecont++; //spritecont2++; //relx=cursorx*MUNITX; moved=true; } if(key[KEY_A]&&!pushed){ if(!speed) pushed=true; if(terrancont>0) terrancont--; else terrancont=MAX_TERR; //spritecont2++; //relx=cursorx*MUNITX; moved=true; } if(key[KEY_S]&&!pushed){ if(!speed) pushed=true; terrancont++; if(terrancont>MAX_TERR) terrancont=0; //spritecont2++; //relx=cursorx*MUNITX; moved=true; } if(key[KEY_Q]&&!pushed){ if(!speed) pushed=true; if(solidcont>0) solidcont--; else solidcont=MAX_SOLID; //spritecont2++; //relx=cursorx*MUNITX; moved=true; } if(key[KEY_W]&&!pushed){ if(!speed) pushed=true; solidcont++; if(solidcont>MAX_SOLID) solidcont=0; //spritecont2++; //relx=cursorx*MUNITX; moved=true; } if(key[KEY_F3]&&!pushed){ pushed=true; fp=fopen(nomefile,"rb"); if(fp!=NULL){ if(!mappa.LoadLevel(fp)) strcpy(errmess,"Unable to load"); fclose(fp); for(i=0,k=0;i<NSPRITEY;i++){ for(j=0;j<NSPRITEX;j++,k++){ livello[i][j].solid=mappa.RetSolid(k); livello[i][j].terran=mappa.RetTerran(k); } } } moved=true; } if(key[KEY_F2]&&!pushed){ pushed=true; /* for(i=0,k=0;i<NSPRITEY;i++){ for(j=0;j<NSPRITEX;j++,k++){ mappa.SetSolid(k,livello[i][j].solid); mappa.SetTerran(k,livello[i][j].terran); } } for(i=OVER_SPACE,k=0;i<OVER_SPACE+NSPRITEY;i++){ for(j=LEFT_SPACE;j<LEFT_SPACE+NSPRITEX;j++,k++){ mappa.SetSprite(k,livello[i][j].sprite); } } */ fp=fopen(nomefile,"wb"); //mappa.SaveLevel(fp); fclose(fp); } if(key[KEY_F7]&&!pushed){ pushed=true; for(i=0,k=0;i<NSPRITEY;i++){ for(j=0;j<NSPRITEX;j++,k++){ //fwrite(&livello[i][j],sizeof(level),1,fp); livello[i][j].solid=mappa.RetSolid(k); livello[i][j].terran=mappa.RetTerran(k); } } moved=true; } if(key[KEY_F5]&&!pushed){ pushed=true; for(i=0,k=0;i<NSPRITEY;i++){ for(j=0;j<NSPRITEX;j++,k++){ mappa.SetSolid(k,livello[i][j].solid); mappa.SetTerran(k,livello[i][j].terran); } } } if(key[KEY_ENTER]){ clear_to_color(buffer,0); for(i=OVER_SPACE,y=0;i<NSPRITEY-BOTTOM_SPACE;i++,y+=UNITY){ for(j=LEFT_SPACE,x=0;j<NSPRITEX-RIGHT_SPACE;j++,x+=UNITX){ blit(sprites[livello[i][j].sprite],buffer,0,0, x,y,UNITX,UNITY); } } vsync(); blit(buffer,screen,0,0,0,0,SCREEN_W,SCREEN_H); while(!key[KEY_BACKSPACE]); moved=true; } if(print||toggleprint){ livello[cursory][cursorx].sprite=spritecont; livello[cursory][cursorx].terran=terrancont; livello[cursory][cursorx].solid=solidcont; print=false; //stretch_blit(sprites[spritecont],lvldis,0,0,UNITX,UNITY, // cursorx*MUNITX,cursory*MUNITY,MUNITX,MUNITY); if(cursize>1){ livello[cursory][cursorx+1].sprite=spritecont+1; livello[cursory][cursorx+1].terran=terrancont; livello[cursory][cursorx+1].solid=solidcont; // stretch_blit(sprites[spritecont+1], // lvldis,0,0,UNITX,UNITY,(cursorx+1)*MUNITX, // cursory*MUNITY,MUNITX,MUNITY); livello[cursory+1][cursorx].sprite=spritecont2; livello[cursory+1][cursorx].terran=terrancont; livello[cursory+1][cursorx].solid=solidcont; // stretch_blit(sprites[spritecont2], // lvldis,0,0,UNITX,UNITY,cursorx*MUNITX, // (cursory+1)*MUNITY,MUNITX,MUNITY); livello[cursory+1][cursorx+1].sprite=spritecont2+1; livello[cursory+1][cursorx+1].terran=terrancont; livello[cursory+1][cursorx+1].solid=solidcont; // stretch_blit(sprites[spritecont2+1], // lvldis,0,0,UNITX,UNITY,(cursorx+1)*MUNITX, // (cursory+1)*MUNITY,MUNITX,MUNITY); } } if(moved){ clear_to_color(buffer,DESK_COL); // Puttaggio dello schema del livello : ex lvldis rectfill(buffer,0,0,XLAR,YLAR,BACKG_COL); //blit(lvldis,buffer,0,0,0,0,XLAR,YLAR); for(i=0,y=0;i<NSPRITEY;i++,y+=MUNITY){ for(j=0,x=0;j<NSPRITEX;j++,x+=MUNITX){ if(livello[i][j].sprite){ stretch_blit(sprites[livello[i][j].sprite], buffer,0,0,UNITX,UNITY,x,y,MUNITX,MUNITY); } } } // Rettangoli dello schema //rect(buffer,LEFT_SPACE*MUNITX,OVER_SPACE*MUNITY, // XLAR-(RIGHT_SPACE*MUNITX)-1,YLAR-(BOTTOM_SPACE*MUNITY)-1, // CONF_COL); rect(buffer,relx,rely,relx+(cursize*MUNITX-1), rely+(cursize*MUNITY-1),CURS_COL); // Disegno della finestra laterale // for(i=cursory-2,bi=0;i<cursory+3;i++,bi++){ for(j=cursorx-2,bj=0;j<cursorx+3;j++,bj++){ if(i<0||j<0){ windimg[bi][bj]=0; }else{ windimg[bi][bj]=livello[i][j].sprite; } } } for(i=0,y=0;i<WIMGY;i++,y+=UNITY){ for(j=0,x=SCREEN_W-(WIMGX*UNITX);j<WIMGX;j++,x+=UNITX){ //temp=; blit(sprites[windimg[i][j]],buffer,0,0,x,y,UNITX,UNITY); } } // Se � premuto 'toggleprint' ( che � un Pokemon? ) if(toggleprint){ rectfill(buffer,300,110,320,130,CURS_COL); }else{ rectfill(buffer,300,110,320,130,DESK_COL); } textprintf(buffer,font,250,60,255,"Sol : %d",solidcont); textprintf(buffer,font,250,70,255,"Terr: %d",terrancont); // Disegno elenco sprite if(spritecont>10){ sprconmeno=spritecont-10; }else{ sprconmeno=256-(10-spritecont); } if(spritecont<246){ sprconpiu=spritecont+10; }else{ sprconpiu=10-(256-spritecont); } if(spritecont2>10){ sprconmeno2=spritecont2-10; }else{ sprconmeno2=256-(10-spritecont2); } if(spritecont2<246){ sprconpiu2=spritecont2+10; }else{ sprconpiu2=10-(256-spritecont2); } for(bi=sprconmeno,bj=sprconmeno2,x=0;bi!=sprconpiu;bi++,bj++,x+=BIGUNITX){ stretch_blit(sprites[bi],buffer,0,0,UNITX,UNITY,x, 200,BIGUNITX,BIGUNITY); if(cursize>1){ stretch_blit(sprites[bj],buffer,0,0, UNITX,UNITY,x,216,BIGUNITX,BIGUNITY); } } rect(buffer,160,199,160+(cursize*BIGUNITX), 200+(cursize*BIGUNITY),CURS_COL); moved=false; } if(pushed){ pushed=false; for(i=0;i<128;i++){ if(key[i]){ pushed=true; break; } } } show_mouse(buffer); vsync(); blit(buffer,screen,0,0,0,0,SCREEN_W,SCREEN_H); show_mouse(NULL); } /// Distruzione Bitmap for(i=0;i<256;i++){ destroy_bitmap(sprites[i]); //destroy_bitmap(texture[1][i]); } destroy_bitmap(textures); //destroy_bitmap(lvldis); destroy_bitmap(buffer); readkey(); GameExit(); printf("Programmed with DJGPP RHIDE Allegro"); puts(errmess); getch(); return 0; }
int CALLBACK WinMain( _In_ HINSTANCE hInstance, _In_ HINSTANCE hPrevInstance, _In_ LPSTR lpCmdLine, _In_ int nCmdShow) { int flags = 0; dfDeltaTime = 43.f; ScreenResolution.x = 800.f; ScreenResolution.y = 600.f; GameResolution.x = 640.f; GameResolution.y = 480.f; if( SDL_Init( SDL_INIT_VIDEO ) < 0 ) { printf( "Video initialization failed: %s\n", SDL_GetError( ) ); GameExit( 1 ); } if( SDL_Init( SDL_INIT_JOYSTICK ) < 0 ) { printf( "Input initialization failed: %s\n", SDL_GetError( ) ); GameExit( 1 ); } if( SDL_Init( SDL_INIT_GAMECONTROLLER ) < 0 ) { printf( "Input initialization failed: %s\n", SDL_GetError( ) ); GameExit( 1 ); } if( SDL_Init( SDL_INIT_AUDIO ) < 0 ) { printf( "Audio initialization failed: %s\n", SDL_GetError( ) ); GameExit( 1 ); } //Initialize SDL_mixer if( Mix_OpenAudio( 44100, MIX_DEFAULT_FORMAT, 2, 2048 ) < 0 ) { printf( "SDL_mixer could not initialize! SDL_mixer Error: %s\n", Mix_GetError() ); GameExit( 1 ); } SDL_GL_SetAttribute( SDL_GL_RED_SIZE, 5 ); SDL_GL_SetAttribute( SDL_GL_GREEN_SIZE, 5 ); SDL_GL_SetAttribute( SDL_GL_BLUE_SIZE, 5 ); SDL_GL_SetAttribute( SDL_GL_DEPTH_SIZE, 16 ); SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 ); //flags = SDL_WINDOW_FULLSCREEN | SDL_WINDOW_OPENGL; flags = SDL_WINDOW_OPENGL; RenderSystem::window = SDL_CreateWindow("Dufresne", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, ScreenResolution.x, ScreenResolution.y, flags); flags = IMG_INIT_JPG | IMG_INIT_PNG; int initted = IMG_Init(flags); if(initted & flags != flags) { printf("Failed to Init SDL Image\n"); printf("IMG_Init: %s\n", IMG_GetError()); GameExit( 1 ); // handle error } // init gl SDL_GLContext glcontext; glcontext = SDL_GL_CreateContext(RenderSystem::window); GLint GlewInitResult = glewInit(); if (GlewInitResult != GLEW_OK) { printf("ERROR: %s\n",glewGetErrorString(GlewInitResult)); GameExit( 1 ); } glEnable(GL_TEXTURE_2D); tinyjson_init(); InitEngine(); assMan = AssetManager(); std::wstring path = L"fart\\"; assMan.CalculateLoosePackageSize(path); assMan.LoadLoosePackage(path); assMan.DebugTestWritePoolToFile(); sfxMan = SoundSystem(); sfxMan.Init(); sceneMan.Init(); input = Input(); input.Init(); dfScene* scene1 = sceneMan.CreateScene("scene-left"); dfScene* scene2 = sceneMan.CreateScene("scene-right"); scene1->setupFunc = &SetupScene1; scene2->setupFunc = &SetupScene2; sceneMan.LoadScene(scene1); Uint32 previousMiliseconds = 0; while(true) { Uint32 currentMiliseconds = SDL_GetTicks(); dfRandomFloat = dfRand(); dfTotalTime = currentMiliseconds / 1000.f; dfDeltaTime = (currentMiliseconds / 1000.f) - (previousMiliseconds / 1000.f); if(testDude->tf.rectangle.left > GameResolution.x) { sceneMan.LoadScene(scene2); } if(testDude->tf.rectangle.right < 0) { sceneMan.LoadScene(scene1); } if(input.keyboard.n1.tapped) { sceneMan.renderer.UpdateResolution(640, 480); } if(input.keyboard.n2.tapped) { sceneMan.renderer.UpdateResolution(300, 300); } if(input.keyboard.n3.tapped) { sceneMan.renderer.UpdateResolution(450, 300); } input.Update(); sceneMan.Update(); SDL_GL_SwapWindow(RenderSystem::window); } return 0; }