diff --git a/Classic_Cases.txt b/Classic_Cases.txt new file mode 100644 index 0000000..a63ac99 --- /dev/null +++ b/Classic_Cases.txt @@ -0,0 +1,839 @@ +[Cases] +title=华容道经典布局40种 +tip=来自华容道吧,链接:https://tieba.baidu.com/p/1787924865 +1A9BF0C 横刀立马 +1ADEF80 指挥若定 +10AAF7C 将拥曹营 +1AFF980 齐头并进 +1FA6F80 兵分三路 +1BE68CC 雨声淅沥 +1FFAA10 左右布兵 +1FAAF10 桃花园中 +1BEAF10 一路进军 +1BE6E30 一路顺风 +1BE7AC0 围而不歼 +1FF12A8 捷足先登 +1BDF980 插翅难飞 +1AE3CD4 守口如瓶1 +1FA8CD4 守口如瓶2 +1BE670C 双将挡路 +1A5E3CC 横马当关 +1ADF710 层层设防1 +1FA7710 层层设防2 +1EE7710 兵挡将阻 +1FFA510 堵塞要道 +1A5DF0C 瓮中之鳖 +1ADD70C 层峦叠嶂 +1BD570C 水泄不通 +1FF8454 四路进兵 +1BF7510 入地无门 +1FF5510 勇闯五关 +5BEE90C 四面楚歌 +2F5543C 前呼后拥 +1FF9A80 兵临曹营 +55ADF0C 五将逼宫 +06EBF10 前挡后阻 +EEADF40 近在咫尺 +1AAEF0C 走投无路 +1A5DF0C 小燕出巢 +255CECC 比翼横空 +0ED570C 夹道藏兵 +0A7EBC0 屯兵东路 +05A7F0C 四将连关 +4FEA134 峰回路转 +[Cases] +title=华容道常见布局图 +tip=来自华容道吧,链接:https://tieba.baidu.com/p/5878577210 +0E31E74 阿谀逢迎 +5FEB510 暗渡陈仓 +1BB670C 八阵书图 +28DE734 百步穿杨 +C2ACFD4 百步歧形 +EAEC3D4 百花盛开 +99BC3D4 背水列阵 +255CECC 比翼横空 +0839BBC 别无选择 +A3CE7A4 冰心玉壶 +24B3F54 兵不厌走 +1EE7710 兵挡将阻 +C72DF14 兵分二路 +1FA6F80 兵分三路 +9BEF814 兵据曹营 +1FF9A80 兵临曹营 +0EAF930 兵随将转 +0FF5510 兵威将广 +80A6BFC 不惑之后 +4FFA680 不惑之前 +4F8E94C 不谋而合 +0E8E71C 步步高升 +1F89BD0 步履维艰 +CACC6F4 曹操划圈 +0E8F19C 曹冲称象 +43EA39C 侧面白虎 +1FA7710 层层设防 +1ADD70C 层峦叠嶂 +5DEB0D4 插翅难飞 +1EF6C90 陈兵西陲 +E28F9F4 触角优解 +26DFAC0 触角右优 +20557FC 春风拂面 +4697CF0 大凤三胞 +AA07EBC 大乔三九 +43BBD84 单身小兵 +953CADC 倒扣杯中 +6D2B9F0 倒影古稀 +9DD7E04 倒影胡马 +06DB70C 倒影解优1 +06FE90C 倒影解优2 +07BEE80 倒影同步 +C836FB4 倒影优解 +26239FC 倒影之泉 +51ECA7C 倒影之实 +9AF631C 倒影之像 +CC3D9B4 倒影之优 +183DA7C 春风旋升 +183DAF4 地火明夷 +1CCF6A8 谦之有成 +10FF694 地天泰和 +183FE94 地泽临门 +693FA70 颠倒形神 +59ED4F0 电阻优解 +0CFB644 独辟蹊径 +1FFA510 堵塞要道 +9583FD4 遁地无形 +033A79C 二横定式 +033B7A4 二横固形 +1EDAF10 二横最难 +1EE9F10 二横最易 +9FF1294 砝码天平 +9F560F4 分兵作战 +0FA76C0 分久必合 +2055FF4 风火家人 +1CC69F4 风雷电闪 +1CC55F4 风天小畜 +181F5F4 风泽中孚 +4FEA134 峰回路转 +1F3859C 冯京马凉 +8B8FA70 凤凰倒影 +472AEF0 凤之悠鸣 +10AFDD4 高处不寒 +0BE7710 高厦101 +00EBF54 高位分歧 +45A7FC0 高枕无忧 +1AF744C 孤雁南飞 +8FAF214 古堡藏龙 +AECDAD0 古稀倒影 +0A33A7C 归途不一 +5DEAF80 海阔天空 +269C37C 海晏河清 +96FE390 行者一半 +E7D7834 合兵一处 +02FED84 合久必分 +1A9BF0C 横刀立马 +0F5CE44 横行之将 +0E9CD4C 路横骆驼 +1A5E3CC 横马当关 +1A53C7C 鸿门宴Ⅱ +548F5DC 胡马窥江 +9937EC4 虎踪龙迹 +5B4F1D4 互不相让 +2B392BC 互生优解 +10A57FC 花车易驾 +67DF680 换离为兑 +1CC5FA4 火山之旅 +C8CBBB4 火烧连营 +1CC5F54 火天大有 +181FF54 火泽交际 +10F99DC 机甲战车 +22FD6D0 寄人篱下 +8EBEB04 佳人梳妆1 +406EEBC 佳人梳妆2 +0ED570C 夹道藏兵 +28EA3F4 江村夕照 +08FD9D0 将士一心 +10AAF7C 将拥曹营 +55A13FC 奖杯闪闪 +28B8F9C 节节高升 +1FF12A8 捷足先登 +4F3A49C 进退维谷 +8E8FB14 进退自如 +EAFB740 近在眉宇 +EAFFA40 近在一步 +E2FAF14 近在一线 +EEADF40 近在咫尺 +5DEB710 井底之蛙 +10F99F4 居中斡旋 +6AFF980 鞠躬尽瘁 +02FD934 开到荼蘼 +5DAB4F0 孔明羽扇 +59EBB30 诸葛羽扇 +59EAF30 孔明之扇 +1CC5E74 孔融让梨 +0F587D0 困兽犹斗 +58EC5F4 困于赤绂 +587FB50 狼影重重 +10FAA7C 亢龙有悔 +1829F7C 雷山小过 +182BD7C 雷水优解 +1A4FD4C 离而不坎 +EABDF40 列队欢送 +C2A3FD4 列队相送 +672ED70 麟之傲骨 +083DFA4 流水行云 +83C7DA4 龙凤三胞 +5BEA7C0 陆绩怀橘 +1EA7EC0 乱石崩云 +5B7E710 轮回江山 +03FB590 马凉冯京 +67DE170 马首是瞻 +8AFAB30 没落兵种 +1AEBF10 面具遮天 +1B9E38C 木牛流马 +CE8FC54 能上能下 +0227EDC 逆时风车 +9C35ADC 牛气冲天 +582F5DC 披甲持螯 +EDECA34 貔貅倒影 +0FF42A8 匹马嘶风 +5BEB60C 飘在空中 +1C87BE4 平行优解 +AA22BFC 七步成诗 +8ABD07C 七上八下1 +47C1ABC 七上八下2 +1AFF980 齐头并进 +2EDB6C0 歧路亡羊 +A739B70 麒之侠义 +25683FC 气势汹汹 +06EBF10 前挡后阻 +A2ECBD4 前后夹攻 +2F5543C 前呼后拥 +10B7DB4 桥横铁索 +00EFDA4 穷途末路 +13E4B5C 琼瑶敲碎 +2ABF9C0 曲水流觞 +0337A74 圈套之中 +EBF98C4 泉之倒影 +133FAA4 扰敌之策 +08B39BC 人形优解 +C32EBD4 日月同辉 +1BF7510 入地无门 +0ABCF14 三顾茅庐 +033B59C 三横定法 +033B5B4 三横定式 +1FA7710 三横最难 +1FFA510 三横最易 +0A5DF0C 三军联防 +1FA54F0 三羊集会 +1FAF510 三羊聚义 +1FF9910 三羊开泰 +02FD3A4 三一奇阵 +181FAF4 山雷不动 +1A7FAC0 山穷水尽 +181FA7C 山水迷蒙 +2057DF4 山天大畜 +8E0D7D4 闪展腾挪 +6A7B4F0 扇壶一体 +1BDED10 上屋抽梯 +1CC557C 上下镜像 +1298BFC 上下求索 +1EF6D10 设防层层 +AD9F870 射戟辕门 +2557FC0 身先士卒 +24BEBB0 神倒形颠 +05BE0DC 神似形近 +057C93C 神在内涵 +02CED9C 生机盎然 +050FAEC 似远实近 +2ACE8DC 手形优解 +1AE3CD4 守关如铁 +1FA8CD4 守口如瓶 +22E98FC 首居中道 +1CC7EA8 首尾互换 +1EAFC14 殊途共归 +6F78354 殊途同归 +1B9D0F4 殊途同心 +2ACC9BC 殊途携手 +4CEE934 数字系列4 +1FB0B54 数字系列0 +1F861DC 数字系列5 +1F2D274 数字系列3 +1F294DC 数字系列2 +43CE9B4 数字系列1 +ABE3B14 数字系列8 +2B1F1B4 数字系列9 +28DB71C 数字系列4_ +0FE6384 数字系列7 +0B3D85C 数字系列6 +07ACD70 双兵争锋 +1BE670C 双将挡路 +460BEBC 双头俩尾 +9BA0FD4 水浒聚义 +1BD570C 水泄不通 +2FE9B80 睡狮苏醒 +02DB8DC 顺时风车 +8F8FA14 四兵同心 +2F6DD04 四横定法 +6F5BD04 四横定式 +26F4D34 四横法门 +AEFC154 四横固式 +AB7F540 四横妙式 +1BF7510 四横最难 +1FBD510 四横最易 +05A7F0C 四将连关 +183FD54 四路冲锋 +1FF8454 四路进兵 +9137ADC 四面八方 +93C9BD4 四面楚歌 +5BEE90C 四面埋伏 +55FB0D4 逃之夭夭 +1FAAF10 桃花园中 +181F7D4 天雷无妄 +1CC56DC 天山逐鹿 +181F57C 天水之讼 +C22EFB4 同步倒影 +0B36ACC 同步堂弟 +0B26BCC 同步堂兄 +4C2A7F4 同步异位 +1FA0BE4 头尾互换 +0A7EBC0 屯兵东路 +1BE7AC0 围而不歼 +1A5DF0C 瓮中之鳖 +25734F4 无图无功 +0F57470 五横最难 +55ADF0C 五将逼宫 +1ABC63C 勿入歧途 +92E8EF4 误失荆州 +1CF9CA4 仙人推磨 +9A23FD4 相看不厌 +0E09DF4 小兵探路 +4697FC0 小凤三胞 +2067DF4 小雁孤飞 +2BDF980 小鬼难缠 +6BC8B5C 车驰马啸 +6AFFA40 小乔三八 +57BEB80 小旋风Ⅰ +5B4A2FC 小旋风Ⅱ +5DFAB80 小旋风Ⅲ +1A5DF0C 小燕出巢 +1EAB0F4 新鸿门宴 +9DE6F10 星罗棋布 +EB8EEC4 形颠神倒 +05BE70C 形近神似 +AAC7ED0 形神颠倒 +0C297F4 形神优解 +25EEF04 形同神异 +0E36A3C 胸有朝阳 +27A2CDC 貅之赳赳 +9E3CE94 虚无缥缈 +0FE09B4 虚与委蛇 +43CBD54 旭日东升 +2F0B59C 旋转砝码 +92BBE34 旋转让道 +6DEC714 漩涡乍现 +24FB89C 雪拥蓝关 +457E1CC 丫形优解 +02E92FC 檐浮旭日 +434AFB4 阴阳颠倒 +22C67DC 野马分鬃 +255FC34 一代天骄 +45FF244 一颠两步 +8247FD4 一颠两快 +957FC14 一颠三步 +550F7D4 一颠三晃 +9AA0F7C 一夫当关 +1BC1BAC 一横定式 +0F43AAC 一横法门 +0EC1EAC 一横固式 +1BEEB04 一横妙式 +1FAF980 一横最简 +1B9AF0C 一横最难 +1FF12A8 一横最易 +93C5ADC 一壶花酒 +1BEAF10 一路进军 +1BE6E30 一路顺风 +0FB7610 一字长蛇 +43FA6D0 以退为进 +1A5BF0C 以逸待劳 +26E4BCC 义放曹操 +67F8714 异地同心 +4CA27F4 异位同步 +8DBE834 阴阳颠倒 +1FF5510 勇闯五关 +1BDF980 有翅无飞 +CFFA540 有去无回 +0CFB514 鱼游春水 +1BE68CC 雨声淅沥 +12E68FC 欲罢不能 +0F4798C 寓巧于拙 +9DED384 辕门射戟 +E6CAF34 云横秦岭 +1A9DF0C 云遮雾障 +1FE4874 运兵阴平 +10FF5A4 泽水环山 +1CCF554 银河一线 +5B437D4 乍现漩涡 +13BDB44 长蛇之阵 +CEBAF04 整齐排列 +1ADEF80 指挥若定 +5B7B88C 众志成城 +2F216DC 重链优解 +1EFD680 重拳出击 +1ADF710 重重设防 +18DA8FC 诸葛八阵 +1CC5AF4 自成镜像 +62FE970 自动报时 +4F2E9C4 字母系列N +2FB4AC4 字母系列C +6CF8A5C 字母系列U +4CEE9C4 字母系列H +6EF89C4 字母系列R +1FB16D0 字母系列P +6BFA710 字母系列T +2BBCB50 字母系列F +1BC4AF4 字母系列I +0CCDE64 字母系列L +1AAEF0C 走投无路 +0AF7E80 左兵右将 +1FFAA10 左右布兵 +07CF2A8 左右逢源 +[Cases] +title=发芽网布局图 +tip=来自发芽网,原有412关,去除非标准布局后为352关 +1A9BF0C 横刀立马 +1ADEF80 指挥若定 +10AAF7C 将拥曹营 +1AFF980 齐头并进 +1FA6F80 兵分三路 +1BE68CC 雨声淅沥 +1FFAA10 左右布兵 +1FAAF10 桃花园中 +1BEAF10 一路进军 +1BE6E30 一路顺风 +1BE7AC0 围而不歼 +1FF12A8 捷足先登 +1BDF980 插翅难飞 +1AE3CD4 守口如瓶1 +1FA8CD4 守口如瓶2 +1BE670C 双将挡路 +1A5E3CC 横马当关 +1ADF710 层层设防1 +1FA7710 层层设防2 +1EE7710 兵挡将阻 +1FFA510 堵塞要道 +1A5DF0C 瓮中之鳖 +1ADD70C 层峦叠嶂 +1BD570C 水泄不通 +1FF8454 四路进兵 +1BF7510 入地无门 +1FF5510 勇闯五关 +1B9AF0C 一横最难 +1FF12A8 一横最易1 +1FAF980 一横最易2 +1EDAF10 二横最难 +1EE9F10 二横最易 +1FA7710 三横最难 +1FFA510 三横最易 +1BF7510 四横最难 +1FBD510 四横最易 +1EA7EC0 乱石崩云 +99BC3D4 背水列阵 +5BEE90C 四面楚歌 +2F5543C 前呼后拥 +1FF9A80 兵临曹营 +55ADF0C 五将逼宫 +1A9DF0C 云遮雾障 +0A5DF0C 三军联防 +06EBF10 前挡后阻 +EEADF40 近在咫尺 +1AAEF0C 走投无路 +1A5DF0C 小燕出巢 +255CECC 比翼横空 +0ED570C 夹道藏兵 +0A7EBC0 屯兵东路 +05A7F0C 四将连关 +EAFB740 近在咫尺2 +4FEA134 峰回路转 +5DEB710 井底之蛙 +5DEB0D4 插翅难飞2 +050FAEC 似远实近 +E2FAF14 近在咫尺3 +0F57470 五横最难 +0E09DF4 小兵探路 +A2ECBD4 前后夹攻 +8AFAB30 单兵种的没落 +12E68FC 欲罢不能 +0F5CE44 横行之将 +EABDF40 列队欢送 +C2A3FD4 列队欢送2 +EAEC3D4 百花盛开 +96FE390 行百里者半九十 +6BC8B5C 小汽车 +43BBD84 单身的小兵 +43FA6D0 以退为进 +13BDB44 一字长蛇阵 +0FB7610 一字长蛇阵2 +133FAA4 扰敌之策 +0AF7E80 左兵右将 +9DE6F10 星罗棋布 +0E31E74 虚与委蛇 +0FE09B4 虚与委蛇2 +1EF6D10 层层设防3 +55A13FC 奖杯 +25683FC 气势汹汹 +EAFFA40 近在咫尺4 +1FB0B54 数字系列0 +43CE9B4 数字系列1 +1F294DC 数字系列2 +1F2D274 数字系列3 +28DB71C 数字系列4 +1F861DC 数字系列5 +0B3D85C 数字系列6 +0FE6384 数字系列7 +ABE3B14 数字系列8 +2B1F1B4 数字系列9 +00EFDA4 穷途末路 +9FF1294 砝码 +13E4B5C 琼瑶敲碎 +03FB590 冯京马凉 +1F3859C 冯京马凉2 +10A57FC 花车 +1A4FD4C 离而不坎 +1AF744C 孤雁南飞 +0BE7710 高厦一零一 +5FEB510 暗渡陈仓 +58EC5F4 困于赤绂 +10B7DB4 大渡桥橫铁索寒 +0CFB514 鱼游春水 +8FAF214 古堡藏龙 +2EDB6C0 歧路亡羊 +1EF6C90 陈兵西陲 +9BA0FD4 水浒聚义 +9E3CE94 山在虚无缥缈间 +9A23FD4 相看两不厌 +5B4F1D4 互不相让 +548F5DC 胡马窥江 +67DE170 马首是瞻 +67F8714 异地同心 +183FD54 四路进兵2 +4CEE934 数字系列4-2 +9137ADC 四面八方 +9C35ADC 牛气冲天 +1EFD680 拳头 +0FF42A8 匹马嘶风 +20557FC 伏羲八卦 风风巽 +10FF694 伏羲八卦 地天泰 +181F57C 伏羲八卦 天水讼 +1CC5F54 伏羲八卦 火天大有 +181F7D4 伏羲八卦 天雷无妄 +1CC56DC 伏羲八卦 天山遯 +2057DF4 伏羲八卦 山天大畜 +1CC55F4 伏羲八卦 风天小畜 +1CCF554 伏羲八卦 泽天夬 +183DAF4 伏羲八卦 地火明夷 +10FAA7C 伏羲八卦 雷地豫 +1CCF6A8 伏羲八卦 地山谦2 +183DA7C 伏羲八卦 地风升 +183FE94 伏羲八卦 地泽临 +182BD7C 伏羲八卦 雷水解 +181FA7C 伏羲八卦 山水蒙 +1CC5FA4 伏羲八卦 火山旅 +2055FF4 伏羲八卦 风火家人 +181FF54 伏羲八卦 火泽睽 +1829F7C 伏羲八卦 雷山小过 +181FAF4 伏羲八卦 山雷颐 +1CC69F4 伏羲八卦 风雷益 +10FF5A4 伏羲八卦 泽山咸 +181F5F4 伏羲八卦 风泽中孚 +8DBE834 颠倒96(阴) +434AFB4 颠倒96(阳) +0CFB644 独辟蹊径 +1FF9910 三羊开泰1 +1FAF510 三羊开泰2 +1FA54F0 三羊开泰3 +02DB8DC 顺时风车 +0227EDC 逆时风车 +1BEEB04 一横定式A +1BC1BAC 一橫定式B +0EC1EAC 一橫定式C +0F43AAC 一橫定式D +033A79C 二橫定式A +033B7A4 二橫定式B +033B59C 三橫定式A +033B5B4 三橫定式B +AEFC154 四橫定式A +2F6DD04 四橫定式B +26F4D34 四橫定式C +AB7F540 四橫定式D +6F5BD04 四橫定式E +2ACC9BC 殊途同归 +1ABC63C 勿入歧途 +9AA0F7C 一夫当关 +28B8F9C 节节高升 +67DF680 换离为兑 +0F4798C 寓巧于拙 +5B7E710 轮回 +0A33A7C 殊途同归I +1EAFC14 殊途同归II +1B9D0F4 殊途同归III +6F78354 殊途同归IV +C2ACFD4 百步歧形 +8F8FA14 四兵同心 +02CED9C 生机盎然 +5DEAF80 退一步海阔天空 +10AFDD4 高处不胜寒 +0E8E71C 步步高3 +51ECA7C 水中倒影之实 +9AF631C 水中倒影之像 +4F3A49C 进退维谷 +4F8E94C 不谋而合 +07CF2A8 左右逢源 +8E8FB14 进退自如 +28DE734 百步穿杨 +8ABD07C 七上八下(上) +47C1ABC 七上八下(下) +0839BBC 别无选择 +6AFFA40 大乔小乔(上) +AA07EBC 大乔小乔(下) +92BBE34 旋转让道 +0EAF930 兵随将转 +1EAB0F4 新鸿门宴Ⅰ +1A53C7C 新鸿门宴Ⅱ +0ABCF14 三顾茅庐 +AA22BFC 7系列 七步成诗 +CEBAF04 7系列 整齐排列 +953CADC 7系列 倒扣杯中 +5BEB60C 7系列 飘在空中 +93C9BD4 7系列 四面楚歌 +1F89BD0 7系列 步履维艰 +62FE970 7系列 自动报时 +1CC557C 上下镜像 +1CC7EA8 首尾互换(上) +1FA0BE4 首尾互换(下) +5B7B88C 众志成城 +1CC5E74 孔融让梨 +1CF9CA4 仙人推磨 +5BEA7C0 陆绩怀橘 +0E8F19C 曹冲称象 +59EBB30 孔明扇 +26E4BCC 步步高之义放曹操 +4CA27F4 异位同步(上) +4C2A7F4 异位同步(下) +1CC5AF4 自成镜像 +59EAF30 孔明扇2 +92E8EF4 大意失荆州 +6AFF980 鞠躬尽瘁 +1B9E38C 木牛流马 +18DA8FC 诸葛八阵 +1298BFC 上下求索 +93C5ADC 花间一壶酒 +4FFA680 不惑之前 +80A6BFC 不惑之后 +07ACD70 双兵争锋 +00EBF54 高位分歧 +05BE70C 形近神似(上) +05BE0DC 形近神似(下) +2F0B59C 旋转砝码 +10F99DC 坦克 +5DAB4F0 孔明扇3 +255FC34 莱希 +25734F4 米拉 +25EEF04 形同神异 +057C93C 神在内涵 +1AEBF10 面具 +83C7DA4 龙凤三胞(兄长) +4697CF0 龙凤三胞(大妹) +4697FC0 龙凤三胞(小妹) +2BDF980 小鬼难缠 +406EEBC 佳人梳妆(佳人) +8EBEB04 佳人梳妆(镜像) +460BEBC 双头俩尾 +9F560F4 分兵作战 +8E0D7D4 闪展腾挪 +457E1CC 丫形优解 +8247FD4 一颠快两步(上) +45FF244 一颠快两步(下) +9583FD4 逃出来啦(上) +55FB0D4 逃出来啦(下) +957FC14 一颠快三步(上) +550F7D4 一颠快三步(下) +0F587D0 困兽犹斗 +0C297F4 H形优解 +6A7B4F0 扇壶一体(扇) +A3CE7A4 扇壶一体(壶) +08FD9D0 将士一心 +08B39BC 人形优解 +2ACE8DC 手形优解 +06FE90C 倒影丫解(上) +C836FB4 倒影丫解(下) +06DB70C 倒影等优(上) +CC3D9B4 倒影等优(下) +07BEE80 同步倒影(上) +C22EFB4 同步倒影(下) +EBF98C4 活眼倒影(上) +26239FC 活眼倒影(下) +E28F9F4 触角优解(左) +26DFAC0 触角优解(右) +6EF89C4 字母系列A +2FB4AC4 字母系列C +2BBCB50 字母系列F +4CEE9C4 字母系列H +1BC4AF4 字母系列I +0CCDE64 字母系列L +4F2E9C4 字母系列N +1FB16D0 字母系列P +6BFA710 字母系列T +6CF8A5C 字母系列U +6D2B9F0 古稀倒影(上) +AECDAD0 古稀倒影(下) +693FA70 形神颠倒(上) +AAC7ED0 形神颠倒(下) +24BEBB0 形颠神倒(上) +EB8EEC4 形颠神倒(下) +472AEF0 凤凰倒影(凤) +8B8FA70 凤凰倒影(凰) +2B392BC 互生优解 +2F216DC 重链优解 +59ED4F0 电阻优解 +1C87BE4 平行优解 +A739B70 麒麟倒影(麒) +672ED70 麒麟倒影(麟) +E7D7834 合兵一处 +C72DF14 兵分二路 +EDECA34 貔貅倒影(貔) +27A2CDC 貔貅倒影(貅) +0B26BCC 同步堂亲(兄) +0B36ACC 同步堂亲(弟) +0FA76C0 分久必合 +02FED84 合久必分 +C32EBD4 日月同辉 +CACC6F4 曹操划小圈 +9937EC4 虎踪 +587FB50 狼影 +AD9F870 辕门射戟A +9DED384 辕门射戟B +1A5BF0C 以逸待劳 +24FB89C 雪拥蓝关 +E6CAF34 云横秦岭 +1BB670C 八阵图 +9BEF814 兵据曹营 +1A7FAC0 山穷水尽 +1BDED10 上屋抽梯 +CFFA540 有去有回 +CE8FC54 能上能下 +C8CBBB4 火烧连营 +2FE9B80 睡狮苏醒 +43EA39C 侧面虎 +0E36A3C 胸有朝阳 +28EA3F4 江村夕照 +2ABF9C0 曲水流觞 +02E92FC 檐浮旭日 +02FD3A4 三一奇阵 +083DFA4 流水行云 +1FE4874 运兵阴平 +22C67DC 野马分鬃 +22FD6D0 寄人篱下 +582F5DC 披甲持螯 +10F99F4 居中斡旋 +02FD934 开到茶蘼 +2067DF4 小孤雁 +6DEC714 漩涡乍现 +5B437D4 漩涡乍现2 +24B3F54 兵不厌走 +9DD7E04 倒影胡马 +22E98FC 首居中道 +5DFAB80 小旋风 +57BEB80 小旋风Ⅰ +5B4A2FC 小旋风Ⅱ +2557FC0 身先士卒 +0FF5510 兵威将广 +45A7FC0 高枕无忧 +269C37C 海晏河清 +43CBD54 旭日东升2 +0E9CD4C 横骆驼 +0337A74 圈套 +[Cases] +title=林雨霖华容道68局 +tip=来自林雨霖,共68个布局 +1A9BF0C 横刀立马 +1A5DF0C 小燕出巢 +1BD570C 水泄不通 +EEADF40 近在咫尺 +1FF5510 巧过五关 +1ACBCD4 守口如瓶 +1FA7710 层层设防1 +1ADF710 层层设防2 +6BFA704 三面围攻 +2AF7E80 屯兵东路 +1FA6F80 兵分三路 +1BDF980 插翅难飞 +28D877C 望风而逃 +4FEA134 峰回路转 +255FEC0 天罗地网 +55ADF0C 五将逼宫 +5BEA70C 四面楚歌 +1ADEF80 指挥若定 +10AAF7C 将拥曹营 +1AFF980 齐头并进 +1BE68CC 雨声淅沥 +1FFAA10 左右布兵 +1BEAF10 一路进军 +1BE6E30 一路顺风 +1BE7AC0 围而不歼 +1FA2CD4 守口如瓶2 +1BE670C 双将挡路 +1A5E3CC 横马当关 +1EE7710 兵挡将路 +1FFA510 堵塞要道 +1ADD70C 层峦叠嶂 +1FF8514 四路进兵 +1BF7510 入地无门 +1FF9A80 兵临曹营 +06EBF10 前挡后阴 +0ED570C 夹道藏兵 +05A7F0C 四将连关 +99BC3D4 背水列阵 +1A9DF0C 云遮雾障 +0A5DF0C 三军联防 +0ABCF14 三顾茅庐 +5B7B88C 众志成城 +0CF3694 独闯蹊径 +1FA54F0 三羊开泰 +0F4798C 寓巧於掘 +5B7E710 轮回 +20E977C 颠沛流离 +9AA0F7C 一夫当关 +1ABE4F0 勿入歧途 +1B9AF0C 一横最难 +1EDAF10 二横最难 +1BF7510 四横最难 +181FF54 伏火泽癸 +1829F7C 伏雷山小过 +8DBCA34 颠倒96阴 +436BCB4 颠倒96阳 +4F3A49C 进退维谷 +9ABCE34 旋转让道 +07CF2A8 左右逢源 +8E8FB14 进退自如 +28DE734 百步穿杨 +1CF9CA4 仙人推磨 +C836FB4 倒影优解 +9DE6F10 星罗棋布 +05BE70C 形近神似 +00EBF54 高位分岐 +07ACD70 双兵争锋 +10FF694 高阶14 +[Cases] +title=其他布局图 +tip=收集较为少见的名称或布局 +1ADEF80 将守角楼 +1FFAA10 兵临城下 +1BE670C 重重包围 +1FA7710 兵将联防 +1A9DF0C 横竖皆将 +1FF5510 巧过五关 +0ED570C 兵将连环 +05A7F0C 五虎联防 +0A5DF0C 交错堵道 +123FD54 四路皆兵 +0EFC154 四路进兵 +2557FC0 将挡后路 \ No newline at end of file diff --git a/Form_Classic_Cases.frm b/Form_Classic_Cases.frm new file mode 100644 index 0000000..7eef1dc --- /dev/null +++ b/Form_Classic_Cases.frm @@ -0,0 +1,314 @@ +VERSION 5.00 +Begin VB.Form Form_Classic_Cases + AutoRedraw = -1 'True + BorderStyle = 1 'Fixed Single + Caption = "选择华容道经典布局" + ClientHeight = 5445 + ClientLeft = 45 + ClientTop = 390 + ClientWidth = 6990 + LinkTopic = "Form1" + MaxButton = 0 'False + MinButton = 0 'False + ScaleHeight = 5445 + ScaleWidth = 6990 + StartUpPosition = 2 '屏幕中心 + Begin VB.CommandButton Command_Confirm + Caption = "确认" + Height = 540 + Left = 5480 + TabIndex = 6 + Top = 4780 + Width = 1400 + End + Begin VB.TextBox Text_Code + Alignment = 2 'Center + BeginProperty Font + Name = "微软雅黑" + Size = 15.75 + Charset = 134 + Weight = 400 + Underline = 0 'False + Italic = 0 'False + Strikethrough = 0 'False + EndProperty + Height = 570 + Left = 3180 + Locked = -1 'True + TabIndex = 5 + Top = 4780 + Width = 2175 + End + Begin VB.CommandButton Command_Search + Caption = "搜索" + Height = 255 + Left = 2280 + TabIndex = 3 + Top = 480 + Width = 735 + End + Begin VB.TextBox Text_Search + Height = 270 + Left = 120 + TabIndex = 2 + Top = 480 + Width = 2055 + End + Begin VB.TextBox Text_Tip + Appearance = 0 'Flat + BackColor = &H8000000F& + BorderStyle = 0 'None + Height = 615 + Left = 120 + Locked = -1 'True + MultiLine = -1 'True + TabIndex = 4 + Top = 4780 + Width = 2895 + End + Begin VB.ComboBox Combo_Cases + Height = 300 + Left = 120 + Style = 2 'Dropdown List + TabIndex = 1 + Top = 120 + Width = 2895 + End + Begin VB.ListBox List_Cases + Height = 3840 + Left = 120 + TabIndex = 0 + Top = 840 + Width = 2895 + End +End +Attribute VB_Name = "Form_Classic_Cases" +Attribute VB_GlobalNameSpace = False +Attribute VB_Creatable = False +Attribute VB_PredeclaredId = True +Attribute VB_Exposed = False +Option Explicit +Private Type Case_Block + address As Integer + style As Integer +End Type +Dim tip As String +Dim Block(0 To 9) As Case_Block +Dim start_x As Integer, start_y As Integer, square_width As Integer, gap As Integer +Private Sub Form_Load() + start_x = 3200 + start_y = 135 + square_width = 815 + gap = 75 + Call Get_Cases_title + Combo_Cases.ListIndex = 0 +End Sub +Private Sub Command_Confirm_Click() + change_case = True + change_case_title = Left(List_Cases.Text, Len(List_Cases.Text) - 9) + change_case_code = Text_Code + Unload Form_Classic_Cases +End Sub +Private Sub List_Cases_Click() + Dim temp As String + Text_Tip = "(" & List_Cases.ListIndex + 1 & "/" & List_Cases.ListCount & ")" + temp = List_Cases.List(List_Cases.ListIndex) + Text_Code = Mid(temp, Len(temp) - 7, 7) + Call Analyse_Code(Text_Code) + Call Output_Graph +End Sub +Private Sub Command_Search_Click() + Dim i As Integer, j As Integer, last_select As Integer + Dim temp() As String + Dim searching As Boolean + ReDim temp(0) + If Text_Search = "" Then Exit Sub + last_select = Combo_Cases.ListIndex + searching = False + If Combo_Cases.List(Combo_Cases.ListCount - 1) = "搜索结果" Then + Combo_Cases.RemoveItem Combo_Cases.ListCount - 1 + searching = True + End If + For j = 0 To Combo_Cases.ListCount - 1 + Combo_Cases.ListIndex = j + If Combo_Cases.Text = "搜索结果" Then Exit For + For i = 0 To List_Cases.ListCount - 1 + If InStr(List_Cases.List(i), Text_Search) <> 0 Then + ReDim Preserve temp(UBound(temp) + 1) + temp(UBound(temp)) = List_Cases.List(i) + End If + Next i + Next j + List_Cases.Clear + Combo_Cases.AddItem "搜索结果" + Combo_Cases.ListIndex = Combo_Cases.ListCount - 1 + Text_Tip = "共找到" & UBound(temp) & "个结果" + Text_Code = "": Cls + If UBound(temp) = 0 Then + If searching = False Then + Combo_Cases.RemoveItem Combo_Cases.ListCount - 1 + Combo_Cases.ListIndex = last_select + End If + MsgBox "No Result!" + Exit Sub + End If + For i = 1 To UBound(temp) + List_Cases.AddItem temp(i) + Next i + List_Cases.ListIndex = 0 + Text_Tip = "共找到" & UBound(temp) & "个结果" +End Sub +Private Sub Combo_Cases_Click() + If Not Combo_Cases.Text = "搜索结果" Then + If Combo_Cases.List(Combo_Cases.ListCount - 1) = "搜索结果" Then + Combo_Cases.RemoveItem Combo_Cases.ListCount - 1 + Text_Search = "" + End If + Call Get_Cases(Combo_Cases.ListIndex) + List_Cases.ListIndex = 0 + Text_Tip = tip + End If +End Sub +Private Sub Text_Search_KeyPress(KeyAscii As Integer) + If KeyAscii = 13 Then Call Command_Search_Click +End Sub +Private Sub Get_Cases(index As Integer) + Dim temp As String, name As String, num As Integer + num = 0 + List_Cases.Clear + Open "Classic_Cases.txt" For Input As #1 + Do Until EOF(1) + Line Input #1, temp + If temp = "[Cases]" Then + If num = index Then + Line Input #1, temp + Line Input #1, temp + tip = Right(temp, Len(temp) - 4) + Text_Tip = tip +reinput: + If EOF(1) = False Then + Line Input #1, temp + If temp <> "[Cases]" Then + List_Cases.AddItem Right(temp, Len(temp) - 8) & "(" & Left(temp, 7) & ")" + GoTo reinput + End If + End If + End If + num = num + 1 + End If + Loop + Close #1 +End Sub +Private Sub Get_Cases_title() + Dim temp As String + Open "Classic_Cases.txt" For Input As #1 + Do Until EOF(1) + Line Input #1, temp + If temp = "[Cases]" Then + Line Input #1, temp + Combo_Cases.AddItem Right(temp, Len(temp) - 6) + End If + Loop + Close #1 +End Sub +Private Sub Output_Graph() + Dim m, x, y As Integer + Dim width As Integer, height As Integer + Print_Block start_x, start_y, square_width * 4 + gap * 5, square_width * 5 + gap * 6, case_line_width, case_color, case_line_color + For m = 0 To 9 + If Block(m).address <> 25 Then + x = (Block(m).address Mod 4) * (square_width + gap) + gap + start_x + y = Int(Block(m).address / 4) * (square_width + gap) + gap + start_y + If Block(m).style = 0 Or Block(m).style = 1 Then + width = square_width * 2 + gap + Else + width = square_width + End If + If Block(m).style = 0 Or Block(m).style = 2 Then + height = square_width * 2 + gap + Else + height = square_width + End If + Print_Block x, y, width, height, block_line_width, block_color, block_line_color + End If + Next m +End Sub +Private Sub Print_Block(print_start_x, print_start_y, print_width, print_height, print_line_width, print_color, print_line_color) + If print_width < 0 Or print_height < 0 Then Exit Sub + FillStyle = 0 + DrawWidth = print_line_width + FillColor = print_color + Line (print_start_x, print_start_y)-(print_start_x + print_width, print_start_y + print_height), print_color, B + Line (print_start_x, print_start_y)-(print_start_x + print_width, print_start_y + print_height), print_line_color, B +End Sub +Private Sub Analyse_Code(Code As String) + On Error Resume Next + Dim temp(1 To 12) As Integer + Dim i, addr, style As Integer + Dim type_1, type_2, type_3 As Integer + Dim Table(0 To 19) As Integer + Dim num As Integer, b1 As Integer, b2 As Integer + Dim dat As String + For i = 1 To 6 + dat = Mid(Code, i + 1, 1) + If Asc(dat) >= 48 And Asc(dat) <= 57 Then num = Int(dat) + If Asc(dat) >= 65 And Asc(dat) <= 70 Then num = Asc(dat) - 55 + b1 = num Mod 4 + b2 = (num - b1) / 4 Mod 4 + temp(i * 2 - 1) = b2 + temp(i * 2) = b1 + Next i + type_1 = 0: type_2 = 0: type_3 = 5 + For i = 0 To 19 + Table(i) = 69 + Next i + For i = 0 To 9 + Block(i).address = 69 + Block(i).style = 69 + Next i + dat = Left(Code, 1) + If Asc(dat) >= 48 And Asc(dat) <= 57 Then num = Int(dat) + If Asc(dat) >= 65 And Asc(dat) <= 70 Then num = Asc(dat) - 55 + Block(0).address = num + Block(0).style = 0 + If Block(0).address > 14 Then GoTo err + Table(Block(0).address) = 0 + Table(Block(0).address + 1) = 0 + Table(Block(0).address + 4) = 0 + Table(Block(0).address + 5) = 0 + addr = 0 + For i = 1 To 11 + Do While Table(addr) <> 69 + If addr < 19 Then + addr = addr + 1 + Else + Exit Do + End If + Loop + style = temp(i) + If style = 0 Then + Table(addr) = 10 + ElseIf style = 1 Then + If type_2 < 5 Then type_2 = type_2 + 1 + If addr > 18 Then GoTo err + Block(type_2).style = 1 + Block(type_2).address = addr + Table(addr) = type_2 + Table(addr + 1) = type_2 + ElseIf style = 2 Then + If type_2 < 5 Then type_2 = type_2 + 1 + If addr > 15 Then GoTo err + Block(type_2).style = 2 + Block(type_2).address = addr + Table(addr) = type_2 + Table(addr + 4) = type_2 + ElseIf style = 3 Then + If type_3 < 9 Then type_3 = type_3 + 1 + Block(type_3).style = 3 + Block(type_3).address = addr + Table(addr) = type_3 + End If + Next i +err: +End Sub + diff --git a/Form_Game.frm b/Form_Game.frm index ad68f2d..c1d213e 100644 --- a/Form_Game.frm +++ b/Form_Game.frm @@ -2,7 +2,7 @@ VERSION 5.00 Begin VB.Form Form_Game AutoRedraw = -1 'True BorderStyle = 1 'Fixed Single - Caption = "HRD Game v0.1 by Dnomd343" + Caption = "HRD Game v1.0 by Dnomd343" ClientHeight = 7305 ClientLeft = 45 ClientTop = 690 @@ -14,12 +14,20 @@ Begin VB.Form Form_Game ScaleHeight = 7305 ScaleWidth = 7290 StartUpPosition = 2 '屏幕中心 + Begin VB.CommandButton Command_Select_Case + Caption = "选择经典布局" + Height = 495 + Left = 5760 + TabIndex = 7 + Top = 1560 + Width = 1335 + End Begin VB.CommandButton Command_Create_Case Caption = "自定义布局" Height = 495 Left = 5760 TabIndex = 6 - Top = 600 + Top = 960 Width = 1335 End Begin VB.Timer Timer_Layout @@ -32,7 +40,7 @@ Begin VB.Form Form_Game Height = 495 Left = 5760 TabIndex = 1 - Top = 1200 + Top = 2160 Width = 1335 End Begin VB.Timer Timer_Get_Time @@ -108,8 +116,8 @@ Private Type Case_Block style As Integer End Type Private Type Block_Address - X As Integer - Y As Integer + x As Integer + y As Integer End Type Dim Block(0 To 9) As Case_Block Dim Exist(1 To 4, 1 To 5) As Boolean @@ -122,28 +130,31 @@ Dim mouse_x As Long, mouse_y As Long, mouse_button As Integer Dim last_move As Integer, move_times As Integer Dim total_steps As Long, total_time As Long Dim Start_Code As String - - -Private Sub Command_Create_Case_Click() - change_case_title = InputBox("请输入布局名称", "提示", "横刀立马") - change_case_code = InputBox("请输入布局编码(7bits)", "提示", "1A9BF0C") - change_case = True +Private Sub Menu_Debug_Mode_Click() + Menu_Debug_Mode.Checked = Not Menu_Debug_Mode.Checked + If Menu_Debug_Mode.Checked = True Then debug_mode = True Else debug_mode = False End Sub - -Private Sub Command_Reset_Click() - total_steps = 0 - total_time = 0 - Timer_Get_Time.Enabled = False +Private Sub Menu_On_Top_Click() + Menu_On_Top.Checked = Not Menu_On_Top.Checked + If Menu_On_Top.Checked = True Then + SetWindowPos Me.hwnd, -1, 0, 0, 0, 0, 1 Or 2 + Else + SetWindowPos Me.hwnd, -2, 0, 0, 0, 0, 1 Or 2 + End If +End Sub +Private Sub Form_Load() Call init - Label_Step = "步数: 0" - Label_Code = Start_Code - Label_Time = "用时: 0:00:00" - Call Analyse(Start_Code) - Call Output_Graph End Sub - +Private Sub Form_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single) + mouse_button = Button + mouse_x = x + mouse_y = y +End Sub +Private Sub Form_DblClick() + Call Form_Click +End Sub Private Sub Form_Click() - Dim m As Integer, X As Integer, Y As Integer + Dim m As Integer, x As Integer, y As Integer If mouse_x < start_x Or mouse_x > start_x + square_width * 4 + gap * 5 Then Exit Sub If mouse_y < start_y Or mouse_y > start_y + square_width * 5 + gap * 6 Then Exit Sub If solve_compete = True Then Exit Sub @@ -155,32 +166,32 @@ Private Sub Form_Click() total_steps = 0 Timer_Get_Time.Enabled = True End If - Y = Int(Block(m).address / 4) + 1 - X = Block(m).address - (Y - 1) * 4 + 1 + y = Int(Block(m).address / 4) + 1 + x = Block(m).address - (y - 1) * 4 + 1 If m = last_move Then If move_max_step = 1 Then If dir_x2 = 0 And dir_y2 = 0 Then If move_times Mod 2 = 1 Then - Call Move_Block(m, block_addr(0).X - X, block_addr(0).Y - Y) + Call Move_Block(m, block_addr(0).x - x, block_addr(0).y - y) Else - Call Move_Block(m, block_addr(1).X - X, block_addr(1).Y - Y) + Call Move_Block(m, block_addr(1).x - x, block_addr(1).y - y) End If Else If mouse_button = 1 Then If move_times Mod 4 = 0 Then - Call Move_Block(m, block_addr(1).X - X, block_addr(1).Y - Y) + Call Move_Block(m, block_addr(1).x - x, block_addr(1).y - y) ElseIf move_times Mod 4 = 1 Then - Call Move_Block(m, block_addr(0).X - X, block_addr(0).Y - Y) + Call Move_Block(m, block_addr(0).x - x, block_addr(0).y - y) ElseIf move_times Mod 4 = 2 Then - Call Move_Block(m, block_addr(2).X - X, block_addr(2).Y - Y) + Call Move_Block(m, block_addr(2).x - x, block_addr(2).y - y) Else - Call Move_Block(m, block_addr(0).X - X, block_addr(0).Y - Y) + Call Move_Block(m, block_addr(0).x - x, block_addr(0).y - y) End If ElseIf mouse_button = 2 Then If move_times Mod 2 = 0 Then - Call Move_Block(m, block_addr(1).X - X, block_addr(1).Y - Y) + Call Move_Block(m, block_addr(1).x - x, block_addr(1).y - y) ElseIf move_times Mod 2 = 1 Then - Call Move_Block(m, block_addr(2).X - X, block_addr(2).Y - Y) + Call Move_Block(m, block_addr(2).x - x, block_addr(2).y - y) End If End If End If @@ -189,17 +200,17 @@ Private Sub Form_Click() If move_times Mod 4 = 0 Then Call Move_Block(m, dir_x1, dir_y1) ElseIf move_times Mod 4 = 1 Then - Call Move_Block(m, block_addr(2).X - X, block_addr(2).Y - Y) + Call Move_Block(m, block_addr(2).x - x, block_addr(2).y - y) ElseIf move_times Mod 4 = 2 Then - Call Move_Block(m, block_addr(1).X - X, block_addr(1).Y - Y) + Call Move_Block(m, block_addr(1).x - x, block_addr(1).y - y) Else - Call Move_Block(m, block_addr(0).X - X, block_addr(0).Y - Y) + Call Move_Block(m, block_addr(0).x - x, block_addr(0).y - y) End If ElseIf mouse_button = 2 Then If move_times Mod 2 = 0 Then - Call Move_Block(m, block_addr(2).X - X, block_addr(2).Y - Y) + Call Move_Block(m, block_addr(2).x - x, block_addr(2).y - y) ElseIf move_times Mod 2 = 1 Then - Call Move_Block(m, block_addr(0).X - X, block_addr(0).Y - Y) + Call Move_Block(m, block_addr(0).x - x, block_addr(0).y - y) End If End If End If @@ -211,17 +222,16 @@ Private Sub Form_Click() If move_max_step = 0 Then Exit Sub total_steps = total_steps + 1 If mouse_button = 1 Then - Call Move_Block(m, block_addr(1).X - X, block_addr(1).Y - Y) + Call Move_Block(m, block_addr(1).x - x, block_addr(1).y - y) End If If mouse_button = 2 Then If move_max_step = 1 Then - Call Move_Block(m, block_addr(1).X - X, block_addr(1).Y - Y) + Call Move_Block(m, block_addr(1).x - x, block_addr(1).y - y) ElseIf move_max_step = 2 Then - Call Move_Block(m, block_addr(2).X - X, block_addr(2).Y - Y) + Call Move_Block(m, block_addr(2).x - x, block_addr(2).y - y) End If End If End If - Label_Step = "步数: " & total_steps Label_Code = Get_Code() Call Output_Graph @@ -232,260 +242,267 @@ Private Sub Form_Click() MsgBox "恭喜你成功完成!" & vbCrLf & "编码: " & Start_Code & vbCrLf & "步数: " & total_steps & vbCrLf & "用时: " & Right(Label_Time, Len(Label_Time) - 4), , "(>__<)" End If End Sub +Private Sub Command_Create_Case_Click() + change_case_title = InputBox("请输入布局名称", "提示", "横刀立马") + change_case_code = InputBox("请输入布局编码(7bits)", "提示", "1A9BF0C") + change_case = True +End Sub -Private Sub Form_DblClick() - Call Form_Click +Private Sub Command_Select_Case_Click() + Form_Classic_Cases.Show 1 End Sub -Private Sub Form_Load() +Private Sub Command_Reset_Click() + total_steps = 0 + total_time = 0 + Timer_Get_Time.Enabled = False Call init + Label_Step = "步数: 0" + Label_Code = Start_Code + Label_Time = "用时: 0:00:00" + Call Analyse(Start_Code) + Call Output_Graph End Sub - -Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) - mouse_button = Button - mouse_x = X - mouse_y = Y +Private Sub init() + playing = False + solve_compete = False + last_move = 10 + move_times = 0 + total_steps = 0 + start_x = 180 + start_y = 300 + gap = 105 + square_width = 1200 + block_line_width = 1 + case_line_width = 2 + block_line_color = RGB(0, 0, 0) + case_line_color = RGB(0, 0, 0) + block_color = RGB(250, 250, 250) + case_color = RGB(256, 256, 256) + Call Case_init + x_split(0) = start_x + x_split(1) = start_x + gap / 2 + square_width + gap + x_split(2) = start_x + gap / 2 + (square_width + gap) * 2 + x_split(3) = start_x + gap / 2 + (square_width + gap) * 3 + x_split(4) = start_x + gap + (square_width + gap) * 4 + y_split(0) = start_y + y_split(1) = start_y + gap / 2 + square_width + gap + y_split(2) = start_y + gap / 2 + (square_width + gap) * 2 + y_split(3) = start_y + gap / 2 + (square_width + gap) * 3 + y_split(4) = start_y + gap / 2 + (square_width + gap) * 4 + y_split(5) = start_y + gap + (square_width + gap) * 5 End Sub Private Sub Move_Block(m As Integer, dir_x As Integer, dir_y As Integer) - Dim addr As Integer, style As Integer, X As Integer, Y As Integer + Dim addr As Integer, style As Integer, x As Integer, y As Integer addr = Block(m).address style = Block(m).style - Y = Int(addr / 4) + 1 - X = addr - (Y - 1) * 4 + 1 - X = X + dir_x - Y = Y + dir_y - addr = (Y - 1) * 4 + X - 1 + y = Int(addr / 4) + 1 + x = addr - (y - 1) * 4 + 1 + x = x + dir_x + y = y + dir_y + addr = (y - 1) * 4 + x - 1 Call Clear_Block(m) Block(m).address = addr Block(m).style = style If Block(m).style = 0 Then - Block_index(X, Y) = m - Block_index(X, Y + 1) = m - Block_index(X + 1, Y) = m - Block_index(X + 1, Y + 1) = m + Block_index(x, y) = m + Block_index(x, y + 1) = m + Block_index(x + 1, y) = m + Block_index(x + 1, y + 1) = m End If If Block(m).style = 1 Then - Block_index(X, Y) = m - Block_index(X + 1, Y) = m + Block_index(x, y) = m + Block_index(x + 1, y) = m End If If Block(m).style = 2 Then - Block_index(X, Y) = m - Block_index(X, Y + 1) = m + Block_index(x, y) = m + Block_index(x, y + 1) = m End If If Block(m).style = 3 Then - Block_index(X, Y) = m + Block_index(x, y) = m End If - For X = 1 To 4 - For Y = 1 To 5 - If Block_index(X, Y) <> 10 Then Exist(X, Y) = True - Next Y - Next X + For x = 1 To 4 + For y = 1 To 5 + If Block_index(x, y) <> 10 Then Exist(x, y) = True + Next y + Next x End Sub Private Sub Check_Move(m As Integer) - Dim addr As Integer, X As Integer, Y As Integer + Dim addr As Integer, x As Integer, y As Integer Dim move_once As Boolean move_once = False dir_x1 = 0: dir_x2 = 0: dir_y1 = 0: dir_y2 = 0 move_max_step = 0 addr = Block(m).address - Y = Int(addr / 4) + 1 - X = addr - (Y - 1) * 4 + 1 - block_addr(0).X = X: block_addr(0).Y = Y - block_addr(1).X = X: block_addr(1).Y = Y - block_addr(2).X = X: block_addr(2).Y = Y + y = Int(addr / 4) + 1 + x = addr - (y - 1) * 4 + 1 + block_addr(0).x = x: block_addr(0).y = y + block_addr(1).x = x: block_addr(1).y = y + block_addr(2).x = x: block_addr(2).y = y If Block(m).style = 0 Then - If Y > 1 Then - If Exist(X, Y - 1) = False And Exist(X + 1, Y - 1) = False Then move_max_step = 1: dir_y1 = -1 + If y > 1 Then + If Exist(x, y - 1) = False And Exist(x + 1, y - 1) = False Then move_max_step = 1: dir_y1 = -1 End If - If Y < 4 Then - If Exist(X, Y + 2) = False And Exist(X + 1, Y + 2) = False Then move_max_step = 1: dir_y1 = 1 + If y < 4 Then + If Exist(x, y + 2) = False And Exist(x + 1, y + 2) = False Then move_max_step = 1: dir_y1 = 1 End If - If X > 1 Then - If Exist(X - 1, Y) = False And Exist(X - 1, Y + 1) = False Then move_max_step = 1: dir_x1 = -1 + If x > 1 Then + If Exist(x - 1, y) = False And Exist(x - 1, y + 1) = False Then move_max_step = 1: dir_x1 = -1 End If - If X < 3 Then - If Exist(X + 2, Y) = False And Exist(X + 2, Y + 1) = False Then move_max_step = 1: dir_x1 = 1 + If x < 3 Then + If Exist(x + 2, y) = False And Exist(x + 2, y + 1) = False Then move_max_step = 1: dir_x1 = 1 End If ElseIf Block(m).style = 1 Then - If Y > 1 Then - If Exist(X, Y - 1) = False And Exist(X + 1, Y - 1) = False Then move_max_step = 1: dir_y1 = -1 + If y > 1 Then + If Exist(x, y - 1) = False And Exist(x + 1, y - 1) = False Then move_max_step = 1: dir_y1 = -1 End If - If Y < 5 Then - If Exist(X, Y + 1) = False And Exist(X + 1, Y + 1) = False Then move_max_step = 1: dir_y1 = 1 + If y < 5 Then + If Exist(x, y + 1) = False And Exist(x + 1, y + 1) = False Then move_max_step = 1: dir_y1 = 1 End If - If X > 1 Then - If Exist(X - 1, Y) = False Then + If x > 1 Then + If Exist(x - 1, y) = False Then move_max_step = 1 If move_once = False Then dir_x1 = -1 Else dir_x2 = -1 move_once = True - If X > 2 Then - If Exist(X - 2, Y) = False Then move_max_step = 2: dir_x2 = -2 + If x > 2 Then + If Exist(x - 2, y) = False Then move_max_step = 2: dir_x2 = -2 End If End If End If - If X < 3 Then - If Exist(X + 2, Y) = False Then + If x < 3 Then + If Exist(x + 2, y) = False Then move_max_step = 1 If move_once = False Then dir_x1 = 1 Else dir_x2 = 1 move_once = True - If X < 2 Then - If Exist(X + 3, Y) = False Then move_max_step = 2: dir_x2 = 2 + If x < 2 Then + If Exist(x + 3, y) = False Then move_max_step = 2: dir_x2 = 2 End If End If End If ElseIf Block(m).style = 2 Then - If Y > 1 Then - If Exist(X, Y - 1) = False Then + If y > 1 Then + If Exist(x, y - 1) = False Then move_max_step = 1 If move_once = False Then dir_y1 = -1 Else dir_y2 = -1 move_once = True - If Y > 2 Then - If Exist(X, Y - 2) = False Then move_max_step = 2: dir_y2 = -2 + If y > 2 Then + If Exist(x, y - 2) = False Then move_max_step = 2: dir_y2 = -2 End If End If End If - If Y < 4 Then - If Exist(X, Y + 2) = False Then + If y < 4 Then + If Exist(x, y + 2) = False Then move_max_step = 1 If move_once = False Then dir_y1 = 1 Else dir_y2 = 1 move_once = True - If Y < 3 Then - If Exist(X, Y + 3) = False Then move_max_step = 2: dir_y2 = 2 + If y < 3 Then + If Exist(x, y + 3) = False Then move_max_step = 2: dir_y2 = 2 End If End If End If - If X > 1 Then - If Exist(X - 1, Y) = False And Exist(X - 1, Y + 1) = False Then move_max_step = 1: dir_x1 = -1 + If x > 1 Then + If Exist(x - 1, y) = False And Exist(x - 1, y + 1) = False Then move_max_step = 1: dir_x1 = -1 End If - If X < 4 Then - If Exist(X + 1, Y) = False And Exist(X + 1, Y + 1) = False Then move_max_step = 1: dir_x1 = 1 + If x < 4 Then + If Exist(x + 1, y) = False And Exist(x + 1, y + 1) = False Then move_max_step = 1: dir_x1 = 1 End If ElseIf Block(m).style = 3 Then - If Y > 1 Then - If Exist(X, Y - 1) = False Then + If y > 1 Then + If Exist(x, y - 1) = False Then move_max_step = 1 If move_once = False Then dir_y1 = -1 Else dir_y2 = -1 move_once = True - If Y > 2 Then - If Exist(X, Y - 2) = False Then move_max_step = 2: dir_y2 = -2 + If y > 2 Then + If Exist(x, y - 2) = False Then move_max_step = 2: dir_y2 = -2 End If - If X > 1 Then - If Exist(X - 1, Y - 1) = False Then move_max_step = 2: dir_x2 = -1: dir_y2 = -1 + If x > 1 Then + If Exist(x - 1, y - 1) = False Then move_max_step = 2: dir_x2 = -1: dir_y2 = -1 End If - If X < 4 Then - If Exist(X + 1, Y - 1) = False Then move_max_step = 2: dir_x2 = 1: dir_y2 = -1 + If x < 4 Then + If Exist(x + 1, y - 1) = False Then move_max_step = 2: dir_x2 = 1: dir_y2 = -1 End If End If End If - If Y < 5 Then - If Exist(X, Y + 1) = False Then + If y < 5 Then + If Exist(x, y + 1) = False Then move_max_step = 1 If move_once = False Then dir_y1 = 1 Else dir_y2 = 1 move_once = True - If Y < 4 Then - If Exist(X, Y + 2) = False Then move_max_step = 2: dir_y2 = 2 + If y < 4 Then + If Exist(x, y + 2) = False Then move_max_step = 2: dir_y2 = 2 End If - If X > 1 Then - If Exist(X - 1, Y + 1) = False Then move_max_step = 2: dir_x2 = -1: dir_y2 = 1 + If x > 1 Then + If Exist(x - 1, y + 1) = False Then move_max_step = 2: dir_x2 = -1: dir_y2 = 1 End If - If X < 4 Then - If Exist(X + 1, Y + 1) = False Then move_max_step = 2: dir_x2 = 1: dir_y2 = 1 + If x < 4 Then + If Exist(x + 1, y + 1) = False Then move_max_step = 2: dir_x2 = 1: dir_y2 = 1 End If End If End If - If X > 1 Then - If Exist(X - 1, Y) = False Then + If x > 1 Then + If Exist(x - 1, y) = False Then move_max_step = 1 If move_once = False Then dir_x1 = -1 Else dir_x2 = -1 move_once = True - If X > 2 Then - If Exist(X - 2, Y) = False Then move_max_step = 2: dir_x2 = -2 + If x > 2 Then + If Exist(x - 2, y) = False Then move_max_step = 2: dir_x2 = -2 End If - If Y > 1 Then - If Exist(X - 1, Y - 1) = False Then move_max_step = 2: dir_x2 = -1: dir_y2 = -1 + If y > 1 Then + If Exist(x - 1, y - 1) = False Then move_max_step = 2: dir_x2 = -1: dir_y2 = -1 End If - If Y < 5 Then - If Exist(X - 1, Y + 1) = False Then move_max_step = 2: dir_x2 = -1: dir_y2 = 1 + If y < 5 Then + If Exist(x - 1, y + 1) = False Then move_max_step = 2: dir_x2 = -1: dir_y2 = 1 End If End If End If - If X < 4 Then - If Exist(X + 1, Y) = False Then + If x < 4 Then + If Exist(x + 1, y) = False Then move_max_step = 1 If move_once = False Then dir_x1 = 1 Else dir_x2 = 1 move_once = True - If X < 3 Then - If Exist(X + 2, Y) = False Then move_max_step = 2: dir_x2 = 2 + If x < 3 Then + If Exist(x + 2, y) = False Then move_max_step = 2: dir_x2 = 2 End If - If Y > 1 Then - If Exist(X + 1, Y - 1) = False Then move_max_step = 2: dir_x2 = 1: dir_y2 = -1 + If y > 1 Then + If Exist(x + 1, y - 1) = False Then move_max_step = 2: dir_x2 = 1: dir_y2 = -1 End If - If Y < 5 Then - If Exist(X + 1, Y + 1) = False Then move_max_step = 2: dir_x2 = 1: dir_y2 = 1 + If y < 5 Then + If Exist(x + 1, y + 1) = False Then move_max_step = 2: dir_x2 = 1: dir_y2 = 1 End If End If End If End If - block_addr(1).X = block_addr(0).X + dir_x1 - block_addr(1).Y = block_addr(0).Y + dir_y1 - block_addr(2).X = block_addr(0).X + dir_x2 - block_addr(2).Y = block_addr(0).Y + dir_y2 + block_addr(1).x = block_addr(0).x + dir_x1 + block_addr(1).y = block_addr(0).y + dir_y1 + block_addr(2).x = block_addr(0).x + dir_x2 + block_addr(2).y = block_addr(0).y + dir_y2 End Sub -Private Function Get_block_x(X As Long) As Integer +Private Function Get_block_x(x As Long) As Integer Dim i As Integer For i = 1 To 4 - If X > x_split(i - 1) And X < x_split(i) Then + If x > x_split(i - 1) And x < x_split(i) Then Get_block_x = i Exit For End If Next i End Function -Private Function Get_block_y(Y As Long) As Integer +Private Function Get_block_y(y As Long) As Integer Dim i As Integer For i = 1 To 5 - If Y > y_split(i - 1) And Y < y_split(i) Then + If y > y_split(i - 1) And y < y_split(i) Then Get_block_y = i Exit For End If Next i End Function -Private Sub init() - playing = False - solve_compete = False - last_move = 10 - move_times = 0 - total_steps = 0 - start_x = 180 - start_y = 300 - gap = 105 - square_width = 1200 - block_line_width = 1 - case_line_width = 2 - block_line_color = RGB(0, 0, 0) - case_line_color = RGB(0, 0, 0) - block_color = RGB(250, 250, 250) - case_color = RGB(256, 256, 256) - Call Case_init - x_split(0) = start_x - x_split(1) = start_x + gap / 2 + square_width + gap - x_split(2) = start_x + gap / 2 + (square_width + gap) * 2 - x_split(3) = start_x + gap / 2 + (square_width + gap) * 3 - x_split(4) = start_x + gap + (square_width + gap) * 4 - y_split(0) = start_y - y_split(1) = start_y + gap / 2 + square_width + gap - y_split(2) = start_y + gap / 2 + (square_width + gap) * 2 - y_split(3) = start_y + gap / 2 + (square_width + gap) * 3 - y_split(4) = start_y + gap / 2 + (square_width + gap) * 4 - y_split(5) = start_y + gap + (square_width + gap) * 5 -End Sub Private Sub Output_Graph() - Dim m, X, Y As Integer + Dim m, x, y As Integer Dim width As Integer, height As Integer Print_Block start_x, start_y, square_width * 4 + gap * 5, square_width * 5 + gap * 6, case_line_width, case_color, case_line_color For m = 0 To 9 If Block(m).address <> 25 Then - X = (Block(m).address Mod 4) * (square_width + gap) + gap + start_x - Y = Int(Block(m).address / 4) * (square_width + gap) + gap + start_y + x = (Block(m).address Mod 4) * (square_width + gap) + gap + start_x + y = Int(Block(m).address / 4) * (square_width + gap) + gap + start_y If Block(m).style = 0 Or Block(m).style = 1 Then width = square_width * 2 + gap Else @@ -496,7 +513,7 @@ Private Sub Output_Graph() Else height = square_width End If - Print_Block X, Y, width, height, block_line_width, block_color, block_line_color + Print_Block x, y, width, height, block_line_width, block_color, block_line_color End If Next m End Sub @@ -522,35 +539,35 @@ Private Sub Case_init() Next i End Sub Private Sub Clear_Block(m As Integer) - Dim X As Integer, Y As Integer, addr As Integer + Dim x As Integer, y As Integer, addr As Integer addr = Block(m).address - Y = Int(addr / 4) + 1 - X = addr - (Y - 1) * 4 + 1 + y = Int(addr / 4) + 1 + x = addr - (y - 1) * 4 + 1 If Block(m).style = 0 Then - Exist(X, Y) = False - Exist(X, Y + 1) = False - Exist(X + 1, Y) = False - Exist(X + 1, Y + 1) = False - Block_index(X, Y) = 10 - Block_index(X, Y + 1) = 10 - Block_index(X + 1, Y) = 10 - Block_index(X + 1, Y + 1) = 10 + Exist(x, y) = False + Exist(x, y + 1) = False + Exist(x + 1, y) = False + Exist(x + 1, y + 1) = False + Block_index(x, y) = 10 + Block_index(x, y + 1) = 10 + Block_index(x + 1, y) = 10 + Block_index(x + 1, y + 1) = 10 End If If Block(m).style = 1 Then - Exist(X, Y) = False - Exist(X + 1, Y) = False - Block_index(X, Y) = 10 - Block_index(X + 1, Y) = 10 + Exist(x, y) = False + Exist(x + 1, y) = False + Block_index(x, y) = 10 + Block_index(x + 1, y) = 10 End If If Block(m).style = 2 Then - Exist(X, Y) = False - Exist(X, Y + 1) = False - Block_index(X, Y) = 10 - Block_index(X, Y + 1) = 10 + Exist(x, y) = False + Exist(x, y + 1) = False + Block_index(x, y) = 10 + Block_index(x, y + 1) = 10 End If If Block(m).style = 3 Then - Exist(X, Y) = False - Block_index(X, Y) = 10 + Exist(x, y) = False + Block_index(x, y) = 10 End If Block(m).address = 25 Block(m).style = 4 @@ -631,41 +648,41 @@ Private Function Get_Code() As String Get_Code = Code End Function Private Sub Analyse(Code As String) - Dim m As Integer, addr As Integer, X As Integer, Y As Integer + Dim m As Integer, addr As Integer, x As Integer, y As Integer Call Analyse_Code(Code) - For X = 1 To 4 - For Y = 1 To 5 - Block_index(X, Y) = 10 - Exist(X, Y) = False - Next Y - Next X + For x = 1 To 4 + For y = 1 To 5 + Block_index(x, y) = 10 + Exist(x, y) = False + Next y + Next x For m = 0 To 9 addr = Block(m).address - Y = Int(addr / 4) + 1 - X = addr - (Y - 1) * 4 + 1 + y = Int(addr / 4) + 1 + x = addr - (y - 1) * 4 + 1 If Block(m).style = 0 Then - Block_index(X, Y) = 0 - Block_index(X, Y + 1) = 0 - Block_index(X + 1, Y) = 0 - Block_index(X + 1, Y + 1) = 0 + Block_index(x, y) = 0 + Block_index(x, y + 1) = 0 + Block_index(x + 1, y) = 0 + Block_index(x + 1, y + 1) = 0 End If If Block(m).style = 1 Then - Block_index(X, Y) = m - Block_index(X + 1, Y) = m + Block_index(x, y) = m + Block_index(x + 1, y) = m End If If Block(m).style = 2 Then - Block_index(X, Y) = m - Block_index(X, Y + 1) = m + Block_index(x, y) = m + Block_index(x, y + 1) = m End If If Block(m).style = 3 Then - Block_index(X, Y) = m + Block_index(x, y) = m End If Next m - For X = 1 To 4 - For Y = 1 To 5 - If Block_index(X, Y) <> 10 Then Exist(X, Y) = True - Next Y - Next X + For x = 1 To 4 + For y = 1 To 5 + If Block_index(x, y) <> 10 Then Exist(x, y) = True + Next y + Next x End Sub Private Function Check() As Boolean Dim temp(0 To 19) As Boolean @@ -791,21 +808,6 @@ Private Sub Analyse_Code(Code As String) Next i err: End Sub - -Private Sub Menu_Debug_Mode_Click() - Menu_Debug_Mode.Checked = Not Menu_Debug_Mode.Checked - If Menu_Debug_Mode.Checked = True Then debug_mode = True Else debug_mode = False -End Sub - -Private Sub Menu_On_Top_Click() - Menu_On_Top.Checked = Not Menu_On_Top.Checked - If Menu_On_Top.Checked = True Then - SetWindowPos Me.hwnd, -1, 0, 0, 0, 0, 1 Or 2 - Else - SetWindowPos Me.hwnd, -2, 0, 0, 0, 0, 1 Or 2 - End If -End Sub - Private Sub Timer_Get_Time_Timer() Static temp As Integer Dim time_hour As String, time_minute As String, time_second As String @@ -817,7 +819,6 @@ Private Sub Timer_Get_Time_Timer() If Len(time_minute) = 1 Then time_minute = "0" & time_minute Label_Time = "用时: " & time_hour & ":" & time_minute & ":" & time_second End Sub - Private Sub Timer_Debug_Timer() Dim i As Integer, j As Integer, m As Integer, debug_dat As String For m = 0 To 9 @@ -846,9 +847,9 @@ Private Sub Timer_Debug_Timer() Next j debug_dat = debug_dat & "dir_x1=" & dir_x1 & " dir_y1=" & dir_y1 & vbCrLf debug_dat = debug_dat & "dir_x2=" & dir_x2 & " dir_y2=" & dir_y2 & vbCrLf - debug_dat = debug_dat & "block_addr(0)=(" & block_addr(0).X & "," & block_addr(0).Y & ")" & vbCrLf - debug_dat = debug_dat & "block_addr(1)=(" & block_addr(1).X & "," & block_addr(1).Y & ")" & vbCrLf - debug_dat = debug_dat & "block_addr(2)=(" & block_addr(2).X & "," & block_addr(2).Y & ")" & vbCrLf + debug_dat = debug_dat & "block_addr(0)=(" & block_addr(0).x & "," & block_addr(0).y & ")" & vbCrLf + debug_dat = debug_dat & "block_addr(1)=(" & block_addr(1).x & "," & block_addr(1).y & ")" & vbCrLf + debug_dat = debug_dat & "block_addr(2)=(" & block_addr(2).x & "," & block_addr(2).y & ")" & vbCrLf debug_dat = debug_dat & "move_max_step=" & move_max_step & vbCrLf debug_dat = debug_dat & "last_move=" & last_move & vbCrLf debug_dat = debug_dat & "move_times=" & move_times & vbCrLf @@ -857,7 +858,6 @@ Private Sub Timer_Debug_Timer() debug_dat = debug_dat & "total_time=" & total_time & vbCrLf Text_Debug = debug_dat End Sub - Private Sub Timer_Layout_Timer() Dim width As Integer width = gap * 5 + square_width * 4 diff --git a/HRD_Game.vbp b/HRD_Game.vbp index 5ba5e5d..f7a9439 100644 --- a/HRD_Game.vbp +++ b/HRD_Game.vbp @@ -2,6 +2,7 @@ Type=Exe Form=Form_Game.frm Reference=*\G{00020430-0000-0000-C000-000000000046}#2.0#0#..\..\..\..\..\..\Windows\SysWOW64\stdole2.tlb#OLE Automation Module=Module; Module.bas +Form=Form_Classic_Cases.frm IconForm="Form_Game" Startup="Form_Game" HelpFile="" @@ -11,8 +12,8 @@ Command32="" Name="HRD_Game" HelpContextID="0" CompatibleMode="0" -MajorVer=0 -MinorVer=1 +MajorVer=1 +MinorVer=0 RevisionVer=0 AutoIncrementVer=0 ServerSupportFiles=0 diff --git a/HRD_Game.vbw b/HRD_Game.vbw index b95ccd2..268486e 100644 --- a/HRD_Game.vbw +++ b/HRD_Game.vbw @@ -1,2 +1,3 @@ -Form_Game = 52, 52, 883, 479, , 26, 27, 857, 453, C +Form_Game = 52, 52, 883, 479, , 26, 28, 857, 453, C Module = 52, 52, 883, 479, +Form_Classic_Cases = 104, 104, 891, 531, , 104, 104, 937, 531, C