Как построить пирамиду? (1.7.10)

271
2
0
Здравствуйте. Можете подсказать алгоритм построения пирамиды?
Я умею строить только параллелепипеды, линии и т.д(с помощью циклов for).
 

svk

1,185
2
Начинай с стартовых Х Z, строй квадрат с нужной тебе стороной. Затем строй такой же квадрат выше, но уже сдвинутый на 1 1 и уменьшаной стороной на 1. Ничего сложного.

Квадрат строить четырьмя линиями :D
 
271
2
0
Спасибо.:) А как окружность построить?:angel:
 
271
2
0
Круг. (дальше попытаюсь сам догадаться :D  )
 

timaxa007

Модератор
5,831
409
672
Код:
    @Override
    public boolean onItemUse(ItemStack is, EntityPlayer player, World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ) {

        int height = 16;
        int height2 = height / 2;

        for (int h = 0; h <= height; ++h) {
            for (int rx = -(height2 - h); rx <= (height2 - h); ++rx) {
                for (int rz = -(height2 - h); rz <= (height2 - h); ++rz) {

                if (world.isAirBlock(x + rx, y + h, z + rz))
                    world.setBlock(x + rx, y + h, z + rz, Blocks.stone);

            }
                }
        }


        return true;
    }

-----------
Код:
    @Override
    public boolean onItemUse(ItemStack is, EntityPlayer player, World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ) {

        int radius = 8;

        for (int rx = x - radius; rx <= x + radius; ++rx) {
            for (int ry = y - radius; ry <= y + radius; ++ry) {
                for (int rz = z - radius; rz <= z + radius; ++rz) {

                    if (world.isAirBlock(rx, ry, rz) && distanceTo(x, y, z, rx, ry, rz) <= radius)
                        world.setBlock(rx, ry, rz, Blocks.stone);

                }
            }
        }


        return true;
    }

    public int distanceTo(int xa, int ya, int za, int bx, int yb, int zb) {
        double d0 = (xa + 0.5D) - (bx + 0.5D);
        double d1 = (ya + 0.5D) - (yb + 0.5D);
        double d2 = (za + 0.5D) - (zb + 0.5D);
        return (int)Math.sqrt(d0 * d0 + d1 * d1 + d2 * d2);
    }

На счёт правильности написания кода сферы из блоков не уверен.
 

svk

1,185
2
Ему наверное полая нужна была пирамида.
[merge_posts_bbcode]Добавлено: 02.12.2015 22:49:56[/merge_posts_bbcode]

И сфера тоже

[merge_posts_bbcode]Добавлено: 02.12.2015 22:53:30[/merge_posts_bbcode]

Хотя со сферой можно фокус же сделать... Сначала построить сферу R=8, а потом вырезать сферу R=7.

Или полая сфера у тебя строится?
 

timaxa007

Модератор
5,831
409
672
Нет, не полая.
 

svk

1,185
2
В любом случае я ответ дал...
Кстати, понял, что я жестко тупонул насчёт того, что не знаю как сферу строить :D
Для круга, просто надо вырезать цикл Y и убрать все проверки на Y
 

timaxa007

Модератор
5,831
409
672
Из
Код:
if (world.isAirBlock(rx, ry, rz) && distanceTo(x, y, z, rx, ry, rz) <= radius)
в
Код:
if (world.isAirBlock(rx, ry, rz) && distanceTo(x, y, z, rx, ry, rz) == radius)
И внутри сферы будет пусто.
[merge_posts_bbcode]Добавлено: 02.12.2015 23:05:52[/merge_posts_bbcode]

У пирамиды с
Код:
if (world.isAirBlock(x + rx, y + h, z + rz))
на
Код:
if (world.isAirBlock(x + rx, y + h, z + rz) && ((rx == -(height2 - h) || rx == (height2 - h)) || (rz == -(height2 - h) || rz == (height2 - h))))
Будет внутри пуста и без дна.
 
Сверху