• Récent
  • Mots-clés
  • Populaire
  • Utilisateurs
  • Groupes
  • S'inscrire
  • Se connecter
  • S'inscrire
  • Se connecter
  • Recherche
  • Récent
  • Mots-clés
  • Populaire
  • Utilisateurs
  • Groupes

Challenge - Pièce fermée

Concours
7
31
1.7k
Charger plus de messages
  • Du plus ancien au plus récent
  • Du plus récent au plus ancien
  • Les plus votés
Répondre
  • Répondre à l'aide d'un nouveau sujet
Se connecter pour répondre
Ce sujet a été supprimé. Seuls les utilisateurs avec les droits d'administration peuvent le voir.
  • RedRelay
    RedRelay Moddeurs confirmés dernière édition par 25 oct. 2014, 17:39

    Hey 🙂

    Je vous propose un challenge algorithmique dans Minecraft, voici l’énoncé :
    Je pose un bloc, je clique dessus, je dois savoir si ce bloc est dans une salle/pièce fermée, c’est a dire qui n’a pas de liens vers l’extérieur.
    On doit aussi connaitre les dimensions/positions exactes de la pièce, peu importe sa forme.
    Un liens vers l’extérieur, ça veut dire un “bloc d’air”, c’est a dire l’air, les échelles, les feuilles etc… mais pas les portes, ni les vitres.

    Exemple :
    Une maison 444 avec une porte et des fenêtres vitrées est considérée comme une pièce fermée.
    Je vais dedans, je pose un bloc A, je clique dessus : on me dit que la pièce est fermé, suite a ça quand je sort de cette pièce, on me l’annonce via un message dans le chat par exemple.
    Si je vais a l’extérieur de cette maison que je place le Bloc A et clique dessus, on m’annonce que je ne suis pas a l’intérieur d’une pièce fermée.

    Dans ce challenge, on recherche la propreté du code et la performance en terme de mémoire mais aussi de calcul.

    Je n’ai pas la réponse a ce challenge, j’y travail parce que j’en aurai probablement besoin dans un mod (open source comme d’hab).
    Comme d’un point de vue algo, ça me semble intéressant, je vous fais part de ce défis si vous souhaitez le relever 😉

    –------------------------------------------------------------------------------------
    Si tu trouves mon intervention pertinente, n'hésite pas a m…

    1 réponse Dernière réponse Répondre Citer 0
    • T
      totos51 dernière édition par 25 oct. 2014, 19:53

      Jy reflechirai, mais si je trouve ça ten coutera un apero nah.

      1 réponse Dernière réponse Répondre Citer 0
      • jglrxavpok
        jglrxavpok Modérateurs dernière édition par 26 oct. 2014, 09:13

        Je vais essayer, et je sais déjà comment faire. Par contre il va y avoir un problème:
        Il faut imposer une taille limite sinon l’algorithme tourne à l’infini en extérieur!

        Modérateur sur MFF. 
        Mon Github: http://github.com/jglrxavpok
        Mon compte Steam si vous voulez jouer à CS:GO ou TF2 avec moi: https://steamcommunity.com/id/jglrxavpok/

        1 réponse Dernière réponse Répondre Citer 0
        • RedRelay
          RedRelay Moddeurs confirmés dernière édition par 26 oct. 2014, 17:00

          Non aucune taille limite 😛 En revanche on doit définir ce qu’est l’extérieur ^^
          le bloc A est a l’extérieur quand un chemin de case vide (air, échelle …) va de ce bloc jusqu’a la limite max en hauteur de la map 😉
          Donc le cas de l’algo infinis n’existe que dans le nether ^^

          Par conséquent, petit ajout : l’algo ne doit tourné que dans l’overworld ^^

          –------------------------------------------------------------------------------------
          Si tu trouves mon intervention pertinente, n'hésite pas a m…

          1 réponse Dernière réponse Répondre Citer 0
          • jglrxavpok
            jglrxavpok Modérateurs dernière édition par 27 oct. 2014, 11:16

            Je pense pas avoir le temps/l’envie de le faire. Mais je peux donner une piste:
            http://en.wikipedia.org/wiki/Flood_fill cet algorithme permet de remplir une zone, faut juste voir s’il est capable de la remplir après N itérations, si oui, on est en intérieur, sinon on est à l’extérieur

            Modérateur sur MFF. 
            Mon Github: http://github.com/jglrxavpok
            Mon compte Steam si vous voulez jouer à CS:GO ou TF2 avec moi: https://steamcommunity.com/id/jglrxavpok/

            1 réponse Dernière réponse Répondre Citer 0
            • environ 4 mois
            • SCAREX
              SCAREX dernière édition par 10 févr. 2015, 18:23

              @‘Blackout’:

              Non aucune taille limite 😛 En revanche on doit définir ce qu’est l’extérieur ^^
              le bloc A est a l’extérieur quand un chemin de case vide (air, échelle …) va de ce bloc jusqu’a la limite max en hauteur de la map 😉
              Donc le cas de l’algo infinis n’existe que dans le nether ^^

              Par conséquent, petit ajout : l’algo ne doit tourné que dans l’overworld ^^

              Il ne faut peut être pas de taille limite en Y mais pour X et Z c’est obligatoire sinon si la pièce fait 256 blocs de haut, 1 million de blocs en largeur et 1 million de blocs en longueur ce sera impossible de déterminer si c’est une pièce fermée ou ouverte.

              De plus, si 2 blocs sont en diagonales, est-ce que le bloc entre ces 2 là est considéré comme un passage pour de l’air.

              exemple plus explicite :

              • : bloc plein/ne permettant pas le passage d’air
              • : bloc permettant l’air de passer
                O : bloc sur lequel on clique

              -+++±

              • +
              • 0  +
                ++++++

              est-ce que cette pièce est considérée comme ouverte ou fermée ?

              Serait-il possible de faire une liste des blocs laissant passer l’air ?

              Site web contenant mes scripts : http://SCAREXgaming.github.io

              Pas de demandes de support par MP ni par skype SVP.
              Je n'accepte sur skype que l…

              1 réponse Dernière réponse Répondre Citer 0
              • environ 10 jours
              • RedRelay
                RedRelay Moddeurs confirmés dernière édition par 21 févr. 2015, 02:10

                @‘SCAREX’:

                Il ne faut peut être pas de taille limite en Y mais pour X et Z c’est obligatoire sinon si la pièce fait 256 blocs de haut, 1 million de blocs en largeur et 1 million de blocs en longueur ce sera impossible de déterminer si c’est une pièce fermée ou ouverte.

                Et pourquoi ce serait impossible ?
                Dans l’overworld, il n’existe pas de pièce fermé infinis, donc il n’y a pas de problème.
                Pourquoi on ne pourrait pas déterminer si une pièce de 1.10^61.10^6256 est ouverte ou fermée ?

                @‘SCAREX’:

                De plus, si 2 blocs sont en diagonales, est-ce que le bloc entre ces 2 là est considéré comme un passage pour de l’air.

                exemple plus explicite :

                • : bloc plein/ne permettant pas le passage d’air
                • : bloc permettant l’air de passer
                  O : bloc sur lequel on clique

                -+++±

                • +
                • 0  +
                  ++++++

                est-ce que cette pièce est considérée comme ouverte ou fermée ?

                Serait-il possible de faire une liste des blocs laissant passer l’air ?

                La pièce est considéré comme fermé. Pour la liste, disons l’air, les echelles, les panneau et les torches dans un premier temps. Ce n’est pas très important. Le paramètre est ajustable selon les besoins.

                –------------------------------------------------------------------------------------
                Si tu trouves mon intervention pertinente, n'hésite pas a m…

                1 réponse Dernière réponse Répondre Citer 0
                • SCAREX
                  SCAREX dernière édition par 22 févr. 2015, 17:06

                  @‘Blackout’:

                  @‘SCAREX’:

                  Il ne faut peut être pas de taille limite en Y mais pour X et Z c’est obligatoire sinon si la pièce fait 256 blocs de haut, 1 million de blocs en largeur et 1 million de blocs en longueur ce sera impossible de déterminer si c’est une pièce fermée ou ouverte.

                  Et pourquoi ce serait impossible ?
                  Dans l’overworld, il n’existe pas de pièce fermé infinis, donc il n’y a pas de problème.
                  Pourquoi on ne pourrait pas déterminer si une pièce de 1.10^61.10^6256 est ouverte ou fermée ?

                  @‘SCAREX’:

                  De plus, si 2 blocs sont en diagonales, est-ce que le bloc entre ces 2 là est considéré comme un passage pour de l’air.

                  exemple plus explicite :

                  • : bloc plein/ne permettant pas le passage d’air
                  • : bloc permettant l’air de passer
                    O : bloc sur lequel on clique

                  -+++±

                  • +
                  • 0  +
                    ++++++

                  est-ce que cette pièce est considérée comme ouverte ou fermée ?

                  Serait-il possible de faire une liste des blocs laissant passer l’air ?

                  La pièce est considéré comme fermé. Pour la liste, disons l’air, les echelles, les panneau et les torches dans un premier temps. Ce n’est pas très important. Le paramètre est ajustable selon les besoins.

                  Le problème est que l’on ne peut pas car les chunks ne sont pas chargés.

                  Site web contenant mes scripts : http://SCAREXgaming.github.io

                  Pas de demandes de support par MP ni par skype SVP.
                  Je n'accepte sur skype que l…

                  1 réponse Dernière réponse Répondre Citer 0
                  • RedRelay
                    RedRelay Moddeurs confirmés dernière édition par 22 févr. 2015, 19:54

                    Et qu’est ce qui empêche de les charger dans ce cas ? x)

                    –------------------------------------------------------------------------------------
                    Si tu trouves mon intervention pertinente, n'hésite pas a m…

                    1 réponse Dernière réponse Répondre Citer 0
                    • sosoh
                      sosoh dernière édition par 22 févr. 2015, 22:52

                      La RAM du Pc xD x)

                      Developpeur d'Hogsmod, un mod implémentant le Monde d'Harry Potter dans Minecraft!

                      1 réponse Dernière réponse Répondre Citer 0
                      • RedRelay
                        RedRelay Moddeurs confirmés dernière édition par 22 févr. 2015, 23:06

                        Tu n’es pas obliger de tous les charger en même temps.
                        Lorsque tu as check tout les chunk adjacent du chunk A, tu peux décharger le chunk A.
                        Il faudrait vraiment un nombre gigantesque de chunk pour que la RAM sature.

                        –------------------------------------------------------------------------------------
                        Si tu trouves mon intervention pertinente, n'hésite pas a m…

                        1 réponse Dernière réponse Répondre Citer 0
                        • SCAREX
                          SCAREX dernière édition par 23 févr. 2015, 18:17

                          @‘Blackout’:

                          Tu n’es pas obliger de tous les charger en même temps.
                          Lorsque tu as check tout les chunk adjacent du chunk A, tu peux décharger le chunk A.
                          Il faudrait vraiment un nombre gigantesque de chunk pour que la RAM sature.

                          As-tu déjà essayé de générer des chunks ? Si oui, tu devrais savoir que ça prend une quantité de RAM folle, de plus, il faudra désynchroniser le code dans un tick handler ou ça fera crasher ton serveur.

                          Ensuite, moi je pense qu’une pièce de 310^(9) par 256 par 310^(9) est une pièce ouverte.

                          Site web contenant mes scripts : http://SCAREXgaming.github.io

                          Pas de demandes de support par MP ni par skype SVP.
                          Je n'accepte sur skype que l…

                          1 réponse Dernière réponse Répondre Citer 0
                          • RedRelay
                            RedRelay Moddeurs confirmés dernière édition par 23 févr. 2015, 18:27

                            Si les chunks n’ont toujours pas été généré, c’est considéré comme du vide, donc pièce ouverte 😉
                            Tu peux faire le traitement avec seulement 5 chunks chargé a la fois, il suffit de décharger ceux qui ne servent plus pour le calcul.
                            Aucunement besoin de créer un tick handler, il suffit de lancer le traitement dans un nouveau thread et de protéger les accès concurrentiel le mieux possible.

                            Mais bon dans la grande majeure partie des cas, les salles ne seront jamais aussi grande.
                            Le but est de faire un système qui n’est pas limité par la taille, mais par les performance de la machine et avec un algorithme optimisé.

                            –------------------------------------------------------------------------------------
                            Si tu trouves mon intervention pertinente, n'hésite pas a m…

                            1 réponse Dernière réponse Répondre Citer 0
                            • SCAREX
                              SCAREX dernière édition par 28 févr. 2015, 15:59

                              @‘Blackout’:

                              Si les chunks n’ont toujours pas été généré, c’est considéré comme du vide, donc pièce ouverte 😉
                              Tu peux faire le traitement avec seulement 5 chunks chargé a la fois, il suffit de décharger ceux qui ne servent plus pour le calcul.
                              Aucunement besoin de créer un tick handler, il suffit de lancer le traitement dans un nouveau thread et de protéger les accès concurrentiel le mieux possible.

                              Mais bon dans la grande majeure partie des cas, les salles ne seront jamais aussi grande.
                              Le but est de faire un système qui n’est pas limité par la taille, mais par les performance de la machine et avec un algorithme optimisé.

                              J’ai fait quelques essais et il s’avère que lorsque l’on appelle la méthode getBlockState (je code en 1.8) dans la classe World cette méthode va automatiquement charger/générer les chunks donc j’aimerais savoir quoi faire lorsque le chunk n’est pas chargé, soit charger le chunk et continuer l’algorithme ou considérer la pièce comme ouverte ?

                              A part ce dernier problème, tout avance comme il faut pour l’instant 😉 .

                              Site web contenant mes scripts : http://SCAREXgaming.github.io

                              Pas de demandes de support par MP ni par skype SVP.
                              Je n'accepte sur skype que l…

                              1 réponse Dernière réponse Répondre Citer 0
                              • Yorwan
                                Yorwan dernière édition par 28 févr. 2015, 17:05

                                bonjour j’annonce que je vais moi aussi rentrer dans la compétition et petit précision s’il vous plait : le block sera t’il au sol , dans le sol ou à n’importe quel endroit de la piece. sinon juste une question cet algorythme est pour le mod settlements non ?


                                le code avance bien mais j’ai un petit problème : étant donne qu’il faut testé les block un seule fois j’ai recourd à un tableau , probleme , si j’ai recours à un tableau il faut qu’il soit individuelle a chaque block car sinon si je met deux block dans la meme piece il n’y en aura qu’un qui fonctionnera . donc précise : le code appartiendra a un block à part entiere ou ce code fera partis d’un autre block qui testera tout les block pour connaitre les piece .

                                1 réponse Dernière réponse Répondre Citer 0
                                • Algorythmis
                                  Algorythmis dernière édition par 6 mars 2015, 18:01

                                  Bah comment qu’il fonctionne l’Airlock de Galacticraft? 😄

                                  Mes mods :

                                  • Cookie Ore (1.7.10)

                                  Mod en cours : **E…

                                  1 réponse Dernière réponse Répondre Citer 0
                                  • Yorwan
                                    Yorwan dernière édition par 8 mars 2015, 08:51

                                    j’en sais rien mais moi j’ai fini la chose en partant du principe qu’une piece de 320 par je ne sais combien par 320 était un piece ouverte du coup pas besoin de charger les chunk

                                    1 réponse Dernière réponse Répondre Citer 0
                                    • Yorwan
                                      Yorwan dernière édition par 11 mars 2015, 14:31

                                      j’en sais rien mais moi j’ai fini contacter moi par mp 😛

                                      1 réponse Dernière réponse Répondre Citer 0
                                      • environ 18 jours
                                      • Yorwan
                                        Yorwan dernière édition par 29 mars 2015, 07:31

                                        bon apres environ 1 mois d’attente je poste le code
                                        :::
                                        classe principlale

                                        package com.mathiasetampes.algorythme.common;
                                        import net.minecraft.block.Block;
                                        import net.minecraft.block.material.Material;
                                        import net.minecraftforge.common.MinecraftForge;
                                        import com.mathiasetampes.algorythme.proxy.CommonProxy;
                                        import cpw.mods.fml.common.FMLCommonHandler;
                                        import cpw.mods.fml.common.Mod;
                                        import cpw.mods.fml.common.Mod.EventHandler;
                                        import cpw.mods.fml.common.Mod.Instance;
                                        import cpw.mods.fml.common.SidedProxy;
                                        import cpw.mods.fml.common.event.FMLInitializationEvent;
                                        import cpw.mods.fml.common.event.FMLPostInitializationEvent;
                                        import cpw.mods.fml.common.event.FMLPreInitializationEvent;
                                        import cpw.mods.fml.common.registry.GameRegistry;
                                        @Mod(modid = "algorythme",name="Algorytme",version="1.0.0")
                                        public class algorythme
                                        {
                                        @Instance("algorythme")
                                        public static algorythme instance;
                                        public static final String MODID = "villagePNJ";
                                        @SidedProxy(clientSide = "com.mathiasetampes.algorythme.proxy.ClientProxy", serverSide = "com.mathiasetampes.algorythme.proxy.CommonProxy")
                                        public static CommonProxy proxy;
                                        public static Block algo;
                                        @EventHandler
                                        public void preInit(FMLPreInitializationEvent event)
                                        {
                                        algo = new Algo(Material.rock).setBlockName("Algo").setBlockTextureName("modtutoriel:block_tutoriel");
                                        GameRegistry.registerBlock(algo, "block_tutoriel");
                                               GameRegistry.registerTileEntity(TileEntityAire.class, "algorythme:TileEntityAire");
                                        }
                                        @EventHandler
                                        public void init(FMLInitializationEvent event)
                                        {
                                        proxy.registerRender();
                                        FMLCommonHandler.instance().bus().register(new AllEvent());
                                        MinecraftForge.EVENT_BUS.register(new AllEvent());
                                        }
                                        @EventHandler
                                        public void postInit(FMLPostInitializationEvent event)
                                        {
                                        }
                                        }

                                        classe du block

                                        package com.mathiasetampes.algorythme.common;
                                        import java.util.Random;
                                        import com.mojang.realmsclient.dto.PlayerInfo;
                                        import net.minecraft.block.Block;
                                        import net.minecraft.block.material.Material;
                                        import net.minecraft.creativetab.CreativeTabs;
                                        import net.minecraft.entity.item.EntityItem;
                                        import net.minecraft.entity.player.EntityPlayer;
                                        import net.minecraft.init.Blocks;
                                        import net.minecraft.init.Items;
                                        import net.minecraft.item.ItemStack;
                                        import net.minecraft.tileentity.TileEntity;
                                        import net.minecraft.util.ChatComponentTranslation;
                                        import net.minecraft.world.World;
                                        public class Algo extends Block
                                        {
                                        public static int Intermediaire = 0;
                                        public String marqueur[][][] = new String[320][256][320];
                                        public int xDepart,zDepart = 0 ;
                                        public boolean Interieur,Erreur = false;
                                        public EntityPlayer playerV;
                                        protected Algo(Material material)
                                        {
                                        super(material);
                                            this.setCreativeTab(CreativeTabs.tabBlock);
                                            this.setTickRandomly(true);
                                            for(int i = 0; i< 320; i++)
                                            {
                                           for(int j = 0; j< 256; j++)
                                           {
                                           for(int k = 0; k< 320; k++)
                                           {
                                           marqueur*[j][k] = "";
                                           }
                                           }
                                            }
                                        }
                                        public void updateTick(World world, int x, int y, int z, Random random ) //
                                           {
                                        world.scheduleBlockUpdate(x, y, z, algorythme.algo, 120);
                                        if((Intermediaire==15 || Intermediaire==25)&& Erreur==true)
                                        {
                                          AlgorythmeVide(world ,x , y , z,x , y , z);
                                          Erreur = false;
                                        }
                                        else if(Interieur == true && marqueur[xDepart-playerV.getPlayerCoordinates().posX+160][playerV.getPlayerCoordinates().posY][zDepart-playerV.getPlayerCoordinates().posZ+160].contains(Ids(world,x,y,z))==false &&(Intermediaire!=15 && Intermediaire!=25))//Ids(world,x,y,z)
                                            {
                                              Interieur = false ;
                                              System.out.println(playerV.getPlayerCoordinates().posX);
                                              playerV.addChatMessage(new ChatComponentTranslation("tile.chat.1"));
                                              AlgorythmeVide(world ,  x , y , z ,x,y,z);
                                            }
                                           }
                                         @Override
                                           public TileEntity createTileEntity(World world, int metadata)
                                           {
                                               return new TileEntityAire();
                                           }
                                           @Override
                                           public boolean hasTileEntity(int metadata)
                                           {
                                               return true;
                                           }
                                           public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ)
                                           {
                                            if(!world.isRemote)
                                                {
                                                xDepart = x;
                                            zDepart = z;
                                            Intermediaire = Algorythme(world ,x ,y ,z,x , y , z);
                                            playerV = player;
                                                    if(Intermediaire==5){player.addChatMessage(new ChatComponentTranslation("tile.chat.2"));}
                                                    else if(Intermediaire==25){player.addChatMessage(new ChatComponentTranslation("tile.chat.3"));}
                                                    else if(Intermediaire==35){player.addChatMessage(new ChatComponentTranslation("tile.chat.4"));}
                                                    else if(Intermediaire==15){player.addChatMessage(new ChatComponentTranslation("tile.chat.5"));}
                                                    return true;    
                                                }    
                                             return false;
                                           }
                                         public int Algorythme(World world ,int x , int y , int z,int xSrc,int ySrc,int zSrc)
                                          {  
                                           if(xDepart-x+160<320 && xDepart-x+160 > 0 && zDepart-z+160<320 && zDepart-z+160 > 0)
                                           {
                                           if((world.getBlock(x, y, z) == Blocks.air || world.getBlock(x, y, z) == algorythme.algo)&& marqueur[xDepart-x+160][y][zDepart-z+160].contains(Ids(world,xSrc,ySrc,zSrc))== false)
                                        {
                                        for(int i = y; i < 256 ; i++)
                                        {
                                             if(world.getBlock(x, i, z) != Blocks.air && world.getBlock(x, i, z) != algorythme.algo)
                                          {
                                            break;  
                                          }  
                                         if(i == 254)
                                         {
                                        Erreur = true ;
                                        System.out.println("extérieur");
                                        return 25;
                                         }
                                        }
                                        marqueur[xDepart-x+160][y][zDepart-z+160]=marqueur[xDepart-x+160][y][zDepart-z+160]+Ids(world ,xSrc, ySrc , zSrc);
                                            System.out.println("x="+x+" y="+y+" z="+z );
                                        if(Algorythme(world , x ,  y-1 ,  z,xSrc ,  ySrc ,  zSrc)==25){return 25;} else if(Algorythme(world , x ,  y-1 ,  z,xSrc ,  ySrc ,  zSrc )==15){return 15;}
                                            if(Algorythme(world , x ,  y+1 ,  z,xSrc ,  ySrc ,  zSrc)==25){return 25;} else if(Algorythme(world , x ,  y-1 ,  z,xSrc ,  ySrc ,  zSrc )==15){return 15;}
                                        if(Algorythme(world , x+1 ,  y ,  z,xSrc ,  ySrc ,  zSrc)==25){return 25;} else if(Algorythme(world , x ,  y-1 ,  z,xSrc ,  ySrc ,  zSrc )==15){return 15;}
                                            if(Algorythme(world , x-1 ,  y ,  z,xSrc ,  ySrc ,  zSrc)==25){return 25;} else if(Algorythme(world , x ,  y-1 ,  z,xSrc ,  ySrc ,  zSrc )==15){return 15;}
                                        if(Algorythme(world , x ,  y ,  z+1,xSrc ,  ySrc ,  zSrc)==25){return 25;} else if(Algorythme(world , x ,  y-1 ,  z,xSrc ,  ySrc ,  zSrc )==15){return 15;}
                                        if(Algorythme(world , x ,  y ,  z-1,xSrc ,  ySrc ,  zSrc)==25){return 25;} else if(Algorythme(world , x ,  y-1 ,  z,xSrc ,  ySrc ,  zSrc )==15){return 15;}
                                        Interieur = true ;
                                        return 5;
                                        }
                                        Erreur = true ;
                                        return 35;
                                          }
                                           return 15;
                                         }
                                         public void AlgorythmeVide(World world ,int x , int y , int z,int xSrc,int ySrc,int zSrc)
                                         {  
                                          if((world.getBlock(x, y, z) == Blocks.air || world.getBlock(x, y, z) == algorythme.algo)&& marqueur[xDepart-x+160][y][zDepart-z+160].contains(Ids(world,xSrc,ySrc,zSrc))== true)
                                        {
                                        marqueur[xDepart-x+160][y][zDepart-z+160] = marqueur[xDepart-x+160][y][zDepart-z+160].replace(Ids(world ,xSrc, ySrc , zSrc) ,""); //peut etre un bug à cause de Ids qui est un string et non un cahr sequence
                                        AlgorythmeVide(world , x ,  y-1 ,  z,xSrc ,  ySrc ,  zSrc);
                                            AlgorythmeVide(world , x ,  y+1 ,  z,xSrc ,  ySrc ,  zSrc);
                                        AlgorythmeVide(world , x+1 ,  y ,  z,xSrc ,  ySrc ,  zSrc);
                                            AlgorythmeVide(world , x-1 ,  y ,  z,xSrc ,  ySrc ,  zSrc);
                                        AlgorythmeVide(world , x ,  y ,  z+1,xSrc ,  ySrc ,  zSrc);
                                        AlgorythmeVide(world , x ,  y ,  z-1,xSrc ,  ySrc ,  zSrc);
                                        return;
                                        }
                                        return;
                                        }
                                           public void onBlockAdded(World world, int x, int y, int z)
                                        {
                                        super.onBlockAdded(world, x, y, z);
                                        world.scheduleBlockUpdate(x, y, z, algorythme.algo, 15);
                                        }
                                           public String Ids(World world , int x ,int y ,int z)
                                           {
                                            TileEntity te = world.getTileEntity(x, y, z); // Obtient le tile entité du bloc
                                        if(te instanceof TileEntityAire)
                                         {
                                          TileEntityAire tileTuto = (TileEntityAire)te;
                                          return ","+tileTuto.getIdsString();
                                         }
                                        return "";
                                           }
                                        }

                                        classe de la tileEntity

                                        package com.mathiasetampes.algorythme.common;
                                        import net.minecraft.nbt.NBTTagCompound;
                                        import net.minecraft.tileentity.TileEntity;
                                        public class TileEntityAire extends TileEntity
                                        {
                                        public int ids;
                                        public String str = "";
                                        @Override
                                           public void readFromNBT(NBTTagCompound compound)
                                           {
                                               super.readFromNBT(compound);
                                               this.ids = compound.getInteger("Ids");
                                           }
                                           @Override
                                           public void writeToNBT(NBTTagCompound compound)
                                           {
                                               super.writeToNBT(compound);
                                               compound.setInteger("Ids", this.ids);
                                           }
                                           public void UpIds(int i)
                                           {
                                            this.ids=i;
                                            return;
                                           }
                                           public int getIds()
                                           {
                                            return this.ids;
                                           }
                                           public String getIdsString()
                                           {
                                            str="";
                                            str=str+ids;
                                            return this.str;
                                           }
                                        }

                                        classe des events

                                        package com.mathiasetampes.algorythme.common;
                                        import cpw.mods.fml.common.eventhandler.SubscribeEvent;
                                        import cpw.mods.fml.common.gameevent.TickEvent;
                                        import net.minecraft.block.Block;
                                        import net.minecraft.tileentity.TileEntity;
                                        import net.minecraftforge.event.entity.EntityJoinWorldEvent;
                                        import net.minecraftforge.event.world.BlockEvent;
                                        import net.minecraftforge.event.world.BlockEvent.PlaceEvent;
                                        public class AllEvent
                                        {
                                           int TabIds[] = new int[50];
                                        @SubscribeEvent
                                        public void PlaceEvent(PlaceEvent event)
                                        {
                                            TileEntity te = event.world.getTileEntity(event.x, event.y, event.z); // Obtient le tile entité du bloc
                                            if(te instanceof TileEntityAire)
                                            {
                                            for(int i = 0;i<50;i++)
                                             {
                                            TileEntityAire tileTuto = (TileEntityAire)te;
                                            if(TabIds*!=1)
                                            {
                                                tileTuto.UpIds(i);
                                                TabIds* = 1;
                                                break;
                                            }
                                             }
                                            }
                                        }
                                        public void BreakEvent(BlockEvent.BreakEvent event)
                                        {
                                        TileEntity te = event.world.getTileEntity(event.x, event.y, event.z); // Obtient le tile entité du bloc
                                            if(te instanceof TileEntityAire)
                                            {
                                             TileEntityAire tileTuto = (TileEntityAire)te;
                                             TabIds[tileTuto.getIds()] = 0;
                                            }
                                        }
                                        }

                                        :::

                                        1 réponse Dernière réponse Répondre Citer 0
                                        • SCAREX
                                          SCAREX dernière édition par 29 mars 2015, 15:13

                                          @‘Asmath’:

                                          bon apres environ 1 mois d’attente je poste le code

                                          :::
                                          classe principlale

                                          package com.mathiasetampes.algorythme.common;
                                          import net.minecraft.block.Block;
                                          import net.minecraft.block.material.Material;
                                          import net.minecraftforge.common.MinecraftForge;
                                          import com.mathiasetampes.algorythme.proxy.CommonProxy;
                                          import cpw.mods.fml.common.FMLCommonHandler;
                                          import cpw.mods.fml.common.Mod;
                                          import cpw.mods.fml.common.Mod.EventHandler;
                                          import cpw.mods.fml.common.Mod.Instance;
                                          import cpw.mods.fml.common.SidedProxy;
                                          import cpw.mods.fml.common.event.FMLInitializationEvent;
                                          import cpw.mods.fml.common.event.FMLPostInitializationEvent;
                                          import cpw.mods.fml.common.event.FMLPreInitializationEvent;
                                          import cpw.mods.fml.common.registry.GameRegistry;
                                          @Mod(modid = "algorythme",name="Algorytme",version="1.0.0")
                                          public class algorythme
                                          {
                                          @Instance("algorythme")
                                          public static algorythme instance;
                                          public static final String MODID = "villagePNJ";
                                          @SidedProxy(clientSide = "com.mathiasetampes.algorythme.proxy.ClientProxy", serverSide = "com.mathiasetampes.algorythme.proxy.CommonProxy")
                                          public static CommonProxy proxy;
                                          public static Block algo;
                                          @EventHandler
                                          public void preInit(FMLPreInitializationEvent event)
                                          {
                                          algo = new Algo(Material.rock).setBlockName("Algo").setBlockTextureName("modtutoriel:block_tutoriel");
                                          GameRegistry.registerBlock(algo, "block_tutoriel");
                                                 GameRegistry.registerTileEntity(TileEntityAire.class, "algorythme:TileEntityAire");
                                          }
                                          @EventHandler
                                          public void init(FMLInitializationEvent event)
                                          {
                                          proxy.registerRender();
                                          FMLCommonHandler.instance().bus().register(new AllEvent());
                                          MinecraftForge.EVENT_BUS.register(new AllEvent());
                                          }
                                          @EventHandler
                                          public void postInit(FMLPostInitializationEvent event)
                                          {
                                          }
                                          }

                                          classe du block

                                          package com.mathiasetampes.algorythme.common;
                                          import java.util.Random;
                                          import com.mojang.realmsclient.dto.PlayerInfo;
                                          import net.minecraft.block.Block;
                                          import net.minecraft.block.material.Material;
                                          import net.minecraft.creativetab.CreativeTabs;
                                          import net.minecraft.entity.item.EntityItem;
                                          import net.minecraft.entity.player.EntityPlayer;
                                          import net.minecraft.init.Blocks;
                                          import net.minecraft.init.Items;
                                          import net.minecraft.item.ItemStack;
                                          import net.minecraft.tileentity.TileEntity;
                                          import net.minecraft.util.ChatComponentTranslation;
                                          import net.minecraft.world.World;
                                          public class Algo extends Block
                                          {
                                          public static int Intermediaire = 0;
                                          public String marqueur[][][] = new String[320][256][320];
                                          public int xDepart,zDepart = 0 ;
                                          public boolean Interieur,Erreur = false;
                                          public EntityPlayer playerV;
                                          protected Algo(Material material)
                                          {
                                          super(material);
                                              this.setCreativeTab(CreativeTabs.tabBlock);
                                              this.setTickRandomly(true);
                                              for(int i = 0; i< 320; i++)
                                              {
                                             for(int j = 0; j< 256; j++)
                                             {
                                             for(int k = 0; k< 320; k++)
                                             {
                                             marqueur*[j][k] = "";
                                             }
                                             }
                                              }
                                          }
                                          public void updateTick(World world, int x, int y, int z, Random random ) //
                                             {
                                          world.scheduleBlockUpdate(x, y, z, algorythme.algo, 120);
                                          if((Intermediaire==15 || Intermediaire==25)&& Erreur==true)
                                          {
                                            AlgorythmeVide(world ,x , y , z,x , y , z);
                                            Erreur = false;
                                          }
                                          else if(Interieur == true && marqueur[xDepart-playerV.getPlayerCoordinates().posX+160][playerV.getPlayerCoordinates().posY][zDepart-playerV.getPlayerCoordinates().posZ+160].contains(Ids(world,x,y,z))==false &&(Intermediaire!=15 && Intermediaire!=25))//Ids(world,x,y,z)
                                              {
                                                Interieur = false ;
                                                System.out.println(playerV.getPlayerCoordinates().posX);
                                                playerV.addChatMessage(new ChatComponentTranslation("tile.chat.1"));
                                                AlgorythmeVide(world ,  x , y , z ,x,y,z);
                                              }
                                             }
                                           @Override
                                             public TileEntity createTileEntity(World world, int metadata)
                                             {
                                                 return new TileEntityAire();
                                             }
                                             @Override
                                             public boolean hasTileEntity(int metadata)
                                             {
                                                 return true;
                                             }
                                             
                                             public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ)
                                             {
                                              if(!world.isRemote)
                                                  {
                                                  xDepart = x;
                                              zDepart = z;
                                              Intermediaire = Algorythme(world ,x ,y ,z,x , y , z);
                                              playerV = player;
                                                      if(Intermediaire==5){player.addChatMessage(new ChatComponentTranslation("tile.chat.2"));}
                                                      else if(Intermediaire==25){player.addChatMessage(new ChatComponentTranslation("tile.chat.3"));}
                                                      else if(Intermediaire==35){player.addChatMessage(new ChatComponentTranslation("tile.chat.4"));}
                                                      else if(Intermediaire==15){player.addChatMessage(new ChatComponentTranslation("tile.chat.5"));}
                                                      return true;    
                                                  }    
                                               return false;
                                             }
                                             
                                           public int Algorythme(World world ,int x , int y , int z,int xSrc,int ySrc,int zSrc)
                                            {  
                                             if(xDepart-x+160<320 && xDepart-x+160 > 0 && zDepart-z+160<320 && zDepart-z+160 > 0)
                                             {
                                             if((world.getBlock(x, y, z) == Blocks.air || world.getBlock(x, y, z) == algorythme.algo)&& marqueur[xDepart-x+160][y][zDepart-z+160].contains(Ids(world,xSrc,ySrc,zSrc))== false)
                                          {
                                          for(int i = y; i < 256 ; i++)
                                          {
                                               if(world.getBlock(x, i, z) != Blocks.air && world.getBlock(x, i, z) != algorythme.algo)
                                            {
                                              break;  
                                            }  
                                           if(i == 254)
                                           {
                                          Erreur = true ;
                                          System.out.println("extérieur");
                                          return 25;
                                           }
                                          }
                                          marqueur[xDepart-x+160][y][zDepart-z+160]=marqueur[xDepart-x+160][y][zDepart-z+160]+Ids(world ,xSrc, ySrc , zSrc);
                                              System.out.println("x="+x+" y="+y+" z="+z );
                                          if(Algorythme(world , x ,  y-1 ,  z,xSrc ,  ySrc ,  zSrc)==25){return 25;} else if(Algorythme(world , x ,  y-1 ,  z,xSrc ,  ySrc ,  zSrc )==15){return 15;}
                                              if(Algorythme(world , x ,  y+1 ,  z,xSrc ,  ySrc ,  zSrc)==25){return 25;} else if(Algorythme(world , x ,  y-1 ,  z,xSrc ,  ySrc ,  zSrc )==15){return 15;}
                                          if(Algorythme(world , x+1 ,  y ,  z,xSrc ,  ySrc ,  zSrc)==25){return 25;} else if(Algorythme(world , x ,  y-1 ,  z,xSrc ,  ySrc ,  zSrc )==15){return 15;}
                                              if(Algorythme(world , x-1 ,  y ,  z,xSrc ,  ySrc ,  zSrc)==25){return 25;} else if(Algorythme(world , x ,  y-1 ,  z,xSrc ,  ySrc ,  zSrc )==15){return 15;}
                                          if(Algorythme(world , x ,  y ,  z+1,xSrc ,  ySrc ,  zSrc)==25){return 25;} else if(Algorythme(world , x ,  y-1 ,  z,xSrc ,  ySrc ,  zSrc )==15){return 15;}
                                          if(Algorythme(world , x ,  y ,  z-1,xSrc ,  ySrc ,  zSrc)==25){return 25;} else if(Algorythme(world , x ,  y-1 ,  z,xSrc ,  ySrc ,  zSrc )==15){return 15;}
                                          Interieur = true ;
                                          return 5;
                                          }
                                          Erreur = true ;
                                          return 35;
                                            }
                                             return 15;
                                           }
                                           public void AlgorythmeVide(World world ,int x , int y , int z,int xSrc,int ySrc,int zSrc)
                                           {  
                                            if((world.getBlock(x, y, z) == Blocks.air || world.getBlock(x, y, z) == algorythme.algo)&& marqueur[xDepart-x+160][y][zDepart-z+160].contains(Ids(world,xSrc,ySrc,zSrc))== true)
                                          {
                                          marqueur[xDepart-x+160][y][zDepart-z+160] = marqueur[xDepart-x+160][y][zDepart-z+160].replace(Ids(world ,xSrc, ySrc , zSrc) ,""); //peut etre un bug à cause de Ids qui est un string et non un cahr sequence
                                          AlgorythmeVide(world , x ,  y-1 ,  z,xSrc ,  ySrc ,  zSrc);
                                              AlgorythmeVide(world , x ,  y+1 ,  z,xSrc ,  ySrc ,  zSrc);
                                          AlgorythmeVide(world , x+1 ,  y ,  z,xSrc ,  ySrc ,  zSrc);
                                              AlgorythmeVide(world , x-1 ,  y ,  z,xSrc ,  ySrc ,  zSrc);
                                          AlgorythmeVide(world , x ,  y ,  z+1,xSrc ,  ySrc ,  zSrc);
                                          AlgorythmeVide(world , x ,  y ,  z-1,xSrc ,  ySrc ,  zSrc);
                                          return;
                                          }
                                          return;
                                          }
                                             public void onBlockAdded(World world, int x, int y, int z)
                                          {
                                          super.onBlockAdded(world, x, y, z);
                                          world.scheduleBlockUpdate(x, y, z, algorythme.algo, 15);
                                          }
                                             public String Ids(World world , int x ,int y ,int z)
                                             {
                                              TileEntity te = world.getTileEntity(x, y, z); // Obtient le tile entité du bloc
                                          if(te instanceof TileEntityAire)
                                           {
                                            TileEntityAire tileTuto = (TileEntityAire)te;
                                            return ","+tileTuto.getIdsString();
                                           }
                                          return "";
                                             }
                                          }

                                          classe de la tileEntity

                                          package com.mathiasetampes.algorythme.common;
                                          import net.minecraft.nbt.NBTTagCompound;
                                          import net.minecraft.tileentity.TileEntity;
                                          public class TileEntityAire extends TileEntity
                                          {
                                          public int ids;
                                          public String str = "";
                                          @Override
                                             public void readFromNBT(NBTTagCompound compound)
                                             {
                                                 super.readFromNBT(compound);
                                                 this.ids = compound.getInteger("Ids");
                                             }
                                             @Override
                                             public void writeToNBT(NBTTagCompound compound)
                                             {
                                                 super.writeToNBT(compound);
                                                 compound.setInteger("Ids", this.ids);
                                             }
                                             public void UpIds(int i)
                                             {
                                              this.ids=i;
                                              return;
                                             }
                                             public int getIds()
                                             {
                                              return this.ids;
                                             }
                                             public String getIdsString()
                                             {
                                              str="";
                                              str=str+ids;
                                              return this.str;
                                             }
                                          }

                                          classe des events

                                          package com.mathiasetampes.algorythme.common;
                                          import cpw.mods.fml.common.eventhandler.SubscribeEvent;
                                          import cpw.mods.fml.common.gameevent.TickEvent;
                                          import net.minecraft.block.Block;
                                          import net.minecraft.tileentity.TileEntity;
                                          import net.minecraftforge.event.entity.EntityJoinWorldEvent;
                                          import net.minecraftforge.event.world.BlockEvent;
                                          import net.minecraftforge.event.world.BlockEvent.PlaceEvent;
                                          public class AllEvent
                                          {
                                             int TabIds[] = new int[50];
                                          @SubscribeEvent
                                          public void PlaceEvent(PlaceEvent event)
                                          {
                                              TileEntity te = event.world.getTileEntity(event.x, event.y, event.z); // Obtient le tile entité du bloc
                                              if(te instanceof TileEntityAire)
                                              {
                                              for(int i = 0;i<50;i++)
                                               {
                                              TileEntityAire tileTuto = (TileEntityAire)te;
                                              if(TabIds*!=1)
                                              {
                                                  tileTuto.UpIds(i);
                                                  TabIds* = 1;
                                                  break;
                                              }
                                               }
                                              }
                                          }
                                          public void BreakEvent(BlockEvent.BreakEvent event)
                                          {
                                          TileEntity te = event.world.getTileEntity(event.x, event.y, event.z); // Obtient le tile entité du bloc
                                              if(te instanceof TileEntityAire)
                                              {
                                               TileEntityAire tileTuto = (TileEntityAire)te;
                                               TabIds[tileTuto.getIds()] = 0;
                                              }
                                          }
                                          }

                                          :::

                                          Désolé de dire çà mais c’est l’un des codes les moins propres que j’ai jamais vu ! (“on recherche la propreté du code”)
                                          De plus je suis pas sûr que on code respecte les consignes : “Non aucune taille limite” or si j’ai bien compris ton code (ce qui n’est pas sûr), ton code est limité par ton array de string (new String[320][256][320]).

                                          Site web contenant mes scripts : http://SCAREXgaming.github.io

                                          Pas de demandes de support par MP ni par skype SVP.
                                          Je n'accepte sur skype que l…

                                          1 réponse Dernière réponse Répondre Citer 0
                                          • 1
                                          • 2
                                          • 1 / 2
                                          1 sur 31
                                          • Premier message
                                            1/31
                                            Dernier message
                                          Design by Woryk
                                          Contact / Mentions Légales

                                          MINECRAFT FORGE FRANCE © 2018

                                          Powered by NodeBB