🎮 华容道数组实现

本贴最后更新于 2926 天前,其中的信息可能已经时过境迁
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 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3190 引用 • 8214 回帖 • 1 关注
  • Game
    5 引用 • 42 回帖

相关帖子

欢迎来到这里!

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

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

推荐标签 标签

  • 生活

    生活是指人类生存过程中的各项活动的总和,范畴较广,一般指为幸福的意义而存在。生活实际上是对人生的一种诠释。生活包括人类在社会中与自己息息相关的日常活动和心理影射。

    230 引用 • 1454 回帖
  • TextBundle

    TextBundle 文件格式旨在应用程序之间交换 Markdown 或 Fountain 之类的纯文本文件时,提供更无缝的用户体验。

    1 引用 • 2 回帖 • 54 关注
  • 服务器

    服务器,也称伺服器,是提供计算服务的设备。由于服务器需要响应服务请求,并进行处理,因此一般来说服务器应具备承担服务并且保障服务的能力。

    125 引用 • 588 回帖
  • HTML

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

    107 引用 • 295 回帖 • 1 关注
  • JWT

    JWT(JSON Web Token)是一种用于双方之间传递信息的简洁的、安全的表述性声明规范。JWT 作为一个开放的标准(RFC 7519),定义了一种简洁的,自包含的方法用于通信双方之间以 JSON 的形式安全的传递信息。

    20 引用 • 15 回帖 • 6 关注
  • Swift

    Swift 是苹果于 2014 年 WWDC(苹果开发者大会)发布的开发语言,可与 Objective-C 共同运行于 Mac OS 和 iOS 平台,用于搭建基于苹果平台的应用程序。

    36 引用 • 37 回帖 • 533 关注
  • Webswing

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

    1 引用 • 15 回帖 • 639 关注
  • Flutter

    Flutter 是谷歌的移动 UI 框架,可以快速在 iOS 和 Android 上构建高质量的原生用户界面。 Flutter 可以与现有的代码一起工作,它正在被越来越多的开发者和组织使用,并且 Flutter 是完全免费、开源的。

    39 引用 • 92 回帖 • 3 关注
  • GitLab

    GitLab 是利用 Ruby 一个开源的版本管理系统,实现一个自托管的 Git 项目仓库,可通过 Web 界面操作公开或私有项目。

    46 引用 • 72 回帖 • 1 关注
  • CloudFoundry

    Cloud Foundry 是 VMware 推出的业界第一个开源 PaaS 云平台,它支持多种框架、语言、运行时环境、云平台及应用服务,使开发人员能够在几秒钟内进行应用程序的部署和扩展,无需担心任何基础架构的问题。

    5 引用 • 18 回帖 • 176 关注
  • Logseq

    Logseq 是一个隐私优先、开源的知识库工具。

    Logseq is a joyful, open-source outliner that works on top of local plain-text Markdown and Org-mode files. Use it to write, organize and share your thoughts, keep your to-do list, and build your own digital garden.

    6 引用 • 63 回帖 • 2 关注
  • 学习

    “梦想从学习开始,事业从实践起步” —— 习近平

    170 引用 • 513 回帖
  • BND

    BND(Baidu Netdisk Downloader)是一款图形界面的百度网盘不限速下载器,支持 Windows、Linux 和 Mac,详细介绍请看这里

    107 引用 • 1281 回帖 • 36 关注
  • IPFS

    IPFS(InterPlanetary File System,星际文件系统)是永久的、去中心化保存和共享文件的方法,这是一种内容可寻址、版本化、点对点超媒体的分布式协议。请浏览 IPFS 入门笔记了解更多细节。

    21 引用 • 245 回帖 • 243 关注
  • IDEA

    IDEA 全称 IntelliJ IDEA,是一款 Java 语言开发的集成环境,在业界被公认为最好的 Java 开发工具之一。IDEA 是 JetBrains 公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以严谨著称的东欧程序员为主。

    181 引用 • 400 回帖
  • CodeMirror
    1 引用 • 2 回帖 • 132 关注
  • Solo

    Solo 是一款小而美的开源博客系统,专为程序员设计。Solo 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    1436 引用 • 10057 回帖 • 489 关注
  • IBM

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

    17 引用 • 53 回帖 • 139 关注
  • RIP

    愿逝者安息!

    8 引用 • 92 回帖 • 366 关注
  • MySQL

    MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是最流行的关系型数据库管理系统之一。

    692 引用 • 535 回帖 • 1 关注
  • etcd

    etcd 是一个分布式、高可用的 key-value 数据存储,专门用于在分布式系统中保存关键数据。

    5 引用 • 26 回帖 • 525 关注
  • 数据库

    据说 99% 的性能瓶颈都在数据库。

    343 引用 • 723 回帖
  • SQLServer

    SQL Server 是由 [微软] 开发和推广的关系数据库管理系统(DBMS),它最初是由 微软、Sybase 和 Ashton-Tate 三家公司共同开发的,并于 1988 年推出了第一个 OS/2 版本。

    21 引用 • 31 回帖
  • Openfire

    Openfire 是开源的、基于可拓展通讯和表示协议 (XMPP)、采用 Java 编程语言开发的实时协作服务器。Openfire 的效率很高,单台服务器可支持上万并发用户。

    6 引用 • 7 回帖 • 97 关注
  • CSDN

    CSDN (Chinese Software Developer Network) 创立于 1999 年,是中国的 IT 社区和服务平台,为中国的软件开发者和 IT 从业者提供知识传播、职业发展、软件开发等全生命周期服务,满足他们在职业发展中学习及共享知识和信息、建立职业发展社交圈、通过软件开发实现技术商业化等刚性需求。

    14 引用 • 155 回帖
  • SEO

    发布对别人有帮助的原创内容是最好的 SEO 方式。

    35 引用 • 200 回帖 • 26 关注
  • OpenShift

    红帽提供的 PaaS 云,支持多种编程语言,为开发人员提供了更为灵活的框架、存储选择。

    14 引用 • 20 回帖 • 634 关注