Code Monkey home page Code Monkey logo

haskell_2021's Introduction

Сокобан на Haskell

Домашнее задание по курсу Haskell.

Постановка задачи, основной функционал приложения.

Необходимо написать игру Sokoban на Haskell. Правила просты - есть ящики, которые надо расставить по местам, мы их можем двигать на одну клетку, два ящика двигать мы не можем.

Базовые требования:

  • Загрузка уровня из файла
  • Отрисовка графики
  • Отслеживание, завершилась ли игра

Модули, на который разделён проект, их взаимосвязь

Main.

Модуль, в котором вершится магия. Функции:

  • Main - загрузка всех файлов, запуск игры, вызов Graphics.Gloss.Interface.Pure.Game.play.
  • Update - требуется Gloss'ом.

Types.

Модуль, в котором описаны использующиеся типы. Типы:

  • GameState {Point, MoveDirection, Level, Float};
  • CellType - Char;
  • Cell - (Point, CellType);
  • Level - [Cell];
  • TileSize - Float;
  • MoveDirection - Направление движения. UDLR и None.

Load.

Модуль, в котором происходит парсинг файла с картой. Функции:

  • prepareData - подготовка данных для создания уровня.
  • makeRow - создание одной строки.

Collisions.

Модуль, в котором происходит проверка коллизий. Функции:

  • isHit - проверка коллизии между двумя точками.
  • isCollision - проверка коллизии между двумя клетками.

Movement.

Модуль, в котором обрабатывается движение и сдвиг ящиков. Функции:

  • changeType - смена типа клетки на уровне на заданную в параметре.
  • moveBox - обработка сдвига коробки.
  • handleKeys - обработка ввода с клавиатуры.
  • move - обработка движения в целом.

Render.

Модуль, в котором происходит отрисовка. Функции:

  • window - создание окна с игрой.
  • whatImg - разбор символа, возврат нужного тайла.
  • drawTile - отрисовка тайла.
  • render - отрисовка карты.

Используемые библиотеки.

Из сторонних библиотек я использую только Gloss.

Сценарии работы с приложением и примеры использования.

Управление: стрелочки.

Для запуска надо перейти в корень папки проекта и запустить его командой stack run. Уровень задаётся в assets/level.

В файле с уровнем каждая клетка - один тайл. Пройдёмся по тайлам:

  • /* - стенка.
  • . - пол.
  • s - место, куда надо поставить ящик.
  • f - ящик, который поставили на место.
  • b - ящик.
  • @ - игрок.

После окончания игры (победы) выводится мотивирующая надпись, настраивающая на позитивную волну. Игру можно закрывать. Если во время игры попали в безвыходную ситуацию, единственный способ из неё выйти - закрыть и заново запустить игру. В спарте глупых детей с горы скидывали, так что я ещё милосерден.

Что ещё написать я не знаю, так что вот интересные факты про сокобан, которые я списал из википедии:

  • Soko-Ban, яп. 倉庫番, сокобан — кладовщик.
  • Игра Sokoban была создана в 1981 году Хироюки Имабаяси, и издана в 1982 году японской компанией Thinking Rabbit.
  • В СССР игра была известна благодаря клонам KURTAN и «Мудрый крот». Известна также версия для приставки Денди — «Склад № 18» (Warehouse No. 18), выпущенная Александром Чудовым, программистом из Ульяновска, в 1997 году.
  • Игра Sokoban представляет интерес с точки зрения вычислительной сложности. В 1995 году было доказано, что задача решения уровней Sokoban — NP-трудна, а в 1997 года было установлено, что игра Sokoban — PSPACE-полна.

haskell_2021's People

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.