愉快的写代码

    技术2022-05-18  16

    今天写了以下代码,是游戏开始开发框架的一部分

     

    神马都不说了, 直接上代码吧

     

     

    /// 党派PK, 站好合适的队伍

    void ScoreBar::PK(vecparty& a_pay, vecparty& a_ju, vecparty& a_out,

                 RANKVEC& a_vecRank, SCOREVEC& a_vecScore, CRIMEVEC& a_vecCrime)

    {

    //少数党和多数党积分

    int32_t noraml_score, crime_score;

    noraml_score = CScoreCnfg::Instance().GetSpecialScore(CHEAT, false);

    crime_score = CScoreCnfg::Instance().GetSpecialScore(CHEAT, true);

     

    //酱油党积分

    int32_t offline_score = 0;

    offline_score = CScoreCnfg::Instance().GetSpecialScore(OUT, true);

     

    //关键时刻到了,拍手党和举手党进行PK,PK规则很简单

    //就是少数服从多数,虽然哥认为真理掌握在少数人手里

    //除名党总是悲剧,虽然他也不想这样,但事实如此

    if (a_pay.size() >= a_ju.size())

    {  //拍手党被多数席位,举手党悲剧鸟

     

    }

    else

    {   //举手党多数席位,拍手党悲剧鸟

       //突然间举手党变成拍手党,身份变了

    //上马甲了

    a_pay.swap(a_ju);

    }

     

    //无论如何,多数党变成拍手党

    for (uint32_t i = 0; i < a_pay.size(); ++i)

    {  //虽然不如大家同乐,但多数者还是受益

    a_vecScore.push_back(noraml_score);

    a_vecRank.push_back(a_pay[i]);

    }

     

    if (crime_score >= offline_score)

    {  //悲剧党比酱油党强大,所以酱油党才是真正的悲剧

     

    }

    else

    {  //酱油党强大,华丽变身举手党

    a_out.swap(a_ju);

    }

     

    //虽然表面看起来是举手党,但其实它可以是拍手党和酱油党

    //神马都是浮云

    for (uint32_t i = 0; i < a_ju.size(); ++i)

    {

    a_vecScore.push_back(crime_score);

    a_vecRank.push_back(a_ju[i]);

    a_vecCrime.push_back(a_ju[i]);

    }

     

    //酱油党的地位低下, 但它也会华丽的出场

    for (uint32_t i = 0; i < a_out.size(); ++i)

    {

    a_vecScore.push_back(crime_score);

    a_vecRank.push_back(a_out[i]);

    a_vecCrime.push_back(a_out[i]);

    }

    }

     

    /// 决议的时刻到了,各位都请屏住呼吸,耐心等待

    /// a_pay : 拍手党

    /// a_ju  : 举手党

    /// a_out : 酱油党(原计划参加会议的,结果没有来,是被BS的)

    /// a_vecRank : 利益排名

    /// a_vecScore : 赃款排名

    void ScoreBar::Vote(vecparty& a_pay, vecparty& a_ju, vecparty& a_out,

               RANKVEC& a_vecRank, SCOREVEC& a_vecScore, CRIMEVEC& a_vecCrime)

    {

    //少数党和多数党积分

    int32_t noraml_score, crime_score;

    noraml_score = crime_score = 0;

     

    noraml_score = CScoreCnfg::Instance().GetSpecialScore(CHEAT, false);

    crime_score = CScoreCnfg::Instance().GetSpecialScore(CHEAT, true);

     

    //酱油党积分

    int32_t offline_score = 0;

    offline_score = CScoreCnfg::Instance().GetSpecialScore(OUT, true);

     

    if (a_pay.size() == (m_vecRank.size() - a_out.size()))

    {  //如果都是拍手党,那么大家一起同乐(不包括除名党)

    for (uint32_t i = 0; i < a_pay.size(); ++i)

    {  //大家一起愉快的进行分享利益,达成共识分的钱多

    int32_t score = CScoreCnfg::Instance().GetNormalScore(m_vecRank.size(), i);

     

    a_vecScore.push_back(score);

    a_vecRank.push_back(a_pay[i]);

     

    }

     

    //除名党被排挤,只能悲剧

    for (uint32_t i = 0; i < a_out.size(); ++i)

    {

    a_vecScore.push_back(offline_score);

    a_vecRank.push_back(a_out[i]);

    a_vecCrime.push_back(a_out[i]);

    }

    }

    else

    {   //悲剧啊, 参数和Vote一样

    PK(a_pay, a_ju, a_out, a_vecRank, a_vecScore, a_vecCrime);

     

    //设置为浮云局

    m_pDesk->SetFunYunGame();

    }

     

    //统计

    }

     

    /// 更新积分

    void ScoreBar::UpdateScore(vecparty& a_party, uint32_t& a_scoreindex, SCOREVEC& a_vecScore, bool a_bOut)

    {

    assert(a_vecScore.size() >= (a_party.size()+ a_scoreindex));

     

    //每个人都有份,不要着急

    GamePlayer* pPlayer = NULL;

    for (uint32_t i = 0; i < a_party.size(); ++i)

    {

    pPlayer = m_pDesk->GetPlayer(a_party[i]);

    if (NULL != pPlayer)

    {

    pPlayer->SetGameScore(a_vecScore[i + a_scoreindex]);

     

    if (a_bOut)

    pPlayer->SetGameResult(RESULT_OUT);

    }

    else

    {

    //只能愉快的记录日志

    }

    }

    }

     

    /// 秋后算账

    /// 其实表面来看拍手党是拍手党,但实际不一定,有潜伏的

    void ScoreBar::StatisticParty(vecparty& a_pay, vecparty& a_ju, vecparty& a_out,

                         SCOREVEC& a_vecScore)

    {

    GamePlayer* pPlayer = NULL;

    //如果举手党为空,表示大家都很happy

    if (a_ju.empty())

    {

    if (!a_pay.empty())

    {  //拍手党拍的最响亮的,它赢了,它不是一个人在战斗

    pPlayer = m_pDesk->GetPlayer(a_pay[0]);

    if (NULL != pPlayer)

    pPlayer->SetGameResult(RESULT_WIN);

    }

    else

    { //如果两党都为空,灵异事件,是不是宇宙射线的问题

    //只能愉快的记录日志

    }

    }

     

    uint32_t uScoreIndex = 0;

    //拍手党积分大大的有

    UpdateScore(a_pay, uScoreIndex, a_vecScore);

     

    //举手党的积分一般是负的,不爽

    UpdateScore(a_ju, uScoreIndex, a_vecScore);

     

    //酱油党永远都是悲剧

    UpdateScore(a_out, uScoreIndex, a_vecScore, true);

    }

     

    /// 获得各个利益集团的分赃结果,当然也包括悲剧党

    void ScoreBar:: GetScoreRes(RANKVEC& _vecRank, SCOREVEC& _vecScore, CRIMEVEC& _vecCrime)

    {

    vecparty vecOutParty;  //除名党

    vecparty vecJuParty;  //举手党(俗称利益党、反对党)

    vecparty vecPayParty;  //拍手党(俗称酱油党)

     

    //伟大的时刻到了,请各位代表进行投票

    for (uint32_t i = 0; i < m_vecRank.size(); ++i)

    {

    GamePlayer* pPlayer = m_pDesk->GetPlayer(m_vecRank[i]);

     

    if (NULL == pPlayer || pPlayer->IsOut())

    {   //如果在玩家列表中没有找到,或者是离线状态当成离线

    //除名党不参与议题讨论

    vecOutParty.push_back(m_vecRank[i]);

    }

    else

    {

    RESMAP::iterator it = m_mapRes.find(m_vecRank[i]);

    if (m_mapRes.end() == it || it->second)

    {  //如果没有找到,或者找到了为真,表示同意议题 (我党的拍手党)

    vecPayParty.push_back(m_vecRank[i]);

    }

    else

    {  //其他为不同意议题(我党的举手党)

    vecJuParty.push_back(m_vecRank[i]);

    }

    }

    }

     

    //表决

    Vote(vecPayParty, vecJuParty, vecOutParty, _vecRank, _vecScore, _vecCrime);

     

    //秋后算账

    StatisticParty(vecPayParty, vecJuParty, vecOutParty, _vecScore);

    }


    最新回复(0)