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

相关文章
|
1月前
|
Java
java实战项目超市管理系统控制台版
java实战项目超市管理系统控制台版
|
3天前
|
移动开发 前端开发 Java
第一次用java17记录运行ruoyi-vue-plus5.X版本
第一次用java17记录运行ruoyi-vue-plus5.X版本
|
13天前
|
Java Maven
【亮剑】Java项目开发中常遇到Jar 包依赖冲突问题,主要由不同版本库、循环依赖、传递依赖和依赖范围不当引起
【4月更文挑战第30天】Java项目开发中常遇到依赖冲突问题,主要由不同版本库、循环依赖、传递依赖和依赖范围不当引起。解决冲突需分析依赖树、定位冲突源、调整类加载顺序等。方法包括排除冲突依赖、统一管理版本、限定依赖范围、合并冲突类、升级降级库版本及拆分模块。关注依赖关系,及时解决冲突,保障项目稳定运行。
|
17天前
|
分布式计算 安全 Java
JAVA的三大版本
JAVA的三大版本
|
27天前
|
Oracle Java 关系型数据库
Java 开发者必备:JDK 版本详解与选择策略(含安装与验证)
Oracle Java SE 支持路线图显示,JDK 8(LTS)支持至2030年,非LTS版本如9-11每6个月发布且支持有限。JDK 11(LTS)支持至2032年,而JDK 17及以上版本现在提供免费商用许可。LTS版本提供长达8年的支持,每2年发布一次。Oracle JDK与OpenJDK有多个社区和公司构建版本,如Adoptium、Amazon Corretto和Azul Zulu,它们在许可证、商业支持和更新方面有所不同。个人选择JDK时,可考虑稳定性、LTS、第三方兼容性和提供商支持。
99 0
|
28天前
|
SQL 关系型数据库 MySQL
Hive【环境搭建 01】【hive-3.1.2版本 安装配置】【含 mysql-connector-java-5.1.47.jar 网盘资源】【详细】
【4月更文挑战第6天】Hive【环境搭建 01】【hive-3.1.2版本 安装配置】【含 mysql-connector-java-5.1.47.jar 网盘资源】【详细】
32 1
|
1月前
|
存储 Java 关系型数据库
景区特色商品管理系统【控制台+MySQL】(Java课设)
景区特色商品管理系统【控制台+MySQL】(Java课设)
15 1
|
1月前
|
存储 Java 关系型数据库
教师工资管理系统【控制台+MySQL】(Java课设)
教师工资管理系统【控制台+MySQL】(Java课设)
17 0
|
1月前
|
存储 Java 关系型数据库
学生宿舍管理系统【控制台+MySQL】(Java课设)
学生宿舍管理系统【控制台+MySQL】(Java课设)
19 0
|
1月前
|
存储 Java 关系型数据库
不同主题增删改查系统【控制台+MySQL】(Java课设)
不同主题增删改查系统【控制台+MySQL】(Java课设)
15 0