52700.fb2 Учебник по Haskell - читать онлайн бесплатно полную версию книги . Страница 334

Учебник по Haskell - читать онлайн бесплатно полную версию книги . Страница 334

, scoresBonus :: Int

}

Определяемся с типами | 301

Как будет происходить создание новых шаров? Если плохих шаров будет слишком много, то играть будет

не интересно, игрок слишком быстро проиграет. Если хороших шаров будет слишком много, то игроку также

быстро надоест. Будет очень легко. Нам необходимо поддерживать определённый баланс шаров. Создание

шаров будет происходить случайным образом через равные промежутки времени, но создание нового шара

будет зависеть от пропорции шаров на доске в данный момент. Если у нас слишком много плохих шаров,

то скорее всего мы создадим хороший шар и наоборот. Если общее число шаров велико, то мы не будем

усложнять игроку жизнь новыми шарами, дождёмся пока какие-нибудь шары не покинут пределы поля или

не будут уничтожены игроком. Эти рассуждения приводят нас к типам:

data Creation = Creation

{ creationStat

:: Stat

, creationGoalStat

:: Stat

, creationTick

:: Int

}

data Stat = Stat

{ goodCount

:: Int

, badCount

:: Int

, bonusCount

:: Int

}

data Freq = Freq

{ freqGood

:: Float

, freqBad

:: Float

, freqBonus

:: Float

}

Поле creationStat содержит текущее число шаров на поле, поле creationGoalStat – число шаров, к ко-

торому мы стремимся. Значение типа Freq содержит веса вероятностей создания нового шара определённого

типа. На каждом шаге мы будем прибавлять единицу к creationTiсk, как только оно достигнет определён-

ного значения мы попробуем создать новый шар.

Перейдём к грязным данным. Там мы будем хранить информацию, необходимую для обновления модели

в Hipmunk, и значение, в которое GLFW будет записывать состояние мыши, также мы будем следить за тем,

кто столкнулся с шаром игрока в данный момент:

data Dirty = Dirty

{ dirtyHero

:: Obj

, dirtyObjs

:: IxMap Obj

, dirtySpace

:: H.Space

, dirtyTouchVar :: Sensor H.Shape