Ejemplo n.º 1
0
void HumanClientApp::HandleMessage(Message& msg) {
    if (INSTRUMENT_MESSAGE_HANDLING)
        std::cerr << "HumanClientApp::HandleMessage(" << msg.Type() << ")\n";

    switch (msg.Type()) {
    case Message::ERROR_MSG:                m_fsm->process_event(Error(msg));                   break;
    case Message::HOST_MP_GAME:             m_fsm->process_event(HostMPGame(msg));              break;
    case Message::HOST_SP_GAME:             m_fsm->process_event(HostSPGame(msg));              break;
    case Message::JOIN_GAME:                m_fsm->process_event(JoinGame(msg));                break;
    case Message::HOST_ID:                  m_fsm->process_event(HostID(msg));                  break;
    case Message::LOBBY_UPDATE:             m_fsm->process_event(LobbyUpdate(msg));             break;
    case Message::LOBBY_CHAT:               m_fsm->process_event(LobbyChat(msg));               break;
    case Message::SAVE_GAME_DATA_REQUEST:   m_fsm->process_event(SaveGameDataRequest(msg));     break;

    case Message::GAME_START:               m_fsm->process_event(GameStart(msg));               break;
    case Message::TURN_UPDATE:              m_fsm->process_event(TurnUpdate(msg));              break;
    case Message::TURN_PARTIAL_UPDATE:      m_fsm->process_event(TurnPartialUpdate(msg));       break;
    case Message::TURN_PROGRESS:            m_fsm->process_event(TurnProgress(msg));            break;
    case Message::PLAYER_STATUS:            m_fsm->process_event(::PlayerStatus(msg));          break;
    case Message::PLAYER_CHAT:              m_fsm->process_event(PlayerChat(msg));              break;
    case Message::DIPLOMACY:                m_fsm->process_event(Diplomacy(msg));               break;
    case Message::DIPLOMATIC_STATUS:        m_fsm->process_event(DiplomaticStatusUpdate(msg));  break;
    case Message::END_GAME:                 m_fsm->process_event(::EndGame(msg));               break;
    default:
        ErrorLogger() << "HumanClientApp::HandleMessage : Received an unknown message type \"" << msg.Type() << "\".";
    }
}
Ejemplo n.º 2
0
void GameManager::AI()
{
	CheckKey();
	if (GameStart() && !GamePause() && !GameOver())
	{
		Produce(_T("Enemy"));
		Produce(_T("Cloud"));
		Produce(_T("Angela"));
		CheckCollision();
		MoveIt();
		Fire();
		TrashRecycle();
	}
}
Ejemplo n.º 3
0
int AngelFight::SetPlayerInfo( sprite_t * p,char * data, int len )
{
    DEBUG_LOG( "AngelFight SetPlayerInfo" );
    Player* player = GetPlayer( p );
    if( player )
    {
        if( 0 != player->SetInfo( data, len ) )
        {
            return GER_game_system_err;
        }
    }
    m_nDBInfoCount++;
    if( m_nDBInfoCount == m_nPlayerCount )
    {
        GameStart();
    }
    return 0;
}
Ejemplo n.º 4
0
AngelFight::AngelFight( game_group_t* grp, Player* p1, Player* p2 ):m_bQuickGame(false), m_nLevelID(-1)
{
    m_nWinnerTeam = -1;
    INIT_LIST_HEAD( &m_timer );
    m_pGrp = grp;

    if( !m_pGrp )
    {
        return;
    }

    m_nPlayerCount = 0;
    if( p1 )
    {
        m_pTeam[0] = p1;
        m_pTeam[0]->SetTeamID(0);
        m_pPlayers[0] = p1;
        m_nPlayerCount++;
    }

    if( p2 )
    {
        m_pTeam[1] = p2;
        m_pTeam[1]->SetTeamID(1);
        m_pPlayers[1] = p2;
        m_nPlayerCount++;
    }
    else
    {
        m_pTeam[1] = new Player();
        m_pTeam[1]->SetTeamID(1);
        m_pPlayers[1] = m_pTeam[1];
        m_pPlayers[1]->SetSprite( NULL );
    }

    m_pPlayers[0]->SetTar( m_pPlayers[1] );
    m_pPlayers[1]->SetTar( m_pPlayers[0] );
    srand(time(NULL));
    DEBUG_LOG("AngelFight Create Game OK");
    GameStart();
}
Ejemplo n.º 5
0
void MenuProcessEvent(SDL_Event evt)
{
    if (evt.type == SDL_KEYDOWN)
    {
        switch (evt.key.keysym.sym)
        {
        case SDLK_ESCAPE:
        case SDLK_RETURN:  // SELECT button on Dingoo
        case SDLK_PAUSE:   // POWER UP button on Dingoo
            g_okQuit = 1;
            break;
        case SDLK_LCTRL:   // A button on Dingoo
        case SDLK_LALT:    // B button on Dingoo
        case SDLK_SPACE:
            GameStart();
            break;
        default:  // Do nothing
            break;
        }
    }
}
Ejemplo n.º 6
0
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
	ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK ); //ウィンドウモード変更と初期化と裏画面設定

	GameInit();
    // 裏画面を表画面に反映, メッセージ処理, 画面クリア
    while(ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0){//
		gpUpdateKey();
		
		if(game == start){
			GameStart();
		}else if(game == playing){
			GamePlaying();
		}else{
			GameOver();
		}
		
		DrawBox(FieldLeft, FieldTop, FieldRight, FieldBottom, GetColor(255, 255, 255), FALSE); //フィールドの表示
	}
        
    DxLib_End(); // DXライブラリ終了処理
    return 0;
}
Ejemplo n.º 7
0
void GameManager::Draw(CDC *cDC)
{
	if (GameStart())
	{
		if (GamePause() == TRUE)
		{
			Draw_Text(cDC, _T("按下回车恢复游戏"), Point(Game_Width / 2, Game_Height / 2));
		}
		else if (GameOver() == TRUE) {
			Draw_Text(cDC, _T("游戏结束"), Point(Game_Width / 2, Game_Height / 2));
		}
		else
		{
			for (int i = Index_Background; i <= Index_Angela; ++i) //Index_Cloud
			{
				CList<GameObject*, GameObject*> *now = GetList(i);
				POSITION pos = now->GetHeadPosition();
				while (pos != NULL)
				{
					now->GetNext(pos)->Draw(cDC);
				}
			}
			if (God()) {
				Draw_Text(cDC, _T("无敌模式已开启,按下F键关闭"), Point(110, 50));
			}
			else {
				Draw_Text(cDC, _T("无敌模式未开启,按下G键开启"), Point(118, 50));
			}
			Draw_Text(cDC, _T("生命值"), PlayerHP(), Point(60, 10));
			Draw_Text(cDC, _T("星星值"), PlayerStars(), Point(48, 30));

		}
	}
	else {

		Draw_Text(cDC,_T("按下回车键开始游戏"),Point(Game_Width/2, Game_Height/2));
	}
}
Ejemplo n.º 8
0
Game::Game(GameType type, int charater)
{
    this->type = type;
    level = 0;
    
    switch (type) {
        case SINGLE:
            scene = new Scene(
                            LVL_PATH + std::to_string(level + 1) + EXT_SET,
                            LVL_PATH + std::to_string(level + 1) + EXT_MAP,
                            1, 0
            );
            
            
            m_stack.push([this]() { GameStart(); });
            m_stack.push([this]() { EnteringLevel(); });
            m_stack.push([this]() { ExitingLevel(); });
            break;
            
        case MULTI:
            break;
    }
}
Ejemplo n.º 9
0
//游戏开始
bool __cdecl CTableFrameSink::OnEventGameStart()
{
	//设置状态
	m_dwJettonTime = GetTickCount();
	m_pITableFrame->SetGameStatus(GS_OX_PLAY);
	CountDownTime(INVALID_CHAIR , TRUE);
 	m_oContral.Reset();
// 	m_oContral.GetNextGamePrizeMode();

	bool bAllAndroid=true;

	//用户状态
	for (WORD i=0;i<m_wPlayerCount;i++)
	{
		//获取用户
		IServerUserItem *pIServerUser=m_pITableFrame->GetServerUserItem(i);

		if(pIServerUser==NULL)
		{
			m_cbPlayStatus[i]=FALSE;
		}
		else
		{
			m_cbPlayStatus[i]=TRUE;
			if(!pIServerUser->IsAndroidUser())
			{
				bAllAndroid=false;
			}
		}
	}


	SendBowl(INVALID_CHAIR);
	GameStart();
	return true;
}
Ejemplo n.º 10
0
void GuideLayer::onEnterTransitionDidFinish()
{
	GameStart();
	AddEvents();
}
Ejemplo n.º 11
0
LRESULT GameEngine::HandleEvent(HWND hWindow, UINT msg, WPARAM wParam, LPARAM lParam)
{
	//Route Windows messages to game engine member fucntions
	switch (msg)
	{
	case WM_CREATE:
		//Set the game window and start the game
		SetWindow(hWindow);
		GameStart(hWindow);
		return 0;

	case WM_ACTIVATE:
		//Activate and deactivate the game and update the Sleep status
		if (wParam != WA_INACTIVE)
		{
			GameActivate(hWindow);
			SetSleep(FALSE);
		}
		else
		{
			GameDeactivate(hWindow);
			SetSleep(TRUE);
		}
		return 0;

	case WM_PAINT:
		HDC			hDC;
		PAINTSTRUCT	ps;
		hDC = BeginPaint(hWindow, &ps);

		//Paint the game
		GamePaint(hDC);

		EndPaint(hWindow, &ps);
		return 0;

	case WM_LBUTTONDOWN:
		//Handle left mouse button press
		MouseButtonDown(LOWORD(lParam), HIWORD(lParam), TRUE);
		return 0;

	case WM_LBUTTONUP:
		//Handle left mouse button release
		MouseButtonUp(LOWORD(lParam), HIWORD(lParam), TRUE);
		return 0;

	case WM_RBUTTONDOWN:
		//Handle right mouse button press
		MouseButtonDown(LOWORD(lParam), HIWORD(lParam), FALSE);
		return 0;

	case WM_RBUTTONUP:
		//Handle right mouse button release
		MouseButtonUp(LOWORD(lParam), HIWORD(lParam), FALSE);
		return 0;

	case WM_MOUSEMOVE:
		//Handle mouse movement
		MouseMove(LOWORD(lParam), HIWORD(lParam));
		return 0;

	case WM_DESTROY:
		//End the game and exit the application
		GameEnd();
		PostQuitMessage(0);
		return 0;
	}
	return DefWindowProc(hWindow, msg, wParam, lParam);
}
Ejemplo n.º 12
0
void NetworkManager::GameRun()
{
	PacketType type;

	Network::GameStartData gameStartData;
	puts("게임 시작 대기중");
	network.WaitForStart(&gameStartData);
	wprintf_s(L"매칭되었습니다. 상대방 이름: %s, 학번: %d\n", gameStartData.oppositionName, gameStartData.oppositionStudentID);

	bool allOver = false;

	while (!allOver)
	{
		
		GameInit();
		ShipSetting();

		try
		{
			GameStart();
			network.GetPacketType(&type);

			if (type == PKT_SC_NEXT_GAME)
			{
				puts("다음 게임을 준비해주세요.");
				
			}
			else if (type == PKT_SC_ALL_OVER)
			{
				Network::FinalResultData finalresult;
				finalresult = network.GetFinalResult();
				puts("모두 종료");
				printf_s("승리 횟수: %d, 평균 턴 수: %.1f", finalresult.winCount, finalresult.avgTurns);

				allOver = true;
			}
			else
			{
				throw Network::UNEXPECTED_PACKET;
			}
		}
		catch (Network::Exception ex)
		{
			switch (ex)
			{
			case Network::NETWORK_ERROR:
				puts("네트워크에 문제가 발생했습니다.");
				break;
			case Network::SERVER_CLOSED:
				puts("서버와의 연결이 끊어졌습니다.");
				break;
			case Network::PARAMETER_ERROR:
				puts("함수의 인수가 잘못되었습니다.");
				break;
			case Network::UNEXPECTED_PACKET:
				puts("서버에서 잘못된 정보가 전송되었습니다.");
				break;
			default:
				break;
			}
		}
		
	}
}
Ejemplo n.º 13
0
void Stage01::onEnterTransitionDidFinish()
{
	GameStart();
}
Ejemplo n.º 14
0
void GameManager::CheckKey()
{
	if (GameStart() && !GamePause() && !GameOver() )
	{
		if (GetKey('w') || GetKey('W') || GetKey(VK_UP)) { MovePlane(Up); }
		if (GetKey('s') || GetKey('S') || GetKey(VK_DOWN)) { MovePlane(Down); }
		if (GetKey('a') || GetKey('A') || GetKey(VK_LEFT)) { MovePlane(Left); }
		if (GetKey('d') || GetKey('D') || GetKey(VK_RIGHT)) { MovePlane(Right); }
		if (!(GetKey('a') || GetKey('A') || GetKey(VK_LEFT)) && !(GetKey('d') || GetKey('D') || GetKey(VK_RIGHT)) ) { MovePlane(Stay); }

		//功能检测
		if (GetKey('G') || GetKey('g'))
		{
			OnGod();
		}

		if (GetKey('F') || GetKey('f'))
		{
			OffGod();
		}

		if (GameManager::GetKey(VK_SPACE))//!GetPlayer()->Kill()
		{
			Player* p = GetPlayer();
			if (p->FireStatus())
			{
				Play(_T("Player_Shot"));
				Produce(_T("Weapon"), Point(p->X() + p->Width() / 2 - 3, p->Y() - 4), p->WeaponID());
			}
		}

		if (GetKey('Q') || GetKey('q'))
		{
			Player* p = GetPlayer();
			if (p->FireStatus())
			{
				Produce(_T("Weapon"), Point(p->X() + p->Width() / 2 - 3, p->Y() - 4),11, GetList(Index_Enemy));
			}
		}
		if (GetKey('Z') || GetKey('z'))
		{
			CList<GameObject*, GameObject*> *now = GetList(Index_Angela);
			POSITION pos = now->GetHeadPosition();
			while (pos != NULL)
			{
				Angela* angela_ = static_cast<Angela*>(now->GetNext(pos));
				if (angela_->Op() == 1) {
					angela_->SetX(GetPlayer()->X() - 80);
					angela_->SetY(GetPlayer()->Y());
					angela_->Op(3, angela_->Position(), GetPlayer()->Position(), GetPlayer()->SpeedX(), GetPlayer()->SpeedY());
				}
				else if (angela_->Op() == 2)
				{
					angela_->SetX(GetPlayer()->X() + 80);
					angela_->SetY(GetPlayer()->Y());
					angela_->Op(3, angela_->Position(), GetPlayer()->Position(), GetPlayer()->SpeedX(), GetPlayer()->SpeedY());
				}
				
			}
		}
		if (GetKey('X') || GetKey('x'))
		{
			CList<GameObject*, GameObject*> *now = GetList(Index_Angela);
			POSITION pos = now->GetHeadPosition();
			while (pos != NULL)
			{
				Angela* angela_ = static_cast<Angela*>(now->GetNext(pos));
				if (angela_->Op() == 1) 
				{
					angela_->Op(1,  angela_->Position(), GetPlayer()->Position(), 0,0);
				}
				else if (angela_->Op() == 2)
				{
					angela_->Op(2,  angela_->Position(), GetPlayer()->Position(), 0,0);
				}
				

			}
		}
		if (GameManager::GetKey(VK_ESCAPE))
		{
			PauseGame();
		}
	}

	if (GameManager::GetKey(VK_RETURN))
	{
		if (GameStart() && GamePause() )
		{
			ResumeGame();
		}
		else if(!GameStart())
		{
			StartGame();
			Play(_T("Mission_Begin"));
		}
	}
}
Ejemplo n.º 15
0
bool CGameWorld::GameLogicFunc()
{
    //更新GUI
    float dt = Engine->Timer_GetDelta();
    m_nLastGUIID = gui->Update(dt);

    //如果按下的是开始,则开始游戏
    if(m_nLastGUIID == ID_START_BTN)
    {
        GameStart();
    }
    else
    if(m_bGameStarted && m_nLastGUIID == ID_HINT_BTN)                      //如果按下提示
    {
        int ida, idb;
        m_pMapSearch->GetRandomHint(ida, idb);

        m_nSelArr[0] = ida, m_nSelArr[1] = idb;
        m_pElemButtonArr[ida]->m_bSelected = m_pElemButtonArr[idb]->m_bSelected = true;
    }
    else
    if(m_bGameStarted && m_nLastGUIID == ID_RESORT_BTN)                     //如果按下重列
    {
        Resort();
    }
    else
    if(m_bGameStarted && m_nLastGUIID >= ID_ELEM_GUI_START)              //如果按下的是方块且游戏开始,则开始逻辑判断
    {
        if(m_nSelArr[0] != -1 && m_nSelArr[1] != -1)
        {
            MapCoorType a, b;
            a.ToCoor(m_nSelArr[0]);
            b.ToCoor(m_nSelArr[1]);

            if(m_Map.Map[a.y][a.x] == m_Map.Map[b.y][b.x])
            {
                PointPath pp(m_pMapSearch->GetPath(a.y, a.x, b.y, b.x));
                if(pp.bExist)
                {
                    m_thisTime = 0;
                    Engine->Effect_Play(ElecSE);
                    //Engine->Effect_Play(ItemBoomSE);
                    m_bTimeNotified = false;
                    PutAni(pp);

                    m_Map.Map[a.y][a.x] = m_Map.Map[b.y][b.x] = -1;
                    m_pElemButtonArr[m_nSelArr[0]]->ToLeave();
                    m_pElemButtonArr[m_nSelArr[1]]->ToLeave();
                    m_Map.nLeft -= 2;
                    m_nSelArr[0] = m_nSelArr[1] = -1;

                    ToSearchMap();
                }
                else
                {
                    m_nSelArr[0] = m_nSelArr[1];
                    m_nSelArr[1] = -1;
                }
            }
            else
            {
                m_nSelArr[0] = m_nSelArr[1];
                m_nSelArr[1] = -1;
            }
        }
    }
    else
    if(m_bGameStarted) //计时
    {
        m_thisTime += dt;
        //若时间到
        if(m_thisTime > MAX_TIME)
        {
            m_bGameStarted = false;
            m_bLose = true;
            Engine->Effect_Play(EndSE);
        }

        if(MAX_TIME - m_thisTime < 8 && !m_bTimeNotified)
        {
            m_bTimeNotified = true;
            Engine->Effect_Play(LessTimeSE);
        }

        //判断赢
        if(m_Map.nLeft == 0)
        {
            m_bGameStarted = false;
            m_bWin = true;
            Engine->Effect_Play(EndSE);
        }
    }
    else
    if(!m_bGameStarted)             //如果游戏没有开始
    {
        if(Engine->Channel_IsPlaying(BGMChannel))
            Engine->Channel_Stop(BGMChannel);
    }

    return false;
}
Ejemplo n.º 16
0
void GameEventManager::PlayEvent(Player * pPlayer,Cell*Room[20][20])
{
	if(*m_pEventPosition !=0 && Room[GetRow()][GetColumn()] !=NULL)
	{
		Room[GetRow()][GetColumn()]->Reset();	//Resets the Cell the event is in
	}
	switch(GetEvent())
	{
		//Floor 1
	case 0:
		GameStart(pPlayer);
		*m_pEventPosition=+1;
		break;
	case 1:
		FirstRadioContact(pPlayer);
		CreateNextEvent(Room);
		break;
	case 2:
		FindTheKey(pPlayer);
		CreateNextEvent(Room);
		break;
	case 3:
		GoToElevator(pPlayer);
		//There is no create here because this is the end of the room, the next room will deal with continuing it on
		*m_pEventPosition+=1;	//So the next event will be loaded
		*m_pRoom1Clear = true;
		break;
		//Floor 2
	case 4:
		YouFoundTheGenerator(pPlayer);
		CreateNextEvent(Room);
		break;
	case 5:
		FindGasoline(pPlayer);
		CreateNextEvent(Room);
		break;
	case 6:
		FindTools(pPlayer);
		CreateNextEvent(Room);
		break;
	case 7:
		FindKey(pPlayer);
		CreateNextEvent(Room);
		break;
	case 8:
		UnderAttack(pPlayer);
		*m_pEventPosition+=1;	//So the next event will be loaded (since the Create new isnt called)
		*m_pRoom2Clear = true;
		break;
	case 9:
		GetThroughTheDoor();
		*m_pEventPosition+=1;
		break;
		//Floor 3
	case 10:
		DarkRevelations(pPlayer);
		CreateNextEvent(Room);
		break;
	case 11:
		Choices(pPlayer);
		break;
	}
}
Ejemplo n.º 17
0
Archivo: lab12.c Proyecto: fiefioor/SO2
int main(int argc, char** argv) {
  
  if(argc < 3)
  {
    return(-1); 
  }
  
  seg_key = atoi(argv[1]);
  sem_key = atoi(argv[2]);
  
  sop = (struct sembuf*) malloc(sizeof(struct sembuf));
  sop[0].sem_flg = 0;
  
  seg_id = shmget(seg_key,sizeof(struct game_info), 0777);
  
  if(seg_id < 0)
  {
    sem_id = semget(sem_key,2, IPC_CREAT | 0600);
    semctl(sem_id,0,SETVAL,1);
    semctl(sem_id,1,SETVAL,0);
    
    seg_id = shmget(seg_key,sizeof(struct game_info), IPC_CREAT | 0777);
    
    game = shmat(seg_id,NULL,0);
    
    if(game  == (struct game_info*)-1)
    {
      printf("HOST ERROR\n\n");
    }
    
    buffor = game;
    
    GameStart(buffor);
    
    while(buffor->end != true)
    {
      printf("\nPlease wait\n");
      
      sop[0].sem_num = 0;
      sop[0].sem_op = 0;
      semop(sem_id,sop,1);
      
      DisplayBoard(buffor);
      if(buffor->end == true)
      {
	break;
      }
      
      do
      {
	printf("\nMake a turn\n");
	printf("X: ");
	scanf("%d",&x);
	printf("\nY: ");
	scanf("%d",&y);
      }while(!Turn(x,y,buffor));
      
      DisplayBoard(buffor);
      isEnd(buffor);
      buffor->player=1;
      
      sop[0].sem_num = 0;
      sop[0].sem_op = 1;
      semop(sem_id,sop,1);
      sop[0].sem_num = 1;
      sop[0].sem_op = -1;
      semop(sem_id,sop,1);
      
    }
    
    if(buffor->end)
    {
     printf("The game has ended\n"); 
    }
    
    sop[0].sem_num = 1;
    sop[0].sem_op = -1;
    semop(sem_id,sop,1);
    
  }
  else
  {
    sem_id = semget(sem_key,2, IPC_CREAT | 0600);
    
    game = shmat(seg_id,NULL,0);
    
    if(game == (struct game_info*)-1)
    {
      printf("GUEST ERROR\n\n");
    }
    
    buffor = game;
    
    //GameStart(buffor);
    
    while(buffor->end != true)
    {
      printf("\nPlease wait\n");
            
      DisplayBoard(buffor);
      if(buffor->end == true)
      {
	break;
      }
      
      do
      {
	printf("\nMake a turn\n");
	printf("X: ");
	scanf("%d",&x);
	printf("\nY: ");
	scanf("%d",&y);
      }while(!Turn(x,y,buffor));
      
      DisplayBoard(buffor);
      isEnd(buffor);
      buffor->player=0;
      
      if(buffor->end == false) printf("\nPlease wait\n");
      
      sop[0].sem_num = 0;
      sop[0].sem_op = -1;
      semop(sem_id,sop,1);
      
      sop[0].sem_num = 1;
      sop[0].sem_op = 1;
      semop(sem_id,sop,1);
      
      sop[0].sem_num = 1;
      sop[0].sem_op = 0;
      semop(sem_id,sop,1);
      
    }
    
    if(buffor->end)
    {
     printf("The game has ended\n"); 
    }
    
    sop[0].sem_num = 1;
    sop[0].sem_op = -1;
    semop(sem_id,sop,1);
    
    shmdt(game);
    shmdt(buffor);
    semctl(sem_id, 0, IPC_RMID);
    semctl(sem_id, 1, IPC_RMID);
    
    
  }
  
/*  game = malloc(sizeof(struct game_info));
  GameStart(game);
  DisplayBoard(game);
  Turn(1,1,game);
  DisplayBoard(game);
  
 */ 
}