当前位置:   article > 正文

HTML2048小游戏(最新版)

HTML2048小游戏(最新版)

比上一篇文章的2048更好一点。 控制方法:WASD键(小写)或页面上四个按钮

效果图如下:                 源代码在图片后面   

源代码

 ·HTML·

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>2048 Game</title>
  7. <link rel="stylesheet" href="styles.css">
  8. </head>
  9. <body>
  10. <div id="game-container">
  11. <div id="game-board"></div>
  12. <div id="controls">
  13. <button id="up">W</button>
  14. <button id="left">A</button>
  15. <button id="down">S</button>
  16. <button id="right">D</button>
  17. </div>
  18. </div>
  19. <script src="script.js"></script>
  20. </body>
  21. </html>

 ·CSS·

  1. * {
  2. box-sizing: border-box;
  3. margin: 0;
  4. padding: 0;
  5. font-family: 'Arial', sans-serif;
  6. }
  7. body {
  8. display: flex;
  9. justify-content: center;
  10. align-items: center;
  11. height: 100vh;
  12. background-color: #faf8ef;
  13. }
  14. #game-container {
  15. display: flex;
  16. flex-direction: column;
  17. align-items: center;
  18. }
  19. #game-board {
  20. display: grid;
  21. grid-template-columns: repeat(4, 1fr);
  22. grid-template-rows: repeat(4, 1fr);
  23. gap: 10px;
  24. background-color: #bbada0;
  25. padding: 10px;
  26. border-radius: 10px;
  27. margin-bottom: 20px;
  28. }
  29. .tile {
  30. width: 80px;
  31. height: 80px;
  32. background-color: #cdc1b4;
  33. display: flex;
  34. justify-content: center;
  35. align-items: center;
  36. font-size: 24px;
  37. border-radius: 10px;
  38. transition: all 0.2s ease-in-out;
  39. }
  40. #controls {
  41. display: flex;
  42. gap: 10px;
  43. }
  44. button {
  45. width: 60px;
  46. height: 60px;
  47. font-size: 20px;
  48. border-radius: 10px;
  49. background-color: #8f7a66;
  50. color: white;
  51. border: none;
  52. cursor: pointer;
  53. }
  54. button:hover {
  55. background-color: #9f8b76;
  56. }

  ·JavaScript·

  1. document.addEventListener('DOMContentLoaded', () => {
  2. const boardSize = 4;
  3. let board = [];
  4. let score = 0;
  5. const gameBoard = document.getElementById('game-board');
  6. const buttons = {
  7. up: document.getElementById('up'),
  8. down: document.getElementById('down'),
  9. left: document.getElementById('left'),
  10. right: document.getElementById('right')
  11. };
  12. function initBoard() {
  13. for (let i = 0; i < boardSize * boardSize; i++) {
  14. const tile = document.createElement('div');
  15. tile.classList.add('tile');
  16. gameBoard.appendChild(tile);
  17. }
  18. board = Array.from(document.querySelectorAll('.tile'));
  19. generateTile();
  20. generateTile();
  21. updateBoard();
  22. }
  23. function generateTile() {
  24. let emptyTiles = board.filter(tile => !tile.textContent);
  25. if (emptyTiles.length > 0) {
  26. let randomTile = emptyTiles[Math.floor(Math.random() * emptyTiles.length)];
  27. randomTile.textContent = Math.random() < 0.9 ? '2' : '4';
  28. }
  29. }
  30. function updateBoard() {
  31. board.forEach(tile => {
  32. const value = tile.textContent;
  33. tile.style.backgroundColor = getTileColor(value);
  34. });
  35. }
  36. function getTileColor(value) {
  37. switch (value) {
  38. case '2': return '#eee4da';
  39. case '4': return '#ede0c8';
  40. case '8': return '#f2b179';
  41. case '16': return '#f59563';
  42. case '32': return '#f67c5f';
  43. case '64': return '#f65e3b';
  44. case '128': return '#edcf72';
  45. case '256': return '#edcc61';
  46. case '512': return '#edc850';
  47. case '1024': return '#edc53f';
  48. case '2048': return '#edc22e';
  49. default: return '#cdc1b4';
  50. }
  51. }
  52. function move(direction) {
  53. switch (direction) {
  54. case 'up': moveUp(); break;
  55. case 'down': moveDown(); break;
  56. case 'left': moveLeft(); break;
  57. case 'right': moveRight(); break;
  58. }
  59. generateTile();
  60. updateBoard();
  61. }
  62. function moveUp() {
  63. for (let i = 0; i < boardSize; i++) {
  64. let column = [];
  65. for (let j = 0; j < boardSize; j++) {
  66. column.push(board[i + j * boardSize].textContent);
  67. }
  68. let newColumn = slideTiles(column);
  69. for (let j = 0; j < boardSize; j++) {
  70. board[i + j * boardSize].textContent = newColumn[j];
  71. }
  72. }
  73. }
  74. function moveDown() {
  75. for (let i = 0; i < boardSize; i++) {
  76. let column = [];
  77. for (let j = 0; j < boardSize; j++) {
  78. column.push(board[i + j * boardSize].textContent);
  79. }
  80. let newColumn = slideTiles(column.reverse()).reverse();
  81. for (let j = 0; j < boardSize; j++) {
  82. board[i + j * boardSize].textContent = newColumn[j];
  83. }
  84. }
  85. }
  86. function moveLeft() {
  87. for (let i = 0; i < boardSize; i++) {
  88. let row = [];
  89. for (let j = 0; j < boardSize; j++) {
  90. row.push(board[i * boardSize + j].textContent);
  91. }
  92. let newRow = slideTiles(row);
  93. for (let j = 0; j < boardSize; j++) {
  94. board[i * boardSize + j].textContent = newRow[j];
  95. }
  96. }
  97. }
  98. function moveRight() {
  99. for (let i = 0; i < boardSize; i++) {
  100. let row = [];
  101. for (let j = 0; j < boardSize; j++) {
  102. row.push(board[i * boardSize + j].textContent);
  103. }
  104. let newRow = slideTiles(row.reverse()).reverse();
  105. for (let j = 0; j < boardSize; j++) {
  106. board[i * boardSize + j].textContent = newRow[j];
  107. }
  108. }
  109. }
  110. function slideTiles(tiles) {
  111. let newTiles = tiles.filter(tile => tile);
  112. for (let i = 0; i < newTiles.length - 1; i++) {
  113. if (newTiles[i] === newTiles[i + 1]) {
  114. newTiles[i] = (parseInt(newTiles[i]) * 2).toString();
  115. newTiles[i + 1] = '';
  116. }
  117. }
  118. newTiles = newTiles.filter(tile => tile);
  119. while (newTiles.length < boardSize) {
  120. newTiles.push('');
  121. }
  122. return newTiles;
  123. }
  124. buttons.up.addEventListener('click', () => move('up'));
  125. buttons.down.addEventListener('click', () => move('down'));
  126. buttons.left.addEventListener('click', () => move('left'));
  127. buttons.right.addEventListener('click', () => move('right'));
  128. document.addEventListener('keydown', (e) => {
  129. switch (e.key) {
  130. case 'w': move('up'); break;
  131. case 's': move('down'); break;
  132. case 'a': move('left'); break;
  133. case 'd': move('right'); break;
  134. }
  135. });
  136. initBoard();
  137. });

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/代码探险家/article/detail/845712
推荐阅读
相关标签
  

闽ICP备14008679号