C# :: Aufgabe #106 :: Lösung #7
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.
#7
von Mexx (2370 Punkte)
- 21.10.2015 um 13:20 Uhr
Hier mal eine GUI-Version
Vorschau:
C#-Code
C#-Code
Vorschau:
http://www.xup.in/dl,14667007/spses.jpg/
using System;
using System.Drawing;
namespace SPSES
{
public partial class Form1 : Form
{
TypOfHand userHand;
TypOfHand kiHand;
public Form1()
{
InitializeComponent();
lblWinner.Visible = false;
lblYou.Visible = false;
lblComputer.Visible = false;
}
private void Image_Click(object sender, EventArgs e)
{
lblWinner.Visible = false;
lblYou.Visible = false;
lblComputer.Visible = false;
PictureBox box = (PictureBox)sender;
switch (box.Name)
{
case "pbStein":
userHand = new TypOfHand((byte)EHand.Stein);
break;
case "pbPapier":
userHand = new TypOfHand((byte)EHand.Papier);
break;
case "pbScheere":
userHand = new TypOfHand((byte)EHand.Scheere);
break;
case "pbEchse":
userHand = new TypOfHand((byte)EHand.Echse);
break;
case "pbSpock":
userHand = new TypOfHand((byte)EHand.Spock);
break;
default:
userHand = null;
break;
}
if (userHand == null)
throw new ArgumentNullException("Ihre Auswahl konnte nicht ermittelt werden");
pbUserHand.BackgroundImage = userHand.bild;
Random ran = new Random();
byte randomHand = (byte)Math.Pow(2, ran.Next(0, 5));
kiHand = new TypOfHand(randomHand);
pbKiHand.BackgroundImage = kiHand.bild;
lblWinner.Text = Kominationen.GetKombo((byte)(userHand.typ | kiHand.typ));
Sieger sieg = new Sieger(userHand.typ, kiHand.typ);
if (sieg.GetSieger() == "spieler")
{ // User gewinnt
lblYou.Text = "Gewonnen";
lblComputer.Text = "Verloren";
lblYou.Visible = true;
lblComputer.Visible = true;
}
else if (sieg.GetSieger() == "ki")
{ // KI gewinnt
lblYou.Text = "Verloren";
lblComputer.Text = "Gewonnen";
lblYou.Visible = true;
lblComputer.Visible = true;
}
else
{ // Unentschieden
lblYou.Text = "~";
lblComputer.Text = "~";
lblYou.Visible = true;
lblComputer.Visible = true;
}
lblWinner.Visible = true;
}
}
}
using System;
using System.Collections.Generic;
using System.Drawing;
namespace SPSES
{
class TypOfHand
{
/// <summary>
/// Typ der gewählten Hand
/// </summary>
public byte typ { get; private set; }
/// <summary>
/// Ein Bild welches die Hand darstellt
/// </summary>
public Image bild { get; private set; }
public Dictionary<byte, Image> ImagesFromByte { get; private set; }
public TypOfHand(byte typ)
{
ImagesFromByte = new Dictionary<byte, Image>()
{
{ (byte)EHand.Stein, (Image)SPSES.Properties.Resources.Stein },
{ (byte)EHand.Papier, (Image)SPSES.Properties.Resources.Papier },
{ (byte)EHand.Scheere, (Image)SPSES.Properties.Resources.Scheere },
{ (byte)EHand.Echse, (Image)SPSES.Properties.Resources.Echse },
{ (byte)EHand.Spock, (Image)SPSES.Properties.Resources.Spock }
};
this.typ = typ;
this.bild = ImagesFromByte[typ];
}
}
public class Kominationen
{
#region Dictionarys
static readonly Dictionary<byte, string> KombosFromByte = new Dictionary<byte, string>()
{
{ (byte)(EHand.Stein | EHand.Stein), " Unentschieden " },
{ (byte)(EHand.Stein | EHand.Papier), " Papier umwickelt Stein " },
{ (byte)(EHand.Stein | EHand.Scheere), "Stein zerschlägt Scheere" },
{ (byte)(EHand.Stein | EHand.Echse), "Stein zerquetscht Echse " },
{ (byte)(EHand.Stein | EHand.Spock), " Spock verdampft Stein " },
{ (byte)(EHand.Papier | EHand.Papier), " Unentschieden " },
{ (byte)(EHand.Papier | EHand.Scheere), "Scheere schneidet Papier" },
{ (byte)(EHand.Papier | EHand.Echse), " Echse frisst Papier " },
{ (byte)(EHand.Papier | EHand.Spock), "Papier wiederlegt Spock " },
{ (byte)(EHand.Scheere | EHand.Scheere)," Unentschieden " },
{ (byte)(EHand.Scheere | EHand.Echse), " Scheere köpft Echse " },
{ (byte)(EHand.Scheere | EHand.Spock), " Spock zerlegt Scheere " },
{ (byte)(EHand.Echse | EHand.Echse), " Unentschieden " },
{ (byte)(EHand.Echse | EHand.Spock), " Echse vergiftet Spock " },
{ (byte)(EHand.Spock | EHand.Spock), " Unentschieden " }
};
#endregion
public static string GetKombo(byte kombo)
{
return KombosFromByte[kombo];
}
}
public class Sieger
{
byte spieler;
byte ki;
public Sieger(byte spieler, byte ki)
{
this.spieler = spieler;
this.ki = ki;
}
/// <summary>
/// Ermittelt den Sieger der Runde
/// </summary>
/// <returns>"spieler", "ki" oder "unentschieden"</returns>
public string GetSieger()
{
byte kombo = (byte)(spieler | ki);
if (kombo == 5 || kombo == 9)
//Stein gewinnt
if (spieler == (byte)EHand.Stein)
return "spieler";
else
return "ki";
else if (kombo == 3 || kombo == 18)
// Papier gewinnt
if (spieler == (byte)EHand.Papier)
return "spieler";
else
return "ki";
else if (kombo == 6 || kombo == 12)
// Scheere gewinnt
if (spieler == (byte)EHand.Scheere)
return "spieler";
else
return "ki";
else if (kombo == 10 || kombo == 24)
// Echse gewinnt
if (spieler == (byte)EHand.Echse)
return "spieler";
else
return "ki";
else if (kombo == 17 || kombo == 20)
// Spock gewinnt
if (spieler == (byte)EHand.Spock)
return "spieler";
else
return "ki";
else if (kombo == 1 || kombo == 2 || kombo == 4 || kombo == 8 || kombo == 16)
return "unentschieden";
else
throw new Exception("Sieger konnte nicht ermittelt werden");
}
}
[Flags]
public enum EHand
{
None = 0,
Stein = 1 << 0,
Papier = 1 << 1,
Scheere = 1 << 2,
Echse = 1 << 3,
Spock = 1 << 4
}
}
Kommentare:
Für diese Lösung gibt es noch keinen Kommentar
Seite 1 von 0
1
