2017-09-28 3 views
0

Je crée un jeu de labyrinthe dans un tableau 2d mais je n'arrive pas à comprendre comment faire des murs/portes/etc pour fonctionner. Je pense que quand j'appuie sur 'W' cela changera la position du personnage seulement si la position suivante n'est pas un mur. Comment puis-je vérifier cela? Voici mon code pour la carte et le mouvement:Comment puis-je archiver un tableau 2D si la position suivante est un objet spécifique?

const int ROWS = 16, COLUMNS = 24; 
     Blocks[,] map = new Blocks[COLUMNS, ROWS]; 
     int playerRow = 3, playerColumn = 11; 
     Character gubbe = new Character(); 


     // Create map 
     for (int row = 0; row < ROWS; row++) 
     { 
      for (int column = 0; column < COLUMNS; column++) 
      { 

       if (row == 0 || row == ROWS - 1 || column == 0 || column == COLUMNS - 1) 
        map[column, row] = new Wall(); 

       else 
        map[column, row] = new EmptySpace(); 

      } 
     } 

     while (true) // TODO: add a goal that ends the loop 
     { 
      // Draw map 
      string buffer = ""; 
      for (int row = 0; row < ROWS; row++) 
      { 
       string line = ""; 
       for (int column = 0; column < COLUMNS; column++) 
       { 
        if (column == playerColumn && row == playerRow) 
         line += gubbe.printBlock(); 

        else 
         line += map[column, row].printBlock(); 
       } 
       //Console.WriteLine(line); 
       buffer += line + "\n"; 
      } 
      Console.CursorLeft = 0; 
      Console.CursorTop = 0; 
      Console.Write(buffer); 

      var key = Console.ReadKey(); 
      if (key.Key == ConsoleKey.W) 
       playerRow--; 
      else if (key.Key == ConsoleKey.A) 
       playerColumn--; 
      else if (key.Key == ConsoleKey.S) 
       playerRow++; 
      else if (key.Key == ConsoleKey.D) 
       playerColumn++; 
     }//while 
    }//Map 

Répondre

-2

Vous pouvez utiliser instanceof opérateur en ut dièse pour plus d'informations, vous pouvez visiter ce lien https://msdn.microsoft.com/en-us/library/0y7dd8cx(v=vs.100).aspx

s'il vous plaît me dire si vous ne comprenez pas ma solution

+0

Je ne comprends pas votre solution. Comment jscript et C# sont-ils liés? – Sinatr

+0

Considérez cette solution https://stackoverflow.com/questions/11634079/comment-pouvez-voter-le-data-type-de-variable-in-c –

+0

https://stackoverflow.com/ questions/11634079/how-i-get-the-data-type-of-a-variable-in-c –

2

Vous pouvez vérifier le type de deux façons différentes:

1ère option:

if (map[column, row] is Wall) 
{ 
    // Do something 
} 

2ème option:

if (map[column, row].GetType() == typeof(Wall)) 
{ 
    // Do something 
} 
+0

Correctement répondu par @Alex, car vous devez vérifier le type de bloc suivant lors de l'exécution puis passer à l'action acc. –

+0

Je veux plus tard ajouter des chambres à la carte avec des portes. Alors, comment puis-je implémenter cela lorsque la carte n'est pas seulement un rectangle vide? – anek05

+0

Cela ressemble à une question différente maintenant .... et je suis désolé mais je ne serai pas en mesure de vous dire comment écrire le jeu. –