2017-12-08 10 views
-2

で使用しています。imは、ディクラスから関数を呼び出し、matchplayクラスのロール番号を使用できるようにしようとしています...これは可能ですか?別のクラス関数をC#

public class DieClass 
{ 
    public void DiceRoll(int min, int max) 
    { 
     Random random = new Random(); 

     int roll1 = random.Next(0, 6); 
     int roll2 = random.Next(0, 6); 
     int roll3 = random.Next(0, 6); 
    } 
} 

public class MatchPlay 
{ 
    public void Match() 
    { 
     DieClass.DiceRoll(); 

     Console.WriteLine("Starting Match Play..."); 
     Console.WriteLine(); 
     Console.WriteLine("Round One"); 
     Console.WriteLine("Your first dice is [0]", roll1); 
     Console.WriteLine("Your second dice is [0]", roll2); 
     Console.WriteLine("Your third dice is [0]", roll3); 
    } 
} 

}

+0

クラスはオブジェクトではありません - 青写真のようなものです。それをオブジェクトとして使用するには、DieClass型の*とオブジェクトをインスタンス化する必要があります。 [ask]を読んで[ツアー]をする必要もあります – Plutonix

+0

まず、C#の基本を学ぶ必要があります。 DiceRoll静的メソッドを作成するか、DieClassをインスタンス化します。 min、maxパラメータも渡します。それらを印刷するには値を返す必要があります。 – Sunil

答えて

2

どちらかあなたがDiceRollstatic方法を作る、またはDieClassのインスタンスを作成し、そのを通して、あなたのメソッドを呼び出す必要があります。

たとえば、あなたが

public static void DiceRoll(int min, int max) 

として、あなたのメソッドを宣言したり、あなたのようなオブジェクトのインスタンスを作成することができます言われて、あなたはDieClassクラスで他の問題を持っていることを

DieClass dice = new DieClass(); 

dice.DiceRoll(0, 6); 

、最もその結果を呼び出し元に返信する手段が必要であることは明らかです。最も簡単な方法は、DiceRoll()に1つの結果を生成して返すことです。また、06をパラメータとしてrandom.Next()にハードコードしました。パラメータのペアがminmaxであるにもかかわらず、

4

はfixinを必要とするいくつかのことがあります:あなたはそれを使用するためにDiceClassクラスのインスタンスを作成する必要があると思いますので、

  • あなたDiceRoll方法は、インスタンスメソッドです。
  • roll1,roll2およびroll3の変数はメソッドに対してローカルなので、メソッドが完了すると変数を使用することはできません。代わりに、それらをクラスのパブリックプロパティにすることができます。
  • メソッドが呼び出されるたびに新しいRandomをインスタンス化する必要はありません(実際にはRandomにシステムクロックに基づいた値が設定されているため問題が発生する可能性があります)。同じ数字を何度も繰り返すでしょう)。静的にして一度インスタンス化することができます。
  • Rollメソッドにはminmax引数が含まれているので、使用しないでください。現在、06がハードコードされています。
  • フォーマット文字列を使用するには、大括弧([])の代わりに中括弧({})を使用する必要があります。
  • 最後に、命名規則の観点からは、クラス名の一部としてClassという単語は必要ありません。メソッド名の一部としてDiceは不要です。これは入力の量を簡素化し、依然として非常に理解できるでしょう。あなたは、単一のDieオブジェクトを表すクラスを作成し、それをRoll()方法とValue性を付与されてやって検討するかもしれない何を

。その後、ユーザーは、彼らが好きなだけを作成し、リストでそれらを保つことができます。

public class Die 
{ 
    public int Value { get; set; } 

    // Make this static and instantiate it only once to avoid re-seeding issues 
    private static readonly Random rnd = new Random(); 

    public Die() 
    { 
     Value = 1; 
    } 

    public void Roll() 
    { 
     // This method uses values 1-6 as a standard die 
     Roll(1, 6); 
    } 

    public void Roll(int minValue, int maxValue) 
    { 
     Value = rnd.Next(minValue, maxValue + 1); 
    } 
} 

さて、次のように、あなたはDieクラスを使用することができます。

public class MatchPlay 
{ 
    public void Match() 
    { 
     // Add three Die objects to our list of dice 
     List<Die> dice = new List<Die> 
     { 
      new Die(), new Die(), new Die() 
     }; 

     Console.WriteLine("Starting Match Play..."); 
     Console.WriteLine(); 
     Console.WriteLine("Round One"); 

     // Roll all dice 
     dice.ForEach(d => d.Roll()); 

     Console.WriteLine("Your first dice is {0}", dice[0].Value); 
     Console.WriteLine("Your second dice is {0}", dice[1].Value); 
     Console.WriteLine("Your third dice is {0}", dice[2].Value); 
    } 
} 

最後に、我々は試合をキックオフすることができます私たちのMainメソッドでは:

private static void Main() 
{ 
    MatchPlay game = new MatchPlay(); 
    game.Match(); 

    Console.WriteLine("\nDone!\nPress any key to exit..."); 
    Console.ReadKey(); 
} 
+0

いい仕事です。私はロールも値を返すようにしますが、それは小さなポイント – pm100

+0

ああ、それはいい考えです。 Console.WriteLine( "金型を回転させた後、値は{0}"、ダイス[0]。ロール()); ' –

関連する問題