2013-03-03 42 views
1

我有一個在屏幕上繪製文本地圖的二維數組,我使用'WASD'在屏幕上移動一個字符。 我想測試地圖限制,以便角色不會出界。如何在使用鍵盤移動光標後,如何比較二維數組上的光標位置?

任何線索?

這裏是我的代碼:

static void Main(string[] args) 
    { 
     bool GameOver = false; 
     int playerX = 1; 
     int playerY = 1; 
     char[,] myCharArray = new char[16, 8]; 
     string[] lol = new string[8]; 
     lol[0] = "----------------"; 
     lol[1] = "-    -"; 
     lol[2] = "-    -"; 
     lol[3] = "-    -"; 
     lol[4] = "-    -"; 
     lol[5] = "-    -"; 
     lol[6] = "-    -"; 
     lol[7] = "----------------"; 

     for (int i = 0; i < 8; i++) 
     { 
      char[] letters = lol[i].ToCharArray(); 

      for (int j = 0; j < 16; j++) 
      { 
       myCharArray[j, i] = letters[j]; 
      } 
     } 

     do 
     { 
      for (int i = 0; i < 8; i++) 
      { 
       for (int j = 0; j < 16; j++) 
       { 
        if (playerX == j && playerY == i) 
        { 
         Console.Write('*'); 
        } 
        else 
        { 
         Console.Write(myCharArray[j, i]); 
        } 
      } 
      Console.WriteLine(); 
      } 

      ConsoleKeyInfo pressedKey = Console.ReadKey(); 
      Console.WriteLine(pressedKey.Key.ToString()); 
      if (pressedKey.Key.ToString() == "A") 
      {      
       playerX--; 
      } 
      if (pressedKey.Key.ToString() == "S") 
      { 
       playerY++; 
      } 
      if (pressedKey.Key.ToString() == "D") 
      { 
       playerX++; 
      } 
      if (pressedKey.Key.ToString() == "W") 
      { 
       playerY--; 
      } 
      Console.Clear(); 
     } while (GameOver == false); 

    } 
+0

@bamed回答有幫助嗎? – www 2013-03-05 22:40:11

+0

是的,它的確如此。謝謝。 – bemed 2017-05-10 09:27:58

+0

很酷。但消化4年似乎很長。祝你好運! – www 2017-05-10 13:11:06

回答

0

如果條件在這裏:

if (pressedKey.Key.ToString() == "A") 
      { 
       //check if move left is possible 
       if(playerX != 0)     
        playerX--; 
      } 

編輯請找一些豐富的版本,獨自搞清楚規則:]。

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace FunnyStuff 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      bool GameOver = true; 
      int playerX = 1; 
      int playerY = 1; 

      int[] enemy = new int[2]; 
      Random random = new Random(); 
      int randomNumber = random.Next(0, 100); 
      enemy[0] = random.Next(1, 15); 
      enemy[1] = random.Next(1, 6); 
      char[,] myCharArray = new char[16, 8]; 
      string[] lol = new string[8]; 
      lol[0] = "----------------"; 
      lol[1] = "-    -"; 
      lol[2] = "-    -"; 
      lol[3] = "-    -"; 
      lol[4] = "-    -"; 
      lol[5] = "-    -"; 
      lol[6] = "-    -"; 
      lol[7] = "----------------"; 

      for (int i = 0; i < 8; i++) 
      { 
       char[] letters = lol[i].ToCharArray(); 

       for (int j = 0; j < 16; j++) 
       { 
        myCharArray[j, i] = letters[j]; 
       } 
      } 

      do 
      { 
       for (int i = 0; i < 8; i++) 
       { 
        for (int j = 0; j < 16; j++) 
        { 
         if (playerX == j && playerY == i) 
         { 
          Console.Write('*'); 
         } 
         else if (enemy[0] == j && enemy[1] == i) 
         { 
          Console.Write('+'); 
         } 
         else 
         { 
          Console.Write(myCharArray[j, i]); 
         } 
        } 
        Console.WriteLine(); 
       } 

       int rx = random.Next(-1, 2); 
       int ry = random.Next(-1, 2); 
       enemy[0] = (rx+enemy[0] != 1 || rx+enemy[0] != 14) ? rx+enemy[0] : enemy[0]; 
       enemy[1] = (ry + enemy[1] != 1 || ry + enemy[0] != 6) ? ry + enemy[1] : enemy[1]; 

       ConsoleKeyInfo pressedKey = Console.ReadKey(); 
       Console.WriteLine(pressedKey.Key.ToString()); 
       if (pressedKey.Key.ToString() == "A") 
       { 
        if (playerX != 1) 
        playerX--; 
       } 
       if (pressedKey.Key.ToString() == "S") 
       { 
        if (playerY != 6) 
        playerY++; 
       } 
       if (pressedKey.Key.ToString() == "D") 
       { 
        if (playerX != 14) 
        playerX++; 
       } 
       if (pressedKey.Key.ToString() == "W") 
       { 
        if (playerY != 1) 
        playerY--; 
       } 

       if (playerX == enemy[0] && playerY == enemy[1]) 
       { 
        GameOver = false; 
       } 

       Console.Clear(); 
      } while (GameOver); 

     } 
    } 
} 
+0

這是一個開始,謝謝。 當你移動的時候,如果你第二次按下這個鍵,你可以繼續下去,所以我認爲最好的方法是循環。 我會嘗試。 – bemed 2013-03-06 19:30:56

+0

嗯。它已經在循環中。將GameOver設置爲TRUE並在遊戲結束時添加一些條件。 GL! – www 2013-03-06 20:13:06

+0

這將使它工作。 (myCharArray [playerX-1,playerY]!=' - ') { playerX--; }' – bemed 2013-03-07 19:38:30