愉快的写代码

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

 

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

 

 

/// 党派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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值