2012-04-09 7 views
-1

Je suis actuellement en train de coder 10 instances différentes comme le code ci-dessous, mais je voudrais en créer beaucoup d'autres. Au lieu d'avoir la même mise en page pour le nouveau niveau, je me demandais s'il y avait de toute façon à générer une valeur X aléatoire pour chaque bloc (ce sera à quel point dans le niveau il est). Un niveau de 100 000 pixels de large suffirait, mais si quelqu'un connaît un système pour faire durer le niveau, j'aimerais le savoir aussi. Ceci est essentiellement comment je définir un bloc maintenant (avec le code non pertinent supprimé):Comment générer un niveau de manière aléatoire?

block = new Block(R.drawable.block, 400, platformheight); 
block2 = new Block(R.drawable.block, 600, platformheight); 
block3 = new Block(R.drawable.block, 750, platformheight); 

Le 400 est la position X, que je voudrais placer au hasard à travers le niveau, la variable platformheight définit la position Y qui Je ne veux pas changer.

+2

Une boucle 'for' et quelques appels' Math.random() '. Avez-vous essayé googling pour cela ... –

Répondre

1

Considérant que chaque bloc doit être plus loin que le précédent,

List<Block> blocks = new LinkedList<Block>(); 
Random rnd = new Random(System.currentTimeMillis()); 

int x = 400; 

while (youNeedMoreBlocks) 
{ 
    int offset = rnd.nextInt(400) + 100; //500 is the maximum offset, this is a constant 
    x += offset;       //ofset will be between 100 and 400 

    blocks.add(new Block(R.drawable.block, x, platformheight)); 

    //if you have enough blocks, set youNeedMoreBlocks to false 
} 

Mais cela semble trop simpliste pour moi. Soit je n'ai pas compris votre question, soit c'était aussi simple.

Edit:

Pour les missions comme celles-ci:

block.setY(three_quarters - 10); 
block2.setY(three_quarters - 10); 
block3.setY(three_quarters - 10); 

Vous devez modifier la boucle avec:

List<Block> blocks = new LinkedList<Block>(); 
Random rnd = new Random(System.currentTimeMillis()); 

int x = 400; 

while (youNeedMoreBlocks) 
{ 
    int offset = rnd.nextInt(400) + 100; //500 is the maximum offset, this is a constant 
    x += offset;       //ofset will be between 100 and 400 

    Block tmp = new Block(R.drawable.block, x, platformheight); 
    tmp.setY(three_quarters - 10);     
      //do with tmp everything you need to apply to each block 

    blocks.add(tmp); 

    //if you have enough blocks, set youNeedMoreBlocks to false 
} 

Une autre idée sage serait de générer les blocs à la demande lorsque la Le joueur est proche du bord de la carte, vous avez donc des temps de chargement plus rapides.

+0

Cela semble très bien et était ma question, bien que ce que font ido à ce block.setY (three_quarters - 10); \t \t block2.setY (trois quartiers - 10); \t \t block3.setY (trois_quartiers - 10); Je ne veux pas dire au hasard l'axe des y mais je veux dire le bloc d'affectation, block2, block 3 ?? –

+0

@CharltonSantana plutôt que d'avoir 3 variables individuelles pour les blocs, avoir une liste avec tous les. Pourquoi 3? plus tard si vous voulez 4, vous devez ajouter une autre variable, l'initialiser, etc. Utiliser une liste est beaucoup plus dynamique. Pour la partie setY, je suis en train d'éditer la réponse. –

+0

je ne sais pas comment l'initaliser ... êtes-vous capable de me dire .. j'ai aussi une détection de collsion qui est ennuyante parce que si je veux 100 bloc je dois copier et passé puis éditer 100 fois (comme vous avez dit) ici fait partie de la collision pour le bloc 2 .. // en bas à gauche touchant le bloc? \t \t \t si (sprite.bottomlx block.bottomlx && sprite.bottomly block.topry) { \t \t \t \t Log.d (TAG, "Collided !!!!!!!!!!!! 1"); \t \t \t \t \t \t \t \t \t \t \t} –

Questions connexes