[SOLVED] CS {-

$25

File Name: CS_{-.zip
File Size: 47.1 KB

5/5 - (1 vote)

{-
Module: Player.

A few utility functions to obtain and update player data.
-}
module Player where

import Types
import Constants
import Cell
import Action
import Board

{-
Related to currentCell.
-}

Given a list of players and a cell, returns the player in that cell if any or Nothing
otherwise.
playerInCell :: [Player] -> Cell -> Maybe Player
playerInCell [] _ = Nothing
playerInCell (p:ps) c
| currentCell p == c = Just p
| otherwise = playerInCell ps c

Similar to the one above but returns a boolean.
cellFree :: [Player] -> Cell -> Bool
cellFree [] c = True
cellFree (p:ps) c = (currentCell p /= c) && cellFree ps c

Given a player, returns the cells adjacent to it.
adjacentCells :: Player -> [Cell]
adjacentCells p = cellsAroundInBoard (currentCell p)

{-
Useful checks.
-}

The player has won if it is in one of the winning positions specified when it was created.
hasWon :: Player -> Bool
hasWon p = (currentCell p) `elem` (winningPositions p)

Check if the player has got any walls left.
hasWallsLeft :: Player -> Bool
hasWallsLeft p = remainingWalls p > 0

The player can move if the target cell is free.
canMove :: Player -> [Player] -> Step -> Bool
canMove p ps (cs, ce) =
(currentCell p == cs) && (cellFree ps ce) && (isAdjacent cs ce)

{-
Updating the player.
-}

Adds one to Player variable turn.
nextTurn :: Player -> Player
nextTurn p = p { turn = (turn p) + 1 }

Update current cell.
movePlayer :: Player -> Step -> Player
movePlayer p (_, c) = p { currentCell = c }

Subtract one from the number of walls remaining.
useWall :: Player -> Player
useWall p = p { remainingWalls = (remainingWalls p) 1 }

Reviews

There are no reviews yet.

Only logged in customers who have purchased this product may leave a review.

Shopping Cart
[SOLVED] CS {-
$25