🎮 华容道数组实现

本贴最后更新于 2884 天前,其中的信息可能已经时过境迁
import java.util.Scanner;

/**
 * Created by Zephyr on 2016/12/29.
 */
public class HuaRongMap{
    private static int[][] map={
            {211,401,402,241},
            {213,403,404,243},
            {221,311,312,251},
            {223,111,121,253},
            {131,000,000,141}
    };
    private static final int width=4;
    private static final int height=5;
    private static int direction=1;//1,2,3,4,上下左右

    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);

        while(true){
            click(sc.nextInt());
            if(map[4][1]==403){
                System.out.println("You win!");
            }else{
                printMap();
            }
        }
    }
    public static void click(int grid){
        if(grid==0)
            return;
        int pos=getPosition(grid);
        direction = grid%10;
        checkMove(grid);
    }

    public static boolean checkMove(int grid){
        //根据不同种类的方格检查当前方向是否可以移动
        //是则按照当前方向移动,否则修改方向
            //4(类型)*4(方向)
            int i=0,i1=0,i2=0,i3=0;
            int j=0,j1=0,j2=0,j3=0;
            switch(grid/100*10+direction) {
                case 11:
                    i = getPosition(grid) / 10;
                    j = getPosition(grid) % 10;
                    if (i - 1 >= 0 && map[i - 1][j] == 0) {
                        map[i - 1][j] = map[i][j];
                        map[i][j] = 0;
                        return true;
                    } else {
                        return false;
                    }
                case 12:
                    i = getPosition(grid/10*10+1) / 10;
                    j = getPosition(grid/10*10+1) % 10;
                    if (i + 1 < height && map[i + 1][j] == 0) {
                        map[i + 1][j] = map[i][j];
                        map[i][j] = 0;
                        return true;
                    } else {
                        return false;
                    }
                case 13:
                    i = getPosition(grid/10*10+1) / 10;
                    j = getPosition(grid/10*10+1) % 10;
                    if (j - 1 >= 0 && map[i][j - 1] == 0) {
                        map[i][j - 1] = map[i][j];
                        map[i][j] = 0;
                        return true;
                    } else {
                        return false;
                    }
                case 14:
                    i = getPosition(grid/10*10+1) / 10;
                    j = getPosition(grid/10*10+1) % 10;
                    if (j + 1 < width && map[i][j + 1] == 0) {
                        map[i][j + 1] = map[i][j];
                        map[i][j] = 0;
                        return true;
                    } else {
                        return false;
                    }
                case 21://211
                    i = getPosition(grid/10 * 10 + 1) / 10;
                    j = getPosition(grid/10 * 10 + 1) % 10;
                    if (i - 1 >= 0 && map[i - 1][j] == 0) {
                        map[i - 1][j] = map[i][j];
                        map[i][j] = map[i + 1][j];
                        map[i + 1][j] = 0;
                        return true;
                    } else {
                        return false;
                    }
                case 22://213
                    i = getPosition(grid/10 * 10 + 3) / 10;
                    j = getPosition(grid/10 * 10 + 3) % 10;
                    if (i + 1 < height && map[i + 1][j] == 0) {
                        map[i + 1][j] = map[i][j];
                        map[i][j] = map[i - 1][j];
                        map[i - 1][j] = 0;
                        return true;
                    } else {
                        return false;
                    }
                case 23://211,213
                    i1 = getPosition(grid/10 * 10 + 1) / 10;
                    i3 = getPosition(grid/10 * 10 + 3) / 10;
                    j = getPosition(grid/10 * 10 + 1) % 10;
                    if (j - 1 >= 0 && map[i1][j - 1] == 0 && map[i3][j - 1] == 0) {
                        map[i1][j - 1] = map[i1][j];
                        map[i3][j - 1] = map[i3][j];
                        map[i1][j] = 0;
                        map[i3][j] = 0;
                        return true;
                    } else {
                        return false;
                    }
                case 24://211,213
                    i1 = getPosition(grid/10 * 10 + 1) / 10;
                    i3 = getPosition(grid/10 * 10 + 3) / 10;
                    j = getPosition(grid/10 * 10 + 1) % 10;
                    if (j + 1 < width && map[i1][j + 1] == 0 && map[i3][j + 1] == 0) {
                        map[i1][j + 1] = map[i1][j];
                        map[i3][j + 1] = map[i3][j];
                        map[i1][j] = 0;
                        map[i3][j] = 0;
                        return true;
                    } else {
                        return false;
                    }
                case 31:
                    i = getPosition(grid/10 * 10 + 1) / 10;
                    j1 = getPosition(grid/10 * 10 + 1) % 10;
                    j2 = getPosition(grid/10 * 10 + 2) % 10;
                    if (i - 1 >= 0 && map[i - 1][j1] == 0 && map[i - 1][j2] == 0) {
                        map[i - 1][j1] = map[i][j1];
                        map[i - 1][j2] = map[i][j2];
                        map[i][j1] = 0;
                        map[i][j2] = 0;
                        return true;
                    } else {
                        return false;
                    }
                case 32:
                    i = getPosition(grid/10 * 10 + 1) / 10;
                    j1 = getPosition(grid/10 * 10 + 1) % 10;
                    j2 = getPosition(grid/10 * 10 + 2) % 10;
                    if (i + 1 < height && map[i + 1][j1] == 0 && map[i + 1][j2] == 0) {
                        map[i + 1][j1] = map[i][j1];
                        map[i + 1][j2] = map[i][j2];
                        map[i][j1] = 0;
                        map[i][j2] = 0;
                        return true;
                    } else {
                        return false;
                    }
                case 33:
                    i = getPosition(grid/10 * 10 + 1) / 10;
                    j = getPosition(grid/10 * 10 + 1) % 10;
                    if (j - 1 >= 0 && map[i][j - 1] == 0) {
                        map[i][j - 1] = map[i][j];
                        map[i][j] = map[i][j + 1];
                        map[i][j + 1] = 0;
                        return true;
                    } else {
                        return false;
                    }
                case 34:
                    i = getPosition(grid/10 * 10 + 2) / 10;
                    j = getPosition(grid/10 * 10 + 2) % 10;
                    if (j + 1 < width && map[i][j + 1] == 0) {
                        map[i][j + 1] = map[i][j];
                        map[i][j] = map[i][j - 1];
                        map[i][j - 1] = 0;
                        return true;
                    } else {
                        return false;
                    }
                case 41:
                    i = getPosition(grid/10 * 10 + 1) / 10;
                    j1 = getPosition(grid/10 * 10 + 1) % 10;
                    j2 = getPosition(grid/10 * 10 + 2) % 10;
                    if (i - 1 >= 0 && map[i - 1][j1] == 0 && map[i - 1][j2] == 0) {
                        map[i - 1][j1] = map[i][j1];
                        map[i][j1] = map[i + 1][j1];
                        map[i + 1][j1] = 0;
                        map[i - 1][j2] = map[i][j2];
                        map[i][j2] = map[i + 1][j2];
                        map[i + 1][j2] = 0;
                        return true;
                    } else {
                        return false;
                    }
                case 42:
                    i = getPosition(grid/10 * 10 + 3) / 10;
                    j1 = getPosition(grid/10 * 10 + 1) % 10;
                    j2 = getPosition(grid/10 * 10 + 2) % 10;
                    if (i + 1 < height && map[i + 1][j1] == 0 && map[i + 1][j2] == 0) {
                        map[i + 1][j1] = map[i][j1];
                        map[i][j1] = map[i - 1][j1];
                        map[i - 1][j1] = 0;
                        map[i + 1][j2] = map[i][j2];
                        map[i][j2] = map[i - 1][j2];
                        map[i - 1][j2] = 0;
                        return true;
                    } else {
                        return false;
                    }
                case 43:
                    i1 = getPosition(grid/10 * 10 + 1) / 10;
                    i3 = getPosition(grid/10 * 10 + 3) / 10;
                    j = getPosition(grid/10 * 10 + 1) % 10;
                    if (j - 1 >= 0 && map[i1][j - 1] == 0 && map[i3][j - 1] == 0) {
                        map[i][j1 - 1] = map[i][j1];
                        map[i][j1] = map[i][j1 + 1];
                        map[i][j1 + 1] = 0;
                        map[i][j2 - 1] = map[i][j2];
                        map[i][j2] = map[i][j2 + 1];
                        map[i][j2 + 1] = 0;
                        return true;
                    } else {
                        return false;
                    }
                case 44:
                    i1 = getPosition(grid/10 * 10 + 1) / 10;
                    i3 = getPosition(grid/10 * 10 + 3) / 10;
                    j = getPosition(grid/10 * 10 + 2) % 10;
                    if (j + 1 < width && map[i1][j + 1] == 0 && map[i3][j + 1] == 0) {
                        map[i][j1 + 1] = map[i][j1];
                        map[i][j1] = map[i][j1 - 1];
                        map[i][j1 - 1] = 0;
                        map[i][j2 + 1] = map[i][j2];
                        map[i][j2] = map[i][j2 - 1];
                        map[i][j2 - 1] = 0;
                        return true;
                    } else {
                        return false;
                    }
            }
        return false;
    }


    public static int getPosition(int grid){
        for(int i=0;i<height;i++){
            for(int j=0;j<width;j++){
                if(grid==map[i][j]){
                    return i*10+j;
                }
            }
        }
        return -1;
    }

    public static void printMap(){
        for(int i=0;i<height;i++){
            for(int j=0;j<width;j++){
                if(map[i][j]==0){
                    System.out.print("000 ");
                }else {
                    System.out.print(map[i][j] + " ");
                }
            }
            System.out.println();
        }
    }
}

a89f5e8bd1644af3aadb6f9253a75b2f-ba1aebffe47bdfe643fc4b959552bfeb.jpg

根据华容道的划分,将不同个字进行了编码,假设最小单位为一个方格(如下图左下角的小兵)

华容道的图形编码规则如下:

总共三位,

第一位;竖向两个单位的以 2 开头,曹操以 4 开头,横向两个单位的以 3 开头,一个单位的一 1 开头

第二位:同类型单位的编号,如曹操只有 1,小兵则分别为 11x,12x,13x,14x

第三位:方向编码,从上到下,从左到右编码为 1,2,3,4,如果没有则跳过,如左上角竖向两个单位的则表示为:211,213。

所以上图的图形编码可以如下表示(000 只是为了看起来方便):

{211,401,402,241},

{213,403,404,243},

{221,311,312,251},

{223,111,121,253},

{131,000,000,141}

运行后,需要输入三位数,第一位是格子类型,第二位是同类型的编号(前两位就是要移动的小兵编码的前两位),第三位为方向,上下左右依次编码为 1、2、3、4,比如我要 111 这个小兵向下移动,则输入 112

每次输入就是打印出数组当前状况。

  • console
    4 引用 • 26 回帖
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3187 引用 • 8213 回帖
  • Game
    5 引用 • 42 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
ZephyrJung
一切有为法,如梦幻泡影,如露亦如电,应作如是观 北京

推荐标签 标签

  • 分享

    有什么新发现就分享给大家吧!

    248 引用 • 1792 回帖 • 1 关注
  • 创造

    你创造的作品可能会帮助到很多人,如果是开源项目的话就更赞了!

    179 引用 • 995 回帖
  • Ant-Design

    Ant Design 是服务于企业级产品的设计体系,基于确定和自然的设计价值观上的模块化解决方案,让设计者和开发者专注于更好的用户体验。

    17 引用 • 23 回帖
  • SMTP

    SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。

    4 引用 • 18 回帖 • 614 关注
  • Git

    Git 是 Linux Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

    209 引用 • 358 回帖 • 1 关注
  • SpaceVim

    SpaceVim 是一个社区驱动的模块化 vim/neovim 配置集合,以模块的方式组织管理插件以
    及相关配置,为不同的语言开发量身定制了相关的开发模块,该模块提供代码自动补全,
    语法检查、格式化、调试、REPL 等特性。用户仅需载入相关语言的模块即可得到一个开箱
    即用的 Vim-IDE。

    3 引用 • 31 回帖 • 99 关注
  • 书籍

    宋真宗赵恒曾经说过:“书中自有黄金屋,书中自有颜如玉。”

    77 引用 • 390 回帖
  • 脑图

    脑图又叫思维导图,是表达发散性思维的有效图形思维工具 ,它简单却又很有效,是一种实用性的思维工具。

    26 引用 • 84 回帖 • 2 关注
  • 知乎

    知乎是网络问答社区,连接各行各业的用户。用户分享着彼此的知识、经验和见解,为中文互联网源源不断地提供多种多样的信息。

    10 引用 • 66 回帖
  • Electron

    Electron 基于 Chromium 和 Node.js,让你可以使用 HTML、CSS 和 JavaScript 构建应用。它是一个由 GitHub 及众多贡献者组成的活跃社区共同维护的开源项目,兼容 Mac、Windows 和 Linux,它构建的应用可在这三个操作系统上面运行。

    15 引用 • 136 回帖
  • 反馈

    Communication channel for makers and users.

    123 引用 • 911 回帖 • 245 关注
  • Flume

    Flume 是一套分布式的、可靠的,可用于有效地收集、聚合和搬运大量日志数据的服务架构。

    9 引用 • 6 回帖 • 629 关注
  • 持续集成

    持续集成(Continuous Integration)是一种软件开发实践,即团队开发成员经常集成他们的工作,通过每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。

    15 引用 • 7 回帖 • 1 关注
  • SSL

    SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS 与 SSL 在传输层对网络连接进行加密。

    70 引用 • 193 回帖 • 431 关注
  • Jenkins

    Jenkins 是一套开源的持续集成工具。它提供了非常丰富的插件,让构建、部署、自动化集成项目变得简单易用。

    53 引用 • 37 回帖 • 2 关注
  • HTML

    HTML5 是 HTML 下一个的主要修订版本,现在仍处于发展阶段。广义论及 HTML5 时,实际指的是包括 HTML、CSS 和 JavaScript 在内的一套技术组合。

    107 引用 • 295 回帖
  • Wide

    Wide 是一款基于 Web 的 Go 语言 IDE。通过浏览器就可以进行 Go 开发,并有代码自动完成、查看表达式、编译反馈、Lint、实时结果输出等功能。

    欢迎访问我们运维的实例: https://wide.b3log.org

    30 引用 • 218 回帖 • 629 关注
  • 链书

    链书(Chainbook)是 B3log 开源社区提供的区块链纸质书交易平台,通过 B3T 实现共享激励与价值链。可将你的闲置书籍上架到链书,我们共同构建这个全新的交易平台,让闲置书籍继续发挥它的价值。

    链书社

    链书目前已经下线,也许以后还有计划重制上线。

    14 引用 • 257 回帖
  • Hadoop

    Hadoop 是由 Apache 基金会所开发的一个分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。

    86 引用 • 122 回帖 • 625 关注
  • Webswing

    Webswing 是一个能将任何 Swing 应用通过纯 HTML5 运行在浏览器中的 Web 服务器,详细介绍请看 将 Java Swing 应用变成 Web 应用

    1 引用 • 15 回帖 • 629 关注
  • 深度学习

    深度学习(Deep Learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。

    53 引用 • 40 回帖
  • CAP

    CAP 指的是在一个分布式系统中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可兼得。

    11 引用 • 5 回帖 • 608 关注
  • Sphinx

    Sphinx 是一个基于 SQL 的全文检索引擎,可以结合 MySQL、PostgreSQL 做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。

    1 引用 • 211 关注
  • 大疆创新

    深圳市大疆创新科技有限公司(DJI-Innovations,简称 DJI),成立于 2006 年,是全球领先的无人飞行器控制系统及无人机解决方案的研发和生产商,客户遍布全球 100 多个国家。通过持续的创新,大疆致力于为无人机工业、行业用户以及专业航拍应用提供性能最强、体验最佳的革命性智能飞控产品和解决方案。

    2 引用 • 14 回帖
  • 创业

    你比 99% 的人都优秀么?

    84 引用 • 1399 回帖
  • MyBatis

    MyBatis 本是 Apache 软件基金会 的一个开源项目 iBatis,2010 年这个项目由 Apache 软件基金会迁移到了 google code,并且改名为 MyBatis ,2013 年 11 月再次迁移到了 GitHub。

    170 引用 • 414 回帖 • 386 关注
  • IBM

    IBM(国际商业机器公司)或万国商业机器公司,简称 IBM(International Business Machines Corporation),总公司在纽约州阿蒙克市。1911 年托马斯·沃森创立于美国,是全球最大的信息技术和业务解决方案公司,拥有全球雇员 30 多万人,业务遍及 160 多个国家和地区。

    17 引用 • 53 回帖 • 137 关注