🎮 华容道数组实现

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

    3169 引用 • 8208 回帖
  • Game
    5 引用 • 42 回帖

相关帖子

欢迎来到这里!

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

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

推荐标签 标签

  • Jenkins

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

    51 引用 • 37 回帖 • 1 关注
  • V2EX

    V2EX 是创意工作者们的社区。这里目前汇聚了超过 400,000 名主要来自互联网行业、游戏行业和媒体行业的创意工作者。V2EX 希望能够成为创意工作者们的生活和事业的一部分。

    17 引用 • 236 回帖 • 373 关注
  • Hprose

    Hprose 是一款先进的轻量级、跨语言、跨平台、无侵入式、高性能动态远程对象调用引擎库。它不仅简单易用,而且功能强大。你无需专门学习,只需看上几眼,就能用它轻松构建分布式应用系统。

    9 引用 • 17 回帖 • 598 关注
  • CAP

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

    11 引用 • 5 回帖 • 580 关注
  • Firefox

    Mozilla Firefox 中文俗称“火狐”(正式缩写为 Fx 或 fx,非正式缩写为 FF),是一个开源的网页浏览器,使用 Gecko 排版引擎,支持多种操作系统,如 Windows、OSX 及 Linux 等。

    7 引用 • 30 回帖 • 428 关注
  • Python

    Python 是一种面向对象、直译式电脑编程语言,具有近二十年的发展历史,成熟且稳定。它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务。它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用缩进来定义语句块。

    536 引用 • 672 回帖
  • Ant-Design

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

    17 引用 • 23 回帖 • 1 关注
  • SEO

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

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

    Chrome 又称 Google 浏览器,是一个由谷歌公司开发的网页浏览器。该浏览器是基于其他开源软件所编写,包括 WebKit,目标是提升稳定性、速度和安全性,并创造出简单且有效率的使用者界面。

    62 引用 • 289 回帖
  • BAE

    百度应用引擎(Baidu App Engine)提供了 PHP、Java、Python 的执行环境,以及云存储、消息服务、云数据库等全面的云服务。它可以让开发者实现自动地部署和管理应用,并且提供动态扩容和负载均衡的运行环境,让开发者不用考虑高成本的运维工作,只需专注于业务逻辑,大大降低了开发者学习和迁移的成本。

    19 引用 • 75 回帖 • 617 关注
  • Vue.js

    Vue.js(读音 /vju ː/,类似于 view)是一个构建数据驱动的 Web 界面库。Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。

    262 引用 • 664 回帖 • 1 关注
  • PHP

    PHP(Hypertext Preprocessor)是一种开源脚本语言。语法吸收了 C 语言、 Java 和 Perl 的特点,主要适用于 Web 开发领域,据说是世界上最好的编程语言。

    165 引用 • 407 回帖 • 509 关注
  • 30Seconds

    📙 前端知识精选集,包含 HTML、CSS、JavaScript、React、Node、安全等方面,每天仅需 30 秒。

    • 精选常见面试题,帮助您准备下一次面试
    • 精选常见交互,帮助您拥有简洁酷炫的站点
    • 精选有用的 React 片段,帮助你获取最佳实践
    • 精选常见代码集,帮助您提高打码效率
    • 整理前端界的最新资讯,邀您一同探索新世界
    488 引用 • 383 回帖 • 1 关注
  • Maven

    Maven 是基于项目对象模型(POM)、通过一小段描述信息来管理项目的构建、报告和文档的软件项目管理工具。

    186 引用 • 318 回帖 • 331 关注
  • Flume

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

    9 引用 • 6 回帖 • 615 关注
  • Love2D

    Love2D 是一个开源的, 跨平台的 2D 游戏引擎。使用纯 Lua 脚本来进行游戏开发。目前支持的平台有 Windows, Mac OS X, Linux, Android 和 iOS。

    14 引用 • 53 回帖 • 520 关注
  • Latke

    Latke 是一款以 JSON 为主的 Java Web 框架。

    70 引用 • 533 回帖 • 733 关注
  • 支付宝

    支付宝是全球领先的独立第三方支付平台,致力于为广大用户提供安全快速的电子支付/网上支付/安全支付/手机支付体验,及转账收款/水电煤缴费/信用卡还款/AA 收款等生活服务应用。

    29 引用 • 347 回帖 • 4 关注
  • PostgreSQL

    PostgreSQL 是一款功能强大的企业级数据库系统,在 BSD 开源许可证下发布。

    22 引用 • 22 回帖
  • CloudFoundry

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

    5 引用 • 18 回帖 • 148 关注
  • 招聘

    哪里都缺人,哪里都不缺人。

    189 引用 • 1056 回帖
  • Hadoop

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

    85 引用 • 122 回帖 • 619 关注
  • BookxNote

    BookxNote 是一款全新的电子书学习工具,助力您的学习与思考,让您的大脑更高效的记忆。

    笔记整理交给我,一心只读圣贤书。

    1 引用 • 1 回帖 • 1 关注
  • Eclipse

    Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。

    75 引用 • 258 回帖 • 630 关注
  • 创造

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

    175 引用 • 994 回帖
  • OAuth

    OAuth 协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是 oAuth 的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此 oAuth 是安全的。oAuth 是 Open Authorization 的简写。

    36 引用 • 103 回帖 • 16 关注
  • 机器学习

    机器学习(Machine Learning)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。

    77 引用 • 37 回帖