Класс колода карт - C#
Формулировка задачи:
Здраствуйте!Люди добрые помогите пожалуйста вообще не могу в ехать в тему "классы"=(
вообщем вот : это не предлагать
класс должен, как правило, содержать следующие эле*менты: скрытые поля, конструкторы с параметрами и без параметров, методы;свойства, индексаторы; перегруженные операции. Функциональные элементы класса должны обеспечивать непротиворечивый, полный, минимальный и удобный интер*фейс класса. При возникновении ошибок должны выбрасываться исключения.
В программе должна выполняться проверка всех разработанных элементов класса.
помогите пожалуйста!
и само задание описать класс "Колода карт", включающий в себя закрытый массив элементов класса "карта". В карте хранятся масть и номер. Обеспечить возможность вывода карты по номеру, вывода всех карт, перемешивания колоды и выдачи всех карт из колоды по одиночке и по 6 штук в случайном порядке!
using System;
using System.Collections.Generic;
using System.Text;
namespace sstud
{ // Общий закрытый класс Suit (масть карты)
public sealed class Suit
{
// Статически определяет все допустимые значения масти
public static readonly Suit DIAMONDS = new Suit((char) 4); // ♦
public static readonly Suit HEARTS = new Suit((char) 3); //♥
public static readonly Suit SPADES = new Suit((char) 6); //в™*
public static readonly Suit CLUBS = new Suit((char) 5); //в™Ј
// Помогает выполнить итерации по перечислимым значениям
public static readonly Suit[ ] SUIT = new Suit[ ]{DIAMONDS, HEARTS, SPADES, CLUBS};
// Переменная экземпляра display для хранения отображаемого значения
private readonly char display;
// He позволить создавать экземпляры вне объектов
private Suit(char display) // конструктор
{
this.display = display;
}
// ToString() – переопределяющий возвратить значение масти
public override System.String ToString() // ToString() – м-д класса String
{
return System.Convert.ToString(display);
}
}
/*****************************************************************************************************/
// Общий закрытый класс Rank (достоинство карты
public sealed class Rank
{
public static readonly Rank SIX = new Rank(6, "6");
public static readonly Rank SEVEN = new Rank(7, "7");
public static readonly Rank EIGHT = new Rank(8, "8");
public static readonly Rank NINE = new Rank(9, "9");
public static readonly Rank TEN = new Rank(10, "10");
public static readonly Rank JACK = new Rank(11, "J"); // валет
public static readonly Rank QUEEN = new Rank(12, "Q"); // дама
public static readonly Rank KING = new Rank(13, "K"); // король
public static readonly Rank ACE = new Rank(14, "A"); // туз
// Общий статический Rank (достоинство карты)
public static readonly Rank[ ] RANK = new Rank[ ]{ SIX, SEVEN,
EIGHT, NINE, TEN, JACK, QUEEN, KING, ACE};
private readonly int rank;
// Переменная экземпляра rank для хранения отображаемого значения
private System.String display;
private Rank(int rank, System.String display) // конструктор
{
this.rank = rank;
this.display = display;
}
public int getRank() // возврат достоинства карты
{
return rank;
}
// ToString() – переопределяющий
public override System.String ToString()
{
return display;
}
}
/*****************************************************************************************************/
public class Card // Листинг 1с
{ private Rank rank;
private Suit suit;
/* создание новой карты - при этом используются только те константы,
которые были инициализированы */
public Card(Suit suit, Rank rank) // конструктор – создается карта
{
this.suit = suit;
this.rank = rank;
}
virtual public Suit Suit // свойство – получить значение масти карты
{
get { return suit; }
}
virtual public Rank Rank // свойство – получить значение достоинства карты
{
get { return rank; }
}
public virtual System.String display() // строковое представление карты
{
return rank.ToString() + suit.ToString();
}
}
/*****************************************************************************************************/
public class Deck
{
private System.Collections.ArrayList deck; // динамический массив
public Deck()
{
buildCards();
}
public virtual Card get_Renamed(int index)
{
if (index < deck.Count) // Count – это свойство класса ArrayList
{ // deck[index] – это элемент массива
return (Card) deck[index];
}
return null;
}
public virtual void replace(int index, Card card) // перестановка карт
{
deck[index] = card;
}
public virtual int size()
{
return deck.Count; // Count – это свойство класса ArrayList
}
public virtual Card removeFromFront() // метод – извлечение карты
{
if (deck.Count > 0) // Count – это свойство класса ArrayList
{
System.Object tempObject;
tempObject = deck[0];
deck.RemoveAt(0); // RemoveAt – это м-д класса ArrayList
Card card = (Card) tempObject;
return card;
}
return null;
}
public virtual void returnToBack(Card card) // метод – возврат карты
{
deck.Add(card); // Add – это м-д класса ArrayList
}
private void buildCards()
{ // создание колоды карт
// объект deck класса ArrayList()- динамический массив
deck = new System.Collections.ArrayList();
for (int i = 0; i < Suit.SUIT.Length; i++)
{
for (int j = 0; j < Rank.RANK.Length; j++)
{ // Add – это м-д класса ArrayList
deck.Add(new Card(Suit.SUIT[i], Rank.RANK[j]));
}
}
}
}
/*****************************************************************************************************/
public class Dealer //Листинг 3а
{
private Deck deck; // прямой доступ к колоде закрыт
public Dealer(Deck d)
{
deck = d;
}
public virtual void shuffle() // этот метод перетасовывает карты
{
// расположить карты случайным образом
int num_cards = deck.size();
for (int i = 0; i < num_cards; i++)
{ // NextDouble() – м-д класса Random
int index = (int)(SupportClass.Random.NextDouble() * num_cards);
Card card_i = (Card) deck.get_Renamed(i);
Card card_index = (Card) deck.get_Renamed(index);
deck.replace(i, card_index);
deck.replace(index, card_i);
}
}
public virtual Card dealCard() // метод раздачи карт не используетс
{
if (deck.size() > 0)
{
return deck.removeFromFront();
}
return null;
}
public class SupportClass
{
// обеспечивается доступ к статической переменной Random
static public System.Random Random = new System.Random();
}
}
/*****************************************************************************************************/
public class CardDriver
{
public static void Main( String[ ] args)
{
Deck deck = new Deck(); // объект deck - колода карт
Dealer dealer = new Dealer(deck); // колода карт передается дилеру
Console.WriteLine("\n Упорядоченной колоды карт");
printDeck(deck); // распечатать упорядоченную колоду карт
dealer.shuffle(); // перетасовать колоду карт
Console.WriteLine("\n Перетасованной колоды карт");
printDeck(deck); // распечатать перетасованную колоды карт
Console.ReadLine();
}
public static void printDeck(Deck deck) // метод – печать массива карт
{
for (int i = 0; i < 4; i++) // четыре масти
{
for (int j = 0; j < 9; j++) // карты 9-ти достоинств от 6 до туза
{
Card card = deck.removeFromFront();
deck.returnToBack(card);
Console.Write(card.display() + "\t ");
}
Console.WriteLine(" ");
}
}
}
}Решение задачи: «Класс колода карт»
textual
Листинг программы
#region IEquatable<Card> Members
public bool Equals(Card other)
{
throw new NotImplementedException();
}
#endregion