假设我写下面的代码:
一个游戏模块
module Game where
import Player
import Card
data Game = Game {p1 :: Player,
p2 :: Player,
isP1sTurn :: Bool
turnsLeft :: Int
}
Run Code Online (Sandbox Code Playgroud)
一个播放器模块
module Player where
import Card
data Player = Player {score :: Int,
hand :: [Card],
deck :: [Card]
}
Run Code Online (Sandbox Code Playgroud)
和卡模块
module Card where
data Card = Card {name :: String, scoreValue :: Int}
Run Code Online (Sandbox Code Playgroud)
然后我写了一些代码来实现逻辑,玩家轮流从他们的手中抽取牌和牌来为他们的分数增加奖金,直到游戏结束.
但是,我意识到完成这段代码后,我写的游戏模块很无聊!
我想重构纸牌游戏,所以当你玩牌时,而不是仅仅添加一个分数,而是卡片任意改变游戏.
所以,我将Card模块更改为以下内容
module Card where
import Game
data Card = Card {name :: String,
onPlayFunction :: …Run Code Online (Sandbox Code Playgroud)