page_1.html 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438
  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 - início</li>
  36. </ol>
  37. </nav>
  38. <h1 class="display-4">Área do Desenvolvedor</h1>
  39. <hr class="display-4">
  40. <p class="lead">
  41. Esta página apresenta detalhes da implementação do iFractions. É indicada para desenvolvedores que desejam
  42. colaborar com o projeto, tem curiosidade sobre o funcionamento da ferramenta ou desejam incorporá-la ao
  43. seu site ou a um Moodle preexistente.
  44. </p>
  45. </header>
  46. <!-- pagina -->
  47. <main class='container-flex'>
  48. <div class="row">
  49. <!-- menu de navegacao lateral -->
  50. <!-- <div class="col-lg-2 text-start p-1 ifr__toc ifr__noBullet"></div> -->
  51. <div class="col-lg-2 text-start p-1"></div>
  52. <div class="col-lg-8 px-5">
  53. <section id="sec-diretorio">
  54. <h2>Diretório <code>Ifractions-web</code></h2>
  55. <p>
  56. O conteúdo do pacote <code>Ifractions-web</code> está disposto da seguinte forma:
  57. </p>
  58. <div class="container">
  59. <div class="row">
  60. <div class="col-lg-3">
  61. <img src='img/diretorio.png' class='ifr__img img-responsive' width='100%' alt='Diretórios do pacote.'>
  62. </div>
  63. <div class="col-lg-9 ifr__noBullet ">
  64. <ul class="my-bordered-list">
  65. <li>
  66. <code>assets/</code> &minus; com os diretórios que contém os arquivos de mídia
  67. <ul>
  68. <li>
  69. <code>audio/</code> &minus; audios
  70. </li>
  71. <li>
  72. <code>img/</code> &minus; imagens e spritesheets
  73. </li>
  74. <li>
  75. <code>lang/</code> &minus; idiomas
  76. </li>
  77. </ul>
  78. </li>
  79. <li>
  80. <code>js/</code> &minus; com código JavaScript que define as telas e a lógica do jogo
  81. <ul>
  82. <li>
  83. <code>games/</code>
  84. <ul>
  85. <li>
  86. <code>squareOne.js</code>, <code>squareTwo.js</code> e <code>circleOne.js</code> − contém os
  87. estados
  88. que correspondem às telas dos jogos
  89. </li>
  90. </ul>
  91. </li>
  92. <li>
  93. <code>globals/</code> − contém os recursos globais do jogo
  94. <ul>
  95. <li>
  96. <code>globals_control.js</code>
  97. </li>
  98. <li>
  99. <code>globals_debug.js</code>
  100. </li>
  101. <li>
  102. <code>globals_functions.js</code>
  103. </li>
  104. <li>
  105. <code>globals_tokens.js</code>
  106. </li>
  107. </ul>
  108. </li>
  109. <li>
  110. <code>menus/</code>
  111. <ul>
  112. <li><code>menu_boot.js</code></li>
  113. <li><code>menu_lang.js</code></li>
  114. <li><code>menu_name.js</code></li>
  115. <li><code>menu_main.js</code></li>
  116. <li><code>menu_custom.js</code></li>
  117. </ul>
  118. </li>
  119. <li>
  120. <code>moodle/</code>
  121. <ul>
  122. <li><code>integrationFunctions.js</code> − contém recursos que permitem o funcionamento da
  123. <b>Versão Moodle</b> (incluido funções que conversam com o iTarefa)
  124. </li>
  125. <li>
  126. <code>studentReport.js</code> − contém o estado que mostra o progresso do aluno na <b>Versão
  127. Moodle</b>
  128. </li>
  129. </ul>
  130. </li>
  131. <li>
  132. <code>screens/</code>
  133. <ul>
  134. <li><code>end.js</code></li>
  135. <li><code>map.js</code></li>
  136. </ul>
  137. </li>
  138. <li>
  139. <code>gameMechanics.js</code> provê todas ferramentas de jogabilidade e interação com o
  140. Canvas que são usadas no código
  141. </li>
  142. </ul>
  143. </li>
  144. <li>
  145. <code>php/</code> &minus; com código em PHP que estabelece a conexão com o banco de dados na
  146. <b>Versão Web</b>
  147. <ul>
  148. <li><code>save.php</code></li>
  149. </ul>
  150. </li>
  151. <li>
  152. <code>style/</code> &minus; com os arquivos CSS que definem o estilo da página
  153. </li>
  154. <li>
  155. <code>index.html</code> é o arquivo principal
  156. </li>
  157. </ul>
  158. </div>
  159. </div>
  160. </div>
  161. </section>
  162. <hr class="display-4" />
  163. <section id="sec-local">
  164. <h2>Executando o iFractions localmente</h2>
  165. <p>
  166. Esta seção mostra como o programador pode utilizar o iFractions localmente. Analogamente, os passos
  167. podem ser usados para subir a <i>Versão Web</i> para o seu site ou instalar a <i>Versão Moodle</i> em um
  168. Moodle existente &minus; para este último pode apenas ser feito pelo administrador do Moodle. Acesse os
  169. arquivos mencionados em <a href="../../index.html#download">downloads</a>.
  170. </p>
  171. <section id="local__web">
  172. <h3 class='ifr__color__lightBlue'>Versão Web</h3>
  173. <ul>
  174. <li>
  175. Para utilizar essa versão é preciso ter instalado na máquina:
  176. </li>
  177. <ul>
  178. <li>
  179. um servidor local &minus; por exemplo o <a target="_blank" href='http://www.apache.org/'>Apache</a>;
  180. </li>
  181. <li>
  182. <a target="_blank" href='https://www.mysql.com/'>MySQL</a> e <a target="_blank"
  183. href='https://www.php.net/'>PHP</a> se
  184. for
  185. desejado
  186. guardar as informações do aluno num banco de dados. <em>Note que esta versão não precisa de
  187. conexão com
  188. o banco de dados para funcionar, apenas para guardar os dados do jogador</em>.
  189. </li>
  190. </ul>
  191. <li>
  192. O pacote <code>Ifractions-web.tar.gz</code> deve ser desempacotado no diretório do servidor
  193. local (geralmente <code>/var/www/html</code> no Ubuntu);
  194. </li>
  195. <li>
  196. Assim, ele pode ser acessado no navegador por meio do endereço do servidor local (geralmente
  197. <code>http://localhost/Ifractions-web/</code>);
  198. </li>
  199. <!--<li>Pronto!</li>-->
  200. </ul>
  201. </section>
  202. <section id="local__moodle">
  203. <h3 class='ifr__color__lightBlue'>Versão Moodle</h3>
  204. <ul>
  205. <li>
  206. Para utilizar essa versão é preciso ter:
  207. </li>
  208. <ul>
  209. <li>
  210. um <a target="_blank" href='https://moodle.org/'>Moodle</a> instalado na máquina
  211. </li>
  212. <li>
  213. o pacote <a target="_blank" href='https://moodle.org/plugins/mod_iassign'>iTarefa</a> instalado nesse
  214. Moodle
  215. </li>
  216. <ul>
  217. <li>
  218. O iTarefa disponibiliza diferentes iMAs que podem ser criados como atividade pelo
  219. professor e
  220. acessados pelo aluno &minus; dentre eles o <strong>iFractions</strong>.
  221. </li>
  222. <li>
  223. O arquivo <code>README.md</code> no <a target="_blank"
  224. href='http://200.144.254.107/git/LInE/iassign'>repositório do
  225. iTarefa</a> explica
  226. o processo de instalação e uso do módulo.
  227. </li>
  228. </ul>
  229. </ul>
  230. </ul>
  231. <!--
  232. .: Quick install instructions (to be used by the system administrator) :.
  233. 0) Be sure you have (at least) Moodle 2.4 until Moodle 2.6 installed
  234. 1) Be sure to have the latest language package, such as English (en), Portuguese (pt_br).
  235. 2) Be sure to have the latest version of the module iAssign (see in
  236. https://github.com/leonidasbrandao/iAssign master)
  237. 3) Unpack 'iAssign.2.1.x.zip' (or 'iAssign.2.1.x.tgz')
  238. 4) Copy the 'iassign' module directory into the "mod" subdirectory of Moodle installation
  239. 5) Under role "administrator", go to the 'Site administration' and click on 'Notifications'
  240. 6) Have fun.
  241. -->
  242. </section>
  243. </section>
  244. <hr class="display-4" />
  245. <section id="sec-bd">
  246. <h2>Configurando o banco de dados</h2>
  247. <p>
  248. O iFractions executa a conexão com o banco de dados de forma diferente nas duas versões. Para mais
  249. informações sobre os requisitos de cada versão veja a <a href='#local'>seção acima</a>.
  250. </p>
  251. <section id="bd__web">
  252. <h3 class='ifr__color__lightBlue'>Versão Web (PHP e MySQL)</h3>
  253. <p>
  254. Esta versão utiliza um banco de dados MySQL e um arquivo PHP <code>php/save.php</code> que
  255. gerencia a conexão entre o iFractions e o bando de dados. É usado o <code>Fetch API</code> para acessar
  256. este arquivo de forma assíncrona usando o método HTTP <code>POST</code>.
  257. </p>
  258. <p>
  259. Tendo instalado todos <a href='#local'>requisitos</a>, para que seja possível
  260. estabelecer uma
  261. conexão entre o iFractions e banco de dados de forma correta é preciso fazer as seguintes
  262. configurações:
  263. </p>
  264. <ol type='A'>
  265. <li><b>Criar um banco de dados para o iFractions</b>
  266. <p>
  267. Por padrão, consideramos o nome do banco de dados como <code>db_iFractions</code> e a
  268. tabela
  269. como <code>iFractions</code>. Assim, é possível configurar o banco de dados MySQL da
  270. seguinte
  271. forma:
  272. </p>
  273. <pre><code class='language-sql'>CREATE DATABASE db_ifractions;
  274. USE db_ifractions;
  275. CREATE TABLE ifractions (
  276. line_id int(11) NOT NULL AUTO_INCREMENT,
  277. line_hostip varchar(255) DEFAULT NULL,
  278. line_playername varchar(256) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL,
  279. line_datetime varchar(20) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL,
  280. line_lang varchar(6) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL,
  281. line_game varchar(10) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL,
  282. line_mode varchar(1) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL,
  283. line_operator varchar(5) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL,
  284. line_level int(5) NOT NULL,
  285. line_mappos int(5) NOT NULL,
  286. line_result varchar(6) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL,
  287. line_time varchar(20) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL,
  288. line_details varchar(120) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL,
  289. PRIMARY KEY (line_id)
  290. ) ENGINE = InnoDB AUTO_INCREMENT = 1 DEFAULT CHARSET = latin1;
  291. </code></pre>
  292. <p>
  293. <i>Note que cada coluna da tabela usa o prefixo <code>line_</code>.</i>
  294. </p>
  295. </li>
  296. <li><b>Atualizar o arquivo <code>php/save.php</code></b>
  297. <p>
  298. É preciso definir os valores para algumas variáveis em <code>php/save.php</code> de acordo
  299. a
  300. configuração do banco de dados como aparece a seguir:
  301. </p>
  302. <pre><code class='language-php'>$servername = "localhost"; // INSERT MySQL server
  303. $username = "put_username"; // INSERT MySQL user name
  304. $password = "put_password"; // INSERT MySQL password
  305. $dbname = "db_ifractions"; // INSERT database name (default=db_ifractions)
  306. $tablename = "ifractions"; // INSERT table name (default=ifractions)
  307. </code></pre>
  308. </li>
  309. <li><b>Atualizar o arquivo <code>js/globals/globals_functions.js</code></b>
  310. <p>
  311. Em <code>js/globals/globals_functions.js</code> existe uma função global chamada
  312. <code>sendToDatabase()</code>.
  313. Quando a
  314. informação do jogador é coletada ao final de cada jogo, o arquivo do jogo a envia para
  315. <code>sendToDatabase()</code> que, por sua vez, faz uma conexão assíncrona com
  316. <code>php/save.php</code>,
  317. permitindo o envio das informações para o banco de dados.
  318. </p>
  319. <pre><code class='language-js'>const data = 'line_ip='// INSERT the IP of the machine where the MySQL was set up
  320. + '&line_name=' + // player's name
  321. + '&line_lang=' + // selected language for the game
  322. + // data received from the game as parameter to this function
  323. </code></pre>
  324. </li>
  325. </ol>
  326. <section>
  327. <h4>Onde a conexão é estabelecida no código</h4>
  328. <p>
  329. Existe uma função chamada <code>postScore()</code> dentro de cada estado de jogo &minus;
  330. <code>js/games/squareOne.js</code>, <code>js/games/squareTwo.js</code> e
  331. <code>js/games/circleOne.js</code>.
  332. Assim, sempre que o jogador termina uma fase (tendo ele acertado ou não), antes de voltar para o
  333. mapa
  334. de
  335. fases, a função <code>postScore()</code> é chamada. Ela concatena toda informação sobre o
  336. progresso do
  337. jogador numa <i>string</i> que é passada como parâmetro para a função global
  338. <code>sendToDatabase()</code>
  339. (de <code>js/globals/globals_functions.js</code>) que a envia para o banco de dados.
  340. </p>
  341. <pre><code class='language-js'>const data = '&line_game=' + // collect game shape
  342. + '&line_mode=' + // collect game mode type
  343. + '&line_oper=' + // collect game math operation type
  344. + '&line_leve=' + // collect the selected difficulty for the game
  345. + '&line_posi=' + // collect the players position on the map
  346. + '&line_resu=' + // collect status for players answer (correct or incorrect)
  347. + '&line_time=' + // collect time spent finishing the game
  348. + '&line_deta=' + // collect extra details specific to current game
  349. </code></pre>
  350. </section>
  351. </section>
  352. <section id="bd__moodle">
  353. <h3 class='ifr__color__lightBlue'>Versão Moodle</h3>
  354. <p>
  355. Esta versão utiliza o banco de dados do próprio Moodle, não precisando criá-lo manualmente.
  356. </p>
  357. <section id='dados'>
  358. <h2>Onde os dados são coletados</h2>
  359. <p>Em construção...</p>
  360. </section>
  361. </section>
  362. </section>
  363. <div class="d-flex justify-content-between">
  364. <a class="btn btn-primary" href='../documentacao.html' role="button">Voltar</a>
  365. <!-- 1 -->
  366. <a class="btn btn-primary" href='./page_2.html' role="button">Próximo - tecnologias utilizadas</a>
  367. </div>
  368. </div>
  369. <div class="col-lg-2 p-1"></div>
  370. </div>
  371. </main>
  372. <!-- rodape -->
  373. <footer id='footer' class="container-flex mt-5 py-5 text-center"></footer>
  374. </body>
  375. <script src="../../script/bootstrap/bootstrap.bundle.min.js"></script>
  376. <script src="../../script/index.js"></script>
  377. <script>
  378. updateMenu(2);
  379. </script>
  380. </html>