} // Gizli altınları açan fonksiyon #endregion PlayerMechanics #region GlobalFunctions private Cordinant FindCordinant(int buttonNumber) { Cordinant map = new Cordinant { row = Convert.ToInt32(Math.Ceiling(Convert.ToDouble(buttonNumber) / Convert.ToDouble(areaXSize))) }; int rowLimit = map.row * areaXSize; map.column = areaXSize - (rowLimit - buttonNumber); return(map); } // Numarası verilen butonun satır ve stun bilgisini veriyor.
} // En kãrlı hedefi bulmak için kullanılan fonksiyon private int FindTheClosestGold(Cordinant playerLocation) { int closestLocation = 0; int range = 9999990; List <Gold> tempList = goldList.Where(p => p.isSecret == false && p.isTaken == false).ToList(); foreach (var item in tempList) { int tempRange = Math.Abs(playerLocation.row - item.goldLocation.row) + Math.Abs(playerLocation.column - item.goldLocation.column); if (tempRange < range) { range = tempRange; closestLocation = item.buttonNum; } } return(closestLocation); } // Oyuncuya en yakın altını bulan fonksiyon
} // Sonra ki oyuncunun oynama türünü tutan case yapısı private bool IsItClosestAccordingToOthers(int targetButton, int rangeD) { List <Player> tempTargets = playerList.Where(p => p.target == targetButton).ToList(); Cordinant goldLocation = FindCordinant(targetButton); int turnCountD = Convert.ToInt32(Math.Ceiling((decimal)rangeD / (turnMoveMAX - 1))); foreach (var item in tempTargets) { int tempRange = Math.Abs(item.playerLocation.row - goldLocation.row) + Math.Abs(item.playerLocation.column - goldLocation.column); int tempTurnCount = Convert.ToInt32(Math.Ceiling((decimal)tempRange / (turnMoveMAX - 1))); if (turnCountD > tempTurnCount - 1) { return(false); } } return(true); } // D oyuncusuna özel, hedefine rakiplerinden önce ulaşup ulaşamıycağını döndüren fonksiyon
} // D Oyuncusuna özel en kãrlı hedefi bulmayı sağlayan fonksiyon private int FindTheMostProfitableGold(Cordinant playerLocation) { int MostProfitableLocation = 0; int totalProfit = -9999999; List <Gold> tempList = goldList.Where(p => p.isSecret == false && p.isTaken == false).ToList(); foreach (var item in tempList) { int tempRange = Math.Abs(playerLocation.row - item.goldLocation.row) + Math.Abs(playerLocation.column - item.goldLocation.column); int tempTotalproFit = item.value - Convert.ToInt32(Math.Ceiling((double)tempRange / (turnMoveMAX - 1)) * turnCost[playerTurn - 1]); if (tempTotalproFit > totalProfit) { totalProfit = tempTotalproFit; MostProfitableLocation = item.buttonNum; } } return(MostProfitableLocation); } // En kãrlı hedefi bulmak için kullanılan fonksiyon
} // D oyuncusuna özel, hedefine rakiplerinden önce ulaşup ulaşamıycağını döndüren fonksiyon private int FindTheMostProfitableGoldForD(Cordinant playerLocation) { int MostProfitableLocation = 0; int totalProfit = -9999999; List <Gold> tempList = goldList.Where(p => p.isSecret == false && p.isTaken == false).ToList(); foreach (var item in tempList) { int tempRange = Math.Abs(playerLocation.row - item.goldLocation.row) + Math.Abs(playerLocation.column - item.goldLocation.column); int tempTotalproFit = item.value - Convert.ToInt32(Math.Ceiling((double)tempRange / (turnMoveMAX - 1)) * turnCost[playerTurn - 1]); List <Player> tempPlayerControl = playerList.Where(p => p.target == item.buttonNum).ToList(); if (tempPlayerControl.Select(p => p.target).Contains(item.buttonNum)) { foreach (var player in tempPlayerControl) { if (IsItClosestAccordingToOthers(player.target, tempRange)) { if (tempTotalproFit > totalProfit) { totalProfit = tempTotalproFit; MostProfitableLocation = item.buttonNum; } } } } else { if (tempTotalproFit > totalProfit) { totalProfit = tempTotalproFit; MostProfitableLocation = item.buttonNum; } } } return(MostProfitableLocation); } // D Oyuncusuna özel en kãrlı hedefi bulmayı sağlayan fonksiyon
} // Oyuncuya en yakın altını bulan fonksiyon private void OpenTheClosestSecretGold(Cordinant playerLocation) { int closestLocation = 0; int range = 9999990; for (int i = 0; i < 2; i++) { List <Gold> tempList = goldList.Where(p => p.isSecret == true).ToList(); range = 9999990; foreach (var item in tempList) { int tempRange = Math.Abs(playerLocation.row - item.goldLocation.row) + Math.Abs(playerLocation.column - item.goldLocation.column); if (tempRange < range) { range = tempRange; closestLocation = item.buttonNum; } } OpenSecret(closestLocation); } } // Oyuncuya en yakın gizli altınlardan 2 tanesinin gizliliğini kaldıran fonksiyon
} // Gelen stringleri log listesine ekleyen fonksiyon #endregion GlobalFunctions #region GameDynamics private void moveTo() { Player player = playerList.Where(p => p.playerdID == playerTurn).SingleOrDefault(); Cordinant startSpot = player.playerLocation, endSpot = FindCordinant(player.target); Button playerButton = (pnlBoard.Controls["player" + player.playerName] as Button); if (startSpot.row < endSpot.row) { startSpot.row++; playerButton.Location = (pnlBoard.Controls["btn" + (player.buttonNum + areaXSize)] as Button).Location; player.playerLocation = startSpot; player.buttonNum += areaXSize; player.playerButtonName = "btn" + player.buttonNum.ToString(); OpenSecret(player.buttonNum); player.StepCount++; addLog(player.playerName + " Oyuncusu " + player.StepCount + ". adımında " + player.buttonNum + ". kareye ilerledi"); } else if (startSpot.row > endSpot.row) { startSpot.row--; playerButton.Location = (pnlBoard.Controls["btn" + (player.buttonNum - areaXSize)] as Button).Location; player.playerLocation = startSpot; player.buttonNum -= areaXSize; player.playerButtonName = "btn" + player.buttonNum.ToString(); OpenSecret(player.buttonNum); player.StepCount++; addLog(player.playerName + " Oyuncusu " + player.StepCount + ". adımında " + player.buttonNum + ". kareye ilerledi"); } else if (startSpot.column < endSpot.column) { startSpot.column++; playerButton.Location = (pnlBoard.Controls["btn" + (player.buttonNum + 1)] as Button).Location; player.playerLocation = startSpot; player.buttonNum += 1; player.playerButtonName = "btn" + player.buttonNum.ToString(); OpenSecret(player.buttonNum); player.StepCount++; addLog(player.playerName + " Oyuncusu " + player.StepCount + ". adımında " + player.buttonNum + ". kareye ilerledi"); } else if (startSpot.column > endSpot.column) { startSpot.column--; playerButton.Location = (pnlBoard.Controls["btn" + (player.buttonNum - 1)] as Button).Location; player.playerLocation = startSpot; player.buttonNum -= 1; player.playerButtonName = "btn" + player.buttonNum.ToString(); OpenSecret(player.buttonNum); player.StepCount++; addLog(player.playerName + " Oyuncusu " + player.StepCount + ". adımında " + player.buttonNum + ". kareye ilerledi"); } if (player.buttonNum == player.target) { playerTurn++; MoveTimer.Stop(); Gold takenGold = goldList.Where(p => p.buttonNum == player.target).SingleOrDefault(); addLog(player.playerName + " Oyuncusu kare numarası " + player.target + " olan hedefine ulaştı ve " + takenGold.value + " altın kazanadı "); takenGold.isTaken = true; (pnlBoard.Controls[takenGold.button] as Button).BackgroundImage = Properties.Resources.Dirt; List <Player> playerLoseTargetList = playerList.Where(p => p.target == player.target).ToList(); foreach (var item in playerLoseTargetList) { item.target = 0; if (item.playerdID != player.playerdID) { addLog(player.playerName + " Oyuncusu " + item.playerName + " oyuncusunun hedefini çaldı"); } } player.playerGold += takenGold.value; player.collectedGold += takenGold.value; (pictureBox2.Controls["textPlayer" + player.playerName + "Coin"] as Label).Text = player.playerGold.ToString(); } } // Sonraki hamleyi gerçekleştiren fonksiyon