当前位置: 首页 > news >正文

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

目录

  • 1、Vue实现
  • 2、Java实现

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();  }  }  }  }  
}

运行效果:

当前分数:0

相关文章:

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

目录 1、Vue实现2、Java实现 2048 游戏是一个基于网格的数字益智游戏&#xff0c;玩家需要通过滑动相同的数字来合并它们&#xff0c;并最终得到一个值为 2048 的方块。以下是分别用Vue和Java来实现的 2048 游戏&#xff0c;包含运行效果。 1、Vue实现 首先&#xff0c;创建一…...

echarts甘特图 一个值多条线

先看图 这里我们用到的是 series &#xff1a;type:custom 自定义&#xff0c;但是这里我遇到一个问题&#xff0c;就是不过你在series里push多少数据&#xff0c;图表上显示的都是在同一水平线&#xff0c;用了好多方法都不好使&#xff0c; renderItem: (params, api) >…...

多态性说明

多态 多态性多态性类型描述编译时多态和运行时多态的差异go 语言多态性 多态性 多态性类型描述 多态性是面向对象编程中的一个重要概念&#xff0c;它允许不同的对象通过相同的接口表现出不同的行为&#xff0c;从而实现更加灵活和可扩展的代码结构。多态性有助于降低代码的耦…...

2023-08-04 LeetCode每日一题(不同路径 III)

2023-08-04每日一题 一、题目编号 980. 不同路径 III二、题目链接 点击跳转到题目位置 三、题目描述 在二维网格 grid 上&#xff0c;有 4 种类型的方格&#xff1a; 1 表示起始方格。且只有一个起始方格。2 表示结束方格&#xff0c;且只有一个结束方格。0 表示我们可以…...

腾讯云服务器地域怎么选?可用区是什么?

腾讯云服务器地域有什么区别&#xff1f;怎么选择比较好&#xff1f;地域选择就近原则&#xff0c;距离地域越近网络延迟越低&#xff0c;速度越快。关于地域的选择还有很多因素&#xff0c;地域节点选择还要考虑到网络延迟速度方面、内网连接、是否需要备案、不同地域价格因素…...

第一百二十三天学习记录:C++提高:STL-vector容器(下)(黑马教学视频)

vector插入和删除 功能描述&#xff1a; 对vector容器进行插入、删除操作 函数原型&#xff1a; push_back(ele); //尾部插入元素ele pop_back(); //删除最后一个元素 insert(const_iterator pos, ele); //迭代器指向位置pos插入元素ele insert(const_iterator pos, int cou…...

谈谈Spring与字节码生成技术

Spring框架是一个面向企业级Java应用开发的开源框架&#xff0c;它提供了许多功能和特性来简化Java开发过程。字节码生成技术在Spring框架中起着重要的作用&#xff0c;用于实现依赖注入&#xff08;Dependency Injection&#xff09;和面向切面编程&#xff08;Aspect-Oriente…...

Java数组详解 -- 基础知识与常用操作

文章目录 前言一、初识数组1. 数组的定义2. 数组的特点3. 声明和初始化数组4. 默认初始化值 二、访问和操作数组元素1. 数组的索引和范围2. 通过索引访问数组元素3. 修改数组元素的值 三、数组的长度和属性1. 数组的长度计算2. 数组的长度属性3. 数组越界的错误 四、数组的遍历…...

(统计学习方法|李航)第五章 决策树——一二三节:决策树模型与学习,特征选择,决策树的生成,

目录 一&#xff0c;决策树模型与学习 1.决策数模型 2.决策树与if-then规则 3.决策树与条件概率分布 4.决策树学习 二&#xff0c;特征选择 1.特征选择问题 2.信息增益 3.信息增益比 三&#xff0c;决策树的生成 1.ID3算法 2.C4.5的生成算法 一&#xff0c;决策树模型…...

qt lamda表达式及捕获变量列表符号说明及示例

问题描述: 最近发现很多人都喜欢用Lamda表达式了,至于他们到底知不知道自己用的是什么意思,那就另说了。 虽然我个人并不太喜欢,因为很多地方没法像以前信号和槽那样清晰了,而且很多生成UML的软件估计也不支持解析转成对应的序列图啥的。 但是这个lamda写法确实挺方便的…...

第十六章、【Linux】程序管理与SELinux初探

16.1 什么是程序 &#xff08;process&#xff09; 在Linux 系统当中&#xff1a;“触发任何一个事件时&#xff0c;系统都会将他定义成为一个程序&#xff0c;并且给予这个程序一个 ID &#xff0c;称为 PID&#xff0c;同时依据启发这个程序的使用者与相关属性关系&#xff…...

ElasticSearch索引生命周期管理--DELETE

概要 ElasticSearch中的索引生命周期管理&#xff0c;也就是ilm&#xff08;Manage the index lifecycle&#xff09;,是指定了索引在不同周期下的处理策略。ilm 的对象是索引而不是索引中的数据。ilm 包括四个阶段&#xff1a;hot 、warm、cold和delete。hot、warm和cold表示…...

sentinel简单使用

核心demo&#xff1a; 1 引入依赖: <dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-core</artifactId><version>1.8.0</version> </dependency>2 核心代码&#xff1a; 3 限流保护代码&#xff1a;…...

C#小轮子:自动连续Ping网络地址

文章目录 前言Ping代码异步问题 前言 工作中&#xff0c;我们经常用到Ping这个指令&#xff0c;有时候我们需要Ping整个网段来查看这个网段上面有什么设备&#xff0c;哪些Ip地址是通的&#xff0c;这个时候就需要Ping指令 Ping 代码 我这个是批量Ping的代码&#xff0c;而…...

react入门笔记

什么是React? React是一个用于创建用户界面的开源前端javaScript库。它是声明式的、高效的和灵活的&#xff0c;并且他坚持基于组件的方法&#xff0c;这使得我们能够创建可重用的UI组件。 React是一个开源的前端javaScript库&#xff0c;用于构建用户界面或者UI组件。它是由…...

记录--前端重新部署如何通知用户

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 1. 场景 前端构建完上线&#xff0c;用户还停留还在老页面&#xff0c;用户不知道网页重新部署了&#xff0c;跳转页面的时候有时候js连接hash变了导致报错跳不过去&#xff0c;并且用户体验不到新功能…...

WPS的excel表格单元格拖动数字日期等 不自增原因

对着表格中的每个单元格右下角,在变成下图,黑十字后,拖动这个十字.就会在右侧出现一个小窗口. 里面菜单中可以选择按序数增加 但是,如果拖动,发现小窗口菜单不出现.说明这一栏开启了筛选功能.清空筛选条件后,即可恢复自增功能....

2308C++简单异步懒

Lazy Lazy由C20无栈协程实现.一个Lazy闭包一个懒求值的计算任务. 使用Lazy 想用Lazy,需要先#inlude<async_simple/coro/Lazy.h>,再实现返回类型为Lazy<T>的协程函数即可.如: # 包含<简单异步/协程/懒.h>懒<整>任务1(整 x){协中 x;//带有协中的函数…...

Linux常规操作命令

日升时奋斗&#xff0c;日落时自省 目录 1、vim 1.1、工作模式 1.2、末行模式操作相关命令 1.2.1、保存退出操作 1.2.2、查找替换 1.3、输入模式操作相关命令 1.3.1、移动相关命令 1.3.2、删除和剪切命令 1.3.3、复制操作 1.3.4、撤销 2、head 3、tail 4、ps 5、…...

日期切换

组件&#xff1a;<template><div class"time-picker"><el-radio-group size"small" v-model"timeType" change"changePickerType"><el-radio-button label"hour" v-if"isShow">时</el…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API&#xff0c;用于在函数组件中使用 state 和其他 React 特性&#xff08;例如生命周期方法、context 等&#xff09;。Hooks 通过简洁的函数接口&#xff0c;解决了状态与 UI 的高度解耦&#xff0c;通过函数式编程范式实现更灵活 Rea…...

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求&#xff0c;设计一个邮件发奖的小系统&#xff0c; 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其…...

CTF show Web 红包题第六弹

提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框&#xff0c;很难让人不联想到SQL注入&#xff0c;但提示都说了不是SQL注入&#xff0c;所以就不往这方面想了 ​ 先查看一下网页源码&#xff0c;发现一段JavaScript代码&#xff0c;有一个关键类ctfs…...

C++:std::is_convertible

C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

python/java环境配置

环境变量放一起 python&#xff1a; 1.首先下载Python Python下载地址&#xff1a;Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个&#xff0c;然后自定义&#xff0c;全选 可以把前4个选上 3.环境配置 1&#xff09;搜高级系统设置 2…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具

文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

vue3 字体颜色设置的多种方式

在Vue 3中设置字体颜色可以通过多种方式实现&#xff0c;这取决于你是想在组件内部直接设置&#xff0c;还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法&#xff1a; 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法&#xff0c;用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理&#xff0c;能够自动确定一个阈值&#xff0c;将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

Java多线程实现之Callable接口深度解析

Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...