C# :: Aufgabe #106 :: Lösung #1

10 Lösungen Lösungen öffentlich
#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.
#1
2x
vote_ok
von DBqFetti (2480 Punkte) - 25.09.2015 um 22:56 Uhr
Quellcode ausblenden C#-Code
using System;
using System.Collections.Generic;
using System.Linq;

namespace spock {
	class Program {
		static void Main() {
			Hand
				PlayerHand, ComputerHand,

				Stein	= new Hand("Stein",	 new string[] { "Echse", "Schere" }),
				Papier	= new Hand("Papier", new string[] { "Stein", "Spock"  }),
				Schere	= new Hand("Schere", new string[] { "Echse", "Papier" }),
				Echse	= new Hand("Echse",	 new string[] { "Spock", "Papier" }),
				Spock	= new Hand("Spock",	 new string[] { "Stein", "Schere" });

			Dictionary<ConsoleKey, Hand> Keys = new Dictionary<ConsoleKey, Hand>() {
				{ ConsoleKey.D1, Stein  }, { ConsoleKey.NumPad1, Stein  },
				{ ConsoleKey.D2, Papier }, { ConsoleKey.NumPad2, Papier },
				{ ConsoleKey.D3, Schere }, { ConsoleKey.NumPad3, Schere },
				{ ConsoleKey.D4, Echse  }, { ConsoleKey.NumPad4, Echse  },
				{ ConsoleKey.D5, Spock  }, { ConsoleKey.NumPad5, Spock  }
			};
			Hand[] Hands = Keys.Values.Distinct().ToArray();

			Console.WriteLine("Wählen Sie Ihre Hand:");
			for(int i = 0; i < Hands.Length; i++)
				Console.WriteLine("[{0}] {1}", i + 1, Hands[i].Name);

			ConsoleKey Input;
			do		Input = Console.ReadKey(true).Key;
			while	(!Keys.ContainsKey(Input));
			PlayerHand	 = Keys[Input];
			ComputerHand = Hands[new Random().Next(Hands.Length)];

			bool
				playerWins	 = PlayerHand.CanBeat(ComputerHand),
				computerWins = ComputerHand.CanBeat(PlayerHand);

			Console.WriteLine();
			if(playerWins ^ computerWins) {
				if(playerWins)	Console.WriteLine("Der Spieler gewinnt.\n{0} schlägt {1}.", PlayerHand.Name, ComputerHand.Name);
				else			Console.WriteLine("Der Computer gewinnt.\n{0} schlägt {1}.", ComputerHand.Name, PlayerHand.Name);
			}else			Console.WriteLine("Es konnte kein Sieger ermittelt werden.\nSpieler: {0}\nComputer: {1}", PlayerHand.Name, ComputerHand.Name);

			Console.ReadKey();
		}
	}

	class Hand {
		string name;
		string[] canBeat;

		public string Name { get { return name; } }

		public Hand(string name, string[] canBeat) {
			this.name = name;
			this.canBeat = canBeat;
		}

		public bool CanBeat(Hand EnemyHand) {
			return canBeat.Contains(EnemyHand.Name);
		}
	}
}

Kommentare:

Für diese Lösung gibt es noch keinen Kommentar

Bitte melden Sie sich an um eine Kommentar zu schreiben.
Kommentar schreiben