欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 新车 > 用SpringBoot和vue写一个2048小游戏

用SpringBoot和vue写一个2048小游戏

2025/5/7 9:26:10 来源:https://blog.csdn.net/nndsb/article/details/141397278  浏览:    关键词:用SpringBoot和vue写一个2048小游戏

创建一个基于 Java Spring Boot 后端和 Vue 前端的 2048 游戏,可以按照以下步骤进行。这个项目将包括后端(用来处理游戏逻辑)和前端(用来显示游戏界面和与用户交互)。

目录

1. 设置项目结构

2. 后端 (Spring Boot)

项目依赖

编写游戏逻辑

GameController.java

Game.java

3. 前端 (Vue.js)

设置 Vue 项目

创建游戏界面

在 App.vue 中导入 Game.vue

4. 运行和调试


1. 设置项目结构

你需要创建一个包含两个部分的项目:

  • 后端 (Java Spring Boot)
  • 前端 (Vue.js)

2. 后端 (Spring Boot)

首先,创建一个新的 Spring Boot 项目。你可以使用 Spring Initializr 或者任何其他你喜欢的方式。

项目依赖

确保添加以下依赖:

  • Spring Web
  • Spring Boot DevTools
编写游戏逻辑

src/main/java 下创建一个用于处理游戏逻辑的包,例如 com.example.game.

GameController.java
package com.example.game;import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;@RestController
public class GameController {private Game game = new Game();@GetMapping("/game")public int[][] getGameState() {return game.getBoard();}@PostMapping("/move")public int[][] makeMove(@RequestBody String direction) {switch (direction) {case "up":game.moveUp();break;case "down":game.moveDown();break;case "left":game.moveLeft();break;case "right":game.moveRight();break;}game.addRandomTile();return game.getBoard();}
}
Game.java
package com.example.game;import java.util.Random;public class Game {private int[][] board = new int[4][4];private Random random = new Random();public Game() {addRandomTile();addRandomTile();}public int[][] getBoard() {return board;}public void moveUp() {for (int col = 0; col < 4; col++) {int[] column = new int[4];int index = 0;for (int row = 0; row < 4; row++) {if (board[row][col] != 0) {column[index++] = board[row][col];}}merge(column);for (int row = 0; row < 4; row++) {board[row][col] = column[row];}}}public void moveDown() {for (int col = 0; col < 4; col++) {int[] column = new int[4];int index = 0;for (int row = 3; row >= 0; row--) {if (board[row][col] != 0) {column[index++] = board[row][col];}}merge(column);for (int row = 0; row < 4; row++) {board[3 - row][col] = column[row];}}}public void moveLeft() {for (int row = 0; row < 4; row++) {int[] newRow = new int[4];int index = 0;for (int col = 0; col < 4; col++) {if (board[row][col] != 0) {newRow[index++] = board[row][col];}}merge(newRow);board[row] = newRow;}}public void moveRight() {for (int row = 0; row < 4; row++) {int[] newRow = new int[4];int index = 0;for (int col = 3; col >= 0; col--) {if (board[row][col] != 0) {newRow[index++] = board[row][col];}}merge(newRow);for (int col = 0; col < 4; col++) {board[row][3 - col] = newRow[col];}}}private void merge(int[] row) {for (int i = 0; i < 3; i++) {if (row[i] != 0 && row[i] == row[i + 1]) {row[i] *= 2;row[i + 1] = 0;i++;}}int[] newRow = new int[4];int index = 0;for (int num : row) {if (num != 0) {newRow[index++] = num;}}System.arraycopy(newRow, 0, row, 0, 4);}public void addRandomTile() {int emptyTiles = 0;for (int[] row : board) {for (int tile : row) {if (tile == 0) {emptyTiles++;}}}if (emptyTiles == 0) {return;}int randomTile = random.nextInt(emptyTiles);int value = random.nextInt(10) < 9 ? 2 : 4;for (int i = 0; i < 4; i++) {for (int j = 0; j < 4; j++) {if (board[i][j] == 0) {if (randomTile == 0) {board[i][j] = value;return;}randomTile--;}}}}
}

3. 前端 (Vue.js)

创建一个新的 Vue 项目,你可以使用 Vue CLI 或者 Vite 等工具。

设置 Vue 项目

安装 Axios 以便与后端进行通信:

npm install axios
创建游戏界面

src/components 目录下创建一个 Game.vue 组件:

<template><div class="game"><div class="board"><div v-for="(row, rowIndex) in board" :key="rowIndex" class="row"><div v-for="(cell, colIndex) in row" :key="colIndex" class="cell">{{ cell || '' }}</div></div></div><div class="controls"><button @click="move('up')">Up</button><button @click="move('down')">Down</button><button @click="move('left')">Left</button><button @click="move('right')">Right</button></div></div>
</template><script>
import axios from 'axios';export default {data() {return {board: [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]};},mounted() {this.getBoard();},methods: {async getBoard() {const response = await axios.get('/game');this.board = response.data;},async move(direction) {const response = await axios.post('/move', direction);this.board = response.data;}}
};
</script><style>
.game {text-align: center;
}.board {display: inline-block;
}.row {display: flex;
}.cell {width: 50px;height: 50px;background-color: #ccc;margin: 5px;display: flex;justify-content: center;align-items: center;font-size: 18px;font-weight: bold;
}.controls {margin-top: 20px;
}
</style>
App.vue 中导入 Game.vue
<template><div id="app"><Game /></div>
</template><script>
import Game from './components/Game.vue';export default {name: 'App',components: {Game}
};
</script><style>
#app {font-family: Avenir, Helvetica, Arial, sans-serif;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;text-align: center;margin-top: 60px;
}
</style>

4. 运行和调试

  • 启动 Spring Boot 项目。
  • 启动 Vue 前端项目。

确保 Spring Boot 的默认端口(8080)与 Vue 的默认端口(通常是8081)不会冲突。

你现在应该能够在浏览器中访问 Vue 前端,并与 Spring Boot 后端进行交互,从而玩 2048 游戏。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词