最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于SpringBoot和Vue寫一個2048小游戲

 更新時間:2024年08月23日 10:03:23   作者:戰(zhàn)族狼魂  
創(chuàng)建一個基于 Java Spring Boot 后端和 Vue 前端的 2048 游戲,可以按照以下步驟進行,這個項目將包括后端(用來處理游戲邏輯)和前端(用來顯示游戲界面和與用戶交互),感興趣的小伙伴可以參考本文自己動手嘗試一下

1. 設置項目結構

你需要創(chuàng)建一個包含兩個部分的項目:

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

2. 后端 (Spring Boot)

首先,創(chuàng)建一個新的 Spring Boot 項目。你可以使用 Spring Initializr 或者任何其他你喜歡的方式。

項目依賴

確保添加以下依賴:

  • Spring Web
  • Spring Boot DevTools

編寫游戲邏輯

在 src/main/java 下創(chuàng)建一個用于處理游戲邏輯的包,例如 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)

創(chuàng)建一個新的 Vue 項目,你可以使用 Vue CLI 或者 Vite 等工具。

設置 Vue 項目

安裝 Axios 以便與后端進行通信:

npm install axios

創(chuàng)建游戲界面

在 src/components 目錄下創(chuàng)建一個 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 游戲。

到此這篇關于基于SpringBoot和Vue寫一個2048小游戲的文章就介紹到這了,更多相關SpringBoot Vue 2048游戲內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 關于訪問后端接口報404錯誤問題的解決方法(全網最細!)

    關于訪問后端接口報404錯誤問題的解決方法(全網最細!)

    404頁面的出現會降低用戶體驗,那么導致404頁面出現的原因是什么呢?這篇文章主要給大家介紹了關于訪問后端接口報404錯誤問題的解決方法,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-04-04
  • 全面解析JTA 深度歷險

    全面解析JTA 深度歷險

    本文介紹了利用 JTA 深度歷險的相關內容,充分舉例說明JTA的原理和事務處理等相關內容,十分詳細,需要的朋友可以參考下。
    2017-09-09
  • SpringBoot調用DeepSeek接口的實現

    SpringBoot調用DeepSeek接口的實現

    本文主要介紹了SpringBoot調用DeepSeek接口的實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-02-02
  • Mybatis many=@Many的傳值問題解決

    Mybatis many=@Many的傳值問題解決

    本文詳細介紹了在MyBatis通過主查詢將單個或多個值傳遞給子查詢的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-11-11
  • 阿里通用OCR文字識別/圖像識別/圖片識別對接代碼示例(Java篇)

    阿里通用OCR文字識別/圖像識別/圖片識別對接代碼示例(Java篇)

    這篇文章主要介紹了阿里通用OCR文字識別/圖像識別/圖片識別對接(Java篇)的相關資料,文中詳細介紹了包括開通服務、測試圖片、編寫識別代碼、處理識別結果等步驟,需要的朋友可以參考下
    2024-12-12
  • SpringBoot多環(huán)境切換的配置實現

    SpringBoot多環(huán)境切換的配置實現

    在日常的開發(fā)中,一般都會分好幾種環(huán)境,本文就來介紹一下SpringBoot多環(huán)境切換的配置實現,具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • SpringAMQP消息隊列(SpringBoot集成RabbitMQ方式)

    SpringAMQP消息隊列(SpringBoot集成RabbitMQ方式)

    這篇文章主要介紹了SpringAMQP消息隊列(SpringBoot集成RabbitMQ方式),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • spring boot打jar包發(fā)布的方法

    spring boot打jar包發(fā)布的方法

    這篇文章主要介紹了spring boot打jar包發(fā)布的方法,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-06-06
  • Java異常處理機制try catch流程詳解

    Java異常處理機制try catch流程詳解

    這篇文章主要介紹了Java異常處理機制try catch流程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-03-03
  • SpringMVC結合ajaxfileupload.js實現文件無刷新上傳

    SpringMVC結合ajaxfileupload.js實現文件無刷新上傳

    這篇文章主要介紹了SpringMVC結合ajaxfileupload.js實現文件無刷新上傳,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-10-10

最新評論

馆陶县| 汉川市| 湖南省| 盐池县| 夹江县| 偃师市| 楚雄市| 堆龙德庆县| 上高县| 华蓥市| 平顺县| 右玉县| 云龙县| 平湖市| 玉环县| 军事| 资兴市| 洪洞县| 德钦县| 安龙县| 万州区| 金山区| 东乌珠穆沁旗| 临朐县| 桂阳县| 濮阳市| 祁门县| 临泽县| 万载县| 莱西市| 巴彦淖尔市| 青龙| 洮南市| 买车| 石嘴山市| 聂拉木县| 正蓝旗| 通州区| 昭通市| 砚山县| 齐齐哈尔市|