2017-05-21 9 views
0

コンソールアプリケーションで迷路ゲームを作成し、キーを使用して迷路を離れるように文字を制御できます。今私はそのプロセスを自動化する方法を理解したいので、私のキャラクターはランダムな方向に進み、脱出を試みることができます。ここに私のクラスです。 問題はrandomMovementメソッドにあります。コンソールCでの文字のランダム移動#

class Player: Maze 
{ 
    public int x = 1; 
    public int y = 1; 


    public string playerName; 

    public static void printMv() { 
     while (true) 
     { 
      for (int i = 0; i < 15; i++) 
      { 


       Console.Clear(); 
       mazeDev(); 

       Console.Write("0"); 
       Thread.Sleep(1000); 
      } 
     } 
    } 


    public static void movementByUser() 
    { 

     int x = 1, y = 1; 
     while (true) 
     { 

      Console.Clear(); 
      mazeDev(); 
      Console.CursorLeft = x; 
      Console.CursorTop = y; 
      Console.Write("0"); 


      ConsoleKeyInfo mv = Console.ReadKey(); 
      if (mv.Key == ConsoleKey.Escape) break; 
      if (mv.Key == ConsoleKey.A && mazeBluePrint[y, x - 1] == 0) { 
       x--; 
      } 
      if (mv.Key == ConsoleKey.D && mazeBluePrint[y, x + 1] == 0) 
      { 
       x++; 
      } 
      if (mv.Key == ConsoleKey.W && mazeBluePrint[y - 1, x] == 0) 
      { 
       y--; 
      } 
      if (mv.Key == ConsoleKey.S && mazeBluePrint[y + 1, x] == 0) 
      { 
       y++; 
      } 
     } 
    } 
    public static void randomMovement() 
    { 
     Random randMove = new Random(); 

     int x = 1; 
     int y = 1; 

     int irandom = randMove.Next(4); 
     Console.CursorLeft = x; 
     Console.CursorTop = y; 

     if (irandom == mazeBluePrint[y, x - 1]) 
     { 
      x--; 
      printMv(); 

     } 
     else if (irandom == mazeBluePrint[y, x + 1]) 
     { 
      x++; 
      printMv(); 
     } 
     else if (irandom == mazeBluePrint[y - 1, x]) 
     { 
      y--; 
      printMv(); 
     } 
     else 
     { 
      y++; 
      printMv(); 
     } 


    } 
} 

}

+1

問題は何ですか? – stybl

+0

問題は、私のキャラクターが道を見つけるためにランダムな方向に動くようにしたいということです。左、右、上、下。たとえば、左側が壁の場合は、別のランダムな方向を選択してそこに移動します。 –

+0

@GevorgSahabalyan:質問の一部として追加する必要がある重要な情報です。 –

答えて

0

あなたの問題は、おそらく方向評価です。これを試してみてください:

public static void randomMovement() 
{ 
    Random randMove = new Random(); 

    int x = 1; 
    int y = 1; 

    int irandom = randMove.Next(4); 
    Console.CursorLeft = x; 
    Console.CursorTop = y; 

    if (irandom == 0 && mazeBluePrint[y, x - 1] == 0) 
    { 
     x--; 
     printMv(); 
    } 
    else if (irandom == 1 && mazeBluePrint[y, x + 1] == 0) 
    { 
     x++; 
     printMv(); 
    } 
    else if (irandom == 2 && mazeBluePrint[y - 1, x] == 0) 
    { 
     y--; 
     printMv(); 
    } 
    else if (mazeBluePrint [y + 1, x] == 0) 
    { 
     y++; 
     printMv(); 
    } 
} 

しかし、このコードはまだ弱点(例えば、あなたが例外につながるmazeBluePrint配列の境界の外に歩くことができる)のたくさんを持っています。


EDITあなたが最初はうまくいかなかった場合は、他の方向に移動したい場合は、このような何かを試みることができる

public static void randomMovement() 
{ 
    Random randMove = new Random(); 
    int x = 1; 
    int y = 1; 
    Console.CursorLeft = x; 
    Console.CursorTop = y; 
    while (true) 
    { 
     int irandom = randMove.Next(4); 
     if (irandom == 0 && mazeBluePrint[y, x - 1] == 0) 
     { 
      x--; 
      printMv(); 
      break; 
     } 
     else if (irandom == 1 && mazeBluePrint[y, x + 1] == 0) 
     { 
      x++; 
      printMv(); 
      break; 
     } 
     else if (irandom == 2 && mazeBluePrint[y - 1, x] == 0) 
     { 
      y--; 
      printMv(); 
      break; 
     } 
     else if (mazeBluePrint[y + 1, x] == 0) 
     { 
      y++; 
      printMv(); 
      break; 
     } 
    } 
} 

しかし、これだけの動きを1回、1,1から始まる。

+0

私は弱点について知っているので、ロジックを書いて与えながらコードを最適化するほど熟練していません))コードは機能しませんでした。私はランダムには== 0を追加して、移動のためのフリーパスのみを使用し、 "壁"は使用しないようにしました –

+0

@GevorgSahabalyan Soo ...今は動作しますか? – MetaColon

関連する問題