|
|
@ -116,27 +116,33 @@ public struct VerySimpleRules: Rules {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public func isMoveValid(board: Board, move: Move) -> Bool {
|
|
|
|
public func isMoveValid(board: Board, move: Move) -> Bool {
|
|
|
|
// Vérifier si les coordonnées de destination sont dans les limites du plateau
|
|
|
|
// Vérifier si les coordonnées de destination sont valides
|
|
|
|
if move.rowDestination < 0 || move.rowDestination >= board.nbRows ||
|
|
|
|
if move.rowDestination < 0 || move.rowDestination >= board.nbRows ||
|
|
|
|
move.columnDestination < 0 || move.columnDestination >= board.nbColumns {
|
|
|
|
move.columnDestination < 0 || move.columnDestination >= board.nbColumns {
|
|
|
|
return false
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// Obtenir la cellule de destination
|
|
|
|
// Obtenir la cellule de destination
|
|
|
|
guard let destinationCell = board.getCell(atRow: move.rowDestination, column: move.columnDestination) else {
|
|
|
|
let destinationCell = board.grid[move.rowDestination][move.columnDestination]
|
|
|
|
return false // Ne devrait pas se produire si les limites sont correctement vérifiées
|
|
|
|
|
|
|
|
}
|
|
|
|
// Si la case de destination est une case jungle, vérifier les conditions spécifiques
|
|
|
|
|
|
|
|
if destinationCell.cellType == .jungle {
|
|
|
|
// Vérifier si la destination est occupée par une pièce alliée
|
|
|
|
// Vérifier si la case de destination est occupée par une pièce du même joueur
|
|
|
|
if let piece = destinationCell.piece, piece.owner == move.owner {
|
|
|
|
// Modifier cette logique si vous voulez permettre le déplacement sur des cases jungle occupées par des pièces alliées
|
|
|
|
return false
|
|
|
|
if let piece = destinationCell.piece, piece.owner == move.owner {
|
|
|
|
|
|
|
|
return false // Retourner true si le déplacement est autorisé malgré la présence d'une pièce alliée
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
// Pour les autres types de cases, vérifier si la case de destination est occupée par une pièce du même joueur
|
|
|
|
|
|
|
|
if let piece = destinationCell.piece, piece.owner == move.owner {
|
|
|
|
|
|
|
|
return false
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// Ajouter ici d'autres vérifications spécifiques au jeu, comme les obstacles ou les règles spéciales de pièces
|
|
|
|
// Autres vérifications spécifiques à votre jeu (par exemple, les règles de déplacement basées sur le type de pièce)
|
|
|
|
|
|
|
|
|
|
|
|
return true // Le mouvement est valide si toutes les vérifications sont passées
|
|
|
|
return true // Le mouvement est valide si aucune des conditions d'invalidité n'est remplie
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public func isMoveValid(board: Board, row: Int, column: Int, rowArrived: Int, columnArrived: Int) -> Bool {
|
|
|
|
public func isMoveValid(board: Board, row: Int, column: Int, rowArrived: Int, columnArrived: Int) -> Bool {
|
|
|
|
// Création d'un objet Move à partir des coordonnées fournies
|
|
|
|
// Création d'un objet Move à partir des coordonnées fournies
|
|
|
@ -151,30 +157,32 @@ public struct VerySimpleRules: Rules {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public mutating func apply(move: Move, to board: inout Board) throws {
|
|
|
|
public mutating func playedMove(move: Move, to board: inout Board) throws {
|
|
|
|
// Vérifier si le mouvement est valide
|
|
|
|
// Assurez-vous que le mouvement est valide avant de continuer
|
|
|
|
guard isMoveValid(board: board, move: move) else {
|
|
|
|
guard isMoveValid(board: board, move: move) else {
|
|
|
|
throw GameError.invalidMove
|
|
|
|
throw GameError.invalidMove
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// Suppression de la pièce à l'origine
|
|
|
|
// Obtenez la pièce à déplacer
|
|
|
|
let removalResult = board.removePiece(atRow: move.rowOrigin, andColumn: move.columnOrigin)
|
|
|
|
|
|
|
|
guard removalResult == .ok else {
|
|
|
|
|
|
|
|
throw GameError.invalidMove // Ou une erreur plus spécifique si vous en avez défini
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Récupération de la pièce pour la déplacer
|
|
|
|
|
|
|
|
guard let piece = board.getCell(atRow: move.rowOrigin, column: move.columnOrigin)?.piece else {
|
|
|
|
guard let piece = board.getCell(atRow: move.rowOrigin, column: move.columnOrigin)?.piece else {
|
|
|
|
throw GameError.invalidMove // La pièce n'existe pas à l'origine prévue
|
|
|
|
throw GameError.invalidMove // Ou une erreur plus spécifique
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Supprimez la pièce de sa position d'origine
|
|
|
|
|
|
|
|
_ = board.removePiece(atRow: move.rowOrigin, andColumn: move.columnOrigin)
|
|
|
|
|
|
|
|
|
|
|
|
// Insertion de la pièce à la destination
|
|
|
|
// Placez la pièce à sa nouvelle position
|
|
|
|
let insertionResult = board.insert(piece: piece, atRow: move.rowDestination, andColumn: move.columnDestination)
|
|
|
|
let insertionResult = board.insert(piece: piece, atRow: move.rowDestination, andColumn: move.columnDestination)
|
|
|
|
guard insertionResult == .ok else {
|
|
|
|
switch insertionResult {
|
|
|
|
throw GameError.invalidMove // Ou une erreur plus spécifique basée sur `insertionResult`
|
|
|
|
case .ok:
|
|
|
|
|
|
|
|
print("Mouvement appliqué avec succès.")
|
|
|
|
|
|
|
|
case .failed(let reason):
|
|
|
|
|
|
|
|
print("Échec de l'application du mouvement : \(reason).")
|
|
|
|
|
|
|
|
// Vous pouvez convertir ceci en une erreur spécifique si nécessaire
|
|
|
|
|
|
|
|
throw GameError.invalidMove
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// Mettre à jour l'historique des mouvements
|
|
|
|
// Mettre à jour l'historique des mouvements ou d'autres états au besoin
|
|
|
|
historic.append(move)
|
|
|
|
historic.append(move)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -210,10 +218,5 @@ public struct VerySimpleRules: Rules {
|
|
|
|
// Si aucune condition de victoire n'est remplie, la partie n'est pas encore terminée
|
|
|
|
// Si aucune condition de victoire n'est remplie, la partie n'est pas encore terminée
|
|
|
|
return (false, .notFinished)
|
|
|
|
return (false, .notFinished)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public mutating func playedMove(move: Move, oldBoard: Board, newBoard: Board) {
|
|
|
|
|
|
|
|
// Ajouter le mouvement à l'historique
|
|
|
|
|
|
|
|
historic.append(move)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|