猫史档案馆


【干货】显示屏代码(其实是帮别人改的)

用户:七式草莓七式草莓查看:1 回复:8 评论:1 创建时间:2023-04-24T20:11:44


这些函数名不是我起的,是邀请我的人起的)

async function printImage(pos, image, direction = [new Box3Vector3(1, 0, 0), new Box3Vector3(0, -1, 0)]) {
    let p1 = pos.clone();
    for (const i of image) {
        let p2 = p1.clone();
        for (const e of i) {
            var v = (() => {
                switch(e){
                    // 字符对应方块的列表,可自行添加
                    case '0': return 'zero'
                    case '1': return 'one'
                    case '2': return 'two'
                    case '3': return 'three'
                    case '4': return 'four'
                    case '5': return 'five'
                    case '6': return 'six'
                    case '7': return 'seven'
                    case '8': return 'eight'
                    case '9': return 'nine'
                    case '+': return 'add'
                    case '-': return 'subtract'
                    default: return e
                }
            })()
            voxels.setVoxel(p2.x, p2.y, p2.z, v);
            p2.addEq(direction[0]);
        }
        p1.addEq(direction[1]);
    }
}
function leftDoc(text, startPos, endPos) {
    // 次数
    var time = 0
    async function doc() {
        // 计算方向
        var d = endPos.sub(startPos)
        // 次数
        var mag = d.mag()
        // 方向
        var dir = new Box3Vector3(d.x / mag, d.y / mag, d.z / mag)
        for (let i = 0; i <= mag + text.length + 1; i++) {
            await sleep(512)
            if (i > text.length) {
                var p = startPos.add(dir.scale(i - text.length - 1))
                voxels.setVoxel(p.x, p.y, p.z, 0)
            }
            if (i == mag + 1){
                if(time > 0){
                    time--
                    doc()
                }
            }
            var pos = startPos.add(dir.scale(Math.max(0, i - text.length)))
            var str = text.substring(Math.max(i - mag - 1, 0), i + 1)
            printImage(pos.add(dir.scale(str.length - 1)), [str])
        }
    }
    return {
        start(number){
            if(time <= 0){
                time = number
                time--
                doc()
            }else{
                time = number
            }
        }
    }
}



// 第二个参数为开始坐标,第三个为结束坐标(反过来的结果我不知道,但是你们可以自己试试,理论也能用)
var startDoc = leftDoc('TEST', new Box3Vector3(54,11,1),new Box3Vector3(1,11,1))

// 参数为次数(2次或更高时有惊喜)
startDoc(1)

谁能改进一下(例如不用递归)??


回复

上一页1 页 / 共 1下一页
七式草莓七式草莓

标题写错了,是动态显示屏的代码

补充:邀请我的人要求等待时间为 512ms,你们可以自行修改

点赞0


评论


西贝在躺平西贝在躺平

emotion_编程猫_点赞

点赞0


评论


西贝在躺平西贝在躺平

有效果吗

 

点赞0


评论


145a145a

写上我名字啊()至少我起了第一个函数的名字()

点赞0


评论


星惠awa星惠awa

......center_image

点赞0


评论


fjskdfjslkdfjskdfjslkd

emotion_雷电猴_疑问

点赞0


评论


AK亨利佐加DanJamesThomasAK亨利佐加DanJamesThomas

#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
	int tubes[10][8] = {
		{6,0,1,2,4,5,6},{2,2,5},{5,0,2,3,4,6},{5,0,2,3,5,6},//0 1 2 3
		{4,1,2,3,5},{5,0,1,3,5,6},{6,0,1,3,4,5,6},{3,0,2,5},//4 5 6 7
		{7,0,1,2,3,4,5,6},{6,0,1,2,3,5,6}//8 9
	};
	int dot[7][3][2] = {
		{{0, 0}, {0, 1}, {0, 2}},
		{{0, 0}, {1, 0}, {2, 0}},
		{{0, 2}, {1, 2}, {2, 2}},
		{{2, 0}, {2, 1}, {2, 2}},
		{{2, 0}, {3, 0}, {4, 0}},
		{{2, 2}, {3, 2}, {4, 2}},
		{{4, 0}, {4, 1}, {4, 2}},
	};
	char num[110], out[5][500];
	int n;
	cin>>n;
	for(int i=0;i<n;i++)
		cin>>num[i];
	for(int i=0;i<5;i++)
		for(int j=0;j<4*n-1;j++)
			out[i][j]='.';
	for(int i=0;i<n;i++){
		int basex=0,basey=i*4,digit=num[i]-'0';
		for(int j=1;j<=tubes[digit][0];j++)
		{
			int tubenum=tubes[digit][j];
			out[basex+dot[tubenum][0][0]][basey+dot[tubenum][0][1]]='X';
			out[basex+dot[tubenum][1][0]][basey+dot[tubenum][1][1]]='X';
			out[basex+dot[tubenum][2][0]][basey+dot[tubenum][2][1]]='X';
		}
	}
	for(int i=0;i<5;i++,cout<<endl)
		for(int j=0;j<4*n-1;j++)
			cout<<out[i][j];
	return 0;
}

点赞0


评论


屑怪盗屑怪盗

ddd

点赞0


评论