Содержание
Plants vs. Zombies Game: haskell
Может ли кто-нибудь помочь мне исправить мой код?
Передвижение и атака зомби
Зомби перемещаются вперед на расстояние, равное их скорости каждый ход, если могут. Если зомби не может двигаться вперед, потому что на клетке, на которой он стоит, есть растение, зомби кусает растение, уменьшает свои хиты на 1 и остается на этой клетке. Единственным исключением является зомби-прыгун: если его скорость по-прежнему равна 2, то он перепрыгивает первое растение и движется дальше, но его скорость снижается до 1.
Давайте определим функцию PerformZombieActions, которая будет выполнять вышеупомянутое соответствующее действие со всеми зомби в модели. Если зомби достигает конца игрового поля, верните Ничего! Функция не должна удалять мертвые растения!
Code ::
import Data.List
type Coordinate = (Int, Int)
type Sun = Int
—(Lifepoint)
data Plant = Peashooter Int | Подсолнух Инт | Орех Инт | Получение CherryBomb Int (Show, Eq)
—(Lifepoint, Speed)
data Zombie = Basic Int Int | Конехед Международный Международный | Бакетхед Международный Международный | Vaulting Int Int производное (Show, Eq)
data GameModel = GameModel Sun [(Координата, Растение)] [(Координата, Zombie)] производное (Show, Eq)
defaultPeashooter :: Plant
defaultPeashooter = Peashooter 3
defaultSunflower :: Plant
defaultSunflower = Sunflower 2
defaultWalnut :: Plant
defaultWalnut = Walnut 15
defaultCherryBomb :: Plant
defaultCherrybomb = вишня 2
Basic :: Zombie
Basic = Basic 5 1
Conehead :: Zombie
Conehead = Conehead 10 1
Buckethead ::::: Zombie
Backeate = Buckead 200003
Buckeate = Buckeathead = Buckeathead = Buckeathead = Buckeathead. 1
прыжок :: Зомби
прыжок = Прыжок 7 2
—tryPurchase :
isinfield :: Координата -> Bool
isinfield (x,y)
| x `элемент` [0,1,2,3,4] && y `элемент` [0,1,2,3,4,5,6,7,8,9,10,11]= Истина
| иначе = False
tryPurchase :: GameModel -> Coordinate -> Plant -> Maybe GameModel
tryPurchase ( GameModel a b c ) d f
| (isinfield d) && (lookup d b == Nothing) && (f == defaultWalnut) && (a-50 > (-1)) = Just (GameModel (a-50) ((d,f):b) c )
| (isinfield d) && (lookup d b == Nothing) && (f == defaultPeashooter) && (a-100 > (-1)) = Just (GameModel (a-100) ((d,f):b) c )
| (isinfield d) && (lookup d b == Nothing) && (f == defaultSunflower) && (a-50 > (-1)) = Just (GameModel (a-50) ((d,f):b) c )
| (isinfield d) && (lookup d b == Nothing) && (f == defaultCherryBomb) && (a-150 > (-1)) = Just (GameModel (a-150) ((d,f):b) c )
| иначе = Ничего
—placeZombieInLane :
isinrow :: Int -> Bool
isinrow x
| x `элемент` [0,1,2,3,4] = True
| иначе = False
placeZombieInLane :: GameModel -> Zombie -> Int -> Maybe GameModel
placeZombieInLane ( GameModel a b c ) d f
| (isinrow f) && (lookup (f,11) c == Nothing) = Just (GameModel a b (((f,11),d):c))
| (isinrow f) && (lookup (f,11) c == Nothing) = Just (GameModel a b (((f,11),d):c))
| (isinrow f) && (lookup (f,11) c == Nothing) = Just (GameModel a b (((f,11),d):c))
| (isinrow f) && (lookup (f,11) c == Nothing) = Just (GameModel a b (((f,11),d):c))
| в противном случае = ничего
Я пытался решить команду executeZombieActions , но это не работает для списка с большим количеством информации.
— Растение -1 очко здоровья
minusone :: Растение -> Растение
minusone (Горохострел b) = (Горохострел (b-1))
minusone (Подсолнух b) = (Подсолнух (b-1))
минусон (грецкий орех b) = (грецкий орех (b-1))
минусон (CherryBomb b) = (CherryBomb (b-1))
— Здоровье растения -1 в списке
минус :: [(Координата, растение)] -> [(координата, растение)]
минус [] = []
минус ((a,b):xs ) = ((a, (minusone b)): минус xs)
— Скорость зомби при прыжках будет равна 1 (при прыжках)
minva :: Zombie -> Zombie
if (Basic b c) = (Basic b c)
if (Конус b c) = (Конус b c)
if (Ковш b c) = (Ковш b c)
if (Свод b c) = (Свод b 1)
— Скорость зомби при прыжке будет 1 (при прыжке) ++ координата если 00 (и она должна быть только одновременно)
minusvalnut :: [(Координата, Зомби)] -> [(Координата, Зомби)]
минус-значение [] = []
минус-значение (((x,y),b):xs)
| y > 0 && (y-(скорость b)) < 0 = (((x,0),пример b): minusvalnut xs)
| иначе = (((x,y-(скорость b)),minva b): minusvalnut xs)
— Прыгающий зомби ?
isvaulting :: Zombie -> Bool
isvaulting (Basic b c) = False
isvaulting (Conehead b c) = False
isvaulting (Buckethead b c) = False
isvaulting (Vaulting b c) = True
— в списке vaultin зомби ?
isvault :: [(Координата, Зомби)] -> Bool
isvault [] = False
isvault ((a,b):xs)
| прыжки b = True
| иначе = False
—Zombie speed
speed :: Zombie -> Int
speed (Basic b c) = c
speed (Conehead b c) = c
speed (Buckethead b c) = c
speed (Vaulting b c) = c
—Скорость движения зомби (не опускается ниже 0)
movezombie :: [(Координата, Zombie)] -> [(Координата, Zombie)]
movezombie [] = []
movezombie (((x,y),b):xs)
| y > 0 && (y-(скорость b)) < 0= (((x,0),b): movezombie xs)
| иначе = (((x,y-(скорость b)),b): movezombie xs)
— Равные координаты
координата p :: [(Координата, План)] -> [Координата]
координатный шаг [] = []
координатный шаг ((a,b):xs) = a : координатный шаг xs
координата :: [(Координата , Зомби)] -> [Координата]
координата [] = []
координата ((a,b):xs) = a : координата xs
функция :: [(Координата, Растение)] -> [( Координата, Зомби)] -> Bool
функция x y = null ((координата x) \\ (координата y)) && null ((координата y) \\ (координата x))
— Координата 0?
iszero :: [(Координата, зомби)] -> Bool
iszero [] = False
iszero ((a,b):xs)
| а == (0,0) = Истина
| иначе = False
isEmpty :: GameModel -> Bool
isEmpty (GameModel a b c)
| b == [] && c == [] = True
| иначе = Ложь
PerformZombieActions :: GameModel -> Возможно GameModel
PerformZombieActions (GameModel a b c)
| isEmpty(GameModel a b c) = Just (GameModel a b c)
| iszero c = Ничего
| (функция b c) && not (isvault c) = Just (GameModel a (минус b) c)
| (функция b c) && (isvault c) = Just (GameModel a b (minusvalnut c))
| не (функция b c) = Just (GameModel a b (movezombie c))
| иначе = ничего
Test ::
executeZombieActions (GameModel 0 [((4,2),Sunflower 5)] [((a,b),c)|a<-[0,2,4],b< -[2,3,7,11],c<-[coneHead,basic,bucketHead,vaulting]])==Just (GameModel 0 [((4,2),Sunflower 2)] [((0,1) ,Коническая головка 10 1),((0,1),Базовая 5 1),((0,1),Ведеркоголовая 20 1),((0,0),Сводчатый 7 2),((0,2),Конусная головка 10 1),((0,2),Базовый 5 1),((0,2),Ведроголовый 20 1),((0,1),Вольтижировка 7 2),((0,6),Конус 10 1 ),((0,6),Basic 5 1),((0,6),Buckethead 20 1),((0,5),Vaulting 7 2),((0,10),Conehead 10 1), ((0,10),Базовый 5 1),((0,10),Ведрообразный 20 1),((0,9),Вольтижировка 7 2),((2,1),Конус 10 1),((2,1),Базовый 5 1),((2,1),Ведро 20 1),((2,0), Прыжки 7 2),((2,2),Конус 10 1),((2,2),Базовый 5 1),((2,2),Ведроголовый 20 1),((2,1),Вольтижировка 7 2),((2,6),Коническая головка 10 1),((2,6),Основная 5 1),((2,6),Ведрообразная 20 1),((2,5),Вольтижировка 7 2) ,((2,10),Коническая головка 10 1),((2,10),Базовая 5 1),((2,10),Ведеркоголовая 20 1),((2,9),Вольтижировка 7 2),( (4,2),Коническая головка 10 1),((4,2),Базовая 5 1),((4,2),Ведеркоголовая 20 1),((4,1),Вольтижировка 7 1),((4 ,2),Коническая головка 10 1),((4,2),Базовая 5 1),((4,2),Ведеркоголовая 20 1),((4,1),Вольтижировка 7 1),((4,6 ),Коническая головка 10 1),((4,6),Базовая 5 1),((4,6),Ведеркоголовая 20 1),((4,5),Вольтижировка 7 2),((4,10), Коническая головка 10 1),((4,10),Базовая 5 1),((4,10),Ведерковая головка 20 1),((4,9),Vaulting 7 2)])
executeZombieActions (GameModel 0 [((0,7),Sunflower 5)] [((a,b),c)|a<-[0,2,4],b< -[2,3,7,11],c<-[coneHead,basic,bucketHead,vaulting]])==Just (GameModel 0 [((0,7),Sunflower 2)] [((0,1) ,Коническая головка 10 1),((0,1),Базовая 5 1),((0,1),Ведеркоголовая 20 1),((0,0),Сводчатый 7 2),((0,2),Конусная головка 10 1),((0,2),Базовый 5 1),((0,2),Ведроголовый 20 1),((0,1),Вольтижировка 7 2),((0,7),Конус 10 1 ),((0,7),Basic 5 1),((0,7),Buckethead 20 1),((0,6),Vaulting 7 1),((0,10),Conehead 10 1), ((0,10),Базовый 5 1),((0,10),Ведрообразный 20 1),((0,9),Вольтижировка 7 2),((2,1),Конус 10 1),((2,1),Базовый 5 1),((2,1),Ведро 20 1),((2,0), Прыжки 7 2),((2,2),Конус 10 1),((2,2),Базовый 5 1),((2,2),Ведроголовый 20 1),((2,1),Вольтижировка 7 2),((2,6),Коническая головка 10 1),((2,6),Основная 5 1),((2,6),Ведрообразная 20 1),((2,5),Вольтижировка 7 2) ,((2,10),Коническая головка 10 1),((2,10),Базовая 5 1),((2,10),Ведеркоголовая 20 1),((2,9),Вольтижировка 7 2),( (4,1),Коническая головка 10 1),((4,1),Базовая 5 1),((4,1),Ведеркоголовая 20 1),((4,0),Вольтижировка 7 2),((4 ,2),Коническая головка 10 1),((4,2),Базовая 5 1),((4,2),Ведеркоголовая 20 1),((4,1),Вольтижировка 7 2),((4,6 ),Коническая головка 10 1),((4,6),Базовая 5 1),((4,6),Ведеркоголовая 20 1),((4,5),Вольтижировка 7 2),((4,10), Коническая головка 10 1),((4,10),Базовая 5 1),((4,10),Ведерковая головка 20 1),((4,9),Vaulting 7 2)])
executeZombieActions (GameModel 0 [((a,b),c 10)|a<-[0,2,4],b<-[0,2,7,11], c<-[Подсолнух,Горохострел,Грецкий орех,Вишневая бомба]] [((a,b),c)|a<-[0,2,4],b<-[2,3,7,11],c< -[coneHead,basic,bucketHead,vaulting]])==Just (GameModel 0 [((0,0),Sunflower 10),((0,0),Peashooter 10),((0,0),Walnut 10 ),((0,0),CherryBomb 10),((0,2),Подсолнух 7),((0,2),Горохострел 7),((0,2),Грецкий орех 7),((0, 2),Вишневая бомба 7),((0,7),Подсолнух 7),((0,7),Горохострел 7),((0,7),Грецкий орех 7),((0,7),Вишневая бомба 7) ,((0,11),Подсолнух 7),((0,11),Горохострел 7),((0,11),Грецкий орех 7),((0,11),Вишневая бомба 7),((2,0 ),Подсолнух 10),((2,0),Горохострел 10),((2,0),Грецкий орех 10),((2,0),Вишневая бомба 10),((2,2),Подсолнух 7), ((2,2),Горохострел 7),((2,2),Грецкий орех 7),((2,2),Вишневая бомба 7),((2,7),Подсолнух 7),((2,7) ,Горохострел 7),((2,7),Грецкий орех 7),((2,7),Вишневая бомба 7),((2,11),Подсолнух 7),((2,11),Горохострел 7),( (2,11),Грецкий орех 7),((2,11),Вишневая бомба 7),((4,0),Подсолнух 10),((4,0),Горохострел 10),((4,0), Грецкий орех 10),((4,0),Вишневая бомба 10),((4,2),Подсолнух 7),(( 4,2),Горохострел 7),((4,2),Грецкий орех 7),((4,2),Вишневая бомба 7),((4,7),Подсолнух 7),((4,7),Горохострел 7),((4,7),Грецкий орех 7),((4,7),Вишневая бомба 7),((4,11),Подсолнух 7),((4,11),Горохострел 7),((4 ,11),Орех 7),((4,11),Вишневая бомба 7)] [((0,2),Конус 10 1),((0,2),Основной 5 1),((0,2) ,Ведро 20 1),((0,1),Вольтижировка 7 1),((0,2),Конус 10 1),((0,2),Базовый 5 1),((0,2),Ведро 20 1),((0,1),Вольтижировка 7 1),((0,7),Конус 10 1),((0,7),Базовый 5 1),((0,7),Ведро 20 1 ),((0,6),Вольтижировка 7 1),((0,11),Конус 10 1),((0,11),Базовый 5 1),((0,11),Ведро 20 1), ((0,10),Вольтижировка 7 1),((2,2),Конус 10 1),((2,2),Базовый 5 1),((2,2),Ведро 20 1),(( 2,1),Вольтижировка 7 1),((2,2),Коническая головка 10 1),((2,2),Базовая 5 1),((2,2),Ведрообразная 20 1),((2, 1), Вольтижировка 7 1), ((2,7), Коническая головка 10 1), ((2,7), Базовая 5 1), ((2,7), Ведро 20 1), ((2,6) ,Вольтижировка 7 1),((2,11),Коническая голова 10 1),((2,11),Базовая 5 1),((2,11),Ведроголовая 20 1),((2,10),Вольтижировка 7 1),((4,2),Коническая головка 10 1),((4,2),Базовая 5 1),((4,2),Ведрообразная 20 1),((4,1),Вольтижировка 7 1 ),((4,2) ,Коническая головка 10 1),((4,2),Базовая 5 1),((4,2),Ведеркоголовая 20 1),((4,1),Сводчатый 7 1),((4,7),Конусная головка 10 1),((4,7),Базовый 5 1),((4,7),Ведроголовый 20 1),((4,6),Вольтижировка 7 1),((4,11),Конус 10 1 ),((4,11),Базовый 5 1),((4,11),Ведроголовый 20 1),((4,10),Вольтижировка 7 1)])
Минифигурки LEGO® | Официальный магазин LEGO® US
Минифигурки LEGO®
ПродуктыПодробнее
Минифигурки LEGO® — одни из самых узнаваемых в мире игрушек для детей от 6 лет и взрослых. способов собрать ваши любимые.
Выбирайте знакомые лица из ваших любимых фильмов, сериалов и видеоигр, а также оригинальные минифигурки LEGO® в самых разных стилях. Они также являются отличными коллекционными подарками, а некоторые наборы предлагают счастливый набор возможных игрушек, чтобы усилить волнение. Какие из них вы получите?
Вы также можете найти крутые аксессуары, стилизованные под культовое лицо минифигурки LEGO®.
… Подробнее
с показателем 29 продуктов
сортируют по
: рекомендуется
- Рекомендуется
- Новейшая
- Цена: низкий до высокой до
- Цена: высокая до низкого до
- ;
Новый
;
- Рейтинг
- A-Z
Показ на складе только
- Минифигуры [8]
- Книги [5]
- [5]
- [3]
- [5]
- [3]
- [5]
- . ]
- $0 — $25[20]
- $25+[9]
- Harry Potter™[1]
- Minifigures[29]
- Other[2]
Add to wish list
Series 23
Average rating
3.7
out of 5 stars
Price$4.99
Out of stock
Add to wish list
LEGO® Minifigures Series 24
Price$4.99
Coming Soon
Add to wish list
Series 23 6 pack
Average rating
3
out of 5 stars
Price$29. 94
Add to wish list
LEGO® In Focus
Average rating
5
из 5 звезд
Цена $ 30,00
Добавить в список пожеланий
2023 Календарь настенных настенных настенных.0003
LEGO® Minifigure Display Case 16
Average rating
4.8
out of 5 stars
Price$34.99
Add to wish list
Brick or Treat
Price$10. 99
Out of stock
Добавить в список желаний
Миссия минифигурок
Цена19,99 $
Нет в наличии
Добавить в список желаний
LEGO® Minifigures Series 24 6 Pack
909002 Цена $ 909002.94
Скоро вскоре
Добавить в список пожеланий
Справочник LEGO® Minifigure
Цена $ 14,99
Out Affice
. $ 15,99
Добавить в список пожеланий
Muppets
Средний рейтинг
3,5
из 5 звезд
Цена 4,99
из запаса
- 999
из запаса
999
.