Исправление ошибок - 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;

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4 из 5