Example #1
0
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;
}
Example #2
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);
	}
	*/
}
Example #3
0
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)++;
		}
	}
}
Example #4
0
//敵の出現情報をエクセルから読み込んで格納する関数
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);
}
Example #5
0
//当たったかどうかを判定する
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;
}
Example #6
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;
}
Example #7
0
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);
	}
}
Example #8
0
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);
}
Example #9
0
//送信
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エラー");
}
Example #10
0
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);
	}
}
Example #11
0
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);
	}
}
Example #12
0
//渡されたパッドキー番号の入力状態を返す。返り値が-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;
	}
}
Example #13
0
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でシフトダウン");
}
Example #14
0
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);
}
Example #15
0
// 失敗出来損ない〜〜〜〜
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;
}
Example #16
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;
}
Example #18
0
void TestPumpkin::update() {
	Mover::update();
	clsDx();
	printfDx("%f, %f", this->angle, this->destAngle);
	this->rotation = this->angle * 3.141592/180;
} 
Example #19
0
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;
}
Example #20
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;
}
Example #21
0
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;

}
Example #23
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;
}
Example #24
0
void Stage::AllClear()
{
	printfDx("全クリだよ。おめでとさん。\n");
	nowStage = eStage::stage1;
}
Example #25
0
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);}