java 推箱子

ops/2024/9/24 12:21:05/

说明:刚入门的时候面试,有个老师傅说,你们喜欢打游戏,让你们写个简单的推箱子,能写出来就过

我说这多简单

结果说要用枚举类,数组来写

写得一踏糊涂,最后没通过

如今工作两年了,忽然想起来了这个事情,花费一点时间写完,发现确实很有收获,希望大家也能有所收获,坚持不懈在这条道路上越走越远

java">import java.util.Arrays;
import java.util.Scanner;public class BoxStart {private static int mapX = 9;private static int mapY = 9;private static String[][] map = new String[mapX][mapY];public static void initMap(){for (int i = 0; i < map.length; i++) {Arrays.fill(map[i], Shape.road.getName());}}public static void printMap(){for (int i = 0; i < map.length; i++) {for (int j = 0; j < map[i].length; j++) {System.out.print(map[i][j] + " ");}System.out.println("");}}public static void changeMap(int x,int y,String shape){for (int i = 0; i < map.length; i++) {for (int j = 0; j < map[i].length; j++) {if(i==x && y==j){map[i][j] = shape;}}}}public static Boolean finishStatus(){boolean status = true;for (int i = 0; i < map.length; i++) {for (int j = 0; j < map[i].length; j++) {if (map[i][j].equals(Shape.WhiteBox.getName())) {status = false;break;}}}return !status;}public static void getRemoveAfter(String[] arr,int x , int y,boolean changeX,boolean changeY){for (int i = 0; i < map.length; i++) {for (int j = 0; j < map[i].length; j++) {if(changeX && i == x){map[i][j] = arr[j];}if(changeY && j == y){map[i][j] = arr[i];}}}}public static String[] recursionArr(String[] arr,int peopleX,int x){for (int i = x; i < arr.length; i++) {if(i == x){if(i == arr.length-1){return arr;}else {String next = arr[i+1];if(next.equals(Shape.road.getName())){for (int m = x; m >=peopleX; m--){arr[m+1] = arr[m];if(m == peopleX){arr[peopleX] = Shape.road.getName();}}return arr;}else if(next.equals(Shape.BlackBox.getName())){if(x>peopleX) {for (int m = x; m >= peopleX; m--) {arr[m + 1] = arr[m];if (m == peopleX) {arr[peopleX] = Shape.road.getName();arr[i + 1] = Shape.BlackBox.getName();}}}
//                        System.out.println(arr);return arr;}else if(next.equals(Shape.WhiteBox.getName())){return recursionArr(arr,peopleX,i+1);}}}}return arr;}public static int[] getPeoplePosition(){int[] people = new int[2];for (int i = 0; i < map.length; i++) {for (int j = 0; j < map[i].length; j++) {if(map[i][j].equals(Shape.People.getName())){people[0] = i;people[1] = j;}}}return people;}public static void reverseArray(String[] nums) {int left = 0, right = nums.length - 1;while (left < right) {// 交换元素String temp = nums[left];nums[left] = nums[right];nums[right] = temp;// 移动指针left++;right--;}}public static void upMove(){int[] position = getPeoplePosition();int peopleX = position[0];int peopleY = position[1];String [] arr = new String[mapX];for (int i = 0; i < map.length; i++) {for (int j = 0; j < map[i].length; j++) {if(j == peopleY){arr[mapX-i-1] = map[i][j];}}}String[] res = recursionArr(arr,mapX-peopleX-1,mapX-peopleX-1);reverseArray(res);getRemoveAfter(res,peopleX,peopleY,false,true);}public static void downMove(){int[] position = getPeoplePosition();int peopleX = position[0];int peopleY = position[1];String [] arr = new String[mapX];for (int i = 0; i < map.length; i++) {for (int j = 0; j < map[i].length; j++) {if(j == peopleY){arr[i] = map[i][j];}}}String[] res = recursionArr(arr,peopleX,peopleX);//        reverseArray(res);getRemoveAfter(res,peopleX,peopleY,false,true);}public static void leftMove(){int[] position = getPeoplePosition();int peopleX = position[0];int peopleY = position[1];String [] arr = new String[mapY];for (int i = 0; i < map.length; i++) {for (int j = 0; j < map[i].length; j++) {if(i == peopleX){arr[mapY-j-1] = map[i][j];}}}String[] res = recursionArr(arr,mapY-peopleY-1,mapY-peopleY-1);reverseArray(res);getRemoveAfter(res,peopleX,peopleY,true,false);}public static void rightMove(){int[] position = getPeoplePosition();int peopleX = position[0];int peopleY = position[1];String [] arr = new String[mapY];for (int i = 0; i < map.length; i++) {for (int j = 0; j < map[i].length; j++) {if(i == peopleX){arr[j] = map[i][j];}}}String[] res = recursionArr(arr,peopleY,peopleY);//        reverseArray(res);getRemoveAfter(res,peopleX,peopleY,true,false);}public static void main(String[] args) {initMap();changeMap(5,5,Shape.People.getName());changeMap(7,1,Shape.WhiteBox.getName());changeMap(1,5,Shape.BlackBox.getName());printMap();while (finishStatus()){System.out.println("---------input w/a/s/d----------");Scanner scanner = new Scanner(System.in);String controls = scanner.next();if("w".equals(controls)){upMove();}if("a".equals(controls)){leftMove();}if("s".equals(controls)){downMove();}if("d".equals(controls)){rightMove();}printMap();}System.out.println("--------------------------");System.out.println("---------success----------");System.out.println("--------------------------");}public enum Shape {road(1, "*"),WhiteBox(2, "□"),BlackBox(3, "■"),People(4, "Ꙫ");private int code;private String name;Shape(int code, String name) {this.code = code;this.name = name;}public int getCode() {return code;}public void setCode(int code) {this.code = code;}public String getName() {return name;}public void setName(String name) {this.name = name;}}}


http://www.ppmy.cn/ops/37375.html

相关文章

保持亮灯:监控工具如何确保 DevOps 中的高可用性

在快速发展的 DevOps 领域&#xff0c;保持高可用性 (HA) 至关重要。消费者期望应用程序具有全天候响应能力和可访问性。销售损失、客户愤怒和声誉受损都是停机的后果。为了使 DevOps 团队能够在问题升级为中断之前主动检测、排除故障并解决问题&#xff0c;监控工具成为这种情…

代码随想录第三十八天(完全背包问题)|爬楼梯(第八期模拟笔试)|零钱兑换|完全平方数

爬楼梯&#xff08;第八期模拟笔试&#xff09; 该题也是昨天的完全背包排列问题&#xff0c;解法相同&#xff0c;将遍历顺序进行调换 import java.util.*; public class Main{public static void main (String[] args) {Scanner scnew Scanner(System.in);int nsc.nextInt(…

五一 大项目

Docker 中的 Nginx 服务为什么要启用 HTTPS 一安装容器 1 安装docker-20.10.17 2 安装所需的依赖 sudo yum install -y yum-utils device-mapper-persistent-data lvm23 添加Docker官方仓库 sudo yum-config-manager --add-repo https://download.docker.com/linux/centos…

实验11:静态路由和默认路由故障排除(课内实验)

1、实验目的及要求&#xff1a; 掌握静态路由和默认路由故障排除的过程&#xff0c;在基于IPv4和IPv6双协议栈的网络中能够查找相关的配置问题&#xff0c;完成网络故障的分析和排除&#xff0c;进行相关网络联通性的测试。 2、实验设备&#xff1a; 路由器3台、二层交换机3台、…

FPGA学习笔记(3)——正点原子ZYNQ7000简介

1 ZYNQ-7000简介 ZYNQ 是由两个主要部分组成的&#xff1a;一个由双核 ARM Cortex-A9 为核心构成的处理系统&#xff08;PS&#xff0c;Processing System&#xff09;&#xff0c;和一个等价于一片 FPGA 的可编程逻辑&#xff08;PL&#xff0c;Programmable Logic&#xff0…

C++中的多态

✨前言✨ &#x1f4d8; 博客主页&#xff1a;to Keep博客主页 &#x1f646;欢迎关注&#xff0c;&#x1f44d;点赞&#xff0c;&#x1f4dd;留言评论 ⏳首发时间&#xff1a;2024年5月8日 &#x1f4e8; 博主码云地址&#xff1a;博主码云地址 &#x1f4d5;参考书籍&#…

5本书带你走进大厂的云原生世界

大家好&#xff0c;我是王有志&#xff0c;一个分享硬核 Java 技术的金融摸鱼侠&#xff0c;欢迎大家加入 Java 人自己的交流群“共同富裕的 Java 人”。 今天和大家分享的主题是&#xff1a;大厂的云原生架构设计。公众号内回复关键字&#xff1a;【20240508】&#xff0c;即…

矿山机械自动化中的激光雷达技术探索

在矿山机械自动化技术的快速发展中&#xff0c;激光雷达技术作为其关键组成部分&#xff0c;正发挥着越来越重要的作用。本文将深入探讨激光雷达在矿山机械自动化中的应用&#xff0c;以及其所面临的挑战与未来发展趋势。 一、激光雷达在矿山机械自动化中的应用 激光雷达技术…