C# :: Aufgabe #106 :: Lösung #6
10 Lösungen

#106
Stein, Papier, Schere, Echse, Spock
Anfänger - C#
von Energy
- 24.09.2015 um 15:22 Uhr
Programmiere das Spiel Stein, Papier, Schere, Echse, Spock, sodass man selbst eine Figur auswählen kann und der Computer eine zufällige Figur auswählt. Ermittele dann, wer diese Partie gewonnen hat.
#6

von aheiland (650 Punkte)
- 21.10.2015 um 12:13 Uhr

<Window x:Class="SSPES.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="181" Width="270"> <StackPanel HorizontalAlignment="Center" Margin="5"> <Label HorizontalAlignment="Center">Opponend</Label> <Label Name="lbl_choice" HorizontalAlignment="Center">Choice</Label> <Label HorizontalAlignment="Center">VS</Label> <StackPanel Orientation="Horizontal"> <Button Name="btn_sissor" Margin="5">Sissor</Button> <Button Name="btn_stone" Margin="5">Stone</Button> <Button Name="btn_paper" Margin="5">Paper</Button> <Button Name="btn_lizard" Margin="5">Lizard</Button> <Button Name="btn_spock" Margin="5">Spock</Button> </StackPanel> <Label Name="lbl_result" HorizontalAlignment="Center"></Label> </StackPanel> </Window>

namespace SSPES { public partial class MainWindow : Window { private Game gameInstance; private Brush neutral; public MainWindow() { InitializeComponent(); gameInstance = new Game(); neutral = btn_lizard.Background; btn_lizard.Click += btn_Click; btn_paper.Click += btn_Click; btn_sissor.Click += btn_Click; btn_spock.Click += btn_Click; btn_stone.Click += btn_Click; } void btn_Click(object sender, RoutedEventArgs e) { var used = new SolidColorBrush(Color.FromRgb(255, 0, 0)); resetButtons(); if (sender == btn_lizard) { gameInstance.choose(Items.Lizard); ((Button)sender).Background = used; show_result(); } else if(sender == btn_paper) { gameInstance.choose(Items.Paper); ((Button)sender).Background = used; show_result(); } else if (sender == btn_sissor) { gameInstance.choose(Items.Sissor); ((Button)sender).Background = used; show_result(); } else if (sender == btn_spock) { gameInstance.choose(Items.Spock); ((Button)sender).Background = used; show_result(); } else if (sender == btn_stone) { gameInstance.choose(Items.Stone); ((Button)sender).Background = used; show_result(); } else { } } private void resetButtons() { btn_lizard.Background = neutral; btn_paper.Background = neutral; btn_sissor.Background = neutral; btn_spock.Background = neutral; btn_stone.Background = neutral; } private void show_result() { lbl_choice.Content = gameInstance.Choice.ToString(); lbl_result.Content = gameInstance.Result.ToString(); } } }

using Game; namespace SSPES { public enum Items { [SuccessorItems(Items.Stone, Items.Sissor)] Lizard, [SuccessorItems(Items.Sissor, Items.Lizard)] Paper, [SuccessorItems(Items.Spock, Items.Stone)] Sissor, [SuccessorItems(Items.Lizard, Items.Paper)] Spock, [SuccessorItems(Items.Paper, Items.Spock)] Stone } public class Game { private Random rand; public Game() { rand = new Random(); } public string Item { get; private set; } public void choose(Items item) { Choice = rand.randomItem(); Result = item.vs(Choice); } public Items Choice { get; private set; } public MatchResults Result { get; private set; } } public static class Helpers { public static MatchResults vs(this Items attacker, Items defender) { if (GetAttr(attacker).successors.Contains(defender)) { return MatchResults.Lose; }else if(attacker.Equals(defender)) { return MatchResults.Draw; } return MatchResults.Win; } public static Items randomItem(this Random rand) { var ItemFields = typeof(Items).GetFields(); var index = rand.Next(ItemFields.Length-1); var itemField = ItemFields[index+1]; return ((Items)itemField.GetValue(null)); } private static SuccessorItems GetAttr(Items item) { return (SuccessorItems)Attribute.GetCustomAttribute(ForValue(item), typeof(SuccessorItems)); } private static MemberInfo ForValue(Items item) { return typeof(Items).GetField(Enum.GetName(typeof(Items), item)); } } }

namespace SSPES { public class SuccessorItems : Attribute { public SuccessorItems(params Items[] successors) { this.successors = successors; } public Items[] successors { get; private set; } } }

namespace Game { public enum MatchResults { Win, Draw, Lose } }
Kommentare:
Für diese Lösung gibt es noch keinen Kommentar
Seite 1 von 0
1