Example #1
0
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;
}
Example #2
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;
}
Example #3
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;
}
Example #4
0
// マップとプレイヤーの描画(クォータービューでない時)
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);
}
Example #5
0
//フレームレートの調整
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();
	}
}
Example #7
0
// 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 ;
}
Example #8
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 ;				// ソフトの終了 
}
Example #9
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 ;

      }
    }

  } ;

}
Example #10
0
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;
}
Example #11
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 #12
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);
}
Example #13
0
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;
}
Example #14
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();
       
    }
}
Example #15
0
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 ;				// ソフトの終了 
}
Example #16
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;
	//}
}
Example #17
0
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) );
	}
}
Example #18
0
void TIMER_wait(unsigned long ms) {
  WaitTimer(ms);
}