コード例 #1
0
    public MapCoor Add(ENUM_Dir emDir, int iInterval)
    {
        MapCoor Result = new MapCoor(X, Y);

        switch (emDir)
        {
        case ENUM_Dir.Up: Result.Y += iInterval; break;

        case ENUM_Dir.Left: Result.X -= iInterval; break;

        case ENUM_Dir.Right: Result.X += iInterval; break;

        case ENUM_Dir.Down: Result.Y -= iInterval; break;

        default: break;
        }        //switch

        return(Result);
    }
コード例 #2
0
ファイル: MapCreater.cs プロジェクト: 22Turn/Project_FM_Steam
    // 建立地圖道路
    private void CreateRoad()
    {
        int              iRoadSize    = GameDefine.iRoadSizeBase + (int)(DataPlayer.pthis.iStage * GameDefine.fUpgradeRoad); // 取得地圖道路長度
        ENUM_Dir         emGrowDir    = ENUM_Dir.Null;
        int              iGrowLength  = 0;
        CDice <ENUM_Dir> DirDiceUp    = new CDice <ENUM_Dir>();
        CDice <ENUM_Dir> DirDiceLeft  = new CDice <ENUM_Dir>();
        CDice <ENUM_Dir> DirDiceRight = new CDice <ENUM_Dir>();

        DirDiceUp.Set(ENUM_Dir.Up, 2);
        DirDiceUp.Set(ENUM_Dir.Left, 3);
        DirDiceUp.Set(ENUM_Dir.Right, 3);
        DirDiceLeft.Set(ENUM_Dir.Up, 3);
        DirDiceLeft.Set(ENUM_Dir.Left, 2);
        DirDiceRight.Set(ENUM_Dir.Up, 3);
        DirDiceRight.Set(ENUM_Dir.Right, 2);

        while (iRoadSize > 0)
        {
            // 決定成長方向與長度
            if (emGrowDir == ENUM_Dir.Null)
            {
                emGrowDir   = ENUM_Dir.Up;
                iGrowLength = GameDefine.iPathStart;
            }
            else
            {
                if (emGrowDir == ENUM_Dir.Up)
                {
                    emGrowDir = DirDiceUp.Roll();
                }
                else if (emGrowDir == ENUM_Dir.Left)
                {
                    emGrowDir = DirDiceLeft.Roll();
                }
                else if (emGrowDir == ENUM_Dir.Right)
                {
                    emGrowDir = DirDiceRight.Roll();
                }
                else
                {
                    emGrowDir = ENUM_Dir.Up;
                }

                iGrowLength = Random.Range(GameDefine.iPathMin, GameDefine.iPathMax);
            }            //if

            // 新增道路
            while (iGrowLength > 0 && iRoadSize > 0)
            {
                MapCoor Pos = null;

                if (DataMap.pthis.DataRoad.Count <= 0)
                {
                    Pos = new MapCoor(Random.Range(GameDefine.iMapRoadXMin, GameDefine.iMapRoadXMax), GameDefine.iMapBorder);
                }
                else
                {
                    Pos = DataMap.pthis.DataRoad[DataMap.pthis.DataRoad.Count - 1].Add(emGrowDir, 1);
                }

                if (Pos.X >= GameDefine.iMapRoadXMin && Pos.X <= GameDefine.iMapRoadXMax && Pos.Y >= GameDefine.iMapBorder)
                {
                    DataMap.pthis.DataRoad.Add(Pos);
                    --iGrowLength;                   // 減少成長次數
                    --iRoadSize;                     // 減少還需要產生的地圖道路長度
                }
                else
                {
                    iGrowLength = 0;
                }
            }    //while
        }        //while
    }