Игра 2048 Java Script

InstantCMS 2.X

Как подключить игру к сайту что бы данных сохранялись для каждого пользователя ?

#1 4 апреля 2017 в 21:14
Как подключить игру к сайту, что бы данные сохранялись для каждого пользователя? Возможно ли это? И отдельный Best



html

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4.  
  5. <link href="style/main.css" rel="stylesheet" type="text/css">
  6. </head>
  7. <body>
  8.  
  9. <!-- Используется только для демонстрации -->
  10. <div class="container">
  11. <div class="heading">
  12. <h1 class="title">2048</h1>
  13. <div class="scores-container">
  14. <div class="score-container">0</div>
  15. <div class="best-container">0</div>
  16. </div>
  17. </div>
  18.  
  19. <div class="above-game">
  20. <p class="game-intro">Поиграй в увлекательную <strong>2048!</strong></p>
  21. <a class="restart-button">Новая игра</a>
  22. </div>
  23.  
  24. <div class="game-container">
  25. <div class="game-message">
  26. <p></p>
  27. <div class="lower">
  28. <a class="keep-playing-button">Продолжайте</a>
  29. <a class="retry-button">Повторить</a>
  30. </div>
  31. </div>
  32.  
  33. <div class="grid-container">
  34. <div class="grid-row">
  35. <div class="grid-cell"></div>
  36. <div class="grid-cell"></div>
  37. <div class="grid-cell"></div>
  38. <div class="grid-cell"></div>
  39. </div>
  40. <div class="grid-row">
  41. <div class="grid-cell"></div>
  42. <div class="grid-cell"></div>
  43. <div class="grid-cell"></div>
  44. <div class="grid-cell"></div>
  45. </div>
  46. <div class="grid-row">
  47. <div class="grid-cell"></div>
  48. <div class="grid-cell"></div>
  49. <div class="grid-cell"></div>
  50. <div class="grid-cell"></div>
  51. </div>
  52. <div class="grid-row">
  53. <div class="grid-cell"></div>
  54. <div class="grid-cell"></div>
  55. <div class="grid-cell"></div>
  56. <div class="grid-cell"></div>
  57. </div>
  58. </div>
  59.  
  60. <div class="tile-container">
  61.  
  62. </div>
  63. </div>
  64.  
  65. </div>
  66.  
  67. <script src="js/bind_polyfill.js"></script>
  68. <script src="js/classlist_polyfill.js"></script>
  69. <script src="js/animframe_polyfill.js"></script>
  70. <script src="js/keyboard_input_manager.js"></script>
  71. <script src="js/html_actuator.js"></script>
  72. <script src="js/grid.js"></script>
  73. <script src="js/tile.js"></script>
  74. <script src="js/local_storage_manager.js"></script>
  75. <script src="js/game_manager.js"></script>
  76. <script src="js/application.js"></script>
  77. </body>
  78. </html>
#2 4 апреля 2017 в 21:23

Возможно ли это ?

Нико
да (хотя скрипт не видел, но если он рабочий то можно)

Тут важнее другой вопрос: как чуть защитить игру от подмены значений? Ведь все передвижения в игре происходят на стороне клиента.
#3 4 апреля 2017 в 21:28


Возможно ли это ?

Нико
да (хотя скрипт не видел, но если он рабочий то можно)

Тут важнее другой вопрос: как чуть защитить игру от подмены значений? Ведь все передвижения в игре происходят на стороне клиента.

Kreator

Да все работает отлично, да вы правы, но думаю можно будет как защитить или там если пользователь вписал свое значение то бан например.
#4 4 апреля 2017 в 21:31


Возможно ли это ?

Нико
да (хотя скрипт не видел, но если он рабочий то можно)

Тут важнее другой вопрос: как чуть защитить игру от подмены значений? Ведь все передвижения в игре происходят на стороне клиента.

Kreator
  1.  
  2. [code=php]
  3. function HTMLActuator() {
  4. this.tileContainer = document.querySelector(".tile-container");
  5. this.scoreContainer = document.querySelector(".score-container");
  6. this.bestContainer = document.querySelector(".best-container");
  7. this.messageContainer = document.querySelector(".game-message");
  8.  
  9. this.score = 0;
  10. }
  11.  
  12. HTMLActuator.prototype.actuate = function (grid, metadata) {
  13. var self = this;
  14.  
  15. window.requestAnimationFrame(function () {
  16. self.clearContainer(self.tileContainer);
  17.  
  18. grid.cells.forEach(function (column) {
  19. column.forEach(function (cell) {
  20. if (cell) {
  21. self.addTile(cell);
  22. }
  23. });
  24. });
  25.  
  26. self.updateScore(metadata.score);
  27. self.updateBestScore(metadata.bestScore);
  28.  
  29. if (metadata.terminated) {
  30. if (metadata.over) {
  31. self.message(false); // You lose
  32. } else if (metadata.won) {
  33. self.message(true); // You win!
  34. }
  35. }
  36.  
  37. });
  38. };
  39.  
  40. // Continues the game (both restart and keep playing)
  41. HTMLActuator.prototype.continueGame = function () {
  42. this.clearMessage();
  43. };
  44.  
  45. HTMLActuator.prototype.clearContainer = function (container) {
  46. while (container.firstChild) {
  47. container.removeChild(container.firstChild);
  48. }
  49. };
  50.  
  51. HTMLActuator.prototype.addTile = function (tile) {
  52. var self = this;
  53.  
  54. var wrapper = document.createElement("div");
  55. var inner = document.createElement("div");
  56. var position = tile.previousPosition || { x: tile.x, y: tile.y };
  57. var positionClass = this.positionClass(position);
  58.  
  59. // We can't use classlist because it somehow glitches when replacing classes
  60. var classes = ["tile", "tile-" + tile.value, positionClass];
  61.  
  62. if (tile.value > 2048) classes.push("tile-super");
  63.  
  64. this.applyClasses(wrapper, classes);
  65.  
  66. inner.classList.add("tile-inner");
  67. inner.textContent = tile.value;
  68.  
  69. if (tile.previousPosition) {
  70. // Make sure that the tile gets rendered in the previous position first
  71. window.requestAnimationFrame(function () {
  72. classes[2] = self.positionClass({ x: tile.x, y: tile.y });
  73. self.applyClasses(wrapper, classes); // Update the position
  74. });
  75. } else if (tile.mergedFrom) {
  76. classes.push("tile-merged");
  77. this.applyClasses(wrapper, classes);
  78.  
  79. // Render the tiles that merged
  80. tile.mergedFrom.forEach(function (merged) {
  81. self.addTile(merged);
  82. });
  83. } else {
  84. classes.push("tile-new");
  85. this.applyClasses(wrapper, classes);
  86. }
  87.  
  88. // Add the inner part of the tile to the wrapper
  89. wrapper.appendChild(inner);
  90.  
  91. // Put the tile on the board
  92. this.tileContainer.appendChild(wrapper);
  93. };
  94.  
  95. HTMLActuator.prototype.applyClasses = function (element, classes) {
  96. element.setAttribute("class", classes.join(" "));
  97. };
  98.  
  99. HTMLActuator.prototype.normalizePosition = function (position) {
  100. return { x: position.x + 1, y: position.y + 1 };
  101. };
  102.  
  103. HTMLActuator.prototype.positionClass = function (position) {
  104. position = this.normalizePosition(position);
  105. return "tile-position-" + position.x + "-" + position.y;
  106. };
  107.  
  108. HTMLActuator.prototype.updateScore = function (score) {
  109. this.clearContainer(this.scoreContainer);
  110.  
  111. var difference = score - this.score;
  112. this.score = score;
  113.  
  114. this.scoreContainer.textContent = this.score;
  115.  
  116. if (difference > 0) {
  117. var addition = document.createElement("div");
  118. addition.classList.add("score-addition");
  119. addition.textContent = "+" + difference;
  120.  
  121. this.scoreContainer.appendChild(addition);
  122. }
  123. };
  124.  
  125. HTMLActuator.prototype.updateBestScore = function (bestScore) {
  126. this.bestContainer.textContent = bestScore;
  127. };
  128.  
  129. HTMLActuator.prototype.message = function (won) {
  130. var type = won ? "game-won" : "game-over";
  131. var message = won ? "You win!" : "Game over!";
  132.  
  133. this.messageContainer.classList.add(type);
  134. this.messageContainer.getElementsByTagName("p")[0].textContent = message;
  135. };
  136.  
  137. HTMLActuator.prototype.clearMessage = function () {
  138. // IE only takes one value to remove at a time.
  139. this.messageContainer.classList.remove("game-won");
  140. this.messageContainer.classList.remove("game-over");
  141. };
  142. [/code]
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.

Похожие темы

Вопросы по JavaScript

Полезное Создана 1 год назад 1 сообщение

Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.