2048——Java控制台版本

简介: 2048——Java控制台版本

贪心、杂凑、递归、分类、评分、哈希、共识、聚类、分治、启发式、粒子群、最大期望、最小完成时间、序列最小优化。。。。算法无数,但是基础类似,无非坐标处理。那么开启一个坐标小游戏2048吧~


一个简单的2048小游戏的操作提示——Java控制台版本:


微信图片_20220113195931.png


import java.util.Random;
import java.util.Scanner;
/**
 * 
 * @author 老师付 2021年5月29日15:05:21
 */
public class Action {
  static Random random = new Random();
  static Scanner scanner = new Scanner(System.in);
  private static boolean isNotFull(int[][] board) {
    for (int[] ia : board)
      for (int i : ia)
        if (i == 0)
          return true;
    return false;
  }
  private static void generate(int[][] board) {
    assert isNotFull(board);
    while (true) {
      int number = random.nextInt(16);
      int row = number / 4;
      int col = number % 4;
      if (board[row][col] == 0) {
        board[row][col] = System.currentTimeMillis() % 2 == 0 ? 2 : 4;
        break;
      }
    }
  }
  static int[][] init() {
    int[][] numArray = new int[4][4];
    generate(numArray);
    generate(numArray);
    return numArray;
  }
  static void showBoard(int[][] board) {
    for (int[] numArray : board) {
      for (int i : numArray) {
        if (i == 0) {
          System.out.printf("%4s", ".");
        } else {
          System.out.printf("%4s", i);
        }
      }
      System.out.println();
    }
  }
  static char acceptInput() {
    while (true) {
      String line = scanner.nextLine().toLowerCase();
      char direction = line.charAt(0);
      if ("wasdWASD".indexOf(direction) != -1) {
        return direction;
      }else {
        System.out.println("请按要求输入操作指令:");
        System.out.println("up:w/W");
        System.out.println("left:a/A");
        System.out.println("down:s/S");
        System.out.println("right:d/D");
      }
    }
  }
  static void downBlock(int[][] numArray) {
    for (int i = 0; i < 4; i++) {
      for (int k = 0; k < 3; k++) {
        for (int j = 3; j > 0; j--) {
          if (numArray[j][i] == 0) {
            numArray[j][i] = numArray[j - 1][i];
            numArray[j - 1][i] = 0;
          }
        }
        for (int j = 3; j > 0; j--) {
          if (numArray[j][i] == numArray[j - 1][i]) {
            numArray[j][i] = 2 * numArray[j][i];
            numArray[j - 1][i] = 0;
          }
        }
      }
    }
    generate(numArray);
  }
  static void upBlock(int[][] numArray) {
    for (int i = 0; i < 4; i++) {
      for (int k = 0; k < 3; k++) {
        for (int j = 0; j < 3; j++) {
          if (numArray[j][i] == 0) {
            numArray[j][i] = numArray[j + 1][i];
            numArray[j + 1][i] = 0;
          }
        }
        for (int j = 0; j < 3; j++) {
          if (numArray[j][i] == numArray[j + 1][i]) {
            numArray[j][i] = 2 * numArray[j][i];
            numArray[j + 1][i] = 0;
          }
        }
      }
    }
    generate(numArray);
  }
  static void leftBlock(int[][] numArray) {
    for (int i = 0; i < 4; i++) {
      for (int k = 0; k < 3; k++) {
        for (int j = 0; j < 3; j++) {
          if (numArray[i][j] == 0) {
            numArray[i][j] = numArray[i][j + 1];
            numArray[i][j + 1] = 0;
          }
        }
        for (int j = 0; j < 3; j++) {
          if (numArray[i][j] == numArray[i][j + 1]) {
            numArray[i][j] = 2 * numArray[i][j];
            numArray[i][j + 1] = 0;
          }
        }
      }
    }
    generate(numArray);
  }
  static void rightBlock(int[][] numArray) {
    for (int i = 0; i < 4; i++) {
      for (int k = 0; k < 3; k++) {
        for (int j = 3; j > 0; j--) {
          if (numArray[i][j] == 0) {
            numArray[i][j] = numArray[i][j - 1];
            numArray[i][j - 1] = 0;
          }
        }
        for (int j = 3; j > 0; j--) {
          if (numArray[i][j] == numArray[i][j - 1]) {
            numArray[i][j] = 2 * numArray[i][j];
            numArray[i][j - 1] = 0;
          }
        }
      }
    }
    generate(numArray);
  }
  static void process(int[][] board, char direction) {
    switch (direction) {
    case 'w':
      upBlock(board);
      break;
    case 'a':
      leftBlock(board);
      break;
    case 's':
      downBlock(board);
      break;
    case 'd':
      rightBlock(board);
      break;
    }
  }
  public static void main(String[] args) {
    System.out.println("游戏开始:请按照操作提示游戏:");
    System.out.println("up:w/W");
    System.out.println("left:a/A");
    System.out.println("down:s/S");
    System.out.println("right:d/D");
    int[][] board = init();
    while (true) {
      showBoard(board);
      char direction = acceptInput();
      process(board, direction);
    }
  }
}


玩法示例:输入大小写均可。


微信图片_20220113195954.png


微信图片_20220113195958.png

相关文章
|
9月前
|
安全 架构师 Java
Java LTS版本进化秀:从8到21的欢乐升级之旅
困惑于Java版本选择?轻松幽默地穿越Java LTS版本时光隧道,掌握从Java 8到21的关键特性。通过一家初创公司的系统升级故事,直观了解每个版本如何解决代码冗余、性能瓶颈等开发痛点,助你在技术选型中做出明智决策。
525 7
|
JavaScript NoSQL Java
接替此文【下篇-服务端+后台管理】优雅草蜻蜓z系统JAVA版暗影版为例-【蜻蜓z系列通用】-2025年全新项目整合搭建方式-这是独立吃透代码以后首次改变-独立PC版本vue版搭建教程-优雅草卓伊凡
接替此文【下篇-服务端+后台管理】优雅草蜻蜓z系统JAVA版暗影版为例-【蜻蜓z系列通用】-2025年全新项目整合搭建方式-这是独立吃透代码以后首次改变-独立PC版本vue版搭建教程-优雅草卓伊凡
877 96
接替此文【下篇-服务端+后台管理】优雅草蜻蜓z系统JAVA版暗影版为例-【蜻蜓z系列通用】-2025年全新项目整合搭建方式-这是独立吃透代码以后首次改变-独立PC版本vue版搭建教程-优雅草卓伊凡
|
11月前
|
安全 Java API
Java 17 及以上版本核心特性在现代开发实践中的深度应用与高效实践方法 Java 开发实践
本项目以“学生成绩管理系统”为例,深入实践Java 17+核心特性与现代开发技术。采用Spring Boot 3.1、WebFlux、R2DBC等构建响应式应用,结合Record类、模式匹配、Stream优化等新特性提升代码质量。涵盖容器化部署(Docker)、自动化测试、性能优化及安全加固,全面展示Java最新技术在实际项目中的应用,助力开发者掌握现代化Java开发方法。
484 1
|
JavaScript Java 关系型数据库
家政系统源码,java版本
这是一款基于SpringBoot后端框架、MySQL数据库及Uniapp移动端开发的家政预约上门服务系统。
429 6
家政系统源码,java版本
|
10月前
|
Cloud Native Java API
Java Spring框架技术栈选和最新版本及发展史详解(截至2025年8月)-优雅草卓伊凡
Java Spring框架技术栈选和最新版本及发展史详解(截至2025年8月)-优雅草卓伊凡
1707 0
|
Java 中间件 测试技术
java依赖冲突解决问题之jar包版本冲突无法通过升降级解决时如何解决
java依赖冲突解决问题之jar包版本冲突无法通过升降级解决时如何解决
|
Java 应用服务中间件 Windows
【应用服务 App Service】App Service 中部署Java项目,查看Tomcat配置及上传自定义版本
【应用服务 App Service】App Service 中部署Java项目,查看Tomcat配置及上传自定义版本
250 0
|
缓存 Java Maven
java: 警告: 源发行版 11 需要目标发行版 11 无效的目标发行版: 11 jdk版本不符,项目jdk版本为其他版本
如何解决Java项目中因JDK版本不匹配导致的编译错误,包括修改`pom.xml`文件、调整项目结构、设置Maven和JDK版本,以及清理缓存和重启IDEA。
914 3
java: 警告: 源发行版 11 需要目标发行版 11 无效的目标发行版: 11 jdk版本不符,项目jdk版本为其他版本
|
Java Linux Windows
如何查看已安装的 Java 版本
要查看已安装的 Java 版本,打开命令提示符或终端,输入 `java -version`,回车后即可显示当前系统中 Java 的版本信息。
5696 1
|
Ubuntu Java Linux
如何检查 Java 版本是否兼容
要检查Java版本是否兼容,可在命令行输入“java -version”查看当前安装的Java版本,然后对比目标应用所需的Java版本,确保其满足要求。
1218 1