int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int CmdShow) { ChangeWindowMode(TRUE); SetGraphMode(WINDOW_X, WINDOW_Y, 32); if (DxLib_Init() == -1)return -1; SetDrawScreen(DX_SCREEN_BACK); //�錾 GameManager *gm = new GameManager(WINDOW_X, WINDOW_Y); while (ProcessMessage() != -1) { int startTime = GetNowCount(); ScreenFlip(); ClearDrawScreen(); //���� gm->All(); if (CheckHitKey(KEY_INPUT_ESCAPE) == 1)break; int endTime = GetNowCount(); WaitTimer((1000 / 60) - (endTime - startTime)); } delete gm; DxLib_End(); return 0; }
int main() { SetupAll(); SetupBalls(); DoTimers(); LoadBitmaps(); DoBlock(); while (!key[KEY_ESC] && GoGame == 1) { CheckDead(); CheckBlock(); MoveBall(); if (BallsToDrop > 0) DropBalls(); if (Lives <= 0) GoGame = 0; DrawBack(); CheckExplode(); DrawBalls(); MoveMouse(); MoveStoneBlock(); WaitTimer(); flip(); } EndOfGame(); allegro_exit(); //Clean up allegro return 0; }
void gamestart() { shot_used2[0] = false; shot_used3[0] = false; shot_used2[1] = false; shot_used3[1] = false; game_startflag = true; if(loadbgm_flag == false) { PlaySoundMem(start_m,DX_PLAYTYPE_BACK); bgm[0] = LoadSoundMem("media\\bgm2.ogg"); bgm[1] = LoadSoundMem("media\\bgm3.ogg"); bgm[3] = LoadSoundMem("media\\bgm4.ogg"); bgm[5] = LoadSoundMem("media\\bgm5.ogg"); bgm[2] = LoadSoundMem("media\\bgm6.ogg"); bgm[4] = LoadSoundMem("media\\bgm7.ogg"); WaitTimer(2000); loadbgm_flag = true; } else { PlaySoundMem(start_m,DX_PLAYTYPE_NORMAL); } jiki_x = 304; }
// マップとプレイヤーの描画(クォータービューでない時) void Display::disp_map() { int MapDrawPointX , MapDrawPointY ; // 描画するマップ座標値 int DrawMapChipNumX , DrawMapChipNumY ; // 描画するマップチップの数 // 描画するマップチップの数(量)をセット DrawMapChipNumX = SCREEN_SIZE_X / ChipSizeX + 1 ; DrawMapChipNumY = SCREEN_SIZE_Y / ChipSizeY + 1 ; // 画面左上に描画するmap配列の番号をセット MapDrawPointX = player.chara_x - ((SCREEN_SIZE_X/2)/ChipSizeX); MapDrawPointY = player.chara_y - ((SCREEN_SIZE_Y/2)/ChipSizeY); // 描画 for(int j = MapDrawPointY; j < (MapDrawPointY + DrawMapChipNumY); j++) { for(int i = MapDrawPointX; i < (MapDrawPointX + DrawMapChipNumX); i++) { // 画面からはみ出た位置は描画しない if(i < 0 || j < 0 || i >= MAP_W || j >= MAP_H ) { continue; } // マップチップの描画 if(map[i][j] == ROOM || map[i][j] == PATH || map[i][j] == PATH_FRONT || map[i][j] == PATH_OF_WALL || map[i][j] == APPEND_PATH){ DrawGraph((i - MapDrawPointX)*ChipSizeX, (j - MapDrawPointY)*ChipSizeY, GraphHandle_Floorchip, TRUE); } // アイテムの描画 if(item_map[i][j] == ITEM){ DrawGraph((i - MapDrawPointX)*ChipSizeX, (j - MapDrawPointY)*ChipSizeY, GraphHandle_Item, TRUE); } // 残りアイテム数表示 int Color = GetColor(255, 255, 255); DrawFormatString(0, 0, Color, "残り:%d", LeftItemNum); DrawFormatString(0, 20, Color, "長さ:%d", Player_Length); } } // キャラクターだけ描画 for(int j = MapDrawPointY; j < (MapDrawPointY + DrawMapChipNumY); j++) { for(int i = MapDrawPointX; i < (MapDrawPointX + DrawMapChipNumX); i++) { // プレイヤーの描画 if(chara_map[i][j] == PLAYER){ DrawGraph((i - MapDrawPointX)*ChipSizeX, (j - MapDrawPointY)*ChipSizeY, GraphHandle_Player, TRUE); // しっぽの描画 if(Player_Length != 0){ tail_disp(i, j, MapDrawPointX, MapDrawPointY); } } } } WaitTimer(100); }
//フレームレートの調整 void framerateControll(){ static int previousTime; int updateTime = GetNowCount() - previousTime; //1フレームにかかった時間 int waitTime = (1000.0 / FPS) - updateTime; //待つべき時間 if(waitTime > 0){ WaitTimer(waitTime); } previousTime = GetNowCount(); }
void Loop() { while(!OpQuit() && _sys_judge_event(NULL) >= 0) { if(!Handler()->FullSpeed()) WaitTimer(); UpdateSound(); UpdateKeys(); Handler()->OnLoop(); UpdateVideo(); } }
// WinMain関数 int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){ int x , y ; // DXライブラリ初期化処理 if( DxLib_Init() == -1 ) return -1; // 描画先画面を裏画面にする SetDrawScreen( DX_SCREEN_BACK ) ; x = 0 ; y = 0 ; while( 1 ) { // 画面に描かれているものをすべて消す ClearDrawScreen() ; // 上下左右のキー入力に対応して x, y の座標値を変更する if( CheckHitKey( KEY_INPUT_LEFT ) == 1 ) x -= 8 ; if( CheckHitKey( KEY_INPUT_RIGHT ) == 1 ) x += 8 ; if( CheckHitKey( KEY_INPUT_UP ) == 1 ) y -= 8 ; if( CheckHitKey( KEY_INPUT_DOWN ) == 1 ) y += 8 ; // x , y が示す画面座標にBMP画像 test1.bmp を描画する LoadGraphScreen( x , y , "エレキシューター.bmp" , TRUE ) ; // 裏画面の内容を表画面に反映させる ScreenFlip() ; // 待たないと処理が早すぎるのでここで20ミリ秒待つ WaitTimer( 20 ) ; // Windows システムからくる情報を処理する if( ProcessMessage() == -1 ) break ; // ESCキーが押されたらループから抜ける if( CheckHitKey( KEY_INPUT_ESCAPE ) == 1 ) break ; } // DXライブラリ使用の終了処理 DxLib_End() ; // ソフトの終了 return 0 ; }
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { ChangeWindowMode(TRUE); //SetMouseDispFlag(TRUE); SetDrawMode(DX_DRAWMODE_BILINEAR); SetScreenMemToVramFlag(FALSE); SetAlwaysRunFlag(TRUE); SetDrawScreen( DX_SCREEN_BACK); if(DxLib_Init()==-1) // DXライブラリ初期化処理 { return -1 ; // エラーが起きたら直ちに終了 } //デバック用にコンソールを出現させる /* AllocConsole(); freopen("CONOUT$","w",stdout); freopen("CONIN$","r",stdin);z */ Mode gamemode=OPENING; AI_T ai[AI_NUM]; Takara takara; int death[AI_NUM]={0}; Tagger tagger[TAGGER_NUM]; int tagger_num = 0; int STAGE[WIDTH][HEIGHT]={0}; int round=0; int start=0; int end=0; int StartTime,TimeLimit; for(int i=0;i<AI_NUM;i++){ ai[i].entry=1; } ai[0].entry=0; while(ProcessMessage()!=-1){ int speed=0; switch(gamemode){ case OPENING: start=intro(ai); if(start==1)gamemode=SETTING; break; case SETTING: takara.x=GetRand(WIDTH/2)+WIDTH/2-1; takara.y=GetRand(HEIGHT/2)+1; takara.drop=0; make_Stage(STAGE,takara);//マップ構成 tagger_num = init_Tagger(tagger,STAGE);//鬼の初期化 //tagger_numは鬼の要素番号 init_Ai(ai,STAGE); round++; TimeLimit=TIME_LIMIT*60*79;//ゲーム開始時の時刻に合わせる gamemode=RUNNING; break; case RUNNING: TimeLimit-=79; if(TimeLimit<0)TimeLimit=0; if(tagger[tagger_num].step==0){ //tagger[tagger_num].act=next_Tagger(tagger[tagger_num],STAGE,ai); tagger[tagger_num].act=tagger[tagger_num].moveFunc(tagger[tagger_num].x,tagger[tagger_num].y,STAGE); //AIと一緒で、moveFunc使う } for(int i=0;i<AI_NUM;i++){ if(ai[i].step==0 && ai[i].entry==1){ setview_Ai(&ai[i],STAGE); //ai[i].act=next_Ai(ai[i].view); //henteko : 下のmoveFunc()を使うためコメントアウト ai[i].act = ai[i].moveFunc(ai[i].view); } } if(TimeLimit>TIME_LIMIT*45*79)speed=0; else if(TimeLimit>TIME_LIMIT*30*79)speed=1; else if(TimeLimit>TIME_LIMIT*15*79)speed=1; else speed=3; update_Tagger(&tagger[tagger_num],STAGE,speed); for(int i=0;i<AI_NUM;i++){ if(ai[i].entry==1) update_Ai(&ai[i],STAGE,&takara); } update_stage(STAGE,ai,tagger[tagger_num],takara); ClearDrawScreen(); draw(STAGE,ai,tagger[tagger_num],takara); DrawFormatString(30,30,GetColor(0,255,255),"ROUND%d",round); DrawFormatString(500,15,GetColor(0,255,0),"TIME %d",TimeLimit); if(1){ for(int i=0;i<AI_NUM;i++){ if(death_Ai(ai[i],tagger[tagger_num])==1 && ai[i].entry==1){ death[i]++; DrawBox(0,230,640,260,GetColor(0,0,0),1); DrawBox(-1,230,642,260,GetColor(255,0,0),0); DrawFormatString(100,240,GetColor(255,0,0),"%sがつかまりました",ai[i].name);// 8/3 zero追記:AI捕獲の宣言をまとめた。 init_Ai(&ai[i],STAGE);//元の場所に戻される TimeLimit-=1000;//時間ペナルティ /*WaitTimer(3000); if(round>=ROUND_MAX){ gamemode=ENDING; } else{ gamemode=SETTING; } break;*/ } } } if(TimeLimit<=0){// 8/3 zero追記:タイムアップを設定 round--; DrawString(100,240,"時間切れです",GetColor(255,0,0)); WaitTimer(3000); if(round>=ROUND_MAX){ gamemode=ENDING; } else{ gamemode=SETTING; } break; } if(CheckHitKey(KEY_INPUT_R)==1){ gamemode=SETTING; } break; case ENDING: end=ranking(ai,death); break; default: break; } if(end==1 || CheckHitKey(KEY_INPUT_ESCAPE))break; ScreenFlip(); } DxLib_End() ; // DXライブラリ使用の終了処理 return 0 ; // ソフトの終了 }
// ---------------------------------------------------------------- // [Function] Main int main( void ) { initialize( ) ; ResetTimer( ) ; WaitTimer( ) ; OPTION_REGbits.PS = 0b000 ; // T2CONbits.T2OUTPS = 0b0000 ; // Postscaler 1/1 // PR2 = 7 ; ResetTimer( ) ; _aqm0802_Initialize( ) ; _aqm0802_SendStringClearing( ROW_SELECT_0 | 0x0 , MESSAGE.BOOT ) ; uint08_t barImage = 0b11111 ; // Set CGRAM for Bar Indicator _private_aqm0802_SendData( 0x00 , 0x00 ) ; for( uint08_t i = 5 ; i != 0xFF ; i-- ) { _private_aqm0802_SendData( 0x00 , ( i << 3 ) | 0x40 ) ; for( uint08_t j = 0 ; j != 8 ; j++ ) { if( j == 0 || j == 7 ) _private_aqm0802_SendData( 0x40 , 0b11111 ) ; else _private_aqm0802_SendData( 0x40 , barImage ) ; } barImage >>= 1 ; } machineState = STATE_MEASURE ; SetEvent( events_.messageChange ) ; // Start Timer Interrupt INTCONbits.GIE = 1 ; INTCONbits.PEIE = 1 ; PIR1bits.TMR2IF = 0 ; PIE1bits.TMR2IE = 1 ; for( ; ; ) { static UniPortA prevPortAState = { 0x00 } ; UniPortA keyPressed ; keyPressed.byte = ( portAState_.byte ^ prevPortAState.byte ) & portAState_.byte ; prevPortAState.byte = portAState_.byte ; // Mode Key if( keyPressed.menu ) SetEvent( events_.keyPressMenu ) ; // if( portAState_.menu ) { // if( keyCount.menu != PRESS_COUNT_LIMIT ) keyCount.menu++ ; // if( keyCount.menu == PRESS_COUNT ) SetEvent( events_.keyPressMenu ) ; // } // else // keyCount.menu = 0 ; // Up Key if( keyPressed.up ) SetEvent( events_.keyPressUp ) ; // if( portAState_.up && ( !keyCount.down ) && ( !keyCount.upDown ) ) { // if( keyCount.up != PRESS_COUNT_LIMIT ) keyCount.up++ ; // if( keyCount.up == PRESS_COUNT ) SetEvent( events_.keyPressUp ) ; // } // else // keyCount.up = 0 ; // Down Key if( keyPressed.down ) SetEvent( events_.keyPressDown ) ; // if( portAState_.down && ( !keyCount.up ) && ( !keyCount.upDown ) ) { // if( keyCount.down != PRESS_COUNT_LIMIT ) keyCount.down++ ; // if( keyCount.down == PRESS_COUNT ) SetEvent( events_.keyPressDown ) ; // } // else // keyCount.down = 0 ; // if( portAState_.up && portAState_.down ) { // if( ++keyCount.upDown == 0xFF ) RESET( ) ; // } // else if( !( portAState_.up && portAState_.down ) ) // keyCount.upDown = 0 ; // Menu Key if( EvalEvent( events_.keyPressMenu ) ) { SetEvent( events_.messageChange ) ; switch( machineState ) { case STATE_MEASURE: machineState = STATE_MENU ; menuState.select = 0 ; menuState.cursor = 0 ; break ; case STATE_MENU: machineState = STATE_MEASURE ; switch( menuState.select ) { case MENU_VOLTAGE: measureMode = MEASURE_MODE_VOLTAGE ; break ; case MENU_BAR: measureMode = MEASURE_MODE_BAR ; break ; case MENU_AD_VALUE: measureMode = MEASURE_MODE_AD_VALUE ; break ; case MENU_VERSION: machineState = STATE_VERSION ; break ; } break ; case STATE_VERSION: machineState = STATE_MEASURE ; break ; } } // Up/Down Key switch( machineState ) { case STATE_MENU: if( EvalEvent( events_.keyPressUp ) ) { if( menuState.select != 0 ) { menuState.select-- ; if( menuState.cursor != 0 ) menuState.cursor-- ; SetEvent( events_.messageChange ) ; } } if( EvalEvent( events_.keyPressDown ) ) { if( menuState.select != ( MENU_SIZE - 1 ) ) { menuState.select++ ; if( menuState.cursor != 1 ) menuState.cursor++ ; SetEvent( events_.messageChange ) ; } } break ; } // Message Change if( EvalEvent( events_.messageChange ) ) { switch( machineState ) { case STATE_MEASURE: switch( measureMode ) { case MEASURE_MODE_VOLTAGE: _aqm0802_SendStringClearing( ROW_SELECT_0 | 0x0 , MESSAGE.VOLTAGE ) ; break ; case MEASURE_MODE_BAR: _aqm0802_SendStringClearing( ROW_SELECT_0 | 0x0 , MESSAGE.BAR ) ; break ; case MEASURE_MODE_AD_VALUE: _aqm0802_SendStringClearing( ROW_SELECT_0 | 0x0 , MESSAGE.AD_VALUE ) ; break ; } _aqm0802_ClearRow( ROW_SELECT_1 | 0x0 ) ; break ; case STATE_MENU: _aqm0802_SendStringClearing( ROW_SELECT_0 | 0x1 , MESSAGE_MENU[ menuState.select - menuState.cursor ] ) ; _aqm0802_SendStringClearing( ROW_SELECT_1 | 0x1 , MESSAGE_MENU[ menuState.select - menuState.cursor + 1 ] ) ; _aqm0802_SendCharacter( ROW_SELECT[ menuState.cursor ] | 0x0 , CHAR_CURSOR ) ; break ; case STATE_VERSION: _aqm0802_SendStringClearing( ROW_SELECT_0 | 0x0 , MESSAGE.VERSION ) ; _aqm0802_SendStringClearing( ROW_SELECT_1 | 0x0 , SOFTWARE_VERSION ) ; break ; } } } ; }
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { ConfigureCommonScreen(); if( DxLib_Init() == -1 ) { return -1; } GenerateFontHandle(); GameDataInfo *gameDataInfo = new GameDataInfo(); OpeningScreen *openingScreen = new OpeningScreen( gameDataInfo ); PlayerEntryScreen *playerEntryScreen = new PlayerEntryScreen( gameDataInfo ); GameScreen *gameScreen = new GameScreen( gameDataInfo ); ResultScreen *resultScreen = new ResultScreen( gameDataInfo ); SetDrawScreen( DX_SCREEN_BACK ); int startTime, endTime; while( ProcessMessage() == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 ) { while( ProcessMessage() == 0 && gameDataInfo->GetGameState() != 3 ) { switch( gameDataInfo->GetGameState() ) { case 0: openingScreen->Show(); break; case 1: playerEntryScreen->Show(); ScreenFlip(); break; } } gameDataInfo->CreatePlayers(); gameDataInfo->CreateButtons(); while( ProcessMessage() == 0 && gameDataInfo->GetGameState() != 1 ) { switch( gameDataInfo->GetGameState() ) { case 3: ClearDrawScreen(); gameScreen->ShowStartCountDown(); gameScreen->ShowPushCount(); ScreenFlip(); gameDataInfo->DoStartCountDown(); break; case 4: startTime = GetNowCount(); gameDataInfo->DoMainGameProcedure(); ClearDrawScreen(); gameScreen->ShowPushCount(); ScreenFlip(); endTime = GetNowCount(); WaitTimer( 20 - (endTime - startTime) ); break; case 5: ClearDrawScreen(); gameScreen->ShowPushCount(); gameScreen->ShowTimeUp(); ScreenFlip(); WaitTimer( 5000 ); gameDataInfo->StateChange( 6 ); gameDataInfo->SortPlayerByPushCount(); break; case 6: resultScreen->Show(); default: break; } } gameDataInfo->Clear(); } DxLib_End(); delete openingScreen; delete gameScreen; delete gameDataInfo; return 0; }
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { IPDATA ipAddress; // 接続用IPアドレスデータ int netHandle; // ネットワークハンドル // データバッファ char strBuf[BufSize] = { 0 }; ChangeWindowMode(TRUE); if (DxLib_Init() == -1) { return -1; } // DXライブラリの通信は独自のプロトコルが混じってるらしいので、FALSEでやめさせる // この場合、通信関連の関数の動作がかなり変化するので気をつけること // 参考:http://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=past&no=736&p=2 SetUseDXNetWorkProtocol(FALSE); // サーバ名からIPアドレスを取得 GetHostIPbyName(serverName, &ipAddress); // 通信を確立 netHandle = ConnectNetWork(ipAddress, Port); // 確立が成功した場合のみ中の処理をする if (netHandle != -1) { int sendLength = 0; int readLength = 0; int isDataReadable; int requireLength = 4; // データ送信 sprintf_s(strBuf, BufSize, "GET %s HTTP/1.0\nHost: %s\n\n", url, serverName); sendLength = strnlen_s(strBuf, BufSize); NetWorkSend(netHandle, strBuf, sendLength + 1); // 受信したデータをファイルに書き出す std::ofstream ofs("output.txt", std::ios::trunc); int loopCount = 0; int successCount = 0; // データが読み終わるまで待機 while (!ProcessMessage()) { // 一定のループ回数に達したら強制終了 if (loopCount++ >= 10000) break; // 取得していない受信データがあるかチェック isDataReadable = GetNetWorkDataLength(netHandle); // 取得してない受信データ量がない場合はループを抜ける if (isDataReadable == FALSE) break; // データ受信し、読み込んだ分をサイズに増やす readLength = NetWorkRecv(netHandle, strBuf, requireLength); // 読み取りエラー // 待機時の他にバッファ内に溜まっている文字数よりも requireLength が大きい時も -1 になるので注意 if (readLength == -1) { if (--successCount <= -updateCount) { if (--requireLength == 0) requireLength = 1; successCount = 0; // バッファに溜まるように適当に待機 WaitTimer(1000); } continue; } // 規定回数読み取りが成功したら読み取り文字数を増やす if (++successCount >= updateCount) { ++requireLength; successCount = 0; } // 末端文字を付加 strBuf[readLength] = '\0'; // 受信したデータをファイルに出力 ofs << strBuf; printfDx("%d: %s\n", loopCount, strBuf); ScreenFlip(); ClearDrawScreen(); } // 接続を断つ CloseNetWork(netHandle); ofs.flush(); ofs.close(); // キー入力待ち printfDx("\nPlease Push Any Key..."); WaitKey(); } DxLib_End(); return 0; }
// クォータービューでの描画 void IsometricView::DisplayIsometricView() { Character character; int LoopCount = 0; int OffSetX; int OffSetY; int tailCount; int tail_i, tail_j; int Tail_ScreenX, Tail_ScreenY; int tail_StartX_OffSet, tail_StartY_OffSet; /* // プレイヤーを中心に置くためのオフセットを計算 for(int j = 0; j < MAP_H; j++ ) { for(int i = 0; i < MAP_W; i++) { int StartX_OffSet = j * ChipSizeX/2; int StartY_OffSet = j * ChipSizeY/4; int ScreenX = -StartX_OffSet + i*ChipSizeX/2; int ScreenY = StartY_OffSet + i*ChipSizeY/4; if(chara_map[i][j] == PLAYER) { OffSetX = SCREEN_SIZE_X/2 - ScreenX; OffSetY = SCREEN_SIZE_Y/2 - ScreenY; break; } } } */ // プレイヤーを中心に置くためのオフセットを計算 int StartX_OffSet = player.chara_y * ChipSizeX/2; int StartY_OffSet = player.chara_y * ChipSizeY/4; int ScreenX = -StartX_OffSet + player.chara_x*ChipSizeX/2; int ScreenY = StartY_OffSet + player.chara_x*ChipSizeY/4; OffSetX = SCREEN_SIZE_X/2 - ScreenX; OffSetY = SCREEN_SIZE_Y/2 - ScreenY; LATEST_HIT_DIRECT = character.player_input(); for(int j = 0; j < MAP_H; j++ ) { for(int i = 0; i < MAP_W; i++) { int StartX_OffSet = LoopCount * ChipSizeX/2; int StartY_OffSet = LoopCount * ChipSizeY/4; int ScreenX = -StartX_OffSet + i*ChipSizeX/2; int ScreenY = StartY_OffSet + i*ChipSizeY/4; if(OffSetX + ScreenX < 0 || OffSetY + ScreenY < 0 || OffSetX + ScreenX > SCREEN_SIZE_X || OffSetY + ScreenY < 0){ continue; } // マップチップの描画 if(map[i][j] == ROOM || map[i][j] == PATH || map[i][j] == PATH_FRONT || map[i][j] == PATH_OF_WALL || map[i][j] == APPEND_PATH) { DrawGraph(OffSetX + ScreenX, OffSetY + ScreenY, GraphHandle_Floorchip, TRUE); } // アイテムの描画 if(item_map[i][j] == ITEM) { DrawGraph(OffSetX + ScreenX, OffSetY + ScreenY, GraphHandle_Item, TRUE); } // 尻尾の描画 tail_StartX_OffSet = j * ChipSizeX/2; tail_StartY_OffSet = j * ChipSizeY/4; if(Player_Length != 0){ for(tailCount = 1; tailCount <= Player_Length; tailCount++){ if(tail_array[tailCount].chara_x == i && tail_array[tailCount].chara_y == j) { Tail_ScreenX = -tail_StartX_OffSet + tail_array[tailCount].chara_x*(ChipSizeX/2); Tail_ScreenY = tail_StartY_OffSet + tail_array[tailCount].chara_x*(ChipSizeY/4); DrawGraph(OffSetX + Tail_ScreenX, OffSetY + Tail_ScreenY, GraphHandle_Tail, TRUE); } LATEST_HIT_DIRECT = character.player_input(); } } // プレイヤーの描画 if(chara_map[i][j] == PLAYER) { DrawGraph(OffSetX + ScreenX, OffSetY + ScreenY, GraphHandle_Player, TRUE); } // 残りアイテム数表示 int Color = GetColor(255, 255, 255); DrawFormatString(0, 0, Color, "残り:%d", LeftItemNum); DrawFormatString(0, 20, Color, "長さ:%d", Player_Length); LATEST_HIT_DIRECT = character.player_input(); } LATEST_HIT_DIRECT = character.player_input(); LoopCount++; } /* //int tailCount; //int tail_i, tail_j; //int tail_StartX_OffSet, tail_StartY_OffSet; //int Tail_ScreenX, Tail_ScreenY; // 尻尾の描画 if(Player_Length != 0) { for(tailCount = 1; tailCount <= Player_Length; tailCount++) { for(tail_j = 0; tail_j < MAP_H; tail_j++ ) { for(tail_i = 0; tail_i < MAP_W; tail_i++) { tail_StartX_OffSet = tail_j * ChipSizeX/2; tail_StartY_OffSet = tail_j * ChipSizeY/4; //int ScreenX = -tail_StartX_OffSet + tail_i*ChipSizeX/2; //int ScreenY = tail_StartY_OffSet + tail_i*ChipSizeY/4; if(tail_array[tailCount].chara_x == tail_i && tail_array[tailCount].chara_y == tail_j) { Tail_ScreenX = -tail_StartX_OffSet + tail_array[tailCount].chara_x*(ChipSizeX/2); Tail_ScreenY = tail_StartY_OffSet + tail_array[tailCount].chara_x*(ChipSizeY/4); DrawGraph(OffSetX + Tail_ScreenX, OffSetY + Tail_ScreenY, GraphHandle_Tail, TRUE); } } } } } */ /* // プレイヤーの描画 for(int j = 0; j < MAP_H; j++ ) { for(int i = 0; i < MAP_W; i++) { int StartX_OffSet = j * ChipSizeX/2; int StartY_OffSet = j * ChipSizeY/4; int ScreenX = -StartX_OffSet + i*ChipSizeX/2; int ScreenY = StartY_OffSet + i*ChipSizeY/4; if(chara_map[i][j] == PLAYER) { DrawGraph(OffSetX + ScreenX, OffSetY + ScreenY, GraphHandle_Player, TRUE); } } } */ for(int waittime = 0; waittime < 15; waittime++){ LATEST_HIT_DIRECT = character.player_input(); WaitTimer(15); } //WaitTimer(200); }
int main(int argc, char **argv) { #ifdef DXPORTLIB SetUseCharSet(DX_CHARSET_EXT_UTF8); #endif SetWindowText(_T("DxPortLib Test App")); SetWindowSizeChangeEnableFlag(TRUE); SetGraphMode(640, 480, 32); ChangeWindowMode(TRUE); if (DxLib_Init() == -1) { return -1; } SRand(0); InitBounceThings(); int isWindowed = TRUE; int wasPressed = 0; int timerDelta = 0; int timeLast = GetNowCount(); int screenshotWasPressed = 0; int drawScreen = MakeScreen(640, 480, FALSE); while (ProcessMessage() == 0 #ifndef DX_NON_INPUT && CheckHitKey(KEY_INPUT_ESCAPE) == 0 #endif ) { /* If Alt+Enter is pressed, flip to fullscreen mode. */ if (CheckHitKey(KEY_INPUT_RETURN) && (CheckHitKey(KEY_INPUT_LALT) || CheckHitKey(KEY_INPUT_RALT)) ) { if (wasPressed == 0) { isWindowed = 1 - isWindowed; ChangeWindowMode(isWindowed); } wasPressed = 1; } else { wasPressed = 0; } /* Game logic here */ MoveBounceThings(); /* Draw logic here */ SetDrawScreen(drawScreen); SetDrawBright(255, 255, 255); SetDrawBlendMode(DX_BLENDMODE_NOBLEND, 255); DrawFillBox(0, 0, 640, 480, 0xFF000000); DrawLineBox(10, 10, 630, 470, 0xFFFFFFFF); SetDrawBlendMode(DX_BLENDMODE_ALPHA, 128); DrawFillBox(20, 20, 620, 460, GetColor(0x90, 0x80, 0x70)); DrawBounceThings(); if (CheckHitKey(KEY_INPUT_S)) { if (screenshotWasPressed == 0) { SaveDrawScreenToPNG(0, 0, 640, 480, _T("test_draw_screenshot.png")); screenshotWasPressed = 1; } } else { screenshotWasPressed = 0; } SetDrawScreen(DX_SCREEN_BACK); DrawGraph(0, 0, drawScreen, FALSE); ScreenFlip(); /* Time to next frame automatically... */ int newTime = GetNowCount(); timerDelta += newTime - timeLast; timeLast = newTime; int n = timerDelta; if (n > 16) { n = 16; } timerDelta -= n; WaitTimer(16 - n); } DxLib_End(); return 0; }
int Tutorial(void) { int Color; int MovingGraph;//操作方法グラフィック int PItemExplainGraph;//プラスアイテム説明グラフィック int MItemExplainGraph;//マイナスアイテム説明グラフィック int GameGraph;//ゲーム画面説明グラフィック int WordBeforeGameGraph;//ゲーム画面前文字グラフィック int GameRuleGraph;//ゲームグラフィック説明グラフィック int ScoreExGraph; //スコア計算方法説明グラフィック int PageUpSound; //ページ進み音 int PageDownSound; //ページ戻り音 //キー関係------- int Key; int BeforeInput; int UpInput; int DownInput; //-------------- int tutorialcounter;//ゲーム画面の出す順 Color = GetColor(255,255,255); MovingGraph = LoadGraph("graphic/moving.png"); PItemExplainGraph = LoadGraph("graphic/ItemExplain(Plus).png"); MItemExplainGraph = LoadGraph("graphic/ItemExplain(Minus).png"); GameGraph = LoadGraph("graphic/GameScreen.png"); WordBeforeGameGraph = LoadGraph("graphic/GameExplain(Word).png"); GameRuleGraph = LoadGraph("graphic/GameRule.png"); ScoreExGraph = LoadGraph("graphic/Score.png"); PageUpSound = LoadSoundMem("sound/pageup.wav"); PageDownSound = LoadSoundMem("sound/pagedown.wav"); tutorialcounter = 0; SetDrawScreen(DX_SCREEN_BACK); while(ProcessMessage()==0 && CheckHitKey(KEY_INPUT_ESCAPE)==0) { BeforeInput = Key; Key = GetJoypadInputState(DX_INPUT_KEY_PAD1); UpInput = ~Key & BeforeInput; DownInput = Key & ~BeforeInput; ClsDrawScreen(); if(DownInput & PAD_INPUT_A) { tutorialcounter++; PlayEffect(PageUpSound); WaitTimer(50); } if(DownInput & PAD_INPUT_B) { tutorialcounter--; PlayEffect(PageDownSound); WaitTimer(50); } if(tutorialcounter < 0) { PlayEffect(CancelSound); StopEffect(TitleMusic); Title(); } if(tutorialcounter > 6) { StopEffect(TitleMusic); Title(); } switch(tutorialcounter) { case 0: { DrawGraph(0, 0, MovingGraph, TRUE); break; } case 1: { DrawGraph(0, 0, WordBeforeGameGraph, TRUE); break; } case 2: { DrawGraph(0, 0,GameGraph, TRUE); break; } case 3: { DrawGraph(0, 0,ScoreExGraph, TRUE); break; } case 4: { DrawGraph(0, 0,PItemExplainGraph, TRUE); break; } case 5: { DrawGraph(0, 0,MItemExplainGraph, TRUE); break; } case 6: { DrawGraph(0, 0,GameRuleGraph, TRUE); break; } } ScreenFlip(); } }
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { ChangeWindowMode(TRUE); SetDrawScreen( DX_SCREEN_BACK); if(DxLib_Init()==-1) // DXライブラリ初期化処理 { return -1 ; // エラーが起きたら直ちに終了 } //デバック用にコンソールを出現させる AllocConsole(); freopen("CONOUT$","w",stdout); freopen("CONIN$","r",stdin); Mode gamemode=OPENING; AI_T ai[AI_NUM]; int death[AI_NUM]={0}; Tagger tagger[TAGGER_NUM]; int tagger_num = 0; int STAGE[WIDTH][HEIGHT]={0}; int round=0; int end=0; while(ProcessMessage()!=-1){ switch(gamemode){ case OPENING: intro(); gamemode=SETTING; break; case SETTING: make_Stage(STAGE);//マップ構成 tagger_num = init_Tagger(tagger,STAGE);//鬼の初期化 //tagger_numは鬼の要素番号 //for(int i=0;i<AI_NUM;i++){//AIの初期化 //henteko : aiをすべてinit_Aiに渡す init_Ai(ai,STAGE); //} round++; gamemode=RUNNING; break; case RUNNING: if(tagger[tagger_num].step==0){ //tagger[tagger_num].act=next_Tagger(tagger[tagger_num],STAGE,ai); tagger[tagger_num].act=tagger[tagger_num].moveFunc(tagger[tagger_num].x,tagger[tagger_num].y,STAGE,ai); //AIと一緒で、moveFunc使う } for(int i=0;i<AI_NUM;i++){ if(ai[i].step==0){ setview_Ai(&ai[i],STAGE); //ai[i].act=next_Ai(ai[i].view); //henteko : 下のmoveFunc()を使うためコメントアウト ai[i].act = ai[i].moveFunc(ai[i].view); } } update_Tagger(&tagger[tagger_num],STAGE); for(int i=0;i<AI_NUM;i++){ update_Ai(&ai[i],STAGE); } update_stage(STAGE,ai,tagger[tagger_num]); ClearDrawScreen(); draw(STAGE,ai,tagger[tagger_num]); DrawFormatString(30,30,GetColor(0,255,255),"ROUND%d",round); if(tagger[tagger_num].step==0){ for(int i=0;i<AI_NUM;i++){ if(death_Ai(ai[i],tagger[tagger_num])==1){ death[i]++; const char* str = strcat(ai[i].name , "がつかまりました"); //文字列連結 DrawString(100,240,str,GetColor(255,0,0)); WaitTimer(3000); if(round>=ROUND_MAX){ gamemode=ENDING; } else{ gamemode=SETTING; } break; } } } if(CheckHitKey(KEY_INPUT_R)==1){ gamemode=SETTING; } break; case ENDING: result(ai,death); WaitKey(); end=1; break; default: break; } if(end==1 || CheckHitKey(KEY_INPUT_ESCAPE))break; ScreenFlip(); } DxLib_End() ; // DXライブラリ使用の終了処理 return 0 ; // ソフトの終了 }
/*アイキャッチ*/ void TextClass::EyeCatching(UserClass &User){ MouseClass* Mouse = MouseClass::GetInstance(); const int MinVol = 9000; const int FadeSpeed = 7; //static bool SoundBack = FALSE; static bool FirstFlag = FALSE; static bool PlayFlag = FALSE; static bool FadeFlag1 = FALSE; static bool FadeFlag2 = TRUE; static int FadeCount = 255; static int MovieVol; static int MovieHandle; static int TmpSoundCode; //音量取得 MovieVol = User.GetBGMVol() * 4; //現在のサウンドコードのバックアップ //if( SoundBack == FALSE ){ // TmpSoundCode = User.GetBGMCode(); // SoundBack = TRUE; //} //音楽停止 User.SetBGMCode( GAME_BGM::STOP ); //フェードアウト処理 if( FadeFlag1 == FALSE && FadeFlag2 == TRUE ){ SetDrawBright(FadeCount,FadeCount,FadeCount); FadeCount -= FadeSpeed; if( FadeCount <= 0 ) FadeFlag1 = TRUE; } //再生前の初期化 if( FirstFlag == FALSE && FadeFlag1 == TRUE ){ SetDrawBright(255,255,255); MovieHandle = LoadGraph("./resource/movie/eyecatch.ogv"); SetMovieVolumeToGraph( MinVol + MovieVol , MovieHandle ); PlayMovieToGraph( MovieHandle ); FirstFlag = TRUE; PlayFlag = TRUE; } //動画再生 if( PlayFlag == TRUE ){ DrawGraph(0,0,MovieHandle,TRUE); WaitTimer(17); } //再生中か判断 if( GetMovieStateToGraph(MovieHandle) != 1 && FadeFlag1 == TRUE ){ PlayFlag = FALSE; FirstFlag = FALSE; FadeFlag1 = FALSE; FadeFlag2 = FALSE; } //フェードイン if( FadeFlag2 == FALSE ){ SetDrawBright(FadeCount,FadeCount,FadeCount); FadeCount += FadeSpeed; if( FadeCount >= 255 ){ FadeFlag2 = TRUE; //SoundBack = FALSE; //User.SetBGMCode( TmpSoundCode ); WriteMode = NORMAL; } } //メッセージ描画 //DrawString(300,windowY - windowY / 3 + 50,"アイキャッチだよ、クリックで進むよっ!",GetColor(0,0,0)); //if( Mouse->GetState(MOUSE::LEFT) == 1 ){ // WriteMode = NORMAL; //} }
void draw(int stage[WIDTH][HEIGHT],AI_T ai[AI_NUM],Tagger tagger,Takara takara){ int view=0; if(CheckHitKey(KEY_INPUT_V))view=1;// 8/19 zero:Vキーを押していると描画モードが変わります。 static int stageGraph = LoadGraph("Stage_image\\kabe0.png"); //壁の画像読み込み //数列stageにしたがってマップの描画 for(int i=0;i<WIDTH;i++){ for(int j=0;j<HEIGHT;j++){ if(view==0)SetDrawBright(150,150,150);// 8/19 zero: 薄暗く描写するよう設定 for(int k=0;k<AI_NUM;k++){// 8/19 zero: AIの視界のみ明るくなるように if(i>=ai[k].x-VISIBLE && i<=ai[k].x+VISIBLE && j>=ai[k].y-VISIBLE && j<=ai[k].y+VISIBLE && ai[k].entry==1){ SetDrawBright(255,255,255); } } if(i==WIDTH/2 || j==HEIGHT/2){//7/27 zero: 十字回廊を描いてちょっとお洒落に DrawBox(20*i,20*j,20*(i+1),20*(j+1),GetColor(100,100,250),0); } if(stage[i][j]==1){//壁を仮に白い正方形としています。//土の壁にしました。 // DrawBox(20*i,20*j,20*(i+1),20*(j+1),GetColor(255,255,255),1);//四角の描写 DrawRotaGraph((20*i)+10,(20*j)+10,1.0,0.0,stageGraph,FALSE,FALSE);//読み込んだ壁画像表示 } if(stage[i][j]==4&&takara.drop==0){ DrawBox(20*i,20*j,20*(i+1),20*(j+1),GetColor(255,255,255),1);//宝の描写 } } } //AIの描画 for(int i=0;i<AI_NUM;i++){ if(ai[i].entry==1){ SetDrawBright(255,255,255); DrawRotaGraph(ai[i].s_x,ai[i].s_y,1,0,ai[i].Graph,TRUE,FALSE);//読み込んだ画像表示 //DrawCircle(ai[i].s_x,ai[i].s_y,5,GetColor(255,0,0),1);//点表示 if(view==1){ DrawBox(BOX*ai[i].x,BOX*ai[i].y,BOX*(ai[i].x+1),BOX*(ai[i].y+1),GetColor(255,0,0),0); DrawBox(BOX*(ai[i].x-VISIBLE),BOX*(ai[i].y-VISIBLE),BOX*(ai[i].x+VISIBLE+1),BOX*(ai[i].y+VISIBLE+1),GetColor(255,255,255),0);//AIの視界(確認用) } } } //鬼の描画 DrawRotaGraph(tagger.s_x,tagger.s_y,0.75,0,tagger.Graph,TRUE,FALSE);//読み込んだ画像表示 //今は青鬼が出てきて怖いからコメントアウト //DrawCircle(tagger.s_x,tagger.s_y,20,GetColor(0,0,255),1); if(view==1)DrawBox(BOX*tagger.x,BOX*tagger.y,BOX*(tagger.x+1),BOX*(tagger.y+1),GetColor(255,0,0),0); //AI名の描画 for(int i=0;i<AI_NUM;i++){ if(ai[i].entry==1){ static int flash=0; int cr; flash++; cr=GetColor(255,255*(flash%3),255*(flash%4)); DrawFormatString(ai[i].s_x,ai[i].s_y,cr,ai[i].name); } } //マップデータ表示 while(CheckHitKey(KEY_INPUT_P)==1){ int ai_x[AI_NUM],ai_y[AI_NUM],ai_num=0; DrawBox(0,0,640,480,GetColor(0,0,0),1); for(int i=0;i<WIDTH;i++){ for(int j=0;j<HEIGHT;j++){ int cr; switch(stage[i][j]){ case 1: cr=GetColor(100,50,0); break; case 2: cr=GetColor(255,0,0); ai_x[ai_num]=i; ai_y[ai_num]=j; ai_num++; break; case 3: cr=GetColor(0,0,100); break; default: cr=GetColor(0,0,0); break; } DrawBox(20*i,20*j,20*(i+1),20*(j+1),cr,1); cr=GetColor(255,255,255); //DrawBox(20*i,20*j,20*(i+1),20*(j+1),cr,0); DrawFormatString(i*20+5,j*20+5,cr,"%d",stage[i][j]); } } for(int i=0;i<AI_NUM;i++){ DrawBox(20*(ai_x[i]-10),20*(ai_y[i]-10),20*(ai_x[i]+10),20*(ai_y[i]+10),GetColor(255,255,0),0); } /* for(int i=0;i<AI_NUM;i++){ for(int w=0;w<2*VISIBLE+1;w++){ for(int h=0;h<2*VISIBLE+1;h++){ int cx=20*ai[i].x+(w-VISIBLE)*20,cy=20*ai[i].y+(h-VISIBLE)*20; DrawFormatString(cx,cy,GetColor(255,255,255),"%d",ai[i].view[w][h]); } } }*/ WaitTimer(100); } //鬼が手動か自動か表示 char Buf[ 256 ] ; GetHitKeyStateAll( Buf ) ; if( Buf[ KEY_INPUT_A ] == 1 ) { const char* str = strcat(tagger.name , "鬼手動モード"); //文字列連結 DrawString( 15, 15, str ,GetColor(255,0,255) ); }else { const char* str = strcat(tagger.name , "鬼AIモード"); //文字列連結 DrawString( 15, 15, str ,GetColor(255,0,255) ); } }
void TIMER_wait(unsigned long ms) { WaitTimer(ms); }