[SOLVED] CS {-

$25

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

5/5 - (1 vote)

{-
Module: Action.

In this file we list some basic functions involving the Step, Wall and Action types.
-}
module Action where

import Types
import Cell

Needed to be able to compare actions. The case of wall equality is more complex because there are
different combinations of steps that may represent the same wall.
instance Eq Action where
a1 == a2 = case (a1, a2) of
(Move s, Move s) -> s == s
(Place ((c1, c2), (c3, c4)), Place ((c1, c2), (c3, c4))) ->
(c1 == c1 && c2 == c2 && c3 == c3 && c4 == c4) ||
(c1 == c1 && c2 == c2 && c3 == c4 && c4 == c3) ||
(c1 == c2 && c2 == c1 && c3 == c3 && c4 == c4) ||
(c1 == c2 && c2 == c1 && c3 == c4 && c4 == c3)
_ -> False

{-
Step util.
-}

Convert step to graph edge.
stepToEdge :: Step -> (Index, Index)
stepToEdge (c, c) = (cellToIndex c, cellToIndex c)

Step to the left.
stepLeft :: Cell -> Step
stepLeft c = (c, cellLeft c)

Step to the right.
stepRight :: Cell -> Step
stepRight c = (c, cellRight c)

Step to the top.
stepTop :: Cell -> Step
stepTop c = (c, cellTop c)

Step to the bottom.
stepBottom :: Cell -> Step
stepBottom c = (c, cellBottom c)

All steps.
allStepsFrom :: Cell -> [Step]
allStepsFrom c = [stepLeft c, stepRight c, stepTop c, stepBottom c]

Make steps.
makeSteps :: Cell -> [Cell] -> [Step]
makeSteps c cs = [(c, c) | c<-cs]{-Wall util. Picture of walls surrounding cell c: * <- right** * * * * <- top* c ** * * * * <- bottom* * <- left-}– Vertical wall on the left.wallLeft :: Cell -> Wall
wallLeft c = (stepLeft c, stepLeft (cellBottom c))

Vertical wall on the right (used for commands ending in v).
wallRight :: Cell -> Wall
wallRight c = (stepRight c, stepRight (cellTop c))

Horizontal wall on the top (used for commands ending in h).
wallTop :: Cell -> Wall
wallTop c = (stepTop c, stepTop (cellRight c))

Horizontal wall on the bottom.
wallBottom :: Cell -> Wall
wallBottom c = (stepBottom c, stepBottom (cellLeft c))

All walls around a cell.
allWallsAround :: Cell -> [Wall]
allWallsAround c = [wallLeft c, wallRight c, wallTop c, wallBottom c]

Reviews

There are no reviews yet.

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

Shopping Cart
[SOLVED] CS {-
$25