Исправление ошибок - C#
Формулировка задачи:
Помогите исправить ошибки. Очень нужно сделать. Буду очень благодарен.
Вот список ошибок.
Строка 122
ошибка CS1061: "Demo.Deck" не содержит определения для "OrderBy" и не был найден метод расширения "OrderBy", принимающий тип "Demo.Deck" в качестве первого аргумента (возможно, пропущена директива using или ссылка на сборку)
Строка 136
ошибка CS1061: "Demo.Deck" не содержит определения для "Sum" и не был найден метод расширения "Sum", принимающий тип "Demo.Deck" в качестве первого аргумента (возможно, пропущена директива using или ссылка на сборку)
Строка 139
ошибка CS1955: Невызываемый член "System.Collections.Generic.Stack<Demo.Card>.Count" не может использоваться как метод.
Строка 143
ошибка CS1061: "System.Array" не содержит определения для "Select" и не был найден метод расширения "Select", принимающий тип "System.Array" в качестве первого аргумента (возможно, пропущена директива using или ссылка на сборку)
Строка 199
ошибка CS1061: "System.Array" не содержит определения для "Select" и не был найден метод расширения "Select", принимающий тип "System.Array" в качестве первого аргумента (возможно, пропущена директива using или ссылка на сборку)
using System; using System.Collections.Generic; namespace Demo { // Состояние игры public enum GameResult { Win = 1, Lose = -1, Draw = 0, Pending = 2 }; /// <summary> /// Вот карта /// </summary> public class Card { public string ID { get; set; } public string Suit { get; set; } public int Value { get; set; } public Card(string id, string suit, int value) { ID = id; Suit = suit; Value = value; } } /// <summary> /// колода может быть просто стопкой карт /// </summary> public class Deck : Stack<Card> { public Deck(IEnumerable<Card> collection) : base(collection) { } public Deck() : base(52) { } public Card this[int index] { get { Card item; if (index >= 0 && index <= this.Count - 1) { item = this.ToArray()[index]; } else { item = null; } return item; } } public double Value { get { return BlackJackRules.HandValue(this); } } } /// <summary> /// то что представляет игроков (Player & Dealer) /// </summary> public class Member { public Deck Hand; public Member() { Hand = new Deck(); } } /// <summary> /// представление правил игры /// </summary> public static class BlackJackRules { //значение карт public static string[] ids = { "2", "3", "4", "5", "6", "7", "8", "9", "10", "A", "J", "K", "Q" }; // Масти карты public static string[] suits = { "C", "D", "H", "S" }; /// <summary> /// возвращает новую колоду /// </summary> public static Deck NewDeck { get { Deck d = new Deck(); int value; foreach (string suit in suits) { foreach (string id in ids) { value = Int32.TryParse(id, out value) ? value : id == "A" ? 1 : 10; d.Push(new Card(id, suit, value)); } } return d; } } /// <summary> /// возврвщвет перетасованую колоду /// </summary> public static Deck ShuffledDeck { get { return new Deck(NewDeck.OrderBy(Card => System.Guid.NewGuid()).ToArray()); } } /// <summary> /// вычесляет значение руки. /// В руке находитса всего пара карт так мы можем представить колоду. /// Сравнил два итога для тузов и вернул то которое ближе или равно 21 /// </summary> /// <param name="deck"></param> /// <returns></returns> public static double HandValue(Deck deck) { //Туз = 1 int val1 = deck.Sum(c => c.ValueType); //Туз = 11 double aces = deck.Count(c => c.Suit == "A"); double val2 = aces > 0 ? val1 + (10 * aces) : val1; return new double[] { val1, val2 } .Select(handVal => new { handVal, weight = Math.Abs(handVal - 21) + (handVal > 21 ? 100 : 0) }) .OrderBy(n => n.weight) .First().handVal; } // Еще пара правил /// <summary> /// Проверяет может ли дилер побить имеющююся руку /// </summary> /// <param name="deck"></param> /// <param name="standLimit"></param> /// <returns></returns> public static bool CanDealerHit(Deck deck, int standLimit) { return deck.Value < standLimit; } /// <summary> /// Нет смысла бить выше 21 /// </summary> /// <param name="deck"></param> /// <returns></returns> public static bool CanPlayerHit(Deck deck) { return deck.Value < 21; } /// <summary> /// возвращает статистику игры win, lose or draw /// </summary> /// <param name="player"></param> /// <param name="dealer"></param> /// <returns></returns> public static GameResult GetResult(Member player, Member dealer) { GameResult res = GameResult.Win; double playerValue = HandValue(player.Hand); double dealerValue = HandValue(dealer.Hand); // игрок может быть победителем если... if(playerValue <=21) { //и if(playerValue !=dealerValue) { double closestValue = new double[]{playerValue, dealerValue} .Select(handVal => new {handVal, weight = Math.Abs(handVal-21) + (handVal >21 ? 100 : 0)}) .OrderBy(n=>n.weight) .First().handVal; res = playerValue == closestValue ? GameResult.Win : GameResult.Lose; } else { res = GameResult.Draw; } } else { res = GameResult.Lose; } return res; } public class BlackJack { public Member Dealer = new Member(); public Member Player = new Member(); public GameResult Result { get; set; } public Deck MainDeck; public int StandLimit { get; set; } public BlackJack(int dealerStandLimit) { // настроика игры Black Jack Result = GameResult.Pending; StandLimit = dealerStandLimit; // Положить новую перетасованую колоду на стол MainDeck = BlackJackRules.ShuffledDeck; // Очистить руку Player & Dealer. Dealer.Hand.Clear(); Player.Hand.Clear(); // Выдать первые 2 карты Player & Dealer for (int i = 0; ++i < 3; ) { Dealer.Hand.Push(MainDeck.Pop()); Player.Hand.Push(MainDeck.Pop()); } } /// <summary> /// позволяет игроку отбить. Дилер автомотически отбивает когда игрок бездействует. /// </summary> public void Hit() { if (BlackJackRules.CanPlayerHit(Player.Hand) && Result == GameResult.Pending) { Player.Hand.Push(MainDeck.Pop()); } } /// <summary> /// Когда игрок закончил брать карты позваляет дилеру брать карты пока лимит не будет исчерпан. /// Затем продолжить и установить результат игры. /// </summary> public void Stand() { if (Result == GameResult.Pending) { while (BlackJackRules.CanDealerHit(Dealer.Hand, StandLimit)) { Dealer.Hand.Push(MainDeck.Pop()); } Result = BlackJackRules.GetResult(Player, Dealer); } } } public class Program { public static void ShowStats(BlackJack bj) { foreach (Card c in bj.Dealer.Hand) { Console.WriteLine(string.Format("{0}{1}", c.ID, c.Suit)); } Console.WriteLine(bj.Dealer.Hand.Value); Console.WriteLine(Environment.NewLine); foreach (Card c in bj.Player.Hand) { Console.WriteLine(string.Format("{0}{1}", c.ID, c.Suit)); } Console.WriteLine(bj.Player.Hand.Value); Console.WriteLine(Environment.NewLine); } public static void Main() { string input = ""; BlackJack bj = new BlackJack(17); ShowStats(bj); while (bj.Result == GameResult.Pending) { input = Console.ReadLine(); if (input.ToLower() == "h") { bj.Hit(); ShowStats(bj); } else { bj.Stand(); ShowStats(bj); } } Console.WriteLine(bj.Result); Console.ReadLine(); } } } }
Решение задачи: «Исправление ошибок»
textual
Листинг программы
using System.Linq;
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д