千炮捕鱼源代整1【源码】

[复制链接]

该用户从未签到

2380

主题

2433

帖子

9139

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
9139
QQ
跳转到指定楼层
楼主
发表于 2017-6-13 11:18:33 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

想要查看内容赶紧注册登陆吧!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
#include "Stdafx.h"
#include "AndroidUserItemSink.h"

//////////////////////////////////////////////////////////////////////////

//辅助时间
#define TIME_LESS                    2                                    //最少时间
#define TIME_LESS_CHANGE_BULLET        60                                    //交换子弹的最少时间

//游戏时间
#define TIME_BUY_BULLET                3                                    //买子弹时间
#define TIME_FIRE                    1                                    //发射子弹时间
#define TIME_CHANGE_BULLET            120                                    //交换子弹时间

////游戏时间
#define IDI_BUY_BULLET                1                                    //买子弹定时器
#define IDI_FIRE                    2                                    //发射子弹定时器
#define IDI_CHANGE_BULLET            3                                    //交换子弹定时器
#define IDI_CHANGE_BULLET_ONCE        4                                    //交换子弹定时器

//////////////////////////////////////////////////////////////////////////
#include
#include
#include
void Log11(const std::string str,...)
{
    SYSTEMTIME sys;
    GetLocalTime( &sys );
   
    std:fstream ofs("fishsever.txt", std::ios::app);
    //ofs << str << " time:" << sys.wHour << ","<< sys.wMinute << "," << sys.wSecond <<std::endl;
}
//////////////////////////////////////////////////////////////////////////

//构造函数
CAndroidUserItemSink::CAndroidUserItemSink()
{
    m_lLeaveScore=5000;
    //接口变量
    m_pIAndroidUserItem=NULL;

    srand((UINT)time(NULL));

    //m_bType = rand()%3;

    m_nFishGold = 0;
    m_cbScene = 0;
    m_lCellScore = 0;
    m_CannonType = MAX_CANNON_STYLE;//0;
    m_SwapCannonType = 0;
    m_fLastFireRote = 0.0f;
   
    for (int i=0; i<GAME_PLAYER; i++)
    {
        m_RoleObjects.wID = INVALID_CHAIR;
        m_RoleObjects.wFireCount= 0;
        m_RoleObjects.wCannonType = 0;
    }

    //for (int i=0; i<MAX_FISH_OBJECT; i++)
    //{
    //    m_FishObjects.wID = INVALID_WORD;
    //    m_FishObjects.wRoundID= 0;
    //    m_FishObjects.wType = 0;
    //    m_FishObjects.dwTime = 0;
    //}

    return;
}

//析构函数
CAndroidUserItemSink::~CAndroidUserItemSink()
{
}

void CAndroidUserItemSink::SetLeaveScore(LONG lLeaveScore)
{
    m_lLeaveScore = lLeaveScore;
}

//接口查询
void *  CAndroidUserItemSink:ueryInterface(REFGUID Guid, DWORD dwQueryVer)
{
    QUERYINTERFACE(IAndroidUserItemSink,Guid,dwQueryVer);
    QUERYINTERFACE_IUNKNOWNEX(IAndroidUserItemSink,Guid,dwQueryVer);
    return NULL;
}

//初始接口
bool  CAndroidUserItemSink::Initialization(IUnknownEx * pIUnknownEx)
{
    //查询接口
    //m_pIAndroidUserItem=GET_OBJECTPTR_INTERFACE(pIUnknownEx,IAndroidUserItem);
    m_pIAndroidUserItem=QUERY_OBJECT_PTR_INTERFACE(pIUnknownEx,IAndroidUserItem);
    if (m_pIAndroidUserItem==NULL) return false;

    srand((UINT)time(NULL));

    return true;
}

//重置接口
bool  CAndroidUserItemSink::RepositionSink()
{
    m_nFishGold = 0;
    m_fLastFireRote = 0.0f;

    return true;
}

//时间消息
bool  CAndroidUserItemSink::OnEventTimer(UINT nTimerID)
{
    switch (nTimerID)
    {
    case IDI_BUY_BULLET:            //买子弹
        {
            BuyBullet();

            m_pIAndroidUserItem->KillGameTimer(IDI_BUY_BULLET);

            return true;
        }
    case IDI_CHANGE_BULLET:            //切换子弹
        {
            ChangeCannon();

            return true;
        }
    case IDI_CHANGE_BULLET_ONCE:    //切换子弹(一次)
        {
            ChangeCannonOnce();

            return true;
        }
    case IDI_FIRE:                    //发射子弹
        {
            Fire();

            return true;
        }
    }

    return true;
}

//游戏消息
bool  CAndroidUserItemSink::OnEventGameMessage(WORD wSubCmdID, void * pData, WORD wDataSize)
{
    switch(wSubCmdID)
    {
    case SUB_S_BUY_BULLET_SUCCESS:                    //子弹购买成功消息
        {
            ASSERT(wDataSize == sizeof(CMD_S_Buy_Bullet_Success));
            if (wDataSize!=sizeof(CMD_S_Buy_Bullet_Success)) return false;

            CMD_S_Buy_Bullet_Success * pBuyBulletSuccess = (CMD_S_Buy_Bullet_Success *)pData;
            
            if (pBuyBulletSuccess->wChairID == m_pIAndroidUserItem->GetChairID())
            {
                m_nFishGold += pBuyBulletSuccess->dwCount;

                if(m_nFishGold>m_lLeaveScore)
                {
                    m_pIAndroidUserItem->SendSocketData(SUB_C_CHANGE_DESK);
                }

                /// 切换子弹
                //if (rand()%100 < 99)
                //    m_pIAndroidUserItem->SetGameTimer(IDI_CHANGE_BULLET, rand()%TIME_CHANGE_BULLET+TIME_LESS_CHANGE_BULLET);
                //else
                //    ChangeCannon();

                ChangeMaxCannon();

                m_pIAndroidUserItem->SetGameTimer(IDI_FIRE, rand()%TIME_FIRE+TIME_LESS);
            }
            
            return true;
        }
    case SUB_S_BUY_BULLET_FAILED:                    //子弹购买失败消息
        {
            //ASSERT(wDataSize == sizeof(CMD_S_Buy_Bullet_Failed));
            //if (wDataSize!=sizeof(CMD_S_Buy_Bullet_Failed)) return false;

            //CMD_S_Buy_Bullet_Failed * pBuyBulletFailed = (CMD_S_Buy_Bullet_Failed *)pData;

            return true;
        }
    case SUB_S_CHANGE_CANNON:                        //子弹切换消息
        {
            ASSERT(wDataSize==sizeof(CMD_S_Change_Cannon));
            if (wDataSize!=sizeof(CMD_S_Change_Cannon)) return false;

            CMD_S_Change_Cannon *pChangeCannon = (CMD_S_Change_Cannon *)pData;

            ASSERT(pChangeCannon->wStyle<MAX_CANNON_STYLE);

            if (pChangeCannon->wChairID==m_pIAndroidUserItem->GetChairID())
            {
                m_CannonType = pChangeCannon->wStyle;
            }

            return true;
        }
    case SUB_S_FIRE_SUCCESS:                        //子弹发射成功
        {            
            ASSERT(wDataSize==sizeof(CMD_S_Fire_Success));
            if (wDataSize!=sizeof(CMD_S_Fire_Success)) return false;

            CMD_S_Fire_Success *pFireSuccess = (CMD_S_Fire_Success *)pData;

            if (pFireSuccess->wChairID == m_pIAndroidUserItem->GetChairID())
            {
                m_nFishGold -= (m_CannonType + 1) * m_lCellScore;

                char str[100];
                sprintf(str,"andriod fire gold = %d, fishgold = %d",(m_CannonType + 1) * m_lCellScore,m_nFishGold);
                Log11(str);
            }
            

            return true;
        }
    case SUB_S_FIRE_FAILED:
        {
            /*ASSERT(wDataSize==sizeof(CMD_S_Fire_Failed));
            if (wDataSize!=sizeof(CMD_S_Fire_Failed)) return false;

            CMD_S_Fire_Failed *pFireFailed = (CMD_S_Fire_Failed *)pData;
            if (pFireFailed->wChairID == m_pIAndroidUserItem->GetChairID())
            {
                BuyBullet();
            }*/

            return true;
        }
    case SUB_S_CAST_NET_SUCCESS:
        {
            char str[500];

            CMD_S_Cast_Net_Success *pCastNetSuccess = (CMD_S_Cast_Net_Success *)pData;

            ASSERT(wDataSize==sizeof(CMD_S_Cast_Net_Success)-(MAX_FISH_IN_NET-pCastNetSuccess->cbCount)*sizeof(Fish_Net_Object));
            if (wDataSize!=sizeof(CMD_S_Cast_Net_Success)-(MAX_FISH_IN_NET-pCastNetSuccess->cbCount)*sizeof(Fish_Net_Object)) return false;
            
            if (pCastNetSuccess->wChairID == m_pIAndroidUserItem->GetChairID())
            {
                int nCoinCount = 0;

                sprintf(str,"andriod get fish begin ---------------------------------");
                Log11(str);

                for (BYTE i=0; icbCount; i++)
                {
                    int tmpgold = m_GameLogic.FishGoldByStyle(pCastNetSuccess->FishNetObjects.wType,pCastNetSuccess->FishNetObjects.wRoundID);
                    nCoinCount += tmpgold;

                    sprintf(str,"andriod get fish type = %d , gold = %d",pCastNetSuccess->FishNetObjects.wType,tmpgold);
                    Log11(str);

                }

                if (nCoinCount>0)
                    m_nFishGold += nCoinCount;

                if(m_nFishGold>m_lLeaveScore)
                {
                    m_pIAndroidUserItem->SendSocketData(SUB_C_CHANGE_DESK);
                }

                sprintf(str,"andriod fish gold = %d ,chiraid = %d###########################",m_nFishGold,pCastNetSuccess->wChairID);
                Log11(str);
            }

            return true;
        }
    }

    return true;
}

//游戏消息
bool  CAndroidUserItemSink::OnEventFrameMessage(WORD wSubCmdID, void * pData, WORD wDataSize)
{
    return true;
}

//场景消息
bool  CAndroidUserItemSink::OnEventSceneMessage(BYTE cbGameStatus, bool bLookonOther, VOID * pData, WORD wDataSize)
{
    switch(cbGameStatus)
    {
    case GAME_STATUS_FREE:
        {
            ASSERT(wDataSize==sizeof(CMD_S_StatusFree));
            if (wDataSize!=sizeof(CMD_S_StatusFree)) return false;
            CMD_S_StatusFree * pStatusFree = (CMD_S_StatusFree *)pData;

            m_cbScene = pStatusFree->cbScene;
            m_lCellScore = 1;//pStatusFree->lCellScore;
            
            CopyMemory(m_RoleObjects, pStatusFree->RoleObjects, GAME_PLAYER*sizeof(Role_Net_Object));

            IServerUserItem * pIServerUserItem=m_pIAndroidUserItem->GetMeUserItem();

            if (pIServerUserItem == NULL) return true;

            //玩家设置
            //if (pIServerUserItem->GetUserStatus() == US_SIT)
            //{
                UINT nElapse=rand()%TIME_BUY_BULLET+TIME_LESS*3;
                m_pIAndroidUserItem->SetGameTimer(IDI_BUY_BULLET,nElapse);
            //}
            return true;
        }
    case GAME_STATUS_PLAY:
        {
            //ASSERT(wDataSize==sizeof(CMD_S_StatusPlay));
            //if (wDataSize!=sizeof(CMD_S_StatusPlay)) return false;

            //CMD_S_StatusPlay *pStatusPlay = (CMD_S_StatusPlay *)pData;
            //CMD_S_StatusFree *pStatusFree = &pStatusPlay->Free;

            //m_cbScene = pStatusFree->cbScene;
            //m_lCellScore = 1;//pStatusFree->lCellScore;
            //
   //         CopyMemory(m_RoleObjects, pStatusFree->RoleObjects, GAME_PLAYER*sizeof(Role_Net_Object));

            //IServerUserItem * pIServerUserItem=m_pIAndroidUserItem->GetMeUserItem();

            //if (pIServerUserItem == NULL) return true;

            ////玩家设置
            ////if (pIServerUserItem->GetUserStatus() == US_SIT)
            ////{
            //    UINT nElapse=rand()%TIME_BUY_BULLET+TIME_LESS*3;
            //    m_pIAndroidUserItem->SetGameTimer(IDI_BUY_BULLET,nElapse);
            ////}

            return true;
        }
    }
    return true;
}

//用户进入
void  CAndroidUserItemSink::OnEventUserEnter(IAndroidUserItem * pIAndroidUserItem, bool bLookonUser)
{

}

//用户离开
void  CAndroidUserItemSink::OnEventUserLeave(IAndroidUserItem * pIAndroidUserItem, bool bLookonUser)
{
}

//用户积分
void  CAndroidUserItemSink::OnEventUserScore(IAndroidUserItem * pIAndroidUserItem, bool bLookonUser)
{
}

//用户状态
void  CAndroidUserItemSink::OnEventUserStatus(IAndroidUserItem * pIAndroidUserItem, bool bLookonUser)
{
}

////用户段位
//void  CAndroidUserItemSink::OnEventUserSegment(IAndroidUserItem * pIAndroidUserItem, bool bLookonUser)
//{
//}

/// 购买子弹
void CAndroidUserItemSink::BuyBullet()
{
    ASSERT(m_nFishGold<=0);
    if (m_nFishGold > 0) return;

    int nBulletCount = 0;

    if (m_nFishGold <= 0)
        nBulletCount = (rand()%BULLET_MAX_COUNT+1)*100;
    else
        return;

    CMD_C_Buy_Bullet BuyBullet;

    BuyBullet.dwCount = nBulletCount;

    //发送数据
    m_pIAndroidUserItem->SendSocketData(SUB_C_BUY_BULLET,&BuyBullet,sizeof(BuyBullet));
}

/// 切换子弹
void CAndroidUserItemSink::ChangeCannon()
{
    //enum enCannonType
    //{
    //    CannonType_0 = 0,
    //    CannonType_1,
    //    CannonType_2,
    //    CannonType_3,
    //    CannonType_4,
    //    CannonType_5,
    //    CannonType_6,
    //    CannonTypeCount
    //};

    //切换子弹
    m_SwapCannonType = /*rand()%*/MAX_CANNON_STYLE;

    if (m_CannonType != m_SwapCannonType)
    {
        ChangeCannonOnce();
    }
}

/// 切换子弹
void CAndroidUserItemSink::ChangeCannonOnce()
{
    if (m_CannonType != m_SwapCannonType)
    {
        m_CannonType = (m_CannonType+1)%MAX_CANNON_STYLE;

        ASSERT(m_CannonType<MAX_CANNON_STYLE);

        //切换子弹
        CMD_C_Change_Cannon ChangeCannon;
        ChangeCannon.wStyle = m_CannonType;

        //发送数据
        m_pIAndroidUserItem->SendSocketData(SUB_C_CHANGE_CANNON,&ChangeCannon,sizeof(ChangeCannon));

        if (m_CannonType != m_SwapCannonType)
        {
            m_pIAndroidUserItem->SetGameTimer(IDI_CHANGE_BULLET_ONCE, 1);
        }
    }
}

//////////////////// [2012/3/13 14:31 XF_Modify]////////////////////////////////////////////////////////
// 切换最大的炮
void CAndroidUserItemSink::ChangeMaxCannon()
{
    m_CannonType = MAX_CANNON_STYLE - 1 ;

    //切换子弹
    CMD_C_Change_Cannon ChangeCannon;
    ChangeCannon.wStyle = m_CannonType;

    //发送数据
    m_pIAndroidUserItem->SendSocketData(SUB_C_CHANGE_CANNON,&ChangeCannon,sizeof(ChangeCannon));
}

/// 发射子弹
void CAndroidUserItemSink::Fire()
{
    if (m_nFishGold > 0)
    {        
        CMD_C_Fire Fire;
        
        const float fFireRote[] = {-1.36f, -1.00f, -0.72f, -0.52f, -0.25f, -0.11f, 0.00f, 0.30f, 0.60f, 0.90f, 1.20f, 1.37f/*1.57f*/};
        int index = 0;

        for (int i = 0; i < CountArray(fFireRote); ++i)
        {
            if (m_fLastFireRote == fFireRote)
            {
                index = i;
                break;
            }
        }

        /// 取邻近范围内的五个值 -2,-1,0,1,2
        int n = rand()%5-2;

        if (index + n < 0)
        {
            index = rand()%5;
        }
        else if (index + n >= CountArray(fFireRote))
        {
            index = CountArray(fFireRote) - rand()%5 - 1;
        }
        else
        {
            index = index + n;
        }

        Fire.fRote = fFireRote[index];

        WORD wChairID = m_pIAndroidUserItem->GetChairID();

        if (wChairID == 0 || wChairID == 1)
            Fire.fRote += 180;

        m_fLastFireRote = Fire.fRote;

        m_pIAndroidUserItem->SendSocketData(SUB_C_FIRE, &Fire, sizeof(CMD_C_Fire));

        m_pIAndroidUserItem->SetGameTimer(IDI_FIRE, rand() % TIME_FIRE + TIME_LESS);
    }
    else
    {
        /// 购买子弹
        BuyBullet();
    }
}
//////////////////////////////////////////////////////////////////////////

千炮捕鱼源代整1【源码】.txt

137 Bytes, 下载次数: 0

售价: 2 代码豆  [记录]  [购买]

分享到:  QQ好友和群QQ好友和群
收藏收藏
回复

使用道具 举报

快速回复高级模式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表