summaryrefslogtreecommitdiff
path: root/app/Snakey
diff options
context:
space:
mode:
authorMikkel Thestrup <mithe24@student.sdu.dk>2025-12-27 19:11:26 +0100
committerMikkel Thestrup <mithe24@student.sdu.dk>2025-12-29 21:44:36 +0100
commitb345e38e36377d9767ef68276f64884ece92c996 (patch)
tree20558e9ff9df698d932ac9b186e287f829d87fb7 /app/Snakey
parent48d5c26eece77ee46be346ef35da88d7e8ead6ec (diff)
downloadscratchy-b345e38e36377d9767ef68276f64884ece92c996.tar.gz
scratchy-b345e38e36377d9767ef68276f64884ece92c996.zip
Style(*): Changed code style to use 2 spcae indent and more.
Diffstat (limited to 'app/Snakey')
-rwxr-xr-xapp/Snakey/TwoSnakes.hs116
1 files changed, 62 insertions, 54 deletions
diff --git a/app/Snakey/TwoSnakes.hs b/app/Snakey/TwoSnakes.hs
index 2f02a99..cb7d291 100755
--- a/app/Snakey/TwoSnakes.hs
+++ b/app/Snakey/TwoSnakes.hs
@@ -4,67 +4,75 @@ import Scratchy.Syntax
-- Helper functions
moveSnake :: SpritePtr -> [SpritePtr] -> Dir -> SProg ()
-moveSnake h tailSeg dir =
- OnTargetReached h (\pos ->
- let newPos = nextCell dir pos in
- InspectCell newPos (\case
- HasSprite ->
- SetBackgroundColor black $
- After 1 (SetBackgroundColor white $ Pure ()) $
- Pure ()
- HasBarrier ->
- SetBackgroundColor red $
- After 1 (SetBackgroundColor white $ Pure ()) $
- Pure ()
- IsFree ->
- SetTarget h newPos $
- moveTail pos tailSeg $
- Pure ()
- )
- ) $ Pure ()
+moveSnake h t d =
+ OnTargetReached h (\pos ->
+ let newPos = nextCell d pos in
+ InspectCell newPos (\case
+ HasSprite ->
+ SetBackgroundColor black $
+ After 1 (SetBackgroundColor white $ Pure ()) $
+ Pure ()
+ HasBarrier ->
+ SetBackgroundColor red $
+ After 1 (SetBackgroundColor white $ Pure ()) $
+ Pure ()
+ IsFree ->
+ SetTarget h newPos $
+ moveTail pos t $
+ Pure ()
+ )
+ ) $
+ Pure ()
-moveTail :: (Int, Int) -> [SpritePtr] -> SProg () -> SProg ()
+moveTail :: Cell -> [SpritePtr] -> SProg () -> SProg ()
moveTail _ [] cont = cont
moveTail prevPos (t:ts) cont =
- GetTarget t (\curPos ->
- SetTarget t prevPos $
- moveTail curPos ts cont
- )
+ GetTarget t (\curPos ->
+ SetTarget t prevPos $
+ moveTail curPos ts cont
+ )
twoSnakes :: SProg ()
twoSnakes =
- -- Green snake
- NewSprite (5, 5) (Color green $ circleSolid (cellSize * 0.6)) $ \greenH ->
- NewSprite (4, 5) (Color green $ rectangleSolid (cellSize * 0.9) (cellSize * 0.9)) $ \greenT1 ->
- NewSprite (3, 5) (Color green $ rectangleSolid (cellSize * 0.9) (cellSize * 0.9)) $ \greenT2 ->
- NewSprite (2, 5) (Color green $ rectangleSolid (cellSize * 0.9) (cellSize * 0.9)) $ \greenT3 ->
- NewSprite (1, 5) (Color green $ rectangleSolid (cellSize * 0.9) (cellSize * 0.9)) $ \greenT4 ->
- NewSprite (0, 5) (Color green $ rectangleSolid (cellSize * 0.9) (cellSize * 0.9)) $ \greenT5 ->
- NewSprite (0, 4) (Color green $ rectangleSolid (cellSize * 0.9) (cellSize * 0.9)) $ \greenT6 ->
- NewSprite (0, 3) (Color green $ rectangleSolid (cellSize * 0.9) (cellSize * 0.9)) $ \greenT7 ->
- let greenTail = [greenT1,greenT2,greenT3,greenT4,greenT5,greenT6,greenT7] in
+ let headRadius = cellSize * 0.6
+ tailSize = cellSize * 0.9
+ in
- -- Blue snake
- NewSprite (15, 15) (Color blue $ circleSolid (cellSize * 0.6)) $ \blueH ->
- NewSprite (16, 15) (Color blue $ rectangleSolid (cellSize * 0.9) (cellSize * 0.9)) $ \blueT1 ->
- NewSprite (17, 15) (Color blue $ rectangleSolid (cellSize * 0.9) (cellSize * 0.9)) $ \blueT2 ->
- NewSprite (18, 15) (Color blue $ rectangleSolid (cellSize * 0.9) (cellSize * 0.9)) $ \blueT3 ->
- NewSprite (19, 15) (Color blue $ rectangleSolid (cellSize * 0.9) (cellSize * 0.9)) $ \blueT4 ->
- NewSprite (19, 16) (Color blue $ rectangleSolid (cellSize * 0.9) (cellSize * 0.9)) $ \blueT5 ->
- NewSprite (19, 17) (Color blue $ rectangleSolid (cellSize * 0.9) (cellSize * 0.9)) $ \blueT6 ->
- NewSprite (19, 18) (Color blue $ rectangleSolid (cellSize * 0.9) (cellSize * 0.9)) $ \blueT7 ->
- let blueTail = [blueT1,blueT2,blueT3,blueT4,blueT5,blueT6,blueT7] in
+ -- Green snake
+ NewSprite (5, 5) (Color green $ circleSolid headRadius) $ \gHead ->
+ NewSprite (4, 5) (Color green $ rectangleSolid tailSize tailSize) $ \gt1 ->
+ NewSprite (3, 5) (Color green $ rectangleSolid tailSize tailSize) $ \gt2 ->
+ NewSprite (2, 5) (Color green $ rectangleSolid tailSize tailSize) $ \gt3 ->
+ NewSprite (1, 5) (Color green $ rectangleSolid tailSize tailSize) $ \gt4 ->
+ NewSprite (0, 5) (Color green $ rectangleSolid tailSize tailSize) $ \gt5 ->
+ NewSprite (0, 4) (Color green $ rectangleSolid tailSize tailSize) $ \gt6 ->
+ NewSprite (0, 3) (Color green $ rectangleSolid tailSize tailSize) $ \gt7 ->
- -- Green snake movement
- OnKeyEvent (Char 'w') (moveSnake greenH greenTail U) $
- OnKeyEvent (Char 's') (moveSnake greenH greenTail D) $
- OnKeyEvent (Char 'a') (moveSnake greenH greenTail L) $
- OnKeyEvent (Char 'd') (moveSnake greenH greenTail R) $
+ -- Blue snake
+ NewSprite (15, 15) (Color blue $ circleSolid headRadius) $ \bHead ->
+ NewSprite (16, 15) (Color blue $ rectangleSolid tailSize tailSize) $ \bt1 ->
+ NewSprite (17, 15) (Color blue $ rectangleSolid tailSize tailSize) $ \bt2 ->
+ NewSprite (18, 15) (Color blue $ rectangleSolid tailSize tailSize) $ \bt3 ->
+ NewSprite (19, 15) (Color blue $ rectangleSolid tailSize tailSize) $ \bt4 ->
+ NewSprite (19, 16) (Color blue $ rectangleSolid tailSize tailSize) $ \bt5 ->
+ NewSprite (19, 17) (Color blue $ rectangleSolid tailSize tailSize) $ \bt6 ->
+ NewSprite (19, 18) (Color blue $ rectangleSolid tailSize tailSize) $ \bt7 ->
- -- Blue snake movement
- OnKeyEvent (Char 'i') (moveSnake blueH blueTail U) $
- OnKeyEvent (Char 'k') (moveSnake blueH blueTail D) $
- OnKeyEvent (Char 'j') (moveSnake blueH blueTail L) $
- OnKeyEvent (Char 'l') (moveSnake blueH blueTail R) $
+ -- List of tail sprites
+ let bTail = [bt1, bt2, bt3, bt4, bt5, bt6, bt7]
+ gTail = [gt1, gt2, gt3, gt4, gt5, gt6, gt7]
+ in
- Pure ()
+ -- Green snake movement
+ OnKeyEvent (Char 'w') (moveSnake gHead gTail U) $
+ OnKeyEvent (Char 's') (moveSnake gHead gTail D) $
+ OnKeyEvent (Char 'a') (moveSnake gHead gTail L) $
+ OnKeyEvent (Char 'd') (moveSnake gHead gTail R) $
+
+ -- Blue snake movement
+ OnKeyEvent (Char 'i') (moveSnake bHead bTail U) $
+ OnKeyEvent (Char 'k') (moveSnake bHead bTail D) $
+ OnKeyEvent (Char 'j') (moveSnake bHead bTail L) $
+ OnKeyEvent (Char 'l') (moveSnake bHead bTail R) $
+
+ Pure ()