2016-11-22 6 views
-3

ポケモンがどこにも出現しないかどうかを選択するプログラムの最後に到達すると、何度も同じポケモンが繰り返されます。例: 私は私が私が私が私が私がMr.Mime Iの敗北に直面 安全だ ダイMr.Mime 遭遇 ダイMr.Mime 遭遇 安全だ私はMr.Mime 遭遇私はMr.Mime を倒す私は安全 ていますMr.MimeC#Console Application -

どうすればいいですか?

マイコード:

using System; 
using System.Linq; 
using System.Threading; 

public class Program 
{ 
    public static void Main() 
    { 
     // Due to dotnetfiddle.net limitations I cannot store the pokémons data to a file 
     Console.WriteLine("---------------------------------------------------------------------------------------------------------------------"); 
     Console.WriteLine("|   Hello there! Welcome to the world of pokémon! My name is Oak! People call me the pokémon Prof!   |");     
     Console.WriteLine("|This world is inhabited by creatures called pokémon! For some people, pokémon are pets. Others use them for fights.|"); 
     Console.WriteLine("|         Myself...I study pokémon as a profession.          |"); 
     Console.WriteLine("---------------------------------------------------------------------------------------------------------------------"); 
     Console.WriteLine("     |       Would you like to start (S)?      |"); 
     Console.WriteLine("     |                    |"); 
     Console.WriteLine("     -------------------------------------------------------------------------------"); 
     String fog = Console.ReadLine(); 
     String [] random = {"Pidgeot", "Jigglypuff", "Beedrill", "Caterpie", "Squirtle", "Charizard", "Charmander", "Bulbasaur", "Rattata", "Diglett", "Meowth", "Psyduck", "Dugtrio", "Magnemite", "Mr. Mime", "Gyarados", "Magikarp", "Onix", "Drowzee"}; 
     String [] gen = {"♂", "♀"}; 
     String [] name = {"Charmander", "Bulbasaur", "Squirtle"}; 
     if (fog == "s" || fog == "S" || fog == "start" || fog == "Start") 

     { 
      Random rnd = new Random(); 
      int HP = rnd.Next(20, 20); 
      int Atk = rnd.Next(20, 20); 
      int Def = rnd.Next(20, 20); 
      int Lvl = rnd.Next(5, 5); 
      int PN = rnd.Next(1, 721); 
      Console.WriteLine("You have chosen to generate a pokémon's!"); 
      Console.WriteLine(" Your pokémon's Name is: " + name[new Random().Next(0, name.Length)]); 
      Console.WriteLine(" Your pokémon's ㏋ is: " + HP); 
      Console.WriteLine(" Your pokémon's Attack is: " + Atk); 
      Console.WriteLine(" Your pokémon's Defense is: " + Def); 
      Console.WriteLine(" Your pokémon's Lvl is: " + Lvl); 
      Console.WriteLine(" Your pokémon's Gender is: " + gen[new Random().Next(0, gen.Length)]); 
      Console.WriteLine(" Your pokémon's Pokédex number is: " + PN); 

      Console.Write("Loading"); 
      for(int i = 0; i < 10; i++) 
      { 

      Console.Write("."); 
       Thread.Sleep(200); 
      } 
     Console.WriteLine(" "); 
     Console.WriteLine("---------------------------------------------------------------------------------------------------------------------"); 
     Console.WriteLine("|      You exit the proffesors lab to journey into the world of pokemon       |");     
     Console.WriteLine("|    Throughout your journey you may encounter wild pokemon that wish to fight and trainers    |"); 
     Console.WriteLine("|                             |"); 
     Console.WriteLine("---------------------------------------------------------------------------------------------------------------------"); 
     Console.WriteLine("So your journey begins... 30 paces to the gym type (s)"); // Loop 30 times with random chance of battleing 
      string lf = Console.ReadLine(); 
      if (lf == "s" || lf == "S" || lf == "start" || lf == "Start") 

      Enumerable.Repeat<Action>(() => 
      { 
       int Find = rnd.Next(1, 3); 
       if (Find == 1) 
       { 
       Console.WriteLine("You Encountered a pokémon"); 
      int HP2 = rnd.Next(1, 100); 
      int Atk2 = rnd.Next(1, 60); 
      int Def2 = rnd.Next(1, 40); 
      int Lvl2 = rnd.Next(1, 100); 
      int PN2 = rnd.Next(1, 721); 

      if (Atk >= Def2) 
      { 
       Console.WriteLine("You defeated " + random[new Random().Next(0, random.Length)]); 
      } 
      else 
      { 
      Console.WriteLine("Your pokémon died... Luckily a stranger appeared out of nowhere and revivded it for you so you can continue to battle"); 
      } 
       } 
       else 
       {  
      Console.WriteLine("You are safe this time"); 
       } 
      }, 30).ToList().ForEach(x => x()); 

     } 


     else 
     { 
     Console.WriteLine("Sorry to see you go so soon. I hope to meey you one day ~Oak"); 
     } 
    } 
} 

答えて

0

問題は、このライン上に位置しています。

Console.WriteLine("You defeated " + random[new Random().Next(0, random.Length)]); 

Random()コンストラクタがシステム時刻に基づいているので、あなたは同じランダムな値を毎回取得している、そしてそれは、呼び出しの間に十分な変更されていません。

はクロックが近い 連続して異なるランダムなオブジェクトを作成する パラメータなしのコンストラクタを使用して有限の解像度を持っているので、同一生成乱数ジェネレータを作成し、しかし...

以下に引用Random Classマニュアルを参照してください 乱数のシーケンス。次の例は、連続してインスタンス化される2つのランダムオブジェクトが、同じ一連の乱数を で生成する方法を示しています。ほとんどのWindowsシステムでは、互いに15ミリ秒以内に作成された のオブジェクトは、同じシード値を持つ になる可能性があります。

が、これは以下の

Console.WriteLine("You defeated " + random[rnd.Next(0, random.Length)]); 
+0

がヘルプComradeJoecool –

+0

@Arronデイヴィス問題ありませんありがとうござい試す修正するには! – ComradeJoecool

関連する問題