2017-01-16 18 views
0

私はプログラミングが初めてで、したがって簡単な質問があります。私は50回2つの異なる画像を表示することが可能でなければならないと思いますが、2つの異なる色の円をランダムな順序で1秒間、またはユーザーが特定のキーを押すまで言うことができます。簡単な方法はありますか?ランダムな順序で2枚の画像が繰り返し表示されます

多分それはアクション(円Aを示すか、円Bを示すのいずれか)のリストを開始する方が簡単ですし、ランダムに別の質問から以下の修正コードのように、それのいずれかを選択:私は持っている

その後
class Program 
{ static void Main(string[] args) 
{ 
    List<Action> actions = new List<Action>(); 

    actions.Add(() => Program.circleA()); 
    actions.Add(() => Program.circleB()); 

    Random random = new Random(); 

    int selectedAction = random.Next(0, actions.Count()); //what does this line do? 

    actions[selectedAction].Invoke(); // and this one? 
}  

Program.circleAとProgram.circleBが何をするのかを定義するのですが、そうですか?

これをループで実装する必要がありますか?はいの場合、ブレークアウト基準が満たされる前に各サークルを50回表示する必要がありますか?

私は似た問題をインターネットで検索しましたが、解決策を見つけることができませんでしたか、多分ちょうどそれらを理解できなかったので、私はあなたの質問を理解している場合君たちと女の子:)

+0

基本的なことから始めよう... WinForms、WPF、または他のGUIフレームワークを使いたいですか?個人的にはWPFをお勧めしますが、他の人はこの問題に関して異なる意見を持っているかもしれません。しかし、あなたはプログラミングに慣れていないと述べています。新しい「新しい」方法に応じて、GUIに移行する前にコンソールアプリケーションをいくつか作成してから、画像を表示する新しい単純なGUIアプリケーションを作成してから、タイミングベースでランダムに表示するようにしてください。 – grek40

+0

私はそれを非常に基本的かつ低レベルでWinFormsで保ちたいと思っています。赤丸と黄色のいずれかを表示し、ユーザーが特定のキーを押した回数を数えるのはむしろ簡単だと思いました。 – druce

+0

ポイントは:あなたはまずファンシーなエキストラなしで1つの円を表示しようとする必要があります。成功すると、2つのサークルに移動し、その他の追加機能に移動できます。しかし、あなたの現在のコードは基本を示していないので、潜在的な答えは、異なる質問に属するはずでない多くのものをカバーする必要があります。 – grek40

答えて

0

を尋ねるなぜ#1メートルのthats正しく、あなたの質問は基本的に "どのようにランダムなアクション/メソッドを呼び出すには?と "それは私の論理が大丈夫ですか?"

2番目のもの(簡単だからです)から始めると、この簡単な質問に対する回答と同じになります。「それは仕事ですか?」論理があなたが望むように動作している場合は、答えは「はい」です。そうでなければ、いいえ。

最初のものは...さまざまな解決方法があるため、やや難解です。 (あなたがメソッドのSH ..トンを持っている場合)あなたが反射して、カスタム属性を使用することですReflectionActionFunc、カスタムdelegate S ...

私見)だから、「簡単」な方法を使用することができ、そうですね:

public class RandomCircleMethodAttribute : Attribute 
{ 
    public RandomCircleMethodAttribute() : base() { } 
} 

そして、このAttributeを呼び出したいメソッドに割り当てます。

public class RandomCircleMethods 
{ 
    [RandomCircleMethod] 
    public void circleA() { //.. your logic here 
    } 

    [RandomCircleMethod] 
    public void circleB() { //.. your logic here 
    } 

    // add as many as you want 
} 

を次に、あなたのエントリーポイント内(Main(string[] args)を):それからちょうどこれらのメソッドを指すMethodInfoを取得し、そのようにそれらを呼び出すReflectionを使用して

List<MethodInfo> methods = typeof(RandomCircleMethods).GetMethods().Where(method => Attribute.IsDefined(method, typeof(RandomCircleMethod))).ToList(); 
int selectedAction = new Random().Next(0, methods.Count); 
methods[selectedAction].Invoke(new RandomCircleMethods(), null); 

この道をあなたはActionのリストを作成する必要はありません。しかしこれはあなたの現在の仕事の仕方と同じくらい良いことです。

Reflectionを使用してもそれほど混乱がないので、私はあなたの現在のロジックに固執します。

関連する問題