Exemple #1
0
    //マスを移動させる
    private void moveMas(int aNum, PlayerStatus aPlayer, Action aCallback)
    {
        int    tCount = 0;
        Action tMove  = () => { };

        tMove = () => {
            int        tNextMasNumber = (aPlayer.mCurrentMasNumber + 1) % mElement.mMasStatus.Length;
            MasStatus  tNextMas       = mElement.mMasStatus[tNextMasNumber];
            MasDisplay tNextDisplay   = mElement.mMasDisplay[tNextMasNumber];
            mElement.mPlayerPieces[aPlayer.mPlayerNumber].moveToWithSpeed(tNextDisplay.position2D, 10, () => {
                aPlayer.mCurrentMasNumber = tNextMasNumber;
                tCount++;
                //通過イベント
                runPassEvent(aPlayer, () => {
                    if (tCount < aNum)
                    {
                        tMove();
                        return;
                    }
                    aCallback();
                });
            });
        };
        tMove();
    }
    public override void selectOccupyLand(PlayerStatus aMyself, GameElementData aElement, Action <LandMasStatus> aAnser)
    {
        aElement.mTable.showOneSelectForm("占領する土地を\n選択してください", "占領しない");
        LandMasStatus tSelected = null;

        //マスタップ監視
        Subject.addObserver(new Observer("playerControllerTouchMas", (aMessage) => {
            if (aMessage.name != "touchMas")
            {
                return;                             //監視外メッセージ
            }
            MasStatus tMas = aElement.mMasStatus[aMessage.parameters.get <int>("number")];
            if (!(tMas is LandMasStatus))
            {
                return;                          //土地のマス以外
            }
            LandMasStatus tLand = (LandMasStatus)tMas;
            if (tLand.mOwnerNumber >= 0)
            {
                return;                         //占領済マス
            }
            if (aMyself.mFood < tLand.mOccupyCost)
            {
                return;                                   //所持食糧を超えるコストのマス
            }
            tSelected = tLand;
            aElement.mTable.hideMessage();
            aElement.mTable.hideOneSelectForm();
            aElement.mTable.question(tSelected.mName + "を占領しますか?\n食糧-" + tLand.mOccupyCost);
        }));
        //はい,いいえ,占領しない選択監視
        Subject.addObserver(new Observer("playerControllerTableQuestion", (aMessage) => {
            if (aMessage.name == "yes")
            {
                Subject.removeObserver("playerControllerTouchMas");
                Subject.removeObserver("playerControllerTableQuestion");
                aElement.mTable.hideQuestionForm();
                aAnser(tSelected);
            }
            else if (aMessage.name == "no")
            {
                aElement.mTable.hideQuestionForm();
                tSelected = null;
                aElement.mTable.showOneSelectForm("占領する土地を\n選択してください", "占領しない");
            }
            else if (aMessage.name == "oneSelect")
            {
                Subject.removeObserver("playerControllerTouchMas");
                Subject.removeObserver("playerControllerTableQuestion");
                aElement.mTable.hideOneSelectForm();
                aAnser(null);
            }
        }));
    }
    //手番で止まったマスのイベントの処理
    private void runEventPhase(Action aCallback)
    {
        MasStatus tMas = mElement.mMasStatus[mTurnPlayer.mCurrentMasNumber];

        switch (tMas)
        {
        case LandMasStatus tLand:
            runLandEventPhase(mTurnPlayer, tLand, aCallback);
            break;

        case AccidentMasStatus tAccident:
            runAccident(mTurnPlayer, tAccident, aCallback);
            break;

        case MasStatus t:
            aCallback();
            break;
        }
    }
    public override void freeLand(PlayerStatus aMyself, GameElementData aElement, Action <LandMasStatus> aAnser)
    {
        aElement.mTable.showMessage("解放する土地を\n選択してください");
        LandMasStatus tSelected = null;

        //マスタップ監視
        Subject.addObserver(new Observer("playerControllerTouchMas", (aMessage) => {
            if (aMessage.name != "touchMas")
            {
                return;                             //監視外メッセージ
            }
            MasStatus tMas = aElement.mMasStatus[aMessage.parameters.get <int>("number")];
            if (!(tMas is LandMasStatus))
            {
                return;                          //土地のマス以外
            }
            LandMasStatus tLand = (LandMasStatus)tMas;
            if (tLand.mOwnerNumber != aMyself.mPlayerNumber)
            {
                return;                                             //自分以外の土地
            }
            tSelected = tLand;
            aElement.mTable.hideMessage();
            aElement.mTable.question(tSelected.mName + "を解放しますか?\n食糧+" + tLand.mFreeCost);
        }));
        //はい,いいえ選択監視
        Subject.addObserver(new Observer("playerControllerTableQuestion", (aMessage) => {
            if (aMessage.name == "yes")
            {
                Subject.removeObserver("playerControllerTouchMas");
                Subject.removeObserver("playerControllerTableQuestion");
                aElement.mTable.hideQuestionForm();
                aAnser(tSelected);
            }
            else if (aMessage.name == "no")
            {
                aElement.mTable.hideQuestionForm();
                tSelected = null;
                aElement.mTable.showMessage("解放する土地を\n選択してください");
            }
        }));
    }
    //マスの通過イベント処理
    private void runPassEvent(PlayerStatus aPlayer, Action aCallback)
    {
        //通過するマス
        MasStatus tMas = mElement.mMasStatus[aPlayer.mCurrentMasNumber];

        switch (tMas)
        {
        case StartMasStatus tStart:
            aPlayer.mLap += 1;
            //mElement.mTable.showMessage("周回ボーナス\n食糧+150");
            getFood(aPlayer, 150, () => {
                mElement.mTable.hideMessage();
                aCallback();
            });
            break;

        default:
            aCallback();
            break;
        }
    }
Exemple #6
0
    private void initStatus()
    {
        //player
        //データ生成
        mElement.mPlayerStatus = new PlayerStatus[mElement.mInitData.mPlayerDataList.Length];
        for (int i = 0; i < mElement.mInitData.mPlayerDataList.Length; i++)
        {
            mElement.mPlayerStatus[i]                   = new PlayerStatus();
            mElement.mPlayerStatus[i].mAnimalName       = mElement.mInitData.mPlayerDataList[i].mAnimalName;
            mElement.mPlayerStatus[i].mPlayerNumber     = i;
            mElement.mPlayerStatus[i].mController       = mElement.mInitData.mPlayerDataList[i].mIsPlayer ? (GameController) new PlayerController() : (GameController) new AiController();
            mElement.mPlayerStatus[i].mRank             = 1;
            mElement.mPlayerStatus[i].mLap              = 0;
            mElement.mPlayerStatus[i].mReverseLap       = 0;
            mElement.mPlayerStatus[i].mFood             = mElement.mStageData.mInitialFood * mElement.mInitData.mInitialFood / 100;
            mElement.mPlayerStatus[i].mTerritory        = 0;
            mElement.mPlayerStatus[i].mCurrentMasNumber = 0;
            mElement.mPlayerStatus[i].mTurn             = i;
        }
        //データ表示
        for (int i = 0; i < mElement.mInitData.mPlayerDataList.Length; i++)
        {
            mElement.mPlayerStatusDisplay[i].initDisplay(mElement.mPlayerStatus[i]);
        }
        //mass
        //データ生成
        List <StageData.Mas> tMasDataList = mElement.mStageData.mMas;

        mElement.mMasStatus = new MasStatus[tMasDataList.Count];
        for (int i = 0; i < tMasDataList.Count; i++)
        {
            StageData.Mas tMasData = tMasDataList[i];
            MasStatus     tMas     = null;
            switch (tMasData.mType)
            {
            case MasStatus.MasType.land:
                StageData.Land tLandData = tMasData as StageData.Land;
                LandMasStatus  tLand     = new LandMasStatus();
                tLand.mName           = tLandData.mName;
                tLand.mValue          = tLandData.mValue;
                tLand.mAttribute1     = tLandData.mAttribute1;
                tLand.mAttribute2     = tLandData.mAttribute2;
                tLand.mOwnerNumber    = -1;
                tLand.mExpansionLevel = 0;
                tMas = tLand;
                break;

            case MasStatus.MasType.start:
                tMas = new StartMasStatus();
                break;

            case MasStatus.MasType.accident:
                AccidentMasStatus tAccident = new AccidentMasStatus();
                tAccident.mAccidentKey = ((StageData.Accident)tMasData).mAccidentType;
                tMas = tAccident;
                break;
            }
            tMas.mType      = tMasData.mType;
            tMas.mMasNumber = i;
            mElement.mMasDisplay[i].mEventListener.mMessage = "touchMas";
            mElement.mMasDisplay[i].mEventListener.mArg     = new Arg(new Dictionary <string, object>()
            {
                { "number", i }
            });
            mElement.mMasStatus[i] = tMas;
        }
        //データ表示
        for (int i = 0; i < mElement.mMasStatus.Length; i++)
        {
            if (mElement.mMasStatus[i].mType == MasStatus.MasType.land)
            {
                ((LandMasDisplay)mElement.mMasDisplay[i]).initDisplay((LandMasStatus)mElement.mMasStatus[i]);
            }
        }
    }