Пример #1
0
//ショット登録部
void enter_shot(){
	//ショットボタンが押されていたら
	if(CheckStatePad(configpad.shot)>0){
		ch.shot_cnt++;
		if(ch.shot_cnt%3==0){//3カウントに1回
			if(CheckStatePad(configpad.slow)>0)//低速移動中なら
				ch1_shot_pattern();
			else
				ch0_shot_pattern();
		}
	}
	else
		ch.shot_cnt=0;
}
Пример #2
0
//自機描画
void graph_ch(){
	double sx,sy,ny=(sin(2.0*PI*(count%50)/50)*3),ang=2.0*PI*(count%120)/120;

	if(CheckStatePad(configpad.slow)>0)//低速移動中なら
		sx=15,sy=15+ny;//引き寄せる
	else
		sx=30,sy=30+ny;//普通の位置に

	DrawRotaGraphF( ch.x-sx+FX, ch.y+sy+FY, 1.0f,  ang, img_chetc[2], TRUE );
	DrawRotaGraphF( ch.x+sx+FX, ch.y+sy+FY, 1.0f, -ang, img_chetc[2], TRUE );

	if(ch.mutekicnt%2==0){//無敵中なら点滅
		//自機表示
		DrawRotaGraphF(ch.x+FX+dn.x,ch.y+FY+dn.y,1.0f,0.0f,img_ch[0][ch.img],TRUE);
		if(CheckStatePad(configpad.slow)>0)//低速移動中なら当たり判定表示
			DrawRotaGraphF( ch.x+FX, ch.y+FY, 1.0f, 2.0*PI*(count%120)/120, img_chetc[0], TRUE );
	}
}
Пример #3
0
//自機描画
void graph_ch(){
	if(ch.flag!=0){
		if(ch.bcnt > 0){
			double rand = 2.0;
			double ang = PI2/(ch.bcnt%6);
			DrawRotaGraphF( ch.x+(rand*cos(ang)), ch.y+(rand*sin(ang)), 1.0f, 0.0f, img_ch[ch.img], TRUE );
		}else{
			DrawRotaGraphF(ch.x,ch.y,1.0f,0.0f,img_ch[ch.img],TRUE);
		}
		if(CheckStatePad(configpad.slow)>0 && ch.slow_flag==0){ //低速移動中なら当たり判定表示
			DrawRotaGraphF( ch.x, ch.y, 1.0f, 2.0*PI*(count%120)/120, img_etc[0], TRUE );
		}
	}
}
Пример #4
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;
	}
}
Пример #5
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;
}
Пример #6
0
void ch_move(){
    int i,sayu_flag=0,joge_flag=0;
    double x,y,mx,my,naname=1;
    double move_x[4]={-4.0,4.0,0,0},move_y[4]={0,0,4.0,-4.0};
    int inputpad[4],inputslow,inputbom;
    inputpad[0]=CheckStatePad(configpad.left); inputpad[1]=CheckStatePad(configpad.right);
    inputpad[2]=CheckStatePad(configpad.down); inputpad[3]=CheckStatePad(configpad.up);
	inputslow=CheckStatePad(configpad.slow);
	inputbom=CheckStatePad(configpad.bom);

	//リプレイ再生なら、操作をリプレイから取得
	if(replay_flag == 1){
		for(int i = 0;i < 4;i++){
			inputpad[i] = replay.move[i][count];
		}
		inputslow = replay.slow[count];
		inputbom = replay.bom[count];
	}else{//リプレイ再生でないなら、リプレイに記録
		for(int i = 0;i < 4;i++){
			replay.move[i][count] = inputpad[i];
		}
		replay.slow[count] = inputslow;
		replay.bom[count] = inputbom;
	}

	//ボム処理
	if(inputbom==1 && ch.bom > 0){
		ch.bcnt = 60; //ボム効果時間
		--ch.bom;
		se_flag[5]=1;
	}

    if(inputpad[0]>0)//左キーが押されていたら
        ch.img+=4*2;//画像を左向きに
    else if(inputpad[1]>0)//右キーが押されていたら
        ch.img+=4*1;//画像を右向きに

    for(i=0;i<2;i++)//左右分
        if(inputpad[i]>0)//左右どちらかの入力があれば
            sayu_flag=1;//左右入力フラグを立てる
    for(i=2;i<4;i++)//上下分
        if(inputpad[i]>0)//上下どちらかの入力があれば
            joge_flag=1;//上下入力フラグを立てる
    if(sayu_flag==1 && joge_flag==1)//左右、上下両方の入力があれば斜めだと言う事
        naname=sqrt(2.0);//移動スピードを1/ルート2に

    for(int i=0;i<4;i++){//4方向分ループ
        if(inputpad[i]>0){//i方向のキーボード、パッドどちらかの入力があれば
            x=ch.x , y=ch.y;//今の座標をとりあえずx,yに格納
            mx=move_x[i];    my=move_y[i];//移動分をmx,myに代入
            if(inputslow>0 && ch.slow_flag==0){//低速移動なら
                mx=move_x[i]/3;    my=move_y[i]/3;//移動スピードを1/3に
            }
            x+=mx/naname , y+=my/naname;//今の座標と移動分を足す
            if(!(x<FX+10 || x>FX+FMX-10 || y<FY+10 || y>FY+FMY-10)){//計算結果移動可能範囲内なら
                ch.x=x , ch.y=y;//実際に移動させる
            }
        }
    }

	//無敵カウント減少
	if(ch.bcnt){
		ch.bcnt--;
	}
}