Follow along with the video below to see how to install our site as a web app on your home screen.
Примечание: This feature may not be available in some browsers.
Так и не понял связь между картинкой и псевдокодом.Asd73 написал(а):Алгоритм заливки или что-то в этом роде.
https://ru.wikipedia.org/wiki/%D0%97%D0%B0%D0%BB%D0%B8%D0%B2%D0%BA%D0%B0
Давний проект, аналог матоса)Asd73 написал(а):Для трубы делаешь?
package com.svk.atmosphereSound.events;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import com.svk.atmosphereSound.base.ModInfo;
import com.svk.atmosphereSound.utils.UtilRegion;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.world.World;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import cpw.mods.fml.common.gameevent.TickEvent;
public class EventSpectatorSound
{
private ArrayList<int[]> inTurnBlocks = new ArrayList();
private ArrayList<int[]> inCheckedBlocks = new ArrayList();
private ArrayList<int[]> confirmedBlocks = new ArrayList();
private int tick = 0;
@SubscribeEvent
public void TickEvent(TickEvent.PlayerTickEvent e)
{
EntityPlayer player = e.player;
World world = player.worldObj;
if(!world.isRemote)
{
tick++;
if(tick == (20*7)*2)
{
int x = (int) player.posX;
int y = (int) player.posY;
int z = (int) player.posZ;
if(world.canBlockSeeTheSky(x, y, z))
{
confirmedBlocks.add(new int[]{x, y, z});
}
else
{
inTurnBlocks.add(new int[]{x, y, z});
}
inTurnCheck(world, new int[]{x, y, z});
inTurnBlocks = new ArrayList();
confirmedBlocks = new ArrayList();
inCheckedBlocks = new ArrayList();
tick = 0;
}
}
}
private void inTurnCheck(World world, int[] startCoords)
{
int currentY = startCoords[1];
while(inTurnBlocks.size() != 0)
{
int[] blockCoords = inTurnBlocks.get(0);
addBlockCoordsToList(world, new int[]{blockCoords[0]+1, currentY, blockCoords[2]});
addBlockCoordsToList(world, new int[]{blockCoords[0]-1, currentY, blockCoords[2]});
addBlockCoordsToList(world, new int[]{blockCoords[0], currentY, blockCoords[2]+1});
addBlockCoordsToList(world, new int[]{blockCoords[0], currentY, blockCoords[2]-1});
inCheckedBlocks.add(blockCoords);
inTurnBlocks.remove(0);
}
}
private void addBlockCoordsToList(World world, int[] blockCoords)
{
if(world.isAirBlock(blockCoords[0], blockCoords[1], blockCoords[2]))
{
for(int[] i : inCheckedBlocks)
{
if(Arrays.equals(i, blockCoords))
{
return;
}
}
if(!world.canBlockSeeTheSky(blockCoords[0], blockCoords[1], blockCoords[2]))
{
inTurnBlocks.add(blockCoords);
}
else
{
confirmedBlocks.add(blockCoords);
}
}
}
}
Ну это когда метод вызывается внутри самого себя. Но тогда скан будет по цепочке, а так, в том порядке, в котором добавлялось. В итоге выйдет так, что скан происходит почти равномерно во все стороны.Agravaine написал(а):А рекурсия для кого?