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
