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); }
// 建立地圖道路 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 }