int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){ ChangeWindowMode(TRUE);//ウィンドウモード if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化 while(ProcessLoop()==0){//メインループ switch(func_state){ case 0://初回のみ入る処理 load(); //データロード first_ini();//初回の初期化 func_state=99; break; case 99://STGを始める前に行う初期化 ini(); func_state=100; break; case 100://通常処理 calc_ch(); //キャラクタ計算 ch_move(); //キャラクタの移動制御 enemy_main();//敵処理メイン graph_main();//描画メイン stage_count++; break; default: printfDx("不明なfunc_state\n"); break; } if(CheckStateKey(KEY_INPUT_ESCAPE)==1)break;//エスケープが入力されたらブレイク ScreenFlip();//裏画面反映 } DxLib_End();//DXライブラリ終了処理 return 0; }
void Player::Update() { elapsedTime++; switch (state) { case ePlayerState_Start: Update_Start(); break; case ePlayerState_Game: Update_Game(); break; case ePlayerState_Dead: Update_Dead(); break; default: printfDx("Player.cpp:ERROR\n"); break; } // staticメンバ変数に値をコピー(アホ) CopyStaticMem(); isHit = false; // TEST------------------------------------------------------------------------------------ if (DebugMode::isTest == false) return; /* if (Keyboard_Get(KEY_INPUT_P) == 1) { Shift(true); // シフトアップ } if (Keyboard_Get(KEY_INPUT_O) == 1) { Shift(false); } */ }
void BmsPlayer::checkJudge(unsigned long long time){ // 処理定義 const int perfect_range = 21000; const int great_range = 60000; const int good_range = 120000; const int bad_range = 200000; for (int i = 0; i < 8; i++){ if (visible_notes(i).size() <= notes.at(i)){ continue; } long long s = input.GetLapTime(); long long f = (long long)visible_notes(i).at(notes.at(i)).second; long long dif = abs(f - s); if (input.isUpdateStatus(keymap(i))){ if (dif <= good_range){ combo_debug++; notes.at(i)++; printfDx("HIT %d\n", notes.at(i)); } } else if (s - f > good_range){ combo_debug = 0; notes.at(i)++; } } }
//敵の出現情報をエクセルから読み込んで格納する関数 void load_story(){ int n,num,i,fp; char fname[32]={"../dat/csv/番外1/storyH0.csv"}; int input[64]; char inputc[64]; fp = FileRead_open(fname);//ファイル読み込み if(fp == NULL){ printfDx("read error\n"); return; } for(i=0;i<2;i++)//最初の2行読み飛ばす while(FileRead_getc(fp)!='\n'); n=0 , num=0; while(1){ for(i=0;i<64;i++){ inputc[i]=input[i]=FileRead_getc(fp);//1文字取得する if(inputc[i]=='/'){//スラッシュがあれば while(FileRead_getc(fp)!='\n');//改行までループ i=-1;//カウンタを最初に戻して continue; } if(input[i]==',' || input[i]=='\n'){//カンマか改行なら inputc[i]='\0';//そこまでを文字列とし break; } if(input[i]==EOF){//ファイルの終わりなら goto EXFILE;//終了 } } switch(num){ case 0: enemy_order[n].cnt =atoi(inputc);break; case 1: enemy_order[n].pattern =atoi(inputc);break; case 2: enemy_order[n].knd =atoi(inputc);break; case 3: enemy_order[n].x =atof(inputc);break; case 4: enemy_order[n].y =atof(inputc);break; case 5: enemy_order[n].sp =atof(inputc);break; case 6: enemy_order[n].bltime =atoi(inputc);break; case 7: enemy_order[n].blknd =atoi(inputc);break; case 8: enemy_order[n].col =atoi(inputc);break; case 9: enemy_order[n].hp =atoi(inputc);break; case 10:enemy_order[n].blknd2 =atoi(inputc);break; case 11:enemy_order[n].wait =atoi(inputc);break; case 12:enemy_order[n].item_n[0]=atoi(inputc);break; case 13:enemy_order[n].item_n[1]=atoi(inputc);break; case 14:enemy_order[n].item_n[2]=atoi(inputc);break; case 15:enemy_order[n].item_n[3]=atoi(inputc);break; case 16:enemy_order[n].item_n[4]=atoi(inputc);break; case 17:enemy_order[n].item_n[5]=atoi(inputc);break; } num++; if(num==18){ num=0; n++; } } EXFILE: FileRead_close(fp); }
//当たったかどうかを判定する int out_judge_cshot(int i,int s){ int j; if(cshot[i].cnt>0){//ショットの軌道が1度でも計算されていたら double x=cshot[i].x-enemy[s].x;//敵と自機ショットとの距離 double y=cshot[i].y-enemy[s].y; //オーバーフロー対策 if(cshot[i].knd>=CSHOT_RANGE_MAX || enemy[s].knd>=ENEMY_RANGE_MAX) printfDx("out_judge_cshot内オーバーフロー"); //敵の当たり判定と自機ショットの当たり判定の合計範囲 double r=cshot_range[cshot[i].knd]+enemy_range[enemy[s].knd]; //中間を計算する必要があれば if(cshot[i].spd>r){ //1フレーム前にいた位置を格納する double pre_x=cshot[i].x+cos(cshot[i].angle+PI)*cshot[i].spd; double pre_y=cshot[i].y+sin(cshot[i].angle+PI)*cshot[i].spd; double px,py; for(j=0;j<cshot[i].spd/r;j++){//進んだ分÷当たり判定分ループ px=pre_x-enemy[s].x; py=pre_y-enemy[s].y; if(px*px+py*py<r*r) return 1; pre_x+=cos(cshot[i].angle)*r; pre_y+=sin(cshot[i].angle)*r; } } if(x*x+y*y<r*r)//当たり判定内なら return 1;//当たり } return 0; }
void GraphicManager::LoadBackLayer(int i,int x,int y,string s) { int handle_temp; if (i>=GlobalValue::LayerMax) { printfDx("描画レイヤの指定が規定範囲外です。\n"); return; } //int c=GetNowCount(); handle_temp=LoadGraph(s.c_str()); //printfDx("LoadGraph所要時間:%d\n",GetNowCount()-c); if (handle_temp==-1) { printfDx("ロードしようとした画像%sが見つかりません。\n",s.c_str()); } layer_back[i].name=s; layer_back[i].x=x; layer_back[i].y=y; layer_back[i].handle=handle_temp; layer_back[i].enable=true; }
void Score::SaveScore() { if ((error = fopen_s(&fp, name, "wb")) != 0) printfDx("ファイルオープンエラー\n再起動してね。(^^)/~~\n"); else { fwrite(&hi_score, sizeof(hi_score), 1, fp); fclose(fp); } }
int Stage::WrapPos(int val, int max, int min) { if (max <= min) { printfDx("ERROR : max < min"); return -1; } const int offset = (val - min) % (max - min); return (offset >= 0) ? (offset + min) : (offset + max); }
//送信 void Result::Send() { Song *song = songs->GetSong(songs->GetNowSong()); //曲IDのリクエスト作成 char songReq[126] = { 0 }; sprintf_s(songReq, 126, "song=%d", song->GetSongId()); //ユーザーIDのリクエスト作成 char userReq[32] = { 0 }; sprintf_s(userReq, 32, "user=%s", user->GetUserId()); //現在時刻の取得 int temp[5] = { 0 }; GetNowTime(temp); //年月日のリクエスト作成 char dateReq[32] = { 0 }; sprintf_s(dateReq, 32, "date=%02d-%02d-%02d %02d-%02d", temp[0], temp[1], temp[2], temp[3], temp[4]); //総合得点のリクエスト作成 char totalReq[16] = { 0 }; sprintf_s(totalReq, 16, "total=%d", this->total); //区間別採点のリクエスト作成 char partReq[64] = { 0 }; sprintf_s(partReq, 64, "part=%d", score[0]); for (int i = 1, n = this->max; i < n; i++) { sprintf_s(partReq, 64, "%s/%d", partReq, score[i]); } //体の部位採点のリクエスト作成 char bodyPoint[4] = { 0 }; for (int i = 0; i < 4; i++) { switch (point[i]) { case 1:bodyPoint[i] = 'A'; break; case 2:bodyPoint[i] = 'B'; break; case 3:bodyPoint[i] = 'C'; break; } } char bodyReq[32] = { 0 }; sprintf_s(bodyReq, 32, "body=%c/%c/%c/%c", bodyPoint[0], bodyPoint[1], bodyPoint[2], bodyPoint[3]); //タイミングのリクエスト作成 char timingReq[16] = { 0 }; sprintf_s(timingReq, 16, "timing=%d", timing); //表情のリクエスト作成 char expressionReq[16] = { 0 }; sprintf_s(expressionReq, 16, "expression=%d", expression); //コメントのリクエスト作成 WCHAR w_comment[256] = { 0 }; mbstowcs(w_comment, comment, 256); char commentReq[256] = { 0 }; sprintf_s(commentReq, 256, "comment=%s", w_comment); //urlを作成 char url[512] = { 0 }; sprintf_s(url, 512, "http://globalstudios.jp/mai-archive/api_add.php?%s&%s&%s&%s&%s&%s&%s&%s&%s", songReq, userReq, dateReq, totalReq, partReq, bodyReq, timingReq, expressionReq, commentReq); Http http; if(!http.Send(url))printfDx("httpエラー"); }
void Score::LoadScore() { if ((error = fopen_s(&fp, name, "rb")) != 0) { SaveScore(); printfDx("\n新しく[score_data.dat]を作成しました。\n[Y] キー:おk\n"); } else { fread(&hi_score, sizeof(hi_score), 1, fp); fclose(fp); } }
void graph_boss(){ int i; if(boss.flag==0)return; graph_boss_effect(); DrawRotaGraphF(boss.dx+FX+dn.x,boss.dy+FY+dn.y, 1.0f,0.0f,img_dot_riria[0],TRUE); if(boss.hp_max==0){printfDx("graph_boss内0割り\n");return;} for(i=0;i<FMX*0.98*boss.hp/boss.hp_max;i++){ if(boss.back_knd[boss.knd]==1) DrawGraph(3+FX+i+dn.x,2+FY+dn.y,img_etc[7],FALSE); else DrawGraph(3+FX+i+dn.x,2+FY+dn.y,img_etc[1],FALSE); } }
//渡されたパッドキー番号の入力状態を返す。返り値が-1なら不正 int CheckStatePad(int Pl_n,unsigned int Handle){ int i,j,k,maximam,ValidPlayer,ValidFlag,flag=0; flag+=0; if(0<=Handle && Handle<PAD_MAX && 0<=Pl_n && Pl_n<PLAYER_MAX){ if (Handle==PAD_NUM_LEFT) return pad[Pl_n].key[configpad[Pl_n].left]; if (Handle==PAD_NUM_UP) return pad[Pl_n].key[configpad[Pl_n].up]; if (Handle==PAD_NUM_RIGHT) return pad[Pl_n].key[configpad[Pl_n].right]; if (Handle==PAD_NUM_DOWN) return pad[Pl_n].key[configpad[Pl_n].down]; if (Handle==PAD_NUM_HOLD) return pad[Pl_n].key[configpad[Pl_n].hold]; if (Handle==PAD_NUM_TURN_L) return pad[Pl_n].key[configpad[Pl_n].turn_L]; if (Handle==PAD_NUM_TURN_R) return pad[Pl_n].key[configpad[Pl_n].turn_R]; if (Handle==PAD_NUM_KEY1) return pad[Pl_n].key[configpad[Pl_n].key1]; if (Handle==PAD_NUM_KEY2) return pad[Pl_n].key[configpad[Pl_n].key2]; if (Handle==PAD_NUM_KEY3) return pad[Pl_n].key[configpad[Pl_n].key3]; if (Handle==PAD_NUM_PAUSE) return pad[Pl_n].key[configpad[Pl_n].pause]; } else if (0<=Handle && Handle<PAD_MAX && Pl_n==-1) { if (gameflag==0 || all_cpu_flag==1) { if (Handle==PAD_NUM_LEFT) return pad[PLAYER_MAX].key[configpad[0].left]; if (Handle==PAD_NUM_UP) return pad[PLAYER_MAX].key[configpad[0].up]; if (Handle==PAD_NUM_RIGHT) return pad[PLAYER_MAX].key[configpad[0].right]; if (Handle==PAD_NUM_DOWN) return pad[PLAYER_MAX].key[configpad[0].down]; if (Handle==PAD_NUM_HOLD) return pad[PLAYER_MAX].key[configpad[0].hold]; if (Handle==PAD_NUM_TURN_L) return pad[PLAYER_MAX].key[configpad[0].turn_L]; if (Handle==PAD_NUM_TURN_R) return pad[PLAYER_MAX].key[configpad[0].turn_R]; if (Handle==PAD_NUM_KEY1) return pad[PLAYER_MAX].key[configpad[0].key1]; if (Handle==PAD_NUM_KEY2) return pad[PLAYER_MAX].key[configpad[0].key2]; if (Handle==PAD_NUM_KEY3) return pad[PLAYER_MAX].key[configpad[0].key3]; if (Handle==PAD_NUM_PAUSE) return pad[PLAYER_MAX].key[configpad[0].pause]; } else { maximam=-1; for (i=0;i<Pl_num;i++) { if (maximam<(k=CheckStatePad(i,Handle)) || i==0) { maximam=k; PadPushPlayer=i; } } return maximam; } } else { printfDx("CheckStatePadに渡した値が不正です\n"); return -1; } }
void Player::Draw() { switch (state) { case ePlayerState_Start: Draw_Start(); break; case ePlayerState_Game: Draw_Game(); break; case ePlayerState_Dead: Draw_Dead(); break; default: printfDx("Player.cpp:ERROR\n"); break; } // TEST------------------------------------------------------------------------------------ if (DebugMode::isTest == false) return; DrawCircle(pos.x, pos.y + 9, HIT_RANGE, GetColor(0, 255, 0), false); // DrawFormatString(100, 100, GetColor(0, 255, 0), "rensha = %d", s_rensha); // DrawFormatString(100, 100, GetColor(0, 255, 0), "Dで死にます"); // DrawFormatString(100, 120, GetColor(0, 255, 0), "Pでシフトアップ"); // DrawFormatString(100, 140, GetColor(0, 255, 0), "Oでシフトダウン"); }
Enemy::~Enemy() { delete shot; delete shot2; delete shot3; // 画像アンロード switch (type) { case 0: DeleteGraph(gh_ene00); break; case 1: break; case 2: for (int i = 0; i < sizeof(gh_ene02) / sizeof(gh_ene02[0]); i++) DeleteGraph(gh_ene02[i]); break; case 3: break; case 4: for (int i = 0; i < sizeof(gh_ene04) / sizeof(gh_ene04[0]); i++) DeleteGraph(gh_ene04[i]); break; case 5: break; case 6: break; case 7: break; default: printfDx("ERROR:Enemy.cpp"); break; } if (gh_shot00 != NULL) DeleteGraph(gh_shot00); if (sh_voice != NULL) DeleteSoundMem(sh_voice); }
// 失敗出来損ない〜〜〜〜 void Graphics2D::DrawAnimation(const double& X, const double& Y, const double& EXRATE, const double& ANGLE, const int & ANIME_SPEED) { if (gh != nullptr){ printfDx("読み込みエラー(G2D)\n"); return; } const int& ALL_NUM = ANIME_SPEED * FRAME_NUM; for (int i = 0; i < FRAME_NUM; i++) { for (int j = 0; j < ALL_NUM; j++) { if (count >= j && count <= j + (j * ANIME_SPEED)) { DrawRotaGraph(X, Y, EXRATE, ANGLE, gh[i], true); break; } } } count++; if (count == ALL_NUM) count = 0; }
void Sample::Hello() { printfDx("Hello"); }
BattleState* AttackConfirmState::run(BattleScene* bs) { // 次のシーン BattleState* nextState = this; // 入力 InputManager& im = InputManager::getInstance(); // カーソルの移動 if (im.getConfigKeyState(KEY_UP) % 5 == 1) { m_cursorIdx = 0; //cursorDy = -1; } if (im.getConfigKeyState(KEY_DOWN) % 5 == 1) { m_cursorIdx = 1; //cursorDy = 1; } printfDx("相手の現在HP = %d\n", bs->getUnitSet()->getUnitStatus(m_targetUnitId)->getHp()); printfDx("与えるダメージ = %d\n", m_damage); // 決定 if (im.getConfigKeyState(KEY_OK) == 1) { // 「はい」が選択されたらダメージメッセージに遷移 if (m_cursorIdx == 0) { printf("input = ATTACK_CONFIRM::Yes -> "); // 攻撃計算() bs->getUnitSet()->receiveDamage(bs, m_targetUnitId, m_damage); // 勝利敗北判定() // キャラを行動済みにする() // キャラの移動差分を0,0にする() // メッセージの作成とテキストボックスへ投げる() // プレイヤーターン中にダメージメッセージへ遷移することを保存() // 表示設定 mp_menuCursor->setIsVisible(false); mp_playerStatus->setIsVisible(false); mp_enemyStatus->setIsVisible(false); mp_choice->setIsVisible(false); mp_yesText->setIsVisible(false); mp_noText->setIsVisible(false); // メッセージシーンのプッシュ printf("DAMAGE_MASSEGE\n"); // // 状態遷移 printf("DAMAGE_MASSEGE --> UnitEndState\n"); nextState = new UnitEndState(m_selectedUnitId); } // 「いいえ」が選ばれたら攻撃選択に遷移 else if (m_cursorIdx == MovedMenu::MOVEDATTACK) { printf("input = ATTACK_CONFIRM::No -> "); // 表示設定 mp_menuCursor->setIsVisible(false); mp_playerStatus->setIsVisible(false); mp_enemyStatus->setIsVisible(false); mp_choice->setIsVisible(false); mp_yesText->setIsVisible(false); mp_noText->setIsVisible(false); // 状態遷移 printf("AttackSelectState\n"); nextState = new AttackSelectState(m_selectedUnitId, m_dx, m_dy); } } // キャンセルなら攻撃選択に遷移 if (im.getConfigKeyState(KEY_CANCEL) == 1){ printf("input = KEY::CANCEL -> "); // 表示設定 mp_menuCursor->setIsVisible(false); mp_playerStatus->setIsVisible(false); mp_enemyStatus->setIsVisible(false); mp_choice->setIsVisible(false); mp_yesText->setIsVisible(false); mp_noText->setIsVisible(false); // 状態遷移 printf("AttackSelectState\n"); nextState = new AttackSelectState(m_selectedUnitId, m_dx, m_dy); } // メニューカーソルの表示位置の更新 mp_menuCursor->setPosition(mp_menuCursor->getX(), 245 + (16 * m_cursorIdx)); return nextState; }
void TestPumpkin::update() { Mover::update(); clsDx(); printfDx("%f, %f", this->angle, this->destAngle); this->rotation = this->angle * 3.141592/180; }
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){ //FullscreenMessage(); ChangeWindowMode( FALSE ); SetMainWindowText("高橋テトリスver0.04"); if (DxLib_Init() == -1) return -1; //初期化 load(); if (SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//裏画面化 exe_cnt=0; func_state=0; while(ProcessLoop()==0){//メインループ music_ini(); switch(func_state){ case 0: //初期ロード launch_ini(); mode=0; menu_ini(); func_state=1; break; case 1: //ロゴ画面 graph_logo(); break; case 2: //メニュー画面 control_menu(); graph_menu(); break; case 50: //モード選択画面 control_menu(); graph_menu(); break; case 51: //モード選択後移行画面 graph_menu(); menu_selected_cnt++; if (menu_selected_cnt>30) { first_ini(); func_state=100; } break; case 100: //ゲームメイン画面 control_main(); block_main(); cal_score(); graph_main(); stage_cnt++; if (gameover_flag==1 && CheckStatePad(-1,PAD_NUM_HOLD)==1) { result_ini(); func_state=101; } if (CheckStatePad(-1,PAD_NUM_PAUSE)==1) { pause_push_Pl=PadPushPlayer; StopSoundMem( bgm_handle[bgm_num] ) ; pause_select=0; func_state=999; } break; case 999: //ポーズ画面 control_game_pause(); graph_main(); if (CheckStatePad((all_cpu_flag==0)?pause_push_Pl:-1,PAD_NUM_HOLD)==1) { switch (pause_select) { case 0: PlaySoundMem( bgm_handle[bgm_num] , DX_PLAYTYPE_LOOP , FALSE ) ; func_state=100; break; case 1: first_ini(); func_state=100; break; case 2: menu_ini(); func_state=50; break; } } if (CheckStatePad((all_cpu_flag==0)?pause_push_Pl:-1,PAD_NUM_PAUSE)==1) { PlaySoundMem( bgm_handle[bgm_num] , DX_PLAYTYPE_LOOP , FALSE ) ; func_state=100; } break; case 101: //リザルト画面 control_result(); graph_main(); stage_cnt++; if (CheckStatePad(-1,PAD_NUM_HOLD)==1) func_state=102; break; case 102: //ゲームオーバー後選択画面 control_over_select(); graph_main(); stage_cnt++; if (CheckStatePad(-1,PAD_NUM_HOLD)==1) { switch (over_select) { case 0: first_ini(); func_state=100; break; case 1: menu_ini(); menu_select=mode; func_state=50; break; case 3: func_state=101; break; } } break; default: printfDx("error:不明なfunc_state\n"); break; } control_func_state(); exe_cnt++; music_play(); if(CheckStateKey(KEY_INPUT_ESCAPE)==1) break;//エスケープが入力されたらブレイク ScreenFlip();//裏画面反映 } DxLib_End();//DXライブラリ終了処理 return 0; }
//周りから中央への発射 void boss_shot_bulletH006(){ #define TM006 300 #define DNUMX 15 int i,j,k,t=boss_shot.cnt%TM006,t2=boss_shot.cnt; double xlen=FMX/DNUMX;//画面にDNUM個並べるにはxlen間隔で並べればいい int dnumy=FMY/xlen;//xlenずつならべると鉛直方向にいくつはいるか int cnum; if(dnumy==0){printfDx("boss_shot_bulletH006で0割り\n"); return ;} double ylen=FMY/dnumy;//ylenずつおけばいい double x,y,angle; static int num; if(t2==0)num=0; if(t==0){ x=0,y=0,angle=0,cnum=0; for(j=0;j<4;j++){ int to=j%2 ? dnumy: DNUMX ; for(i=0;i<=to;i++){ if((k=search_boss_shot())!=-1){ boss_shot.bullet[k].x = x;//座標 boss_shot.bullet[k].y = y; boss_shot.bullet[k].knd = 4;//弾の種類 boss_shot.bullet[k].flag = 1; boss_shot.bullet[k].cnt = 0; switch(num){ case 0: boss_shot.bullet[k].col = 0;//弾の色 boss_shot.bullet[k].angle = bossatan3(k,FMX/2,FMY/2);//角度 boss_shot.bullet[k].spd = 1.3;//スピード boss_shot.bullet[k].state = 0;//ステータス break; case 1: boss_shot.bullet[k].col = 3;//弾の色 boss_shot.bullet[k].angle = bossatan3(k,FMX/2,FMY/2);//角度 boss_shot.bullet[k].spd = 1.4+ ((j%2 ? -1 : 1) * ((cos(PI2/to*i-PI)+1)/2))*0.4;//スピード boss_shot.bullet[k].state = 1;//ステータス break; case 2: boss_shot.bullet[k].col = 6;//弾の色 boss_shot.bullet[k].angle = bossatan3(k,FMX/2,FMY/2);//角度 boss_shot.bullet[k].spd = 1.3;//スピード boss_shot.bullet[k].state = 2;//ステータス boss_shot.bullet[k].base_angle[0] = PI/1000 * (j%2 ? -1 : 1) * ((cos(PI2/to*i-PI)+1)/2); break; } se_flag[0]=1; cnum++; } x+=cos(angle)*xlen; y+=sin(angle)*ylen; } angle+=PI/2; } } for(i=0;i<BOSS_BULLET_MAX;i++){ if(boss_shot.bullet[i].flag>0){ int cnt=boss_shot.bullet[i].cnt; switch(boss_shot.bullet[i].state){ case 2: boss_shot.bullet[i].angle+=boss_shot.bullet[i].base_angle[0]; break; default: break; } } } if(t==TM006-1) num=(++num)%3; }
Enemy::Enemy(int type, int stype, int m_pattern, int s_pattern, int in_time, int stop_time, int shot_time, int out_time, int x_pos, int y_pos, int s_speed, int hp, int item) : SCREEN_LIMIT_XL(-10) , SCREEN_LIMIT_XR(650) , SCREEN_LIMIT_YT(-10) , SCREEN_LIMIT_YB(490) , MAX_HP(hp) , DROP_RATE(2) , shot(nullptr) , shot2(nullptr) , shot3(nullptr) , SPEED_0(4.) , gh_shot00(NULL) , sh_voice(NULL) , elapsedTime(0) , moveTime(0) , s_time(0) , angle(0.) , isExist(false) , isMove(true) , isDamage(false) , isUngry(false) { // 例外処理 if(item < 0 || item > 3) { printfDx("アイテムID範囲外です。\n"); std::min(4, std::max(0, item)); } // データ設定 this->type = type; this->stype = stype; this->m_pattern = m_pattern; this->s_pattern = s_pattern; this->in_time = in_time; this->stop_time = stop_time; this->shot_time = shot_time; this->out_time = out_time; this->x_pos = x_pos; this->y_pos = y_pos; this->s_speed = s_speed; this->hp = hp; this->item = item; pos.SetVecor2D(static_cast<double>(x_pos), static_cast<double>(y_pos)); // タイプに合わせた switch (type) { case 0: gh_ene00 = LoadGraph("GRAPH/GAME/ENEMY/ene00.png"); hitRange = 20.; break; case 1: break; case 2: LoadDivGraph("GRAPH/GAME/ENEMY/ene02.png", 4, 4, 1, 31, 16, gh_ene02); hitRange = 20.; hitSRange.SetVecor2D(40., 40.); break; case 3: break; case 4: LoadDivGraph("GRAPH/GAME/ENEMY/career.png", 8, 4, 2, 124, 78, gh_ene04); sh_voice = LoadSoundMem("SOUND/SE/scream00.wav"); hitRange = 50.; break; case 5: break; case 6: break; case 7: break; } // 速度 switch (m_pattern) { case 0: vspeed_x = 2.; vspeed_y = 4.; break; case 1: break; case 2: vspeed_x = 2.; vspeed_y = 0.1; break; case 3: break; case 4: break; case 5: break; case 6: break; case 7: break; } // 弾ロード switch (s_pattern) { case 0: shot = new Shot(new EShot00); break; case 1: break; case 2: shot = new Shot(new EShot00); break; case 3: break; case 4: shot = new Shot(new EShot04); shot2 = new Shot(new EShot01); break; case 5: break; case 6: break; case 7: break; default: printfDx("Enemy.cpp:ERROR"); break; } gh_shot00 = LoadGraph("GRAPH/GAME/Eshot/efire0.png"); }
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow){ namespace hmrv = hmr::viewer; SetWindowIconID(ID_ICON); //hmLib_dxモジュールを初期化 dx::ini("hmrV2500_v1_07a", 960,720); try{ //Message hmrv::cMessage Message; //IO // PCからの出口を管理する hmrv::cIO IO(Message.ComVMC,Message.MessageDriver); //各モジュール宣言 hmrv::cBattery Battery; hmrv::cFullADC FullADC; hmrv::cAccele Accele; hmrv::cCompass Compass; hmrv::cGyro Gyro; hmrv::cGPS GPS; hmrv::cMotor Motor; hmrv::cThermo Thermo; hmrv::cCO2 CO2; hmrv::cCamera Camera; hmrv::cDeviceManage DeviceManage; Message.regist('b', Battery.MsgAgent); Message.regist('f', FullADC.MsgAgent); Message.regist('a', Accele.MsgAgent); Message.regist('c', Compass.MsgAgent); Message.regist('G', Gyro.MsgAgent); Message.regist('g', GPS.MsgAgent); Message.regist('m', Motor.MsgAgent); Message.regist('t', Thermo.MsgAgent); Message.regist('C', CO2.MsgAgent); Message.regist('j', Camera.MsgAgent); Message.regist('D', DeviceManage.MsgAgent); //制御系デバイス hmrv::cController Controller; Controller.connect_Pad(Motor.MsgAgent); Controller.connect_Pad(Battery.MsgAgent); Controller.connect_Pad(Accele.MsgAgent); Controller.connect_Pad(Compass.MsgAgent); Controller.connect_Pad(Gyro.MsgAgent); Controller.connect_Pad(GPS.MsgAgent); Controller.connect_Pad(Thermo.MsgAgent); Controller.connect_Pad(Camera.MsgAgent); Controller.connect_Pad(CO2.MsgAgent); //親ディレクトリ hmrv::cFile File; //Batteryデータ保存 File.regist(Battery.FileAgent); //FullADCデータ保存 File.regist(FullADC.FileAgent); // Thermo データを保存 File.regist(Thermo.FileAgent); // CO2 データを保存 File.regist(CO2.FileAgent); //GPSデータを保存 File.regist(GPS.FileAgent); //GPGGAデータを保存 File.regist(GPS.GPGGAFileAgent); //カメラデータを保存 File.regist(Camera.FileAgent); //画面表示モジュール hmrv::cView View(IO,Message, FullADC, Accele,Compass,Gyro,Camera,GPS,Battery); View.registSUI(DeviceManage.SUI); View.registSUI(IO.GateSwSUI); View.registSUI(IO.BufGateSUI); View.registSUI(IO.ioLogGateSUI); View.registSUI(IO.IODriverSUI); View.registSUI(IO.VMCSUI); View.registSUI(File.SUI); View.registMUI(Motor.MUI); View.registMUI(Battery.MUI); View.registMUI(Accele.MUI); View.registMUI(Compass.MUI); View.registMUI(Gyro.MUI); View.registMUI(GPS.MUI); View.registMUI(Thermo.MUI); View.registMUI(Camera.MUI); View.registMUI(CO2.MUI); View.registMUI(FullADC.MUI); Controller.connect_Keyboard(View); while(!dx::work(30)){ Controller(); IO(); Message(); View(); if(dx::getKey(KEY::ESC)<0)break; } }catch(const std::exception& Escp){ printfDx("===ERROR===\n"); printfDx("%s\n",Escp.what()); while(!dx::work(30)){ if(dx::getKey(KEY::ESC)<0)break; } }catch(const std::string& Escp){ printfDx("===ERROR===\n"); printfDx("%s\n",Escp.c_str()); while(!dx::work(30)){ if(dx::getKey(KEY::ESC)<0)break; } } dx::end(); 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 Stage::AllClear() { printfDx("全クリだよ。おめでとさん。\n"); nowStage = eStage::stage1; }
void Subweponbox::GetSubweponForCSV(int id){ int n, num, i, fp; char fname[256]; int input[64]; char inputc[64]; sprintf_s(fname, "dat/Database/dbSW.csv"); fp = FileRead_open(fname); // ファイル読み込み if(fp == NULL){ printfDx("read error\n"); return; } for(i=0;i<2;i++) // 最初の2行を読み飛ばす while(FileRead_getc(fp)!='\n'); n=0, num=0; SubweponStatus tmpStatus; while(1){ for(i=0;i<64;i++){ inputc[i]=input[i]=FileRead_getc(fp);//1文字取得する if(inputc[i]=='/'){//スラッシュがあれば while(FileRead_getc(fp)!='\n');//改行までループ i=-1;//カウンタを最初に戻して continue; } if(input[i]==',' || input[i]=='\n'){//カンマか改行なら inputc[i]='\0';//そこまでを文字列とし break; } if(input[i]==EOF){//ファイルの終わりなら goto EXFILE;//終了 } } switch(num){ case 0: tmpStatus.Name =inputc; break; case 1: tmpStatus.Kind =atoi(inputc);break; case 2: tmpStatus.Damage =atoi(inputc);break; case 3: tmpStatus.HitArea =atoi(inputc);break; case 4: tmpStatus.Speed =atoi(inputc);break; case 5: tmpStatus.Rappid =atoi(inputc);break; case 6: tmpStatus.Penetoration =atoi(inputc);break; case 7: tmpStatus.LoadNumber =atoi(inputc);break; case 8: tmpStatus.Price =atoi(inputc);break; } num++; if(num==9){ tmpStatus.Id = n; if(n==id){ Subwepon tmp; tmp.SetSubwepon(tmpStatus); Insert(tmp); break; } num=0; n++; } } EXFILE: FileRead_close(fp);}