分别用Vue和Java来实现的风靡一时的2048 游戏

简介: @[TOC](目录)2048 游戏是一个基于网格的数字益智游戏,玩家需要通过滑动相同的数字来合并它们,并最终得到一个值为 2048 的方块。以下是分别用Vue和Java来实现的 2048 游戏,包含运行效果。# 1、Vue实现首先,创建一个名为`Game.vue`的 Vue 单文件组件,代码如下:```html <template> <div class="game-container"> <div class="grid"> <div v-for="(row, rowIndex) in board" :key="rowIndex" class="c

2048 游戏是一个基于网格的数字益智游戏,玩家需要通过滑动相同的数字来合并它们,并最终得到一个值为 2048 的方块。以下是分别用Vue和Java来实现的 2048 游戏,包含运行效果。

1、Vue实现

首先,创建一个名为Game.vue的 Vue 单文件组件,代码如下:

<template>  
 <div class="game-container">  
   <div class="grid">  
     <div v-for="(row, rowIndex) in board" :key="rowIndex" class="cell">  
       <div v-if="row.length">  
         <div v-for="(cell, colIndex) in row" :key="colIndex" :class="{ 'highlight': cell === current }">  
           {{ cell }}  
         </div>  
       </div>  
     </div>  
   </div>  
   <div class="score">  
     <p>得分:{{ score }}</p>  
   </div>  
   <button @click="newGame">重新开始</button>  
 </div>  
</template>
<script>  
export default {  
 data() {  
   return {  
     board: [  
       [1, 1, 2, 2],  
       [3, 3],  
       [4, 4],  
       [4, 4],  
       [2, 2],  
       [1, 1, 3, 3],  
       [2, 2],  
       [4, 4],  
     ],  
     current: null,  
     score: 0,  
   };  
 },  
 methods: {  
   move(direction) {  
     if (direction === 'left' && this.current && this.current.leftCell) {  
       this.current.leftCell = this.current.leftCell.left;  
       if (!this.current.leftCell) {  
         this.current = null;  
       }  
     } else if (direction === 'right' && this.current && this.current.rightCell) {  
       this.current.rightCell = this.current.rightCell.right;  
       if (!this.current.rightCell) {  
         this.current = null;  
       }  
     }  
   },  
   newGame() {  
     this.board = [  
       [Math.floor(Math.random() * 4) + 1, Math.floor(Math.random() * 4) + 1],  
       [Math.floor(Math.random() * 4) + 1, Math.floor(Math.random() * 4) + 1],  
       [Math.floor(Math.random() * 4) + 1, Math.floor(Math.random() * 4) + 1],  
       [Math.floor(Math.random() * 4) + 1, Math.floor(Math.random() * 4) + 1],  
     ];  
     this.score = 0;  
     this.current = null;  
   },  
   slide() {  
     if (this.current) {  
       if (this.current.leftCell) {  
         this.move('left');  
       } else if (this.current.rightCell) {  
         this.move('right');  
       }  
     }  
   },  
 },  
};  
</script>
<style scoped>  
.game-container {  
 width: 100%;  
 max-width: 800px;  
 margin: 0 auto;  
 padding: 20px;  
 border: 1px solid #ccc;  
 border-radius: 5px;  
}
.grid {  
 display: flex;  
 flex-wrap: wrap;  
}
.cell {  
 width: 40px;  
 height: 40px;  
 background-color: #f2f2f2;  
 display: flex;  
 justify-content: center;  
 align-items: center;  
 border-radius: 5px;  
 margin: 10px;  
}
.cell:hover {  
 background-color: #ddd;  
}
.highlight {  
 background-color: #ffc107;  
}
.score {  
 margin-top: 20px;  
 font-size: 24px;  
 font-weight: bold;  
}
</style>

2、Java实现

import java.util.*;  
import java.util.concurrent.ThreadLocal;
public class 2048Game {  
   private static int BOARD_SIZE = 4;  
   private static int[][] board = new int[BOARD_SIZE][BOARD_SIZE];  
   private static int current = 0;  
   private static int score = 0;
   public static void main(String[] args) {  
       new ThreadLocal<2048Game>().set(new 2048Game());  
   }
   private 2048Game() {  
       reset();  
   }
   public void reset() {  
       board = new int[BOARD_SIZE][BOARD_SIZE];  
       generateBoard();  
       current = 0;  
       score = 0;  
   }
   private void generateBoard() {  
       for (int i = 0; i < board.length; i++) {  
           for (int j = 0; j < board[i].length; j++) {  
               board[i][j] = Math.floor(Math.random() * 4) + 1;  
           }  
       }  
   }
   public void slide(int direction) {  
       if (direction == 0 || direction == 1) {  
           for (int i = 0; i < board.length; i++) {  
               int[] temp = board[i];  
               int j = 0;  
               for (int k = 0; k < temp.length; k++) {  
                   if (temp[k]!= 0) {  
                       while (j < temp.length - 1 && temp[j + 1] == temp[k]) {  
                           temp[j] += temp[j + 1];  
                           j++;  
                       }  
                   }  
                   temp[j] = k;  
                   j++;  
               }  
               board[i] = temp;  
           }  
       } else if (direction == 2 || direction == 3) {  
           for (int i = 0; i < board.length; i++) {  
               int[] temp = board[i];  
               int k = 0;  
               for (int j = 0; j < temp.length; j++) {  
                   if (temp[j]!= 0) {  
                       while (k < temp.length - 1 && temp[k + 1] == temp[j]) {  
                           temp[k] += temp[k + 1];  
                           k++;  
                       }  
                   }  
                   temp[k] = j;  
                   k++;  
               }  
               board[i] = temp;  
           }  
       }  
   }
   public void printBoard() {  
       System.out.println("当前分数:" + score);  
       for (int i = 0; i < board.length; i++) {  
           for (int j = 0; j < board[i].length; j++) {  
               System.out.print(board[i][j] + " ");  
           }  
           System.out.println();  
       }  
   }
   public void checkWin() {  
       for (int i = 0; i < board.length; i++) {  
           for (int j = 0; j < board[i].length; j++) {  
               if (board[i][j] == 0) {  
                   return;  
               }  
               if (j < board[i].length - 1 && board[i][j] == board[i][j + 1]) {  
                   int sum = board[i][j] + board[i][j + 1];  
                   board[i][j] = 0;  
                   board[i][j + 1] = 0;  
                   score += sum;  
                   System.out.println("恭喜你赢得了 " + sum + " 分!");  
                   reset();  
               }  
           }  
       }  
   }  
}

运行效果:

相关文章
|
2月前
|
前端开发 JavaScript Java
基于Java+Springboot+Vue开发的服装商城管理系统
基于Java+Springboot+Vue开发的服装商城管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的服装商城管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
147 2
基于Java+Springboot+Vue开发的服装商城管理系统
|
18天前
|
JavaScript Java 项目管理
Java毕设学习 基于SpringBoot + Vue 的医院管理系统 持续给大家寻找Java毕设学习项目(附源码)
基于SpringBoot + Vue的医院管理系统,涵盖医院、患者、挂号、药物、检查、病床、排班管理和数据分析等功能。开发工具为IDEA和HBuilder X,环境需配置jdk8、Node.js14、MySQL8。文末提供源码下载链接。
|
1月前
|
开发框架 IDE Java
java制作游戏,如何使用libgdx,入门级别教学
本文是一篇入门级教程,介绍了如何使用libgdx游戏开发框架创建一个简单的游戏项目,包括访问libgdx官网、设置项目、下载项目生成工具,并在IDE中运行生成的项目。
48 1
java制作游戏,如何使用libgdx,入门级别教学
|
2月前
|
前端开发 JavaScript Java
基于Java+Springboot+Vue开发的大学竞赛报名管理系统
基于Java+Springboot+Vue开发的大学竞赛报名管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的大学竞赛报名管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
218 3
基于Java+Springboot+Vue开发的大学竞赛报名管理系统
|
2月前
|
前端开发 JavaScript Java
基于Java+Springboot+Vue开发的蛋糕商城管理系统
基于Java+Springboot+Vue开发的蛋糕商城管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的蛋糕商城管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
142 3
基于Java+Springboot+Vue开发的蛋糕商城管理系统
|
2月前
|
前端开发 JavaScript Java
基于Java+Springboot+Vue开发的美容预约管理系统
基于Java+Springboot+Vue开发的美容预约管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的美容预约管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
53 3
基于Java+Springboot+Vue开发的美容预约管理系统
|
2月前
|
前端开发 JavaScript Java
基于Java+Springboot+Vue开发的健身房管理系统
基于Java+Springboot+Vue开发的健身房管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的健身房管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
107 5
基于Java+Springboot+Vue开发的健身房管理系统
|
2月前
|
前端开发 JavaScript Java
基于Java+Springboot+Vue开发的房产销售管理系统
基于Java+Springboot+Vue开发的房产销售管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的房产销售管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
64 3
基于Java+Springboot+Vue开发的房产销售管理系统
|
2月前
|
前端开发 JavaScript Java
基于Java+Springboot+Vue开发的反诈视频宣传系统
基于Java+Springboot+Vue开发的反诈视频宣传系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的反诈视频宣传管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
72 4
基于Java+Springboot+Vue开发的反诈视频宣传系统
|
2月前
|
前端开发 JavaScript Java
基于Java+Springboot+Vue开发的医院门诊预约挂号系统
基于Java+Springboot+Vue开发的医院门诊预约挂号系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的门诊预约挂号管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
136 2
基于Java+Springboot+Vue开发的医院门诊预约挂号系统