🎮 华容道数组实现

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

    3201 引用 • 8216 回帖 • 1 关注
  • Game
    5 引用 • 42 回帖

相关帖子

欢迎来到这里!

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

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

推荐标签 标签

  • Spark

    Spark 是 UC Berkeley AMP lab 所开源的类 Hadoop MapReduce 的通用并行框架。Spark 拥有 Hadoop MapReduce 所具有的优点;但不同于 MapReduce 的是 Job 中间输出结果可以保存在内存中,从而不再需要读写 HDFS,因此 Spark 能更好地适用于数据挖掘与机器学习等需要迭代的 MapReduce 的算法。

    74 引用 • 46 回帖 • 562 关注
  • gRpc
    11 引用 • 9 回帖 • 92 关注
  • CentOS

    CentOS(Community Enterprise Operating System)是 Linux 发行版之一,它是来自于 Red Hat Enterprise Linux 依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,因此有些要求高度稳定的服务器以 CentOS 替代商业版的 Red Hat Enterprise Linux 使用。两者的不同在于 CentOS 并不包含封闭源代码软件。

    239 引用 • 224 回帖 • 1 关注
  • HTML

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

    108 引用 • 295 回帖
  • B3log

    B3log 是一个开源组织,名字来源于“Bulletin Board Blog”缩写,目标是将独立博客与论坛结合,形成一种新的网络社区体验,详细请看 B3log 构思。目前 B3log 已经开源了多款产品:SymSoloVditor思源笔记

    1063 引用 • 3455 回帖 • 159 关注
  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    25530 引用 • 105595 回帖 • 1 关注
  • 印象笔记
    3 引用 • 16 回帖
  • Chrome

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

    63 引用 • 289 回帖
  • WordPress

    WordPress 是一个使用 PHP 语言开发的博客平台,用户可以在支持 PHP 和 MySQL 数据库的服务器上架设自己的博客。也可以把 WordPress 当作一个内容管理系统(CMS)来使用。WordPress 是一个免费的开源项目,在 GNU 通用公共许可证(GPLv2)下授权发布。

    67 引用 • 114 回帖 • 193 关注
  • Outlook
    1 引用 • 5 回帖 • 2 关注
  • Q&A

    提问之前请先看《提问的智慧》,好的问题比好的答案更有价值。

    9768 引用 • 44442 回帖 • 88 关注
  • Android

    Android 是一种以 Linux 为基础的开放源码操作系统,主要使用于便携设备。2005 年由 Google 收购注资,并拉拢多家制造商组成开放手机联盟开发改良,逐渐扩展到到平板电脑及其他领域上。

    336 引用 • 324 回帖 • 1 关注
  • 微信

    腾讯公司 2011 年 1 月 21 日推出的一款手机通讯软件。用户可以通过摇一摇、搜索号码、扫描二维码等添加好友和关注公众平台,同时可以将自己看到的精彩内容分享到微信朋友圈。

    133 引用 • 796 回帖
  • Ubuntu

    Ubuntu(友帮拓、优般图、乌班图)是一个以桌面应用为主的 Linux 操作系统,其名称来自非洲南部祖鲁语或豪萨语的“ubuntu”一词,意思是“人性”、“我的存在是因为大家的存在”,是非洲传统的一种价值观,类似华人社会的“仁爱”思想。Ubuntu 的目标在于为一般用户提供一个最新的、同时又相当稳定的主要由自由软件构建而成的操作系统。

    127 引用 • 169 回帖
  • PostgreSQL

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

    22 引用 • 22 回帖 • 1 关注
  • 设计模式

    设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。

    200 引用 • 120 回帖 • 1 关注
  • CAP

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

    12 引用 • 5 回帖 • 631 关注
  • 正则表达式

    正则表达式(Regular Expression)使用单个字符串来描述、匹配一系列遵循某个句法规则的字符串。

    31 引用 • 94 回帖
  • 强迫症

    强迫症(OCD)属于焦虑障碍的一种类型,是一组以强迫思维和强迫行为为主要临床表现的神经精神疾病,其特点为有意识的强迫和反强迫并存,一些毫无意义、甚至违背自己意愿的想法或冲动反反复复侵入患者的日常生活。

    15 引用 • 161 回帖 • 1 关注
  • 以太坊

    以太坊(Ethereum)并不是一个机构,而是一款能够在区块链上实现智能合约、开源的底层系统。以太坊是一个平台和一种编程语言 Solidity,使开发人员能够建立和发布下一代去中心化应用。 以太坊可以用来编程、分散、担保和交易任何事物:投票、域名、金融交易所、众筹、公司管理、合同和知识产权等等。

    34 引用 • 367 回帖
  • SpaceVim

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

    3 引用 • 31 回帖 • 113 关注
  • 游戏

    沉迷游戏伤身,强撸灰飞烟灭。

    181 引用 • 821 回帖
  • Latke

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

    71 引用 • 535 回帖 • 832 关注
  • React

    React 是 Facebook 开源的一个用于构建 UI 的 JavaScript 库。

    196 引用 • 291 回帖 • 373 关注
  • CSS

    CSS(Cascading Style Sheet)“层叠样式表”是用于控制网页样式并允许将样式信息与网页内容分离的一种标记性语言。

    199 引用 • 543 回帖 • 2 关注
  • HBase

    HBase 是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的 Google 论文 “Bigtable:一个结构化数据的分布式存储系统”。就像 Bigtable 利用了 Google 文件系统所提供的分布式数据存储一样,HBase 在 Hadoop 之上提供了类似于 Bigtable 的能力。

    17 引用 • 6 回帖 • 59 关注
  • Sandbox

    如果帖子标签含有 Sandbox ,则该帖子会被视为“测试帖”,主要用于测试社区功能,排查 bug 等,该标签下内容不定期进行清理。

    434 引用 • 1250 回帖 • 593 关注