page_2.html 10.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249
  1. <!-- LInE - Free Education, Private Data - http://www.usp.br/line -->
  2. <!DOCTYPE html>
  3. <html lang='pt-br'>
  4. <head>
  5. <meta charset='UTF-8'>
  6. <meta name='viewport' content='width=device-width, initial-scale=1.0'>
  7. <meta name="description" content="Collection of educational games for teaching fractions" />
  8. <meta name="keywords" content="ifractions, ifrações, fraction, game, private data, math, moodle" />
  9. <link rel="icon" type="image/ico" href="../../assets/flag_icon.png">
  10. <link rel="stylesheet" href="../../style/bootstrap/bootstrap.min.css">
  11. <link rel='stylesheet' href="../../style/style.css">
  12. <title>iFractions | Área do Desenvolvedor</title>
  13. <link rel="stylesheet" href="../../style/prism/prism-default.css">
  14. <script src="../../script/prism/prism.js"></script>
  15. </head>
  16. <body class="container-flex">
  17. <!-- menu superior -->
  18. <nav class="navbar navbar-expand-lg navbar-dark ifr__color__blue">
  19. </nav>
  20. <!-- botao de voltar ao inicio da pagina -->
  21. <button onclick="backToTop()" type="button" id="ifr__btn__backToTop" title="Go to top"
  22. class="btn btn-primary">&uparrow;</button>
  23. <!-- modal -->
  24. <div id="myModal" class="modal">
  25. <span class="close">&times;</span>
  26. <img class="modal-content" id="myModal-img" src="">
  27. <div id="caption"></div>
  28. </div>
  29. <!-- header -->
  30. <header class="jumbotron jumbotron-flex p-5">
  31. <nav aria-label="breadcrumb">
  32. <ol class="breadcrumb">
  33. <li class="breadcrumb-item"><a href="../../index.html">Início</a></li>
  34. <li class="breadcrumb-item"><a href="../documentacao.html">Documentação</a></li>
  35. <li class="breadcrumb-item active" aria-current="page">Área do Desenvolvedor - tecnologias utilizadas</li>
  36. </ol>
  37. </nav>
  38. <h1 class="display-4">Tecnologias utilizadas</h1>
  39. <!-- <p class="lead"> ... </p> -->
  40. <hr class="display-4">
  41. </header>
  42. <!-- pagina -->
  43. <main class='container-flex'>
  44. <div class="row">
  45. <!-- menu de navegacao lateral -->
  46. <!-- <div class="col-lg-2 text-start p-1 ifr__toc ifr__noBullet">
  47. </div> -->
  48. <div class="col-lg-2 text-start p-1"></div>
  49. <div class="col-lg-8 px-5">
  50. <section id='tecnologias'>
  51. <h2 class="invisible">Tecnologias utilizadas</h2>
  52. <table class="table w-75 mx-auto mb-3">
  53. <tr>
  54. <th>Front-end</th>
  55. <th>Back-end</th>
  56. </tr>
  57. <tr>
  58. <td>
  59. <ul>
  60. <li>HTML</li>
  61. <li>CSS</li>
  62. <li>JavaScript</li>
  63. <ul>
  64. <li>Manipulação de Canvas</li>
  65. <li>API Fetch</li>
  66. </ul>
  67. </ul>
  68. </td>
  69. <td>
  70. <ul>
  71. <li>PHP (versão web)</li>
  72. <li>MySQL</li>
  73. </ul>
  74. </td>
  75. </tr>
  76. </table>
  77. <!-- triade web - lado cliente - bd -->
  78. <p>O iFractions é desenvolvido principalmente usando HTML, CSS e JavaScript. É uma aplicação que
  79. executa em
  80. sua
  81. maioria no lado do cliente, portanto, a conexão com o banco de dados é estabelecida apenas para
  82. acessar/guardar
  83. informações sobre o jogo e progresso do jogador, mas não para o carregamento de mídia. Sua <i>Versão
  84. Web</i> usa
  85. MySql e PHP para se conectar ao banco de dados, enquanto a <i>Versão Moodle</i> usa o banco de dados
  86. do
  87. Próprio
  88. Moodle.</p>
  89. <p>
  90. É uma aplicação de página única (<i>Single Page Application</i>), portanto o carregamento de
  91. arquivos de
  92. mídia
  93. quando a conexão com o banco de dados é feita de forma assíncrona.
  94. </p>
  95. <!-- Assim, na <i>Versão Web</i> -->
  96. <p>No início do desenvolvimento um arcabouço (framework) voltado para o desenvolvimento de jogos foi
  97. usado
  98. para
  99. gerenciar os elementos de jogabilidade e interação, no entanto, recentemente, o escopo do projeto
  100. foi
  101. redesenhado utilizando elementos nativos do JavaScript.
  102. </p>
  103. <!-- Assim, a versão atual do iFractions é desenvolvida utilizando HTML5, CSS, JavaScript e PHP &minus; este último apenas na <i>versão web</i>. Por ser uma aplicação de página única (single page application), os arquivos de mídia são carregados no cache de forma assíncrona a medida que se fazem necessários, utilizando as propriedades do elemento <code>Image</code> do HTML para ralizar o carregamento de imagens e FETCH API para arquivos de áudio e idioma.
  104. Foi adotado o modelo cliente-servidor de forma que a execução fica majoritariamente do lado do cliente, ou seja, no navegador do usuário. Dessa forma, conexões com o servidor são limitadas ao envio de informações de progresso do jogador para o banco de dados (na versão web, PHP é usado como linguagem intermediária) e, na versão Moodle, ao recebimento de informações fornecidas pelo iTarefa para gerenciamento do iMA. Desta forma, por ser uma ferramenta que permite acesso assíncrono, o Fetch API também é utilizado para requisições ao servidor.-->
  105. <!-- lado do cliente + conexão com o banco de dados -->
  106. <p>
  107. O iFractions foi desenvolvido para executar em sua maioria no lado do cliente, no entanto, para
  108. que as
  109. informações de progresso do usuário sejam coletadas, uma conexão com o banco de dados é
  110. estabelecida
  111. sempre que o jogador termina um jogo.
  112. </p>
  113. <!-- phaser vs javascript -->
  114. <p>
  115. Inicialmente, um arcabouço (framework) voltado para o desenvolvimento de jogos foi usado para
  116. gerenciar
  117. os elementos de jogabilidade e interação, no entanto, recentemente, o escopo do projeto foi
  118. redesenhado
  119. utilizando apenas elementos nativos do JavaScript.
  120. </p>
  121. <p>
  122. No processo de concepção do iFrations foi feita a decisão de usar o arcabouço
  123. <a target="_blank" href='https://phaser.io/'>Phaser</a>. Mas recentemente, tendo em vista a tendência das
  124. aplicações
  125. atuais
  126. de
  127. abusarem de arcabouços, muitas vezes acabando por "usar um canhão para matar uma formiga" e tendo
  128. em
  129. vista o
  130. tamanho reduzido do projeto, o
  131. <!-- o que é válido para aplicações grandes e complexas, mas é muito comum aplicações pequenas usarem o que nao precisam...-->
  132. iFractions se propôs a retirar arcabouços se não se provassem tão necessários.
  133. </p>
  134. <p>
  135. Assim, a sua versão atual deixou de usar o Phaser e lança mão exclusivamente de recursos nativos
  136. do
  137. JavaScript,
  138. facilitando a retrocompatibilidade com navegadores mais antigos.
  139. </p>
  140. <!-- lista de tecnologias -->
  141. <p>
  142. Assim, o iFractions é praticamente todo desenvolvido usando HTML, CSS e JavaScript, usando
  143. principalmente as
  144. propriedades fornecidas pelo HTMLCanvasElement. O carregamento de mídia no cache é feita usando o
  145. <a target="_blank" href='https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API'>Fetch API</a> e
  146. HTMLImageElement, e
  147. a
  148. conexão
  149. com o banco de dados é feita usando PHP e
  150. <a target="_blank"
  151. href='https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest'>XMLHttpRequest</a>.
  152. </p>
  153. <!-- single page application vs carregamento -->
  154. <p>
  155. O iFractions é uma aplicação de página única (<i>single page application</i>), portanto todas
  156. telas do
  157. jogo
  158. são
  159. desenhadas no Canvas. Mas nem todo elemento de mídia é carregado no cache quando a página é
  160. aberta,
  161. sendo
  162. carregado quando necessário ao longo da execução.
  163. </p>
  164. <p>
  165. Para isso o programa faz comunicação assíncrona usando o Fetch API para carregar áudios e arquivos
  166. de
  167. internacionalização e propriedades do HTMLImageElement para carregar imagens e
  168. <i>spritesheets</i>. Esse
  169. tipo
  170. de
  171. comunicação é feito também para estabelecer a comunicação com o banco de dados salvando
  172. informações de
  173. progresso
  174. do jogador.
  175. </p>
  176. <!-- máquina de estado -->
  177. <p>
  178. Como é comum em jogos, o iFractions utiliza uma estrutura de máquina de estado, a qual estão
  179. associados
  180. os
  181. estados do jogo &minus; mais comumente as telas, mas alguns estados não são explicitados, como o
  182. de
  183. carregamento
  184. inicial
  185. e de alteração de idioma.
  186. </p>
  187. <p>
  188. Assim, a nível de código, um estado é um tipo especial de objeto que possui algumas <b>funções</b>
  189. que seguem um comportamento predefinido, são elas: <b>preload</b>, <b>create</b> e <b>update</b>.
  190. Mais sobre estados e suas funções na <a href="./page_3.html">próxima página</a>.
  191. </p>
  192. </section>
  193. <div class="d-flex justify-content-between">
  194. <a class="btn btn-primary" href='./page_1.html' role="button">Voltar - Início</a>
  195. <!-- 2 -->
  196. <a class="btn btn-primary" href='./page_3.html' role="button">Próximo - Estrutura do código</a>
  197. </div>
  198. </div>
  199. <div class="col-lg-2 p-1"></div>
  200. </div>
  201. </main>
  202. <!-- rodape -->
  203. <footer id='footer' class="container-flex mt-5 py-5 text-center"></footer>
  204. </body>
  205. <script src="../../script/bootstrap/bootstrap.bundle.min.js"></script>
  206. <script src="../../script/index.js"></script>
  207. <script>
  208. updateMenu(2);
  209. </script>
  210. </html>