CC的小站

  • 首页
  • 友链
  • 小游戏
  • 关于 / 留言板

SigilPlacer

发表于 2023-10-15 |

前一阵子趁着Steam上《塔罗斯的法则》打折,玩了玩。不光是解谜,还有一些哲学的东西,游戏还有很多彩蛋,我挺喜欢的。《Sigils of Elohim》算是一个推广前者的一个免费游戏,主要就是给你一些方块,让你铺满给定的棋盘。很多人都说反向的是俄罗斯方块。在前者的流程中也包括一些这个拼图游戏,有些确实得需要一些时间才能试出来,玩了半天并不觉得这种东西有啥好的方法去解。于是就想着用Java编写一个解题的程序,写程序比完成拼图要有意思的多XD

拼图游戏

问题描述

现有若干不同种类的方块,请试着利用所给的方块将所给的棋盘铺满。

输入格式

一行正整数,依次代表棋盘的宽、棋盘的高、LL方块个数、LR方块个数、ZL方块个数、ZR方块个数、I方块个数、O方块个数、T方块个数。

名称与其所代表的方块入下:LL: ┏━、LR: ━┓、ZL: ┗┓、ZR: ┏┛、I: ━━━、O: ■、T: ┳。

输出格式

利用制表符,将放满方块的棋盘以文本形式输出,╳代表空白。

1
2
3
4
5
6
7
8
9
┏┳━━┳┓
┃┗━┓┃┃
┣━┳╋┛┃
┃┏┛┣━┫
┃┃┏┫╳┃
┣╋┛┗┳┫
┃┗┳━┛┃
┃┏┻━━┫
┗┻━━━┛

仿着算法题,简单说了一下我想要的效果,懒得给示例了,大家有兴趣也可以先自己试着写写看。

程序

共有四个文件:Brick、Main、Placer、Printer

这里主要说说具体解题和制表符输出的实现。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
private void run(int x, int y) {
if (y == BOARD_Y) {
unfinished = false;
result = new Integer[BOARD_Y][BOARD_X];
return;
}
if (x == BOARD_X) {
run(0, y + 1);
return;
}
if (BOARD[y][x]) {
run(x + 1, y);
return;
}

for (Brick brick : BRICKS) {
if (NUM_OF_BRICKS[brick.ordinal()] == 0) {
continue;
}
for (int rotation = 0; rotation < brick.getNumOfShapes(); rotation++) {
if (canPlace(brick, rotation, x, y)) {
place(brick, rotation, x, y);
run(x + 1, y);
if (unfinished) {
remove(brick, rotation, x, y);
} else {
set(result, brick, rotation, x, y, index++);
return;
}
}
}
}
}

解题部分就是这个方法,是不是挺简单的,毕竟复杂的我也想不出来XD。说白了就是一个深度优先的遍历,假设当前情况下可以放A、B、C…种类的方块,每一种选择就是沿着选择向下延伸,当发现是死胡同时往上退一层,再选择其他的道路向下,这层的路都试完了再往上退,换个路向下。就这样上上下下,如果有解的话试出答案只是时间问题。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
     public static class Point {
private static final String[] CODE = new String[]{"╳", null, null, "┗", null, "┃", "┏", "┣", null, "┛", "━", "┻", "┓", "┫", "┳", "╋"};
private final byte code;

public Point(int ul, int ur, int dr, int dl) {
int temp = 0;
temp += ul == ur ? 0 : 1;
temp += ur == dr ? 0 : 2;
temp += dr == dl ? 0 : 4;
temp += dl == ul ? 0 : 8;
code = (byte) temp;
}

public String toString() {
return CODE[code];
}
}

变为制表符输出,画画图就好理解了。我们想要的效果就是不同的方块之间有线分开,再看制表符并不能单独画出一个格子的东西,而是其在四个格子的中心点,代表着这四个格子上方块的异同。如此一来利用上下左右四角的方块的ID就能得出上左右异同、右上下异同、下左右异同、左上下异同。相同就代表这俩格子中间没有线,相异就是有线,以有线为1、没线为0,按照顺序排列后这一点的类型就能用0000、0001、0010…1111这种二进制的方式表示,比较方便的实现了4个bool的组合对应到不同制表符的映射。

其他的话

东西没什么难度,不过做起来很好玩,所以也拿出来分享分享。不知还有没有什么改进的空间,现有的题目规模来说是不算慢的。

发现纯字符的表现能力也是不错的,毕竟字符不严格地讲也是画出来的。感觉比图形界面更好写,性能可能也更好,《塔罗斯的法则》中的文字游戏就很有意思,虽然主要是靠文案。感觉没UI纯文字的游戏应该也能挺有趣的。

今天(2023.10.15)TeaCon2023闭幕了。这代表着什么,礼物!自娱自乐的代码环节的额外收获,嘻嘻。

大四上

发表于 2023-09-04 |

上一次冒泡还是在快放暑假那会儿,现在已经开学了(大四上)。还是和以前一样回忆一下这两个月的事情。

  • TeaCon:今年是第二次参赛了,写模组什么的比之前更熟练了一些,不过还是菜菜捏。今年的主题是”热闹“,比去年的”火“相比,选题范围变广了,但感觉广得有点不好找方向。最开始想的是搞点啥多人游戏的模组,但要么是已经有了,要么是太难,要么是不适合,就没往下想了。最后就想到了八音盒,之前写mCClient(之前为了在服务器挂机写的命令行1.18客户端)的时候正好也了解到了一些关于NBS文件演奏的东西,感觉写出来应该会挺好玩,于是就决定写这个了。断断续续写了小一个月,也做好了NBS导入的相关工具网页,前几周把展馆盖完后就算完事了。和之前一样藏了一些小彩蛋,我很喜欢搞这种,找到彩蛋了、认出玩得梗了,感觉是一种很棒的体验,对我也是如此。
  • 看番剧、电视剧:《打了300年的史莱姆,不知不觉就练到了满级》,个人还是比较喜欢这种萌萌的东西的,喜欢这种有战力保证或者就没有冲突(不会让我瞎矫情、难受的)的那种;《天使降临到了我的身边!》,也是萌萌的,不知道有没有人喜欢里面的胡子郎,感觉也很呆萌呆萌的。《吊带袜天使》,主要是听说有要第二季,就去看第一季了、画风偏美漫的感觉,内容有不少少儿不宜的、片尾曲好听,循环了好久【Fallen Angel - Mitsunori Ikeda/Aimee b】。《飞出个未来》第七季,也是差不多的原因,不过这个之前早就看过一些解说了。《独角兽:不朽战士》,之前从B站看到的。《黑袍纠察队》,主要是奔着祖国人去的XD,坏又不完全坏。
  • 玩游戏:LOL前几天高强度单排,最高到了白银1-80胜点,后面就寄了。躺赢一把,坐牢一把,当你发现匹配时间变长、队友个位数的英雄胜场、对面出个铂金的几百胜场的绝活那基本是凉透了,虽然三路全炸但是队友依旧吵得起劲。感觉这种机制纯纯的脑残,单方面碾压要么爽死要么难受死,反正我觉得和水平差不多的、能打的有来有回的对手分出个高低才真的能区分技术。我一直玩的辅助,碰到队友挂机、对面超神的那种情况,感觉小代也得挨绊XD,于是一生气就卸了,玩不到之后新出的吸血鬼了,不知道这次能持续多久。地平线4里玩后驱车,之前一直都是上来就改装成四驱了,不过发现后驱不改四驱极速好像高一点就没改四驱,很飘但是很爽,这种游走在失控边缘的刺激很爽,一直在乐高谷底的赛道跑圈、玩漂移。e宝之前送的那些游戏也体验了一些。也玩了玩极限国度,主要是因为那个出圈的音乐才想去看看,赶着Steam上打折就入手了,还不错(个人还是更喜欢小车车一些)。红警2和尤里的复仇,B站刷到08的视频,正好也好奇小时候没打完的战役都讲了些啥,就都打了一遍。虽然是困难,但前期防住了,也能圈养电脑。比小时候打的好多了,兵种的克制,快捷键的使用。虽然还是挺菜的,没星际2那种简化一些的好操作些。
  • 游玩:就去过一次植物园,赶着小雨天去的,稍微凉快些,人也不是很多。不过这季节没有什么花了,逛一圈基本全是绿色。河岸上有只鸭子,看起来像是要凉的样子,就呆呆地趴在桥旁的水泥台子上,旁边好像有捞水里垃圾的工人拿着长杆漏网,不知道是鸭子自己上来的,还是人给捞上来的。也就脖子会小幅度动动。周围也没有同类,其他鸭子都在挺远的水里漂着呢。不知道动物会不会知道自己快不行了就自行脱离找地方等死的行为。
  • 大雨:今年的大雨比以往的都大,房山这块被冲的挺狠的。我们家地势挺高的,基本看不到多深的积水。不过低洼地区很多地方都被淹了,河水溢出,旁边的小区的汽车都被淹了顶。路过河滩的公园全被冲的缺胳膊少腿的。山里的公路被冲塌,露出山的本体,想回去被冲塌的路段只能走河道里抢修出来的路绕过去,河道里面铺满了大大小小的石头。大自然的力量还是很猛的。不靠机器施工很难想象得花多久才能与里面通车。
  • 新椅子:宜家的小转椅挺不错,还能往后靠。拼装也有点意思,虽然就是照着说明书拧螺丝。

不知道够不够全了,但貌似也没干太多事,就这样了。

网页小游戏

发表于 2023-06-17 |

已经上完一周小学期了,再上两个星期就放暑假了。小学期布置了一个写网页的作业,纯搞一个整活的页面工作量太大了,所以去尝试拿js写了个小游戏。

这是我目前碰到过搞出图形界面最快的东东,感觉整活的潜力很大XD,感觉不错。

已经把网页上传到小站了,放在了左侧的小游戏页面里,“PaperAirPlane”,仿着flappy bird搞得,差的还是有点远。

<--1234…32-->

CC2001

94 日志
GitHub BiliBili
© 2025 CC2001
由 Hexo 强力驱动
|
主题 — NexT.Pisces