page_tutorial.html 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309
  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">Tutorial: criando um jogo novo
  36. </li>
  37. </ol>
  38. </nav>
  39. <h1 id='' class='display-4'>Área do Desenvolvedor</h1>
  40. <p class="lead">Esta página apresenta detalhes da implementação do iFractions. É indicada para desenvolvedores que
  41. 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.</p>
  44. <hr class="display-4">
  45. </header>
  46. <!-- pagina-->
  47. <main class='container-flex'>
  48. <div class="row">
  49. <!-- menu de navegacao lateral -->
  50. <!-- <div class="col-lg-2 ifr__toc p-1 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="criarJogo">
  54. <h2>Criando um novo jogo</h2>
  55. <p>Se você é um desenvolvedor que deseja colaborar com o iFractions criando um novo jogo, essa seção
  56. mostrará os passos mínimos para fazê-lo.</p>
  57. <!-- <p></p> -->
  58. <ul class="list-unstyled">
  59. <li>
  60. <h3>1. Criar um arquivo novo em <code>js/games/nomeDoJogo.js</code>
  61. contendo:
  62. </h3>
  63. <pre><code class='language-js'>/******************************
  64. * This file holds game states.
  65. ******************************/
  66. /** [GAME STATE]
  67. *
  68. * Write game documentation here
  69. *
  70. * @namespace
  71. */
  72. const nomeDoJogo = {
  73. /**
  74. * Main code
  75. */
  76. create: function () {
  77. // Your code goes here
  78. if (moodle) {
  79. navigation.add.right(['audio']);
  80. } else {
  81. navigation.add.left(['back', 'menu', 'show_answer'], 'customMenu');
  82. navigation.add.right(['audio']);
  83. }
  84. game.timer.start(); // Set a timer for the current level (used in postScore())
  85. game.event.add('click', this.events.onInputDown);
  86. game.event.add('mousemove', this.events.onInputOver);
  87. },
  88. /**
  89. * Game loop
  90. */
  91. update: function () {
  92. // Your code goes here
  93. game.render.all();
  94. },
  95. utils: {
  96. // Your functions go here
  97. },
  98. events: {
  99. /**
  100. * Called by mouse click event
  101. *
  102. * @param {object} mouseEvent contains the mouse click coordinates
  103. */
  104. onInputDown: (mouseEvent) => {
  105. // Your code goes here
  106. navigation.onInputDown(x, y);
  107. game.render.all();
  108. },
  109. /**
  110. * Called by mouse move event
  111. *
  112. * @param {object} mouseEvent contains the mouse move coordinates
  113. */
  114. onInputOver: (mouseEvent) => {
  115. // Your code goes here
  116. navigation.onInputOver(mouseEvent.x, mouseEvent.y);
  117. game.render.all();
  118. },
  119. },
  120. fetch: {
  121. /**
  122. * Saves players data after level ends - to be sent to database <br>
  123. *
  124. * Attention: the 'line_' prefix data table must be compatible to data table fields (MySQL server)
  125. *
  126. * @see /php/save.php
  127. */
  128. postScore: () => {
  129. const data = ''; // Your query goes here
  130. sendToDatabase(data);
  131. },
  132. },
  133. };
  134. </code></pre>
  135. </li>
  136. <li>
  137. <h3>2. Adicionar o arquivo criado no <code>&lt;body></code> em
  138. <code>index.html</code>
  139. </h3>
  140. <pre><code class='language-html'>&lt;script src="./js/games/nomeDoJogo.js">&lt;/script></code></pre>
  141. </li>
  142. <li>
  143. <h3>3. Adicionar o novo estado do jogo no <code>&lt;script></code> em
  144. <code>index.html</code>
  145. </h3>
  146. <pre><code class='language-js'>game.state.add('nomeDoJogo', nomeDoJogo);</code></pre>
  147. </li>
  148. <li>
  149. <h3>4. Adicionar as informações sobre o jogo novo na lista de jogos em
  150. <code>js/globals/globals_control.js</code>
  151. </h3>
  152. <pre><code class='clear language-ts'>const gameList = [
  153. // ...
  154. {
  155. gameName: string, // Nome do jogo
  156. gameMode: string[], // Modos de jogo disponíveis
  157. gameOperation: string[], // Operações de jogo disponíveis
  158. gameDifficulty: number, // Nível máximo de dificuldade
  159. gameShape: string, // Figura geométrica que está representando a fração
  160. assets: {
  161. menu: { // centraliza informações necessárias no menu principal
  162. gameNameBtn: string, // ID do botão de seleção do jogo atual no menu principal
  163. infoBox: () => ({}) // Conteúdo informativo que aprece ao clicar no "?" ao lado do botão
  164. },
  165. customMenu: { // centraliza informações necessárias no menu secundário
  166. gameModeBtn: string[], // ID do botão de modo do jogo atual no menu secundário
  167. gameOperationBtn: string[], // ID do botão de operação
  168. auxiliarTitle: (x, y, offsetX, offsetH) => {}, // renderiza parte de elemento auxiliar no menu secundário
  169. infoBox: () => ({
  170. gameMode: {},
  171. gameDifficulty: {},
  172. gameMisc: {},
  173. }), // Conteúdo informativo que aparece ao clicar no "?" ao lado de cada botão
  174. },
  175. map: { // centraliza informações necessárias no mapa do jogo
  176. characterAnimation: (operation) => {}, // Parâmetros recebidos pela função de animar personagem no mapa
  177. character: (operation) => {}, // Sprite com animação do personagem principal do jogo percorrendo o mapa
  178. startBuilding: () => {}, // Lugar de onde o personagem sai no mapa
  179. endBuilding: () => {}, // Lugar que o personagem quer chegar ao percorrer o mapa
  180. },
  181. end: { // centraliza informações necessárias na tela final do jogo
  182. characterAnimation: () => ({}), // Parâmetros recebidos pela função de animar personagem na tela final
  183. character: () => ({}), // Sprite com animação do personagem principal do jogo na tela final
  184. building: () => ({}) // Lugar que o personagem quer chegar ao percorrer o mapa
  185. }
  186. }
  187. }
  188. ];
  189. </code></pre>
  190. </li>
  191. <li>
  192. <h3>5. Adicionar as mídias que serão usadas no jogo atual em
  193. <code>js/globals/globals_tokens.js</code>
  194. </h3>
  195. <p>
  196. A global <code>url</code> referencia todos arquivos de mídia usados dentro do iFractions. Novos itens
  197. podem ser adicionados em <code>boot</code> ou dentro de uma nova propriedade com o nome do jogo.
  198. Itens colocados em <code>boot</code> são carregados em cache assim que o iFractions inicia enquanto os
  199. dentro do uma propriedade com o nome do jogo só serão carregadas quando esse jogo for selecionado.
  200. </p>
  201. <pre><code class='clear language-js'>const url: {
  202. // (esses itens serão carregados logo quando o ifractions é iniciado)
  203. // é preciso pelo menos colocar os ícones de menu associados ao novo jogo
  204. boot: {
  205. image: [
  206. ['game_&lt;gameId>', &lt;url>], // ícone do jogo no menu primario
  207. ],
  208. sprite: [
  209. ['mode_&lt;gameId>', &lt;url>], // ícone do modo de jogo no menu secundario
  210. ]
  211. },
  212. // (esse itens só serão carregados ao abrir o jogo)
  213. nomeDoJogo: {
  214. image: [
  215. ['&lt;lugar de onde o personagem sai no mapa>', &lt;url>],
  216. ['&lt;lugar onde o personagem chegará no mapa>', &lt;url>],
  217. ],
  218. sprite: [
  219. ['&lt;spritesheet do personagem>', &lt;url>],
  220. ],
  221. audio: [],
  222. }
  223. }
  224. </code></pre>
  225. </li>
  226. <li>
  227. <h3>6. Adicionar novos assets</h3>
  228. <p>Criar as novas figuras em:</p>
  229. <ul>
  230. <li>
  231. <code>assets/img/icons_menu/nomeDoJogo.png</code> -> ícone de <b>jogo</b> na tela de menu
  232. principal.
  233. </li>
  234. <li>
  235. <code>assets/img/icons_menu/nomeDoJogo_1.png</code> -> ícone de <b>modo de jogo</b> na tela de
  236. menu de customização.
  237. </li>
  238. </ul>
  239. </li>
  240. </ul>
  241. </section>
  242. <div>
  243. <a class="btn btn-primary" href='../documentacao.html' role="button">Voltar</a>
  244. </div>
  245. </div>
  246. <div class="col-lg-2 p-1"></div>
  247. </div>
  248. </main>
  249. <!-- rodape -->
  250. <footer id='footer' class="container-flex mt-5 py-5 text-center"></footer>
  251. </body>
  252. <script src="../../script/bootstrap/bootstrap.bundle.min.js"></script>
  253. <script src="../../script/index.js"></script>
  254. <script>
  255. updateMenu(2);
  256. </script>
  257. </html>