public Moves(Player _player, Nest _prevtnest, Prison _prison, Checker checker) { this.player = _player; this.prison = _prison; this.prevnest = _prevtnest; this.checker = checker; }
public Prison addPrison() { int prisonwidth = 50, prisonheight = 300; int prisonX = this.width / 2 - prisonwidth / 2 + this.leftOffset + (int)this.boardLocation.X - 15; int prisonY = this.height / 2 - prisonheight + this.topOffset_upper + (int)this.boardLocation.Y; prison = new Prison(prisonwidth, prisonheight, prisonX, prisonY); return(prison); }
public Prison addPrison() { int prisonwidth = 50, prisonheight = 300; int prisonX = this.width / 2 - prisonwidth / 2 + this.leftOffset + (int)this.boardLocation.X -15; int prisonY = this.height / 2 - prisonheight + this.topOffset_upper + (int)this.boardLocation.Y; prison = new Prison(prisonwidth, prisonheight, prisonX, prisonY); return prison; }
// PÕHILINE MEETOD, MIS JUHIB NUPPUDE LIIKUMIST private void moveCheckers(Player player, int steps, int mouse_x, int mouse_y, List <Nest> nests, Dice dice) { Prison prison = this.gameBoard.prison; if (steps == 0 && dice.rolledValues.Count > 0) { steps = dice.rolledValues.Max(); } //kui nupp on vangis Boolean nuppOnVangis = false; List <Checker> playerCheckersInPrison = new List <Checker>(15); foreach (Checker ch in player.checkers) { foreach (Checker chInPrison in prison.checkers) { if (ch == chInPrison) { playerCheckersInPrison.Add(ch); nuppOnVangis = true; } } } //FIND CLICKED NEST OR PRISON Nest clickedNest = null; List <Nest> availableNests = findTargetNestsInOpponentsHome(player, steps); if (nuppOnVangis && availableNests.Count == 0) { //mängija jääb vahele player.currentMoves = 2; dice.isDouble = false; return; } if (!nuppOnVangis) { foreach (Nest n in nests) { int max_y = n.height + n.y_location; if (mouse_x > n.leftCorner && mouse_x < n.rightCorner && mouse_y > n.y_location && mouse_y < max_y) { clickedNest = n; break; } } } else { if (mouse_x > prison.prison_x && mouse_x < prison.rightEdge && mouse_y > prison.prison_y && mouse_y < prison.bottomEdge) { if (nuppOnVangis && availableNests.Count == 0) { //mängija jääb vahele player.currentMoves = 2; dice.isDouble = false; return; } if (playerCheckersInPrison.Count > 0) { Checker checkerInPrison = playerCheckersInPrison[0]; Nest nestToMoveTo = null; foreach (Nest n in availableNests) { if (player.isOpponent && n.opponentNestID == steps) { nestToMoveTo = n; } else if (!player.isOpponent && n.paleyerNestID == steps) { nestToMoveTo = n; //moveCheckerIntoFreeNest(null, checkerInPrison, player, n); } } if (nestToMoveTo != null && checkerInPrison != null) { if (dice.rolledValues.Count > 0) { if (targetNestContainsNOopponentsChecker(nestToMoveTo, player)) { moveCheckerIntoFreeNest(clickedNest, checkerInPrison, player, nestToMoveTo); prison.checkers.Remove(checkerInPrison); } else if (targetNestContainsONEopponentsChecker(nestToMoveTo, player)) { Checker opponentsOneChecker = nestToMoveTo.Checkers[0]; nestToMoveTo.Checkers.Remove(opponentsOneChecker); moveCheckerIntoFreeNest(null, checkerInPrison, player, nestToMoveTo); prison.checkers.Remove(checkerInPrison); prison.addChecker(opponentsOneChecker, nestToMoveTo); } playerCheckersInPrison.Remove(checkerInPrison); ///////////////////// //kasutatud täringuväärtus nullida: if (player.checkers.Contains(checkerInPrison)) { for (int i = 0; i < dice.rolledValues.Count; i++) { if (dice.rolledValues[i] == steps) { dice.rolledValues[i] = 0; break; } } //lisa playerile käikudelogisse player.currentMoves++; Moves playerMove = new Moves(player, null, nestToMoveTo, checkerInPrison); player.moves.Add(playerMove); } } } } } } //FIND NESTs, WHERE PLAYER HAS checkers currently List <Nest> palyerHasCheckersInNests = findPlayerCurrentNests(gameBoard, player); //find all available target nests List <Nest> targetNests = findTargetNests(player, steps, palyerHasCheckersInNests); //kas on vabu Nest-e, kuhu käia //is there any available target Nests for the player if (targetNests.Count == 0) { //mängija jääb vahele player.currentMoves = 2; dice.isDouble = false; return; } //MANAGE OTHER STATES // player has some free Nests where to go and defenitely goes somewhere if (clickedNest != null) { int countCheckersInCurrentNest = clickedNest.Checkers.Count; //kui klikitud nest ei olnud tühi if (countCheckersInCurrentNest > 0) { if (dice.rolledValues.Count > 0) { Checker remCh = clickedNest.Checkers[countCheckersInCurrentNest - 1]; Nest nextNest = findTargetNest(clickedNest, player, steps); /**/ //kui Player-i kõik nupud on tema kodus if (player.allCheckersAreInHomeArea() == true) { int maxNestPositionForChecker = 0; List <Nest> filledHomeNests = new List <Nest>(6); Nest maxNest = null; Checker movable = null; foreach (Nest n in gameBoard.Nests) { foreach (Checker ch_in_homeNest in player.checkersInHome) { if (n.Checkers.Contains(ch_in_homeNest)) { filledHomeNests.Add(n); } } } foreach (Nest n in filledHomeNests) { if (!player.isOpponent && n.paleyerNestID > maxNestPositionForChecker) { maxNestPositionForChecker = n.paleyerNestID; maxNest = n; } else if (player.isOpponent && n.opponentNestID > maxNestPositionForChecker) { maxNestPositionForChecker = n.opponentNestID; maxNest = n; } } int new_stepMax = dice.rolledValues.Max(); if (maxNestPositionForChecker <= new_stepMax) { movable = maxNest.Checkers[0]; player.jar.addChecker(maxNest.Checkers[0]); for (int i = 0; i < dice.rolledValues.Count; i++) { if (dice.rolledValues[i] == new_stepMax) { dice.rolledValues[i] = 0; break; } } //lisa playerile käikudelogisse player.currentMoves++; if (movable != null) { Moves playerMove = new Moves(player, clickedNest, player.jar, movable); player.moves.Add(playerMove); } return; } } /* */ //kui target pole null!! if (nextNest != null) { if (targetNestContainsNOopponentsChecker(nextNest, player)) { moveCheckerIntoFreeNest(clickedNest, remCh, player, nextNest); } else if (targetNestContainsONEopponentsChecker(nextNest, player)) { Checker opponentsOneChecker = nextNest.Checkers[0]; nextNest.Checkers.Remove(opponentsOneChecker); moveCheckerIntoFreeNest(clickedNest, remCh, player, nextNest); gameBoard.prison.addChecker(opponentsOneChecker, nextNest); } ///////////////////// //kasutatud täringuväärtus nullida: if (player.checkers.Contains(remCh) && targetNests.Contains(nextNest)) { for (int i = 0; i < dice.rolledValues.Count; i++) { if (dice.rolledValues[i] == steps) { dice.rolledValues[i] = 0; break; } } //lisa playerile käikudelogisse player.currentMoves++; Moves playerMove = new Moves(player, clickedNest, nextNest, remCh); player.moves.Add(playerMove); } } } } } }