Coder Social home page Coder Social logo

haksellhw_10mar's Introduction

Семинар 03.03.2022

На семинаре мы реализовали простое графическое приложение с использованием библиотеки gloss

Основные функции: play из модуля Graphics.Gloss.Interface.Pure.Game и playIO из Graphics.Gloss.Interface.IO.Game.

У них одинаковые параметры:

  • режим окна (тип Display)
  • цвет фона (тип Color)
  • количество шагов симуляции в секунду
  • начальное состояние игрового мира (имеет полиморфный тип, который задаётся программистом)
  • функция отрисовки игрового мира (переводит мир в картинку типа Picture)
  • функция обработки событий (преобразует игровой мир в зависимости от произошедшего внешнего события) типа Event)
  • функция обновления игрового мира за промежуток времени (прошедшее время в секундах передаётся как первый параметр)

Основная часть реализации находится в функциях отрисовки, обновления и обработки события.

В play эти три функции чистые. В них не может быть побочных эффектов и общения с внешним миром. По возможности используйте этот вариант, совершив все предварительные действия (такие как загрузка конфигурационного файла или изображений) до старта игры.

В playIO в этих функциях допустимы побочные эффекты. Без них не обойтись, если, например, по нажатию клавиши игра должна сохраняться в файл.

Цвета в библиотеке представляются в модели RGBA, основные цвета уже определены в библиотеке в виде констант с говорящими именами (red, green, yellow и т.д.). Функции для работы с цветом перечислены в модуле Graphics.Gloss.Data.Color.

Внешнее событие описывается типом Event. Это может быть либо нажатие клавиши, либо изменение положения курсора, либо изменение размера окна. Чаще всего для обработки нажатия клавиши достаточно определить саму клавишу (значение типа Key) и какое было состояние клавиши (её можно нажать или отпустить -- это два разных события!). Для этого удобно использовать сопоставление с образцом в функции-обработчике.

Для рендеринга изображений используйте конструкторы значений для типа Picture. Часть из них описывает форму изображения (линия, прямоугольник, круг, текст и т.д.), часть конструкторов рекурсивна и задаёт преобразование изображений (изменение цвета, расположения или масштаба) и объединение изображений в одно (конструктор Pictures). Для использования произвольных изображений используйте конструктор значений Bitmap, в который нужно передать внутренне представление изображения типа BitmapData. Для того чтобы загрузить изображение из файла и получить такое внутреннее представление, можно использовать библиотеку gloss-juicy.

haksellhw_10mar's People

Contributors

fierce-katie avatar alexei17 avatar

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.